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."

Reply via email to