From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 96999 invoked by alias); 13 Apr 2015 12:12:55 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 96640 invoked by uid 89); 13 Apr 2015 12:12:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.9 required=5.0 tests=AWL,BAYES_50,KAM_ASCII_DIVIDERS,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mx2.suse.de Received: from cantor2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Mon, 13 Apr 2015 12:12:53 +0000 Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 618E0ABD1; Mon, 13 Apr 2015 12:12:50 +0000 (UTC) Date: Mon, 13 Apr 2015 12:12:00 -0000 From: Richard Biener To: Jan Hubicka cc: gcc-patches@gcc.gnu.org Subject: Re: Add DSE to early passes In-Reply-To: <20150413100117.GA61490@kam.mff.cuni.cz> Message-ID: References: <20150413100117.GA61490@kam.mff.cuni.cz> User-Agent: Alpine 2.11 (LSU 23 2013-08-11) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-SW-Source: 2015-04/txt/msg00571.txt.bz2 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 SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Jennifer Guild, Dilip Upmanyu, Graham Norton HRB 21284 (AG Nuernberg)