OK, don't bother. I think I understand TER and my issue now.
It is from a misfix of widening multiplication, which I found
there is a new pass doing this from 4.6. I am going to back
port that to my target. 

Thanks,
Bingfeng

> -----Original Message-----
> From: Bingfeng Mei
> Sent: 09 December 2011 14:34
> To: 'Michael Matz'; Richard Guenther
> Cc: gcc@gcc.gnu.org
> Subject: RE: Bug in Tree to RTL expansion?
> 
> Michael,
> Thanks for your help. I struggled to understand tree-ssa-ter.c.
> Please see questions below.
> 
> I also tried the tree-ssa-ter.c from the trunk. Same results.
> 
> Bingfeng
> 
> > -----Original Message-----
> > From: Michael Matz [mailto:m...@suse.de]
> > Sent: 08 December 2011 13:50
> > To: Richard Guenther
> > Cc: Bingfeng Mei; gcc@gcc.gnu.org
> > Subject: Re: Bug in Tree to RTL expansion?
> >
> > Hi,
> >
> > On Thu, 8 Dec 2011, Richard Guenther wrote:
> >
> > > > What I am not sure is whether the coalescing algorithm or the
> > > > expanding procedure is wrong here.
> >
> > The forwarding of _218 is wrong.  TER shouldn't have marked it as
> being
> > able to forward (check the expand-detailed dump for the "Replacing
> > Expressions" section).  Obviously it does think it can forward it, so
> > something is wrong in tree-ssa-ter.c.
> >
> > If you can't come up with a testcase that fails with some available
> > cross
> > compiler (though I wonder why, the tree-ssa parts of the compiler are
> > not
> > that target dependend, so maybe you can show similar forwarding with
> an
> > adjusted testcase for something publically available) you have to
> debug
> > it
> > yourself (I'm right now not aware of any known bug in 4.5 regarding
> > this
> > particular situation).
> >
> > There should be a call to kill_expr on the statement
> >   ptr_h2_310 = ptr_h2_493 + 16;
> 
> I tracked into how TER is executed.
> kill_expr is called but the kill_list are already all empty because
> 
> mark_replaceable -> finished_with_expr  clear all the kill_list.
> 
> In addition, once replaceable_expressions is set by mark_replaceable.
> It doesn't seem
> it is ever cleared due to kill_expr or any other function.
> replaceable_expression
> is the only data structure passed to expand pass.
> 
> 
> > which should have killed the expression MEM[ptr_h2_493] (and hence
> _218)
> > from the available expressions.
> >
> >
> > Ciao,
> > Michael.

Reply via email to