https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86270

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P2
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2018-06-22
      Known to work|                            |7.3.1
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
   Target Milestone|---                         |8.2
            Summary|Simple loop needs an extra  |[8/9 Regression] Simple
                   |register and an extra       |loop needs an extra
                   |instruction                 |register and an extra
                   |                            |instruction
     Ever confirmed|0                           |1

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
This looks somewhat related to the fixes circulating for PR70359 by Aldhy and
myself.

Basically at out-of-SSA time we should try measures to allow coalescing of
SSA vars across backedges which in this case cannot happen because of the
life-range overlap.

Not sure if for

<bb 4> [local count: 955630224]:
# ivtmp.3_18 = PHI <0(3), ivtmp.3_19(4)>
i_16 = (int) ivtmp.3_18;
MEM[base: a.0_1, index: ivtmp.3_18, step: 4, offset: 0B] = i_16;
ivtmp.3_14 = ivtmp.3_18 + 1;
ivtmp.3_19 = ivtmp.3_14;
if (_6 != ivtmp.3_18)
  goto <bb 4>; [89.00%]
else
  goto <bb 5>; [11.00%]

we can somehow "undo" the change easily.  I guess adjusting _6 to
_6 + 1 and then comparing against ivtmp.3_14 might work (not to
say there's a not propagated out copy resulting likely from late
forwprop).

I need to revisit the PR70359 fixes for GCC9 so let me take this one as well.

Reply via email to