Hi all,
The testcase gcc.dg/tree-ssa/loop-31.c started failing on arm with r202165. The
scan dump pattern looks for "+ 2" appearing exactly once. With r202165 the loop
header is modified from:
<bb 3>:
ivtmp.5_10 = (unsigned int) &a[4294967295];
_16 = (unsigned int) len_4(D);
_17 = _16 * 2;
_18 = (unsigned int) &a;
_19 = _18 + 4294967294;
_20 = _19 + _17;
to:
<bb 3>:
ivtmp.5_10 = (unsigned int) &a[4294967295];
_16 = (sizetype) len_4(D);
_17 = _16 + 2147483647; <<<< "+ 2" will match here.
_18 = _17 * 2;
_19 = &a + _18;
_20 = (unsigned int) _19;
Since the strength reduction in the loop itself that this testcase is testing is
unaffected, this patch just updates the pattern to be "+ 2;" to match the
induction variable increment: ivtmp.5_11 = ivtmp.5_1 + 2;
Now the testcase passes on arm.
Ok for trunk?
Thanks,
Kyrill
2013-12-06 Kyrylo Tkachov <kyrylo.tkac...@arm.com>
* gcc.dg/tree-ssa/loop-31.c: Update scan pattern.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c b/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c
index 4f22637..fa18f5e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loop-31.c
@@ -15,7 +15,7 @@ short foo (int len, int v)
/* When we do not have addressing mode including multiplication,
the memory access should be strength-reduced. */
-/* { dg-final { scan-tree-dump-times " \\+ 2" 1 "optimized" { target arm*-*-* } } } */
-/* { dg-final { scan-tree-dump-times " \\+ 2" 1 "optimized" { target { ia64-*-* && ilp32 } } } } */
-/* { dg-final { scan-tree-dump-times " \\+ 2" 2 "optimized" { target { ia64-*-* && lp64 } } } } */
+/* { dg-final { scan-tree-dump-times " \\+ 2;" 1 "optimized" { target arm*-*-* } } } */
+/* { dg-final { scan-tree-dump-times " \\+ 2;" 1 "optimized" { target { ia64-*-* && ilp32 } } } } */
+/* { dg-final { scan-tree-dump-times " \\+ 2;" 2 "optimized" { target { ia64-*-* && lp64 } } } } */
/* { dg-final { cleanup-tree-dump "optimized" } } */