Bin Cheng <bin.ch...@arm.com> writes: > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr71347.c > b/gcc/testsuite/gcc.dg/tree-ssa/pr71347.c > new file mode 100644 > index 0000000..7e5ad49 > --- /dev/null > +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr71347.c > @@ -0,0 +1,17 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fdump-tree-optimized" } */ > + > +double in; > +extern void Write (double); > +void foo (void) > +{ > + static double X[9]; > + int i; > + X[1] = in * in; > + for (i = 2; i <= 8; i++) > + X[i] = X[i - 1] * X[1]; > + Write (X[5]); > +} > + > +/* Load of X[i - i] can be omitted by reusing X[i] in previous iteration. */ > +/* { dg-final { scan-tree-dump-not ".* = MEM.*;" "optimized"} } */
The test fails on ia64, this is what I get in .optimized: ;; Function foo (foo, funcdef_no=0, decl_uid=1387, cgraph_uid=0, symbol_order=1) foo () { int i; static double X[9]; double in.0_1; double in.1_2; double _3; int _4; double _5; double _6; double _7; double _8; <bb 2>: in.0_1 = in; in.1_2 = in; _3 = in.0_1 * in.1_2; X[1] = _3; i_13 = 2; goto <bb 4>; <bb 3>: _4 = i_9 + -1; _5 = X[_4]; _6 = X[1]; _7 = _5 * _6; X[i_9] = _7; i_15 = i_9 + 1; <bb 4>: # i_9 = PHI <i_13(2), i_15(3)> if (i_9 <= 8) goto <bb 3>; else goto <bb 5>; <bb 5>: _8 = X[5]; Write (_8); return; } Andreas. -- Andreas Schwab, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."