On 18 June 2016 at 10:59, Andreas Schwab <sch...@linux-m68k.org> wrote: > 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: >
The test passes on aarch64, but fails on arm targets. Maybe that's easier for Bin to reproduce? Christophe > ;; 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."