Patchwork Address lowering [3/3] Test suite additions and changes

login
register
mail settings
Submitter William J. Schmidt
Date June 30, 2011, 3:03 p.m.
Message ID <1309446180.26980.61.camel@oc2474580526.ibm.com>
Download mbox | patch
Permalink /patch/102771/
State New
Headers show

Comments

William J. Schmidt - June 30, 2011, 3:03 p.m.
Here is the third patch related to address lowering.  It contains the
changes to the test suite:  13 new tests, and 18 tests that needed to be
modified.  The latter occur because of specific patterns expected in
tree dumps; for example, a field reference x.f might now be expected to
be a MEM_REF instead.  In a couple of cases, I found it preferable to
disable address lowering for the test.

Thanks,
Bill

2011-06-30  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	PR rtl-optimization/46556
	* testsuite/gcc.target/powerpc/ppc-loweraddr-1.c: New.
	* testsuite/gcc.target/powerpc/ppc-loweraddr-2.c: New.
	* testsuite/gcc.target/powerpc/ppc-loweraddr-3.c: New.
	* testsuite/gcc.target/powerpc/ppc-loweraddr-4.c: New.
	* testsuite/gcc.target/powerpc/ppc-loweraddr-5.c: New.
	* testsuite/gcc.target/powerpc/extract-3.c: New.
	* testsuite/gcc.target/powerpc/extract-3a.c: New.
	* testsuite/gcc.target/i386/pr24178.c: Disable address lowering.
	* testsuite/gfortran.dg/reassoc_3.f90: Change expected pattern.
	* testsuite/gcc.dg/union-4a.c: New.
	* testsuite/gcc.dg/pr38984.c: Change expected pattern.
	* testsuite/gcc.dg.torture/pr42898-2.c: Disable for -O0; change
	expected pattern.
	* testsuite/gcc.dg.torture/pr42898.c: Likewise.
	* testsuite/gcc.dg/tree-ssa/sra-7.c: Change expected pattern.
	* testsuite/gcc.dg/tree-ssa/pr47286.c: Likewise.
	* testsuite/gcc.dg/tree-ssa/pr16721.c: Likewise.
	* testsuite/gcc.dg/tree-ssa/20030709-2.c: Likewise.
	* testsuite/gcc.dg/tree-ssa/loweraddr-1.c: New.
	* testsuite/gcc.dg/tree-ssa/loweraddr-2.c: New.
	* testsuite/gcc.dg/tree-ssa/loweraddr-3.c: New.
	* testsuite/gcc.dg/tree-ssa/loweraddr-4.c: New.
	* testsuite/gcc.dg/tree-ssa/loweraddr-5.c: New.
	* testsuite/gcc.dg/tree-ssa/loweraddr-6.c: New.
	* testsuite/gcc.dg/tree-ssa/alias_bug.c: Change expected pattern.
	* testsuite/gcc.dg/tree-ssa/alias-6.c: Likewise.
	* testsuite/gcc.dg/tree-ssa/alias-11.c: Likewise.
	* testsuite/g++.dg/opt/pr30965.C: Likewise.
	* testsuite/g++.dg/tree-ssa/pr27090.C: Likewise.
	* testsuite/g++.dg/tree-ssa/tmmti-2.C: Likewise.
	* testsuite/g++.dg/tree-ssa/pointer-reference-alias.C: Likewise.
	* testsuite/g++.dg/tree-ssa/uninit-17.c: Disable address lowering.

Patch

Index: gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-2.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-2.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-2.c	(revision 0)
@@ -0,0 +1,23 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, unsigned int n)
+{
+  foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 3)
+    foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 89)
+    foo (p->b[n], p->a[n], p->c[n]);
+}
+
+/* { dg-final { scan-tree-dump-times "= MEM\\\[\\(struct x \\*\\)D\.\[0-9_\]\+\\\];" 3 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-3.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-3.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-3.c	(revision 0)
@@ -0,0 +1,31 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+void
+f (struct x *p, unsigned int n)
+{
+  p->a[n] = n;
+  p->c[n] = n + 2;
+  p->b[n] = n + 1;
+  if (n > 3)
+    {
+      p->a[n] = n + 3;
+      p->c[n] = n + 9;
+      p->b[n] = n + 6;
+    }
+  if (n < 89)
+    {
+      p->b[n] = n + 5;
+      p->a[n] = n + 15;
+      p->c[n] = n + 10;
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)D\.\[0-9_\]\+\\\] =" 3 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-4.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-4.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-4.c	(revision 0)
@@ -0,0 +1,32 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+void
+f (struct x *p, struct x *q, struct x *r, struct x *s, unsigned int n)
+{
+  p->a[n] = q->a[n];
+  p->c[n] = q->c[n];
+  p->b[n] = q->b[n];
+  if (n > 3)
+    {
+      p->a[n] = r->a[n];
+      p->c[n] = r->c[n];
+      p->b[n] = r->b[n];
+    }
+  if (n < 89)
+    {
+      p->b[n] = s->b[n];
+      p->a[n] = s->a[n];
+      p->c[n] = s->c[n];
+    }
+}
+
+/* { dg-final { scan-tree-dump-times "= MEM\\\[\\(struct x \\*\\)D\.\[0-9_\]\+\\\];" 3 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "MEM\\\[\\(struct x \\*\\)D\.\[0-9_\]\+\\\] =" 3 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-5.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-5.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-5.c	(revision 0)
@@ -0,0 +1,29 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+/* { dg-skip-if "" { ilp32 } { "-m32" } { "" } } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (int pp, unsigned int n)
+{
+  struct x *p = (struct x *)pp; /* { dg-warning "cast to pointer from integer of different size" } */
+
+  foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 3)
+    foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 89)
+    foo (p->b[n], p->a[n], p->c[n]);
+}
+
+/* { dg-final { scan-tree-dump-times "= MEM" 9 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "base: " 6 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "index: " 0 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "offset: " 6 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.target/powerpc/extract-3.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/extract-3.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/extract-3.c	(revision 0)
@@ -0,0 +1,24 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 " } */
+/* { dg-skip-if "" { "powerpc*-*-*" } { "-m32" } { "" } } */
+
+typedef struct
+{
+  unsigned char c1;
+  unsigned char c2;
+  unsigned char c3;
+  unsigned char c4;
+} foo_t;
+
+int
+foo (foo_t x)
+{
+   return x.c2 != 0;
+}
+
+/* { dg-final { scan-assembler-not "std " } } */
+/* { dg-final { scan-assembler-not "stw " } } */
+/* { dg-final { scan-assembler-not "stb " } } */
+/* { dg-final { scan-assembler-not "ld " } } */
+/* { dg-final { scan-assembler-not "lwz " } } */
+/* { dg-final { scan-assembler-not "lbz " } } */
Index: gcc/testsuite/gcc.target/powerpc/extract-3a.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/extract-3a.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/extract-3a.c	(revision 0)
@@ -0,0 +1,24 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 " } */
+/* { dg-skip-if "" { "powerpc*-*-*" } { "-m64" } { "" } } */
+
+typedef struct
+{
+  unsigned char c1;
+  unsigned char c2;
+  unsigned char c3;
+  unsigned char c4;
+} foo_t;
+
+int
+foo (foo_t x)
+{
+   return x.c2 != 0;
+}
+
+/* { dg-final { scan-assembler-not "std " } } */
+/* { dg-final { scan-assembler-not "stw " } } */
+/* { dg-final { scan-assembler-not "stb " } } */
+/* { dg-final { scan-assembler-not "ld " } } */
+/* { dg-final { scan-assembler-not "lwz " } } */
+/* { dg-final { scan-assembler-times "lbz " 1 } } */
Index: gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-1.c
===================================================================
--- gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-1.c	(revision 0)
+++ gcc/testsuite/gcc.target/powerpc/ppc-loweraddr-1.c	(revision 0)
@@ -0,0 +1,24 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, unsigned int n)
+{
+  foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 3)
+    foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 89)
+    foo (p->b[n], p->a[n], p->c[n]);
+}
+
+/* { dg-final { scan-assembler-times "lw. 3,0\\(\[0-9\]\+\\)" 1 { target powerpc*-*-* } } } */
+/* { dg-final { scan-assembler-times "lw. 4,0\\(\[0-9\]\+\\)" 1 { target powerpc*-*-* } } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.target/i386/pr24178.c
===================================================================
--- gcc/testsuite/gcc.target/i386/pr24178.c	(revision 175664)
+++ gcc/testsuite/gcc.target/i386/pr24178.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O -fdump-rtl-expand" } */
+/* { dg-options "-O -fdump-rtl-expand -fno-lower-addr" } */
 
 struct S {
     int l;
Index: gcc/testsuite/gfortran.dg/reassoc_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/reassoc_3.f90	(revision 175664)
+++ gcc/testsuite/gfortran.dg/reassoc_3.f90	(working copy)
@@ -14,7 +14,7 @@  function test(a)
 end
 
 ! { dg-final { scan-tree-dump "b = 5" "original" } }
-! { dg-final { scan-tree-dump "c_. = .a" "optimized" } }
+! { dg-final { scan-tree-dump "c_. = MEM\\\[base: a_." "optimized" } }
 ! { dg-final { scan-tree-dump "return c_.;" "optimized" } }
 ! { dg-final { cleanup-tree-dump "original" } }
 ! { dg-final { cleanup-tree-dump "optimized" } }
Index: gcc/testsuite/gcc.dg/union-4a.c
===================================================================
--- gcc/testsuite/gcc.dg/union-4a.c	(revision 0)
+++ gcc/testsuite/gcc.dg/union-4a.c	(revision 0)
@@ -0,0 +1,23 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O -fdump-rtl-cse1" } */
+
+extern void abort(void);
+
+typedef unsigned int uint32;
+typedef unsigned long long uint64;
+
+typedef union {
+  uint32 i32[2];
+  uint64 i64;
+} u64;
+
+void foo(void)
+{
+  u64 data;
+  data.i64 = 1;
+  if (data.i32[1] != 1)
+    abort ();
+}
+
+/* { dg-final { scan-rtl-dump-not "abort" "cse1" { target powerpc64-*-* } } } */
+/* { dg-final { cleanup-rtl-dump "cse1" } } */
Index: gcc/testsuite/gcc.dg/pr38984.c
===================================================================
--- gcc/testsuite/gcc.dg/pr38984.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/pr38984.c	(working copy)
@@ -10,7 +10,7 @@  int f(int *p)
   return *p == a;
 }
 
-/* { dg-final { scan-tree-dump-times "\\\*p" 2 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "base: p" 2 "optimized" } } */
 /* { dg-final { scan-tree-dump-not "return 1" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
 
Index: gcc/testsuite/gcc.dg/torture/pr42898-2.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr42898-2.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/torture/pr42898-2.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-options "-fdump-tree-optimized" } */
+/* { dg-skip-if "" { "*-*-*" } { "-O0" } { "" } } */
 
 struct hardware {
   int parm1:8;
@@ -21,5 +22,5 @@  void f1(volatile struct hardware *ptr)
   *ptr = h;
 }
 
-/* { dg-final { scan-tree-dump-times "\\*ptr" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "base: ptr" 1 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/torture/pr42898.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr42898.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/torture/pr42898.c	(working copy)
@@ -1,5 +1,6 @@ 
 /* { dg-do compile } */
 /* { dg-options "-fdump-tree-optimized" } */
+/* { dg-skip-if "" { "*-*-*" } { "-O0" } { "" } } */
 
 struct hardware {
   int parm1:8;
@@ -19,5 +20,5 @@  void f1(volatile struct hardware *ptr)
   };
 }
 
-/* { dg-final { scan-tree-dump-times "\\*ptr" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "base: ptr" 1 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/sra-7.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/sra-7.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/sra-7.c	(working copy)
@@ -9,5 +9,5 @@  void a(s *s1, s *s2)
 }
 
 /* Struct copies should not be split into members.  */
-/* { dg-final { scan-tree-dump "\\\*s1_.\\\(D\\\) = \\\*s2"  "optimized"} } */
+/* { dg-final { scan-tree-dump "MEM\\\[base: s1_.\\\(D\\\), offset: 0B\\\] = MEM\\\[base: s2_.\\\(D\\\), offset: 0B\\\];"  "optimized"} } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/pr47286.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/pr47286.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/pr47286.c	(working copy)
@@ -16,5 +16,5 @@  void testcase(void)
 /* We have to make sure that alias analysis treats sp as pointing
    to globals and thus the store not optimized away.  */
 
-/* { dg-final { scan-tree-dump "->preempt_count =" "optimized" } } */
+/* { dg-final { scan-tree-dump "MEM\\\[\\(struct thread_info \\*\\)D.*\\\] =" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/pr16721.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/pr16721.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/pr16721.c	(working copy)
@@ -12,5 +12,5 @@  int test()
 }
 
 /* The load from p->addr should not disappear.  */
-/* { dg-final { scan-tree-dump-times "\->addr" 1 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "base: p.0" 1 "optimized"} } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/20030709-2.c	(working copy)
@@ -41,7 +41,8 @@  get_alias_set (t)
 
 /* There should be precisely one load of ->decl.rtl.  If there is
    more than, then the dominator optimizations failed.  */
-/* { dg-final { scan-tree-dump-times "->decl\\.rtl" 1 "cddce2"} } */
+/* With addition of tree-ssa-lower-addr.c, this is expanded to a mem_ref.  */
+/* { dg-final { scan-tree-dump-times "base: t" 1 "cddce2"} } */
   
 /* There should be no loads of .rtmem since the complex return statement
    is just "return 0".  */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-1.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-1.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-1.c	(revision 0)
@@ -0,0 +1,21 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+void
+f (struct x *p)
+{
+  struct x y;
+
+  p->a[4] = y.a[8];
+  p->b[4] = y.b[8];
+  p->c[4] = y.c[8];
+}
+
+/* { dg-final { scan-tree-dump-times "= y\..\\\[8\\\];" 3 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-2.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-2.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-2.c	(revision 0)
@@ -0,0 +1,26 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, int n)
+{
+  foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 3)
+    foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 89)
+    foo (p->b[n], p->a[n], p->c[n]);
+}
+
+/* { dg-final { scan-tree-dump-times "= MEM" 9 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "base: " 6 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "index: " 0 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "offset: " 6 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-3.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-3.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-3.c	(revision 0)
@@ -0,0 +1,30 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-loweraddr" } */
+/* { dg-skip-if "" { lp64 } { "*" } { "-m32" } } */
+/* { dg-skip-if "" { llp64 } { "*" } { "-m32" } } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (int pp, unsigned int n)
+{
+  struct x *p = (struct x *)pp;
+
+  foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 3)
+    foo (p->a[n], p->c[n], p->b[n]);
+  if (n > 89)
+    foo (p->b[n], p->a[n], p->c[n]);
+}
+
+/* { dg-final { scan-tree-dump-times "= MEM" 9 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "base: " 6 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "index: " 0 "loweraddr" } } */
+/* { dg-final { scan-tree-dump-times "offset: " 6 "loweraddr" } } */
+/* { dg-final { cleanup-tree-dump "loweraddr" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-4.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-4.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-4.c	(revision 0)
@@ -0,0 +1,25 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-cddce2" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, unsigned int n, unsigned int m)
+{
+  foo (p->a[n << m], p->c[n % 3], p->b[n | 0xa]);
+  if (n > 3)
+    foo (p->a[n << m], p->c[n % 3], p->b[n | 0xa]);
+  if (n > 89)
+    foo (p->b[n | 0xa], p->a[n << m], p->c[n % 3]);
+}
+
+/* { dg-final { scan-tree-dump-times "<< m" 1 "cddce2" } } */
+/* { dg-final { scan-tree-dump-times "% 3" 1 "cddce2" } } */
+/* { dg-final { scan-tree-dump-times "\\| 10" 1 "cddce2" } } */
+/* { dg-final { cleanup-tree-dump "cddce2" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/alias_bug.c	(working copy)
@@ -56,6 +56,6 @@  void keyboard_set_repeat(void)
  intcall(0x16, &ireg, ((void *)0));
 }
 
-/* { dg-final { scan-tree-dump-times "ireg.*ax" 1 "optimized"} } */
+/* { dg-final { scan-tree-dump-times "&ireg \\+ 28B" 1 "optimized"} } */
  
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-5.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-5.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-5.c	(revision 0)
@@ -0,0 +1,25 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-cddce2" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, unsigned int n, unsigned int m)
+{
+  foo (p->a[n >> m], p->c[n / 3], p->b[n & 0xa]);
+  if (n > 3)
+    foo (p->a[n >> m], p->c[n / 3], p->b[n & 0xa]);
+  if (n > 89)
+    foo (p->b[n & 0xa], p->a[n >> m], p->c[n / 3]);
+}
+
+/* { dg-final { scan-tree-dump-times ">> m" 1 "cddce2" } } */
+/* { dg-final { scan-tree-dump-times "/ 3" 1 "cddce2" } } */
+/* { dg-final { scan-tree-dump-times "& 10" 1 "cddce2" } } */
+/* { dg-final { cleanup-tree-dump "cddce2" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/loweraddr-6.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/loweraddr-6.c	(revision 0)
+++ gcc/testsuite/gcc.dg/tree-ssa/loweraddr-6.c	(revision 0)
@@ -0,0 +1,23 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-tree-cddce2" } */
+struct x
+{
+  int a[16];
+  int b[16];
+  int c[16];
+};
+
+extern void foo (int, int, int);
+
+void
+f (struct x *p, unsigned int n)
+{
+  foo (p->a[~n], p->c[16 - n], p->b[n ^ 0xa]);
+  if (n > 3)
+    foo (p->a[~n], p->c[16 - n], p->b[n ^ 0xa]);
+  if (n > 89)
+    foo (p->b[n ^ 0xa], p->a[~n], p->c[16 - n]);
+}
+
+/* { dg-final { scan-tree-dump-times "\\^ 10" 1 "cddce2" } } */
+/* { dg-final { cleanup-tree-dump "cddce2" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/alias-6.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/alias-6.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/alias-6.c	(working copy)
@@ -16,6 +16,6 @@  int bar(void)
 
 /* We need to have both: a load from "a[0]" and a load from "*p.a",
    the latter can be an ssa temporary.  */
-/* { dg-final { scan-tree-dump "= a.0.;" "optimized" } } */
-/* { dg-final { scan-tree-dump "= \\*\[pD\]" "optimized" } } */
+/* { dg-final { scan-tree-dump "= MEM\\\[\\(int\\\[2\\\] \\*\\)&a\\\];" "optimized" } } */
+/* { dg-final { scan-tree-dump "base: \[pD\]" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/gcc.dg/tree-ssa/alias-11.c
===================================================================
--- gcc/testsuite/gcc.dg/tree-ssa/alias-11.c	(revision 175664)
+++ gcc/testsuite/gcc.dg/tree-ssa/alias-11.c	(working copy)
@@ -16,6 +16,6 @@  int bar(void)
 
 /* We need to have both: a load from "a[0]" and a load from "*p.a",
    the latter can be an ssa temporary.  */
-/* { dg-final { scan-tree-dump "= a.0.;" "optimized" } } */
-/* { dg-final { scan-tree-dump "= \\*\[pD\]" "optimized" } } */
+/* { dg-final { scan-tree-dump "= MEM\\\[\\(int\\\[32\\\] \\*\\)&a\\\];" "optimized" } } */
+/* { dg-final { scan-tree-dump "base: \[pD\]" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/g++.dg/opt/pr30965.C
===================================================================
--- gcc/testsuite/g++.dg/opt/pr30965.C	(revision 175664)
+++ gcc/testsuite/g++.dg/opt/pr30965.C	(working copy)
@@ -16,5 +16,5 @@  extern void assign( long& variable, long v )
 }
 
 /* { dg-final { scan-tree-dump-times ";; Function" 2 "optimized" } } */
-/* { dg-final { scan-tree-dump-times "variable_..D. = v_..D." 2 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "MEM\\\[base: variable_..D., offset: 0B\\\] = v_..D.;" 2 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/g++.dg/tree-ssa/pr27090.C
===================================================================
--- gcc/testsuite/g++.dg/tree-ssa/pr27090.C	(revision 175664)
+++ gcc/testsuite/g++.dg/tree-ssa/pr27090.C	(working copy)
@@ -17,5 +17,5 @@  int foo(Foo& f)
         return f.get();
 }
 
-/* { dg-final { scan-tree-dump "f_..D.->x;" "optimized" } } */
+/* { dg-final { scan-tree-dump "MEM\\\[base: f" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/g++.dg/tree-ssa/tmmti-2.C
===================================================================
--- gcc/testsuite/g++.dg/tree-ssa/tmmti-2.C	(revision 175664)
+++ gcc/testsuite/g++.dg/tree-ssa/tmmti-2.C	(working copy)
@@ -18,5 +18,4 @@  double bar(long i)
 }
 
 /* { dg-final { scan-tree-dump "a\\\[.*i.*\\\]\\\[0\\\]" "optimized" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump "b\\\[.*i.*\\\].x" "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/g++.dg/tree-ssa/pointer-reference-alias.C
===================================================================
--- gcc/testsuite/g++.dg/tree-ssa/pointer-reference-alias.C	(revision 175664)
+++ gcc/testsuite/g++.dg/tree-ssa/pointer-reference-alias.C	(working copy)
@@ -9,5 +9,5 @@  int f(int *a)
 }
 
 /* There should be only one dereferencing of a. */
-/* { dg-final { scan-tree-dump-times "\\*a" 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "base: a" 1 "optimized" } } */
 /* { dg-final { cleanup-tree-dump "optimized" } } */
Index: gcc/testsuite/c-c++-common/uninit-17.c
===================================================================
--- gcc/testsuite/c-c++-common/uninit-17.c	(revision 175664)
+++ gcc/testsuite/c-c++-common/uninit-17.c	(working copy)
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -Wuninitialized -fno-ivopts" } */
+/* { dg-options "-O2 -Wuninitialized -fno-ivopts -fno-lower-addr" } */
 
 inline int foo(int x)
 {