https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112581
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- forwprop3 does: ``` _12 = ~iftmp.7_30; h_40 = (unsigned int) _12; ... if (h_40 == 4294967295) ``` into: ``` _75 = (unsigned int) iftmp.7_30; if (iftmp.7_30 == 0) ``` Which as far as I can tell is correct. And then reassociate2 combines: ``` <bb 18> [local count: 57431765]: if (iftmp.7_30 == 0) goto <bb 19>; [97.17%] else goto <bb 20>; [2.83%] <bb 19> [local count: 55807730]: if (i_27 != 0) goto <bb 20>; [100.00%] else goto <bb 17>; [0.00%] ``` into: ``` <bb 18> [local count: 57431765]: _75 = iftmp.7_30 | i_27; _33 = _75 == 0; if (_33 != 0) goto <bb 17>; [97.17%] else goto <bb 19>; [2.83%] ``` or ``` if ((_30 == 0) & (i_27 == 0)) goto <17> else goto <19/20> ``` Which looks correct. I don't see anything going wrong with the patch itself ...