https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103359
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu.org --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- So the important part is to eliminate the store to 'c' which GCC11 manages to do from EVRP while trunk fails at this task. The IL into EVRP is absoultely identical: <bb 2> : goto <bb 8>; [INV] <bb 8> : # h_10 = PHI <4(2), h_10(3), h_10(4), 1(7)> d.2_8 = d; if (d.2_8 != 0) goto <bb 3>; [INV] <bb 3> : if (h_10 != 0) goto <bb 4>; [INV] <bb 4> : e.0_1 = e; if (e.0_1 != 0) goto <bb 5>; [INV] <bb 5> : a.1_2 = a; _3 = (short int) a.1_2; _14 = a.1_2 & 1; _4 = (short int) _14; _5 = _4 | h_10; _6 = (int) _5; f.4_21 = (unsigned short) _5; _23 = f.4_21 * 3; _24 = (short int) _23; if (_5 == 0) goto <bb 6>; [INV] else goto <bb 7>; [INV] <bb 6> : c = 0;