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.