This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Add DSE to early passes


Hi,
this patch adds DSE to early optimizations and handles testuiste fallout.
As discussed in PR 65076 this reduces number of CLOBBER statements in tramp3d
to 50% (and those accounts 29% of all code previously). The pass also quite
often kills real stores reducing Firefox binary by over 2% due to
better inline decisions.

Bootstrapped/regtested ppc64-linux, OK?

Honza

	* passes.def (early_optimizations): Add pass_dse.

	* g++.dg/tree-ssa/pr61034.C: Update template.
	* g++.dg/warn/Warray-bounds.C: Harden for DSE.
	* gcc.dg/Warray-bounds-11.c: Likewise.
	* gcc.dg/Warray-bounds.c: Likewise.
Index: passes.def
===================================================================
--- passes.def	(revision 222016)
+++ passes.def	(working copy)
@@ -89,6 +89,7 @@ along with GCC; see the file COPYING3.
 	  NEXT_PASS (pass_build_ealias);
 	  NEXT_PASS (pass_fre);
 	  NEXT_PASS (pass_merge_phi);
+          NEXT_PASS (pass_dse);
 	  NEXT_PASS (pass_cd_dce);
 	  NEXT_PASS (pass_early_ipa_sra);
 	  NEXT_PASS (pass_tail_recursion);
Index: testsuite/g++.dg/tree-ssa/pr61034.C
===================================================================
--- testsuite/g++.dg/tree-ssa/pr61034.C	(revision 222016)
+++ testsuite/g++.dg/tree-ssa/pr61034.C	(working copy)
@@ -42,6 +42,6 @@ bool f(I a, I b, I c, I d) {
 // This works only if everything is inlined into 'f'.
 
 // { dg-final { scan-tree-dump-times ";; Function" 1 "fre2" } }
-// { dg-final { scan-tree-dump-times "free" 19 "fre2" } }
+// { dg-final { scan-tree-dump-times "free" 18 "fre2" } }
 // { dg-final { scan-tree-dump-times "unreachable" 11 "fre2" } }
 // { dg-final { cleanup-tree-dump "fre2" } }
Index: testsuite/g++.dg/warn/Warray-bounds.C
===================================================================
--- testsuite/g++.dg/warn/Warray-bounds.C	(revision 222016)
+++ testsuite/g++.dg/warn/Warray-bounds.C	(working copy)
@@ -11,6 +11,7 @@ static inline int n(void) {
 
 void g(int *p);
 void h(int p);
+void bar (void *);
 
 int* f(void) {
     int b[10];
@@ -27,6 +28,7 @@ int* f(void) {
     a[ 9] = 0;
     a[10] = 0;             /* { dg-warning "array subscript" } */
     a[11] = 0;             /* { dg-warning "array subscript" } */
+    bar (a);
     a[2 * n() - 11] = 1;    /* { dg-warning "array subscript" } */
     a[2 * n() - 10] = 1;
     a[2 * n() -  1] = 1;
@@ -38,6 +40,7 @@ int* f(void) {
     b[ 9] = 0;
     b[10] = 0;             /* { dg-warning "array subscript" } */
     b[11] = 0;             /* { dg-warning "array subscript" } */
+    bar (b);
     b[2 * n() - 11] = 1;    /* { dg-warning "array subscript" } */
     b[2 * n() - 10] = 1;
     b[2 * n() -  1] = 1;
@@ -49,6 +52,7 @@ int* f(void) {
     c.c[ 9] = 0;
     c.c[10] = 0;           /* { dg-warning "array subscript" } */
     c.c[11] = 0;           /* { dg-warning "array subscript" } */
+    bar (&c);
     c.c[2 * n() - 11] = 1;  /* { dg-warning "array subscript" } */
     c.c[2 * n() - 10] = 1;
     c.c[2 * n() -  1] = 1;
@@ -87,6 +91,8 @@ int* f(void) {
     if (-1 >= 0)
        c.c[-1] = 0;
 
+    bar (b);
+    bar (&c);
     return a;
 }
 
Index: testsuite/gcc.dg/Warray-bounds-11.c
===================================================================
--- testsuite/gcc.dg/Warray-bounds-11.c	(revision 222016)
+++ testsuite/gcc.dg/Warray-bounds-11.c	(working copy)
@@ -92,5 +92,11 @@ void foo(int (*a)[3])
 	bar(c);
 	bar(e);
 	bar(f.f);
+	bar(h1->j);
+	bar(h3->j);
+	bar(h3b->j);
+	bar(h1b->j);
+	bar(h->j);
+	bar(h0->j);
 }
 
Index: testsuite/gcc.dg/Warray-bounds.c
===================================================================
--- testsuite/gcc.dg/Warray-bounds.c	(revision 222016)
+++ testsuite/gcc.dg/Warray-bounds.c	(working copy)
@@ -11,6 +11,8 @@ static inline int n(void) {
 void g(int *p);
 void h(int p);
 
+void bar (void *);
+
 int* f(void) {
     int b[10];
     int i;
@@ -26,10 +28,12 @@ int* f(void) {
     a[ 9] = 0;
     a[10] = 0;             /* { dg-warning "6:array subscript" } */
     a[11] = 0;             /* { dg-warning "6:array subscript" } */
+    bar (a);
     a[2 * n() - 11] = 1;    /* { dg-warning "6:array subscript" } */
     a[2 * n() - 10] = 1;
     a[2 * n() -  1] = 1;
     a[2 * n() -  0] = 1;    /* { dg-warning "6:array subscript" } */
+    bar (a);
 
     b[-1] = 0;             /* { dg-warning "6:array subscript" } */
     b[ 0] = 0;
@@ -37,6 +41,7 @@ int* f(void) {
     b[ 9] = 0;
     b[10] = 0;             /* { dg-warning "6:array subscript" } */
     b[11] = 0;             /* { dg-warning "6:array subscript" } */
+    bar (b);
     b[2 * n() - 11] = 1;    /* { dg-warning "6:array subscript" } */
     b[2 * n() - 10] = 1;
     b[2 * n() -  1] = 1;
@@ -48,6 +53,7 @@ int* f(void) {
     c.c[ 9] = 0;
     c.c[10] = 0;           /* { dg-warning "8:array subscript" } */
     c.c[11] = 0;           /* { dg-warning "8:array subscript" } */
+    bar (&c);
     c.c[2 * n() - 11] = 1;  /* { dg-warning "8:array subscript" } */
     c.c[2 * n() - 10] = 1;
     c.c[2 * n() -  1] = 1;
@@ -88,6 +94,8 @@ int* f(void) {
     for (i = 20; i < 30; ++i)
              a[i] = 1;       /* { dg-warning "15:array subscript" } */
 
+    bar (b);
+    bar (&c);
     return a;
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]