https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110204
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rguenth at gcc dot gnu.org --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Replaced _40 - _41 with pretmp_163 in all uses of _42 = _40 - _41; Replaced _42 /[ex] 4 with pretmp_162 in all uses of _43 = _42 /[ex] 4; Replaced (long unsigned int) _43 with pretmp_161 in all uses of _44 = (long unsigned int) _43; Removing unexecutable edge from if (_42 != 0) Removing dead stmt _44 = (long unsigned int) _43; Removing dead stmt _43 = _42 /[ex] 4; Removing dead stmt _42 = _40 - _41; Removing dead stmt _41 = MEM[(const struct vector *)_3(D)].D.214899._M_impl.D.214244._M_start; Removing dead stmt _40 = MEM[(const struct vector *)_3(D)].D.214899._M_impl.D.214244._M_finish; What is interesting is before PRE we had: ``` <bb 28> [local count: 19488414]: if (_42 != 0) goto <bb 29>; [59.00%] else goto <bb 33>; [41.00%] <bb 29> [local count: 11498164]: __n_154 = _43 + -1; if (_42 != 0) goto <bb 44>; [89.00%] else goto <bb 33>; [11.00%] ``` After we got: ``` <bb 30> [local count: 19488414]: if (pretmp_163 != 0) goto <bb 31>; [59.00%] else goto <bb 58>; [41.00%] <bb 58> [local count: 7990250]: goto <bb 35>; [100.00%] <bb 31> [local count: 11498164]: __n_154 = pretmp_162 + -1; ``` That is only the second condition based on _42 was removed and not the first ...