https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112305
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Status|NEW |ASSIGNED --- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- final value replacement introduces <bb 5> [local count: 118111600]: - # e_14 = PHI <e_10(4)> - # d_23 = PHI <d_11(4)> + _7 = e_20 + 4; + _12 = e_20 <= 19; + _25 = (unsigned int) e_20; + _26 = 19 - _25; + _27 = _26 / 4; + _28 = (int) _27; + _29 = _28 * 4; + _30 = _12 ? _29 : 0; + e_14 = _7 + _30; + _31 = e_20 <= 19; + _32 = (unsigned int) e_20; + _33 = 19 - _32; + _34 = _33 / 4; + _35 = _34 * 4294967293; + _36 = _31 ? _35 : 0; + _37 = d_19 + _36; + d_23 = _37 + 4294967293; which is e_20 + 4 + (e_20 <= 19 ? 4 * (int)((19 - (unsigned int) e_20) / 4): 0) and ((e_20 <= 19 ? ((19 - (unsigned int) e_20) / 4) * 4294967293 : 0) + d_19) + 4294967293 I think there's another bug noting that final value replacement with COND_EXPRs should eventually materialize control-flow. I have a patch to do more rewriting to unsigned instead.