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.

Reply via email to