diff mbox

Help PR70729, shuffle LIM and PRE

Message ID alpine.LSU.2.11.1605181250490.18037@t29.fhfr.qr
State New
Headers show

Commit Message

Richard Biener May 18, 2016, 10:55 a.m. UTC
The following patch moves LIM before PRE to allow it to cleanup CSE
(and copyprop) opportunities LIM exposes.  It also moves the DCE done
in loop before the loop pipeline as otherwise it is no longer executed
uncoditionally at this point (since we have the no_loop pipeline).

The patch requires some testsuite adjustments such as cope with LIM now
running before PRE and thus disabling the former and to adjust
for better optimization we now do in the two testcases with redundant
stores where store motion enables sinking to sink all interesting code
out of the innermost loop.

It also requires the LIM PHI hoisting cost adjustment patch I am
testing separately.

Bootstrapped and tested on x86_64-unknown-linux-gnu (with testsuite
fallout resulting in the following adjustments).

I'm going to re-test before committing.

Richard.

2016-05-18  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/70729
	* passes.def: Move LIM pass before PRE.  Remove no longer
	required copyprop and move first DCE out of the loop pipeline.

	* gcc.dg/autopar/outer-6.c: Adjust to avoid redundant store.
	* gcc.dg/graphite/scop-18.c: Likewise.
	* gcc.dg/pr41783.c: Disable LIM.
	* gcc.dg/tree-ssa/loadpre10.c: Likewise.
	* gcc.dg/tree-ssa/loadpre23.c: Likewise.
	* gcc.dg/tree-ssa/loadpre24.c: Likewise.
	* gcc.dg/tree-ssa/loadpre25.c: Likewise.
	* gcc.dg/tree-ssa/loadpre4.c: Likewise.
	* gcc.dg/tree-ssa/loadpre8.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-16.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-18.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-20.c: Likewise.
	* gcc.dg/tree-ssa/ssa-pre-3.c: Likewise.
	* gfortran.dg/pr42108.f90: Likewise.

Comments

Christophe Lyon May 26, 2016, 12:38 p.m. UTC | #1
On 18 May 2016 at 12:55, Richard Biener <rguenther@suse.de> wrote:
>
> The following patch moves LIM before PRE to allow it to cleanup CSE
> (and copyprop) opportunities LIM exposes.  It also moves the DCE done
> in loop before the loop pipeline as otherwise it is no longer executed
> uncoditionally at this point (since we have the no_loop pipeline).
>
> The patch requires some testsuite adjustments such as cope with LIM now
> running before PRE and thus disabling the former and to adjust
> for better optimization we now do in the two testcases with redundant
> stores where store motion enables sinking to sink all interesting code
> out of the innermost loop.
>
> It also requires the LIM PHI hoisting cost adjustment patch I am
> testing separately.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu (with testsuite
> fallout resulting in the following adjustments).
>
> I'm going to re-test before committing.
>
> Richard.

Hi Richard,

I've noticed that this patch introduces a regression on aarch64/arm targets:
gcc.dg/tree-ssa/scev-4.c scan-tree-dump-times optimized "&a" 1

because '&a' now appears twice in the log.

Actually, this is the only regression on aarch64, but on arm I've also
noticed regressions on scev-5 and scev-3 (for armv5t for the latter)

Christophe.


>
> 2016-05-18  Richard Biener  <rguenther@suse.de>
>
>         PR tree-optimization/70729
>         * passes.def: Move LIM pass before PRE.  Remove no longer
>         required copyprop and move first DCE out of the loop pipeline.
>
>         * gcc.dg/autopar/outer-6.c: Adjust to avoid redundant store.
>         * gcc.dg/graphite/scop-18.c: Likewise.
>         * gcc.dg/pr41783.c: Disable LIM.
>         * gcc.dg/tree-ssa/loadpre10.c: Likewise.
>         * gcc.dg/tree-ssa/loadpre23.c: Likewise.
>         * gcc.dg/tree-ssa/loadpre24.c: Likewise.
>         * gcc.dg/tree-ssa/loadpre25.c: Likewise.
>         * gcc.dg/tree-ssa/loadpre4.c: Likewise.
>         * gcc.dg/tree-ssa/loadpre8.c: Likewise.
>         * gcc.dg/tree-ssa/ssa-pre-16.c: Likewise.
>         * gcc.dg/tree-ssa/ssa-pre-18.c: Likewise.
>         * gcc.dg/tree-ssa/ssa-pre-20.c: Likewise.
>         * gcc.dg/tree-ssa/ssa-pre-3.c: Likewise.
>         * gfortran.dg/pr42108.f90: Likewise.
>
> Index: trunk/gcc/passes.def
> ===================================================================
> --- trunk.orig/gcc/passes.def   2016-05-18 11:46:56.518134310 +0200
> +++ trunk/gcc/passes.def        2016-05-18 11:47:16.006355920 +0200
> @@ -243,12 +243,14 @@ along with GCC; see the file COPYING3.
>        NEXT_PASS (pass_cse_sincos);
>        NEXT_PASS (pass_optimize_bswap);
>        NEXT_PASS (pass_laddress);
> +      NEXT_PASS (pass_lim);
>        NEXT_PASS (pass_split_crit_edges);
>        NEXT_PASS (pass_pre);
>        NEXT_PASS (pass_sink_code);
>        NEXT_PASS (pass_sancov);
>        NEXT_PASS (pass_asan);
>        NEXT_PASS (pass_tsan);
> +      NEXT_PASS (pass_dce);
>        /* Pass group that runs when 1) enabled, 2) there are loops
>          in the function.  Make sure to run pass_fix_loops before
>          to discover/remove loops before running the gate function
> @@ -257,9 +259,6 @@ along with GCC; see the file COPYING3.
>        NEXT_PASS (pass_tree_loop);
>        PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
>           NEXT_PASS (pass_tree_loop_init);
> -         NEXT_PASS (pass_lim);
> -         NEXT_PASS (pass_copy_prop);
> -         NEXT_PASS (pass_dce);
>           NEXT_PASS (pass_tree_unswitch);
>           NEXT_PASS (pass_scev_cprop);
>           NEXT_PASS (pass_record_bounds);
> Index: trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/autopar/outer-6.c   2016-01-20 15:36:51.477802338 +0100
> +++ trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c        2016-05-18 12:40:29.342665450 +0200
> @@ -24,7 +24,7 @@ void parloop (int N)
>    for (i = 0; i < N; i++)
>    {
>      for (j = 0; j < N; j++)
> -      y[i]=x[i][j];
> +      y[i]+=x[i][j];
>      sum += y[i];
>    }
>    g_sum = sum;
> Index: trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/graphite/scop-18.c  2015-09-14 10:21:31.364089947 +0200
> +++ trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c       2016-05-18 12:38:35.673369299 +0200
> @@ -13,13 +13,13 @@ void test (void)
>    for (i = 0; i < 24; i++)
>      for (j = 0; j < 24; j++)
>        for (k = 0; k < 24; k++)
> -        A[i][j] = B[i][k] * C[k][j];
> +        A[i][j] += B[i][k] * C[k][j];
>
>    /* These loops should still be strip mined.  */
>    for (i = 0; i < 1000; i++)
>      for (j = 0; j < 1000; j++)
>        for (k = 0; k < 1000; k++)
> -        A[i][j] = B[i][k] * C[k][j];
> +        A[i][j] += B[i][k] * C[k][j];
>  }
>
>  /* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
> Index: trunk/gcc/testsuite/gcc.dg/pr41783.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/pr41783.c   2015-06-09 15:45:14.092224446 +0200
> +++ trunk/gcc/testsuite/gcc.dg/pr41783.c        2016-05-18 11:47:31.454531583 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O3 -fdump-tree-pre" } */
> +/* { dg-options "-O3 -fdump-tree-pre -fno-tree-loop-im" } */
>  int db[100];
>  int a_global_var, fact;
>  int main()
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c        2015-06-09 15:45:27.104343935 +0200
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c     2016-05-18 11:48:23.031118053 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>  struct tree_common
>  {
>    int code;
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c        2015-11-05 09:52:40.426667086 +0100
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c     2016-05-18 11:48:36.795274560 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>
>  struct {
>    int a;
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c        2015-11-05 09:52:40.425667074 +0100
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c     2016-05-18 11:48:51.159437887 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>
>  int a;
>
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c        2015-11-05 09:52:40.426667086 +0100
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c     2016-05-18 11:49:02.815570421 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>  struct X { int i; };
>  int foo(struct X *a, int argc)
>  {
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c 2015-11-05 09:52:40.426667086 +0100
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c      2016-05-18 11:49:16.363724467 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>  int main(int *a, int argc)
>  {
>    int i;
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c 2015-06-09 15:45:27.003343009 +0200
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c      2016-05-18 11:49:28.355860820 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89 -fno-tree-loop-im" } */
>  typedef union tree_node *tree;
>  struct tree_common
>  {
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c       2015-06-09 15:45:26.659339850 +0200
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c    2016-05-18 11:50:17.428418769 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99 -fno-tree-loop-im" } */
>  int foo(int k, int *x)
>  {
>    int j=0;
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c       2015-06-09 15:45:26.681340051 +0200
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c    2016-05-18 11:50:30.372565939 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-details" } */
> +/* { dg-options "-O2 -fdump-tree-pre-details -fno-tree-loop-im" } */
>
>  struct Bar { int a; int b; };
>  struct Foo { int x; struct Bar y; };
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c       2015-06-09 15:45:27.045343392 +0200
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c    2016-05-18 11:50:59.072892246 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>
>  double pcheck;
>
> Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
> ===================================================================
> --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c        2015-11-05 09:41:27.166224870 +0100
> +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c     2016-05-18 11:51:13.045051099 +0200
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
>  unsigned foo1 (unsigned a, unsigned b, unsigned j, unsigned k)
>  {
>    unsigned i;
> Index: trunk/gcc/testsuite/gfortran.dg/pr42108.f90
> ===================================================================
> --- trunk.orig/gcc/testsuite/gfortran.dg/pr42108.f90    2015-06-09 15:45:08.686174805 +0200
> +++ trunk/gcc/testsuite/gfortran.dg/pr42108.f90 2016-05-18 11:53:12.382407812 +0200
> @@ -1,5 +1,5 @@
>  ! { dg-do compile }
> -! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details" }
> +! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details -fno-tree-loop-im" }
>
>  subroutine  eval(foo1,foo2,foo3,foo4,x,n,nnd)
>    implicit real*8 (a-h,o-z)
Richard Biener May 27, 2016, 10:02 a.m. UTC | #2
On Thu, 26 May 2016, Christophe Lyon wrote:

> On 18 May 2016 at 12:55, Richard Biener <rguenther@suse.de> wrote:
> >
> > The following patch moves LIM before PRE to allow it to cleanup CSE
> > (and copyprop) opportunities LIM exposes.  It also moves the DCE done
> > in loop before the loop pipeline as otherwise it is no longer executed
> > uncoditionally at this point (since we have the no_loop pipeline).
> >
> > The patch requires some testsuite adjustments such as cope with LIM now
> > running before PRE and thus disabling the former and to adjust
> > for better optimization we now do in the two testcases with redundant
> > stores where store motion enables sinking to sink all interesting code
> > out of the innermost loop.
> >
> > It also requires the LIM PHI hoisting cost adjustment patch I am
> > testing separately.
> >
> > Bootstrapped and tested on x86_64-unknown-linux-gnu (with testsuite
> > fallout resulting in the following adjustments).
> >
> > I'm going to re-test before committing.
> >
> > Richard.
> 
> Hi Richard,
> 
> I've noticed that this patch introduces a regression on aarch64/arm targets:
> gcc.dg/tree-ssa/scev-4.c scan-tree-dump-times optimized "&a" 1
> 
> because '&a' now appears twice in the log.
> 
> Actually, this is the only regression on aarch64, but on arm I've also
> noticed regressions on scev-5 and scev-3 (for armv5t for the latter)

See PR71237.

Richard.

> Christophe.
> 
> 
> >
> > 2016-05-18  Richard Biener  <rguenther@suse.de>
> >
> >         PR tree-optimization/70729
> >         * passes.def: Move LIM pass before PRE.  Remove no longer
> >         required copyprop and move first DCE out of the loop pipeline.
> >
> >         * gcc.dg/autopar/outer-6.c: Adjust to avoid redundant store.
> >         * gcc.dg/graphite/scop-18.c: Likewise.
> >         * gcc.dg/pr41783.c: Disable LIM.
> >         * gcc.dg/tree-ssa/loadpre10.c: Likewise.
> >         * gcc.dg/tree-ssa/loadpre23.c: Likewise.
> >         * gcc.dg/tree-ssa/loadpre24.c: Likewise.
> >         * gcc.dg/tree-ssa/loadpre25.c: Likewise.
> >         * gcc.dg/tree-ssa/loadpre4.c: Likewise.
> >         * gcc.dg/tree-ssa/loadpre8.c: Likewise.
> >         * gcc.dg/tree-ssa/ssa-pre-16.c: Likewise.
> >         * gcc.dg/tree-ssa/ssa-pre-18.c: Likewise.
> >         * gcc.dg/tree-ssa/ssa-pre-20.c: Likewise.
> >         * gcc.dg/tree-ssa/ssa-pre-3.c: Likewise.
> >         * gfortran.dg/pr42108.f90: Likewise.
> >
> > Index: trunk/gcc/passes.def
> > ===================================================================
> > --- trunk.orig/gcc/passes.def   2016-05-18 11:46:56.518134310 +0200
> > +++ trunk/gcc/passes.def        2016-05-18 11:47:16.006355920 +0200
> > @@ -243,12 +243,14 @@ along with GCC; see the file COPYING3.
> >        NEXT_PASS (pass_cse_sincos);
> >        NEXT_PASS (pass_optimize_bswap);
> >        NEXT_PASS (pass_laddress);
> > +      NEXT_PASS (pass_lim);
> >        NEXT_PASS (pass_split_crit_edges);
> >        NEXT_PASS (pass_pre);
> >        NEXT_PASS (pass_sink_code);
> >        NEXT_PASS (pass_sancov);
> >        NEXT_PASS (pass_asan);
> >        NEXT_PASS (pass_tsan);
> > +      NEXT_PASS (pass_dce);
> >        /* Pass group that runs when 1) enabled, 2) there are loops
> >          in the function.  Make sure to run pass_fix_loops before
> >          to discover/remove loops before running the gate function
> > @@ -257,9 +259,6 @@ along with GCC; see the file COPYING3.
> >        NEXT_PASS (pass_tree_loop);
> >        PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
> >           NEXT_PASS (pass_tree_loop_init);
> > -         NEXT_PASS (pass_lim);
> > -         NEXT_PASS (pass_copy_prop);
> > -         NEXT_PASS (pass_dce);
> >           NEXT_PASS (pass_tree_unswitch);
> >           NEXT_PASS (pass_scev_cprop);
> >           NEXT_PASS (pass_record_bounds);
> > Index: trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/autopar/outer-6.c   2016-01-20 15:36:51.477802338 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c        2016-05-18 12:40:29.342665450 +0200
> > @@ -24,7 +24,7 @@ void parloop (int N)
> >    for (i = 0; i < N; i++)
> >    {
> >      for (j = 0; j < N; j++)
> > -      y[i]=x[i][j];
> > +      y[i]+=x[i][j];
> >      sum += y[i];
> >    }
> >    g_sum = sum;
> > Index: trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/graphite/scop-18.c  2015-09-14 10:21:31.364089947 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c       2016-05-18 12:38:35.673369299 +0200
> > @@ -13,13 +13,13 @@ void test (void)
> >    for (i = 0; i < 24; i++)
> >      for (j = 0; j < 24; j++)
> >        for (k = 0; k < 24; k++)
> > -        A[i][j] = B[i][k] * C[k][j];
> > +        A[i][j] += B[i][k] * C[k][j];
> >
> >    /* These loops should still be strip mined.  */
> >    for (i = 0; i < 1000; i++)
> >      for (j = 0; j < 1000; j++)
> >        for (k = 0; k < 1000; k++)
> > -        A[i][j] = B[i][k] * C[k][j];
> > +        A[i][j] += B[i][k] * C[k][j];
> >  }
> >
> >  /* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
> > Index: trunk/gcc/testsuite/gcc.dg/pr41783.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/pr41783.c   2015-06-09 15:45:14.092224446 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/pr41783.c        2016-05-18 11:47:31.454531583 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O3 -fdump-tree-pre" } */
> > +/* { dg-options "-O3 -fdump-tree-pre -fno-tree-loop-im" } */
> >  int db[100];
> >  int a_global_var, fact;
> >  int main()
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c        2015-06-09 15:45:27.104343935 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c     2016-05-18 11:48:23.031118053 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >  struct tree_common
> >  {
> >    int code;
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c        2015-11-05 09:52:40.426667086 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c     2016-05-18 11:48:36.795274560 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >
> >  struct {
> >    int a;
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c        2015-11-05 09:52:40.425667074 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c     2016-05-18 11:48:51.159437887 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >
> >  int a;
> >
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c        2015-11-05 09:52:40.426667086 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c     2016-05-18 11:49:02.815570421 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >  struct X { int i; };
> >  int foo(struct X *a, int argc)
> >  {
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c 2015-11-05 09:52:40.426667086 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c      2016-05-18 11:49:16.363724467 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >  int main(int *a, int argc)
> >  {
> >    int i;
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c 2015-06-09 15:45:27.003343009 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c      2016-05-18 11:49:28.355860820 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89 -fno-tree-loop-im" } */
> >  typedef union tree_node *tree;
> >  struct tree_common
> >  {
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c       2015-06-09 15:45:26.659339850 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c    2016-05-18 11:50:17.428418769 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99 -fno-tree-loop-im" } */
> >  int foo(int k, int *x)
> >  {
> >    int j=0;
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c       2015-06-09 15:45:26.681340051 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c    2016-05-18 11:50:30.372565939 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-details" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-details -fno-tree-loop-im" } */
> >
> >  struct Bar { int a; int b; };
> >  struct Foo { int x; struct Bar y; };
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c       2015-06-09 15:45:27.045343392 +0200
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c    2016-05-18 11:50:59.072892246 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >
> >  double pcheck;
> >
> > Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c        2015-11-05 09:41:27.166224870 +0100
> > +++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c     2016-05-18 11:51:13.045051099 +0200
> > @@ -1,5 +1,5 @@
> >  /* { dg-do compile } */
> > -/* { dg-options "-O2 -fdump-tree-pre-stats" } */
> > +/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
> >  unsigned foo1 (unsigned a, unsigned b, unsigned j, unsigned k)
> >  {
> >    unsigned i;
> > Index: trunk/gcc/testsuite/gfortran.dg/pr42108.f90
> > ===================================================================
> > --- trunk.orig/gcc/testsuite/gfortran.dg/pr42108.f90    2015-06-09 15:45:08.686174805 +0200
> > +++ trunk/gcc/testsuite/gfortran.dg/pr42108.f90 2016-05-18 11:53:12.382407812 +0200
> > @@ -1,5 +1,5 @@
> >  ! { dg-do compile }
> > -! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details" }
> > +! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details -fno-tree-loop-im" }
> >
> >  subroutine  eval(foo1,foo2,foo3,foo4,x,n,nnd)
> >    implicit real*8 (a-h,o-z)
> 
>
diff mbox

Patch

Index: trunk/gcc/passes.def
===================================================================
--- trunk.orig/gcc/passes.def	2016-05-18 11:46:56.518134310 +0200
+++ trunk/gcc/passes.def	2016-05-18 11:47:16.006355920 +0200
@@ -243,12 +243,14 @@  along with GCC; see the file COPYING3.
       NEXT_PASS (pass_cse_sincos);
       NEXT_PASS (pass_optimize_bswap);
       NEXT_PASS (pass_laddress);
+      NEXT_PASS (pass_lim);
       NEXT_PASS (pass_split_crit_edges);
       NEXT_PASS (pass_pre);
       NEXT_PASS (pass_sink_code);
       NEXT_PASS (pass_sancov);
       NEXT_PASS (pass_asan);
       NEXT_PASS (pass_tsan);
+      NEXT_PASS (pass_dce);
       /* Pass group that runs when 1) enabled, 2) there are loops
 	 in the function.  Make sure to run pass_fix_loops before
 	 to discover/remove loops before running the gate function
@@ -257,9 +259,6 @@  along with GCC; see the file COPYING3.
       NEXT_PASS (pass_tree_loop);
       PUSH_INSERT_PASSES_WITHIN (pass_tree_loop)
 	  NEXT_PASS (pass_tree_loop_init);
-	  NEXT_PASS (pass_lim);
-	  NEXT_PASS (pass_copy_prop);
-	  NEXT_PASS (pass_dce);
 	  NEXT_PASS (pass_tree_unswitch);
 	  NEXT_PASS (pass_scev_cprop);
 	  NEXT_PASS (pass_record_bounds);
Index: trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/autopar/outer-6.c	2016-01-20 15:36:51.477802338 +0100
+++ trunk/gcc/testsuite/gcc.dg/autopar/outer-6.c	2016-05-18 12:40:29.342665450 +0200
@@ -24,7 +24,7 @@  void parloop (int N)
   for (i = 0; i < N; i++)
   {
     for (j = 0; j < N; j++)
-      y[i]=x[i][j];
+      y[i]+=x[i][j];
     sum += y[i];
   }
   g_sum = sum;
Index: trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/graphite/scop-18.c	2015-09-14 10:21:31.364089947 +0200
+++ trunk/gcc/testsuite/gcc.dg/graphite/scop-18.c	2016-05-18 12:38:35.673369299 +0200
@@ -13,13 +13,13 @@  void test (void)
   for (i = 0; i < 24; i++)
     for (j = 0; j < 24; j++)
       for (k = 0; k < 24; k++)
-        A[i][j] = B[i][k] * C[k][j];
+        A[i][j] += B[i][k] * C[k][j];
 
   /* These loops should still be strip mined.  */
   for (i = 0; i < 1000; i++)
     for (j = 0; j < 1000; j++)
       for (k = 0; k < 1000; k++)
-        A[i][j] = B[i][k] * C[k][j];
+        A[i][j] += B[i][k] * C[k][j];
 }
 
 /* { dg-final { scan-tree-dump-times "number of SCoPs: 1" 1 "graphite"} } */
Index: trunk/gcc/testsuite/gcc.dg/pr41783.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/pr41783.c	2015-06-09 15:45:14.092224446 +0200
+++ trunk/gcc/testsuite/gcc.dg/pr41783.c	2016-05-18 11:47:31.454531583 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-tree-pre" } */
+/* { dg-options "-O3 -fdump-tree-pre -fno-tree-loop-im" } */
 int db[100];
 int a_global_var, fact;
 int main()
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c	2015-06-09 15:45:27.104343935 +0200
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre10.c	2016-05-18 11:48:23.031118053 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 struct tree_common 
 { 
   int code; 
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c	2015-11-05 09:52:40.426667086 +0100
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre23.c	2016-05-18 11:48:36.795274560 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 
 struct {
   int a;
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c	2015-11-05 09:52:40.425667074 +0100
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre24.c	2016-05-18 11:48:51.159437887 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 
 int a;
 
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c	2015-11-05 09:52:40.426667086 +0100
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre25.c	2016-05-18 11:49:02.815570421 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 struct X { int i; };
 int foo(struct X *a, int argc)
 {
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c	2015-11-05 09:52:40.426667086 +0100
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre4.c	2016-05-18 11:49:16.363724467 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 int main(int *a, int argc)
 {
   int i;
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c	2015-06-09 15:45:27.003343009 +0200
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c	2016-05-18 11:49:28.355860820 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -std=gnu89 -fno-tree-loop-im" } */
 typedef union tree_node *tree;
 struct tree_common
 {
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c	2015-06-09 15:45:26.659339850 +0200
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-16.c	2016-05-18 11:50:17.428418769 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -std=c99 -fno-tree-loop-im" } */
 int foo(int k, int *x)
 {
   int j=0;
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c	2015-06-09 15:45:26.681340051 +0200
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-18.c	2016-05-18 11:50:30.372565939 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-details" } */
+/* { dg-options "-O2 -fdump-tree-pre-details -fno-tree-loop-im" } */
 
 struct Bar { int a; int b; };
 struct Foo { int x; struct Bar y; };
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c	2015-06-09 15:45:27.045343392 +0200
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-20.c	2016-05-18 11:50:59.072892246 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 
 double pcheck;
 
Index: trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c
===================================================================
--- trunk.orig/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c	2015-11-05 09:41:27.166224870 +0100
+++ trunk/gcc/testsuite/gcc.dg/tree-ssa/ssa-pre-3.c	2016-05-18 11:51:13.045051099 +0200
@@ -1,5 +1,5 @@ 
 /* { dg-do compile } */ 
-/* { dg-options "-O2 -fdump-tree-pre-stats" } */
+/* { dg-options "-O2 -fdump-tree-pre-stats -fno-tree-loop-im" } */
 unsigned foo1 (unsigned a, unsigned b, unsigned j, unsigned k)
 {
   unsigned i;
Index: trunk/gcc/testsuite/gfortran.dg/pr42108.f90
===================================================================
--- trunk.orig/gcc/testsuite/gfortran.dg/pr42108.f90	2015-06-09 15:45:08.686174805 +0200
+++ trunk/gcc/testsuite/gfortran.dg/pr42108.f90	2016-05-18 11:53:12.382407812 +0200
@@ -1,5 +1,5 @@ 
 ! { dg-do compile }
-! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details" }
+! { dg-options "-O2 -fdump-tree-fre1 -fdump-tree-pre-details -fno-tree-loop-im" }
 
 subroutine  eval(foo1,foo2,foo3,foo4,x,n,nnd)
   implicit real*8 (a-h,o-z)