https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102381
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-09-17 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed. .... [AFTER NORMALIZATION -- [DEF]: ipp_28 = PHI <ipp_23(17), ipp_11(D)(15)> is guarded by : i2.2_26 > 0 (.AND.) i1_10(D) != 0 .... [AFTER NORMALIZATION -- [USE]: ipp_27 = PHI <ipp_28(21), ipp_23(18)> is guarded by : i1_10(D) != 0 (.AND.) (.NOT.) i4_17 < prephitmp_25 (.AND.) _2 == 0 (.OR.) i1_10(D) != 0 (.AND.) (.NOT.) i4_17 < prephitmp_25 (.AND.) i3.0_1 & 1 ... _2 = i3.0_1 & 1; So there is a missing simplification It should have been: i1_10(D) != 0 (.AND.) (.NOT.) i4_17 < prephitmp_25 prephitmp_25 is defined as: # prephitmp_25 = PHI <i2.2_26(17), i2.2_21(15)> So i2.2_26 (as i2.2_21 is the one on the branch which would have been uninitialized). So we are down to: i1_10(D) != 0 (.AND.) (.NOT.) i4_17 < i2.2_26 i4_17 is the loop IV so it should be discarded.