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

--- Comment #29 from rguenther at suse dot de <rguenther at suse dot de> ---
On Fri, 2 Mar 2018, aldyh at gcc dot gnu.org wrote:

> 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?

Yes.  Not sure if that captures all of the issues in this bug but that's
clearly bad.

Reply via email to