https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123994
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Looks like any other slight changes causes some optimizations to happen earlier which allows things like: _26 = BS_ARG_3_12(D) != 0; iftmp.3_5 = _26 ? iftmp.3_19 : -23; to be out of the loop and does not expose the issue. The only different between 15 and 16 is: <bb 8> [local count: 674543195]: # ivtmp.11_34 = PHI <ivtmp.11_45(7), 1(4)> # ivtmp.17_85 = PHI <ivtmp.17_84(7), ivtmp.17_63(4)> # ivtmp.18_88 = PHI <ivtmp.18_87(7), ivtmp.18_64(4)> goto <bb 10>; [100.00%] bb is merged into: <bb 9> [local count: 913155473]: # iftmp.3_10 = PHI <-23(7), iftmp.3_33(8), -23(4)> # ivtmp.17_64 = PHI <ivtmp.17_79(7), ivtmp.17_63(8), ivtmp.17_58(4)> # ivtmp.11_70 = PHI <ivtmp.11_41(7), ivtmp.11_69(8), 1(4)> # ivtmp.18_74 = PHI <ivtmp.18_76(7), ivtmp.18_73(8), ivtmp.18_59(4)> I have not looked further to see if there it happens that ifcvt happens on the rtl level for 15 and not 16 for this one either. It could.
