Hi, On Thu, 5 Jul 2007, Richard Guenther wrote:
> > > 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 <[EMAIL PROTECTED]> > > > > > > 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. > > > > I have to agree, IMHO it looks this optimization is done to early. > > Richard, it would be great if you comment on this. > > Thanks. > > No, the fold code just does canonicalization. If you remove that you > just switch the cases that are not handled. What makes "(i + 1) * 4" the canonical form of "(i * 4) + 4" compared to other expressions like "(i * 4) + 8"? > The real fix is in the > value numberer that should value number both kinds the same. Sorry, I have no idea what this means. bye, Roman