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

--- Comment #28 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
(In reply to Richard Biener from comment #25)


> What usually makes things complicated in the end is when for an IV
> we get overlapping life-ranges for the before and after value because
> that inhibits coalescing.  Is this what happens here?
...
...
> So we indeed have p_20 and p_9 live as p_9 is used after the loop. 
> Originally
> this wasn't the case but fold_stmt in the first forwprop pass does this
> by means of following use-def chains.

I'm a bit confused.

Where are you looking, after the forprop1 pass?  Because after forwprop1 I see:

  <bb 5> :
  p_22 = p_8 + 4294967294;
  MEM[(char *)p_19 + 4294967295B] = 45;

  <bb 6> :
  # p_9 = PHI <p_19(4), p_22(5)>
  return p_9;

Which as I understand has:

p_8  being the IV at the beginning of the last iteration.  
p_19 being the IV at the end of the last iteration.
p_22 being the IV at the end of the last iteration MINUS 1.

I don't see a p_20 anywhere.  Did you mean that p_8 and p_19 where both live at
the end of the loop?

Thanks for all the feedback BTW.

Reply via email to