| |||||||||||||||||||||||||||||
|
On 6/29/07, Roman Zippel <zippel> wrote: > Hi, > > On Thu, 28 Jun 2007, Andrew_Pinski wrote: > > > Roman Zippel <zippel> wrote on 06/28/2007 07:54:43 PM: > > > > > Hi, > > > Notice that it generates the (i + 1) * 4 instead of (i * 4) + 4 as with > > > the other cases. While I tried to debug this I narrowed it down to the > > > changes in fold_binary(), but I don't really know how to fix this, so > > > I could use some help here. > > > > The main thing is that this is really PR 32120. The problem is only > > related to the > > merge because of the way fold_binary works. > > I'm not sure that's related, what's happening in my example is that the > call to fold_plusminus_mult_expr() defeats the optimization attempted in > pointer_int_sum(). If I use the patch below to restrict the condition, my > problem is fixed, but PR32120 is unchanged. > Actually if I compare the final_cleanup dump of PR32120 with the output > from gcc 4.1, they are basically identical. The code to fold_binary was added by: r107218 | rguenth | 2005-11-19 03:29:10 -0800 (Sat, 19 Nov 2005) | 9 lines 2005-11-19 Richard Guenther <rguenther> PR middle-end/23294 * fold-const.c (fold_plusminus_mult_expr): New function. (fold_binary): Use to canonicalize PLUS_EXPR and MINUS_EXPR cases, remove now unnecessary code. * gcc.dg/tree-ssa/pr23294.c: New testcase. And it looks like it was doing this transformation this way on purpose. Now as I mentioned before the way this should be done is using PRE/FRE to catch the redudent multiplication. -- Pinski
| ||||||||||||||||||||||||||||
© 2004-2008 readlist.com