This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Add DSE to early passes
- From: Richard Biener <rguenther at suse dot de>
- To: Jan Hubicka <hubicka at ucw dot cz>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 13 Apr 2015 14:12:50 +0200 (CEST)
- Subject: Re: Add DSE to early passes
- Authentication-results: sourceware.org; auth=none
- References: <20150413100117 dot GA61490 at kam dot mff dot cuni dot cz>
On Mon, 13 Apr 2015, Jan Hubicka wrote:
> 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?
Ok, but please wait a bit with committing to maintain trunk as a
test-base for GCC 5 patches during the RC phase.
Thanks,
Richard.
> 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;
> }
>
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild,
Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)