https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113651
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2024-01-29 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. This is a missed phiopt (or operation sinking) of if (r.1_90 < 0) goto <bb 6>; [41.00%] else goto <bb 7>; [59.00%] <bb 6> [local count: 391324129]: _91 = _89 ^ 79764919; <bb 7> [local count: 954449104]: # prephitmp_92 = PHI <_91(6), _89(5)> to sth like if (r.1_90 < 0) goto <bb 6>; [41.00%] else goto <bb 7>; [59.00%] <bb 6> [local count: 391324129]: <bb 7> [local count: 954449104]: # prephitmp_91 = PHI <79764919(6), 0(5)> _92 = _89 ^ prephitmp_xx; on some archs the conditional constant might be generated by a conditional add of 79764919 to zero. Whether this is better suited for GIMPLE or RTL if-conversion remains to be seen. That splitting the expression helps is just luck.