https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110177
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Hmm, in ccp1, GCC 11.3 does: Visiting statement: # RANGE [0, 0] NONZERO 0 b_33 = (short intD.25) _11; which is likely CONSTANT Applying pattern match.pd:3405, gimple-match.c:27041 Applying pattern match.pd:3322, gimple-match.c:26980 Match-and-simplified (short int) _11 to _10 Lattice value changed to CONSTANT 0. Adding SSA edges to worklist. marking stmt to be not simulated again Visiting statement: if (b_33 != 0) which is likely CONSTANT Adding destination of edge (4 -> 6) to worklist marking stmt to be not simulated again While in GCC 12+ does: Visiting statement: b_33 = (short intD.25) _11; which is likely CONSTANT Applying pattern match.pd:3730, gimple-match.cc:69683 Applying pattern match.pd:3647, gimple-match.cc:69622 Match-and-simplified (short int) _11 to _10 Lattice value changed to CONSTANT _10. Adding SSA edges to worklist. marking stmt to be not simulated again Visiting statement: if (b_33 != 0) which is likely CONSTANT Matching expression match.pd:2118, generic-match.cc:693 Matching expression match.pd:2121, generic-match.cc:753 Matching expression match.pd:2128, generic-match.cc:776 Adding destination of edge (4 -> 5) to worklist Adding destination of edge (4 -> 6) to worklist