On Mon, 27 May 2019 at 09:26, Richard Biener <rguent...@suse.de> wrote:
>
> On Mon, 27 May 2019, Christophe Lyon wrote:
>
> > On Thu, 23 May 2019 at 13:32, Richard Biener <rguent...@suse.de> wrote:
> > >
> > > On Wed, 22 May 2019, Richard Biener wrote:
> > >
> > > >
> > > > This enables -ftree-loop-distribute-patterns at -O[2s] and also
> > > > arranges cold loops to be still processed but for pattern
> > > > recognition to save code-size.
> > > >
> > > > Bootstrap and regtest running on x86_64-unknown-linux-gnu.
> > > >
> > > > Martin has done extensive compile-time testing on SPEC
> > > > identifying only a single regression I'll have a look into.
> > >
> > > The reason for the compile-time regression is the complexity
> > > heuristic in LRA no longer choosing "simple" algorithms and
> > > the LIVE problem in particular being awfully slow.
> > >
> > > Unsurprisingly testing has also revealed loads of testsuite
> > > fallout which I deal with in the patch as committed below.
> > > Sorry for any further fallout on other targets (which I do
> > > expect).
> > >
> >
> > Hi 
> > Richard,http://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/271588/report-build-info.html
> >
> > Indeed git bisect pointed me to this commit when checking
> > the regressions on arm & aarch64 reported at:
> > http://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/271588/report-build-info.html
> >
> > Since I'm a bit later in reporting, I'm not sure you've fixed them already?
> > (I didn't notice follow-ups)
> > Looking at this patch, it seems adding -fno-tree-loop-distribute-patterns to
> > dg-options is the standard way of fixing the regressions?
>
> Yes.  As I wrote above I did expect some target specific fallout and
> hoped target maintainers would fix that.
>

OK, I've committed the attached patch as r271662.

Christophe

> Richard.
>
> > Christophe
> >
> > > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
> > >
> > > Richard.
> > >
> > > 2019-05-23  Richard Biener  <rguent...@suse.de>
> > >
> > >         PR tree-optimization/88440
> > >         * opts.c (default_options_table): Enable 
> > > -ftree-loop-distribute-patterns
> > >         at -O[2s]+.
> > >         * tree-loop-distribution.c (generate_memset_builtin): Fold the
> > >         generated call.
> > >         (generate_memcpy_builtin): Likewise.
> > >         (distribute_loop): Pass in whether to only distribute patterns.
> > >         (prepare_perfect_loop_nest): Also allow size optimization.
> > >         (pass_loop_distribution::execute): When optimizing a loop
> > >         nest for size allow pattern replacement.
> > >
> > >         * gcc.dg/tree-ssa/ldist-37.c: New testcase.
> > >         * gcc.dg/tree-ssa/ldist-38.c: Likewise.
> > >         * gcc.dg/vect/vect.exp: Add -fno-tree-loop-distribute-patterns.
> > >         * gcc.dg/tree-ssa/ldist-37.c: Adjust.
> > >         * gcc.dg/tree-ssa/ldist-38.c: Likewise.
> > >         * g++.dg/tree-ssa/pr78847.C: Likewise.
> > >         * gcc.dg/autopar/pr39500-1.c: Likewise.
> > >         * gcc.dg/autopar/reduc-1char.c: Likewise.
> > >         * gcc.dg/autopar/reduc-7.c: Likewise.
> > >         * gcc.dg/tree-ssa/ivopts-lt-2.c: Likewise.
> > >         * gcc.dg/tree-ssa/ivopts-lt.c: Likewise.
> > >         * gcc.dg/tree-ssa/predcom-dse-1.c: Likewise.
> > >         * gcc.dg/tree-ssa/predcom-dse-2.c: Likewise.
> > >         * gcc.dg/tree-ssa/predcom-dse-3.c: Likewise.
> > >         * gcc.dg/tree-ssa/predcom-dse-4.c: Likewise.
> > >         * gcc.dg/tree-ssa/prefetch-7.c: Likewise.
> > >         * gcc.dg/tree-ssa/prefetch-8.c: Likewise.
> > >         * gcc.dg/tree-ssa/prefetch-9.c: Likewise.
> > >         * gcc.dg/tree-ssa/scev-11.c: Likewise.
> > >         * gcc.dg/vect/costmodel/i386/costmodel-vect-31.c: Likewise.
> > >         * gcc.dg/vect/costmodel/i386/costmodel-vect-33.c: Likewise.
> > >         * gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c: Likewise.
> > >         * gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c: Likewise.
> > >         * gcc.target/i386/pr30970.c: Likewise.
> > >         * gcc.target/i386/vect-double-1.c: Likewise.
> > >         * gcc.target/i386/vect-double-2.c: Likewise.
> > >         * gcc.dg/tree-ssa/gen-vect-2.c: Likewise.
> > >         * gcc.dg/tree-ssa/gen-vect-26.c: Likewise.
> > >         * gcc.dg/tree-ssa/gen-vect-28.c: Likewise.
> > >         * gcc.dg/tree-ssa/gen-vect-32.c: Likewise.
> > >         * gfortran.dg/vect/vect-5.f90: Likewise.
> > >         * gfortran.dg/vect/vect-8.f90: Likewise.
> > >
> > > Index: gcc/opts.c
> > > ===================================================================
> > > --- gcc/opts.c  (revision 271513)
> > > +++ gcc/opts.c  (working copy)
> > > @@ -550,7 +550,7 @@ static const struct default_options defa
> > >      { OPT_LEVELS_3_PLUS, OPT_fpredictive_commoning, NULL, 1 },
> > >      { OPT_LEVELS_3_PLUS, OPT_fsplit_loops, NULL, 1 },
> > >      { OPT_LEVELS_3_PLUS, OPT_fsplit_paths, NULL, 1 },
> > > -    { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
> > > +    { OPT_LEVELS_2_PLUS, OPT_ftree_loop_distribute_patterns, NULL, 1 },
> > >      { OPT_LEVELS_3_PLUS, OPT_ftree_loop_distribution, NULL, 1 },
> > >      { OPT_LEVELS_3_PLUS, OPT_ftree_loop_vectorize, NULL, 1 },
> > >      { OPT_LEVELS_3_PLUS, OPT_ftree_partial_pre, NULL, 1 },
> > > Index: gcc/testsuite/g++.dg/tree-ssa/pr78847.C
> > > ===================================================================
> > > --- gcc/testsuite/g++.dg/tree-ssa/pr78847.C     (revision 271513)
> > > +++ gcc/testsuite/g++.dg/tree-ssa/pr78847.C     (working copy)
> > > @@ -1,6 +1,6 @@
> > >  /* { dg-do compile } */
> > >  /* { dg-require-effective-target c++14 } */
> > > -/* { dg-options "-O3 -fdump-tree-ldist" } */
> > > +/* { dg-options "-O3 -fdump-tree-ldist-optimized" } */
> > >
> > >  #include <stddef.h>
> > >  #include <cstring>
> > > @@ -23,4 +23,4 @@ void testWithLoopValue(const Foo foo, si
> > >        buf_[ptr++] = c;
> > >  }
> > >
> > > -/* { dg-final { scan-tree-dump "memcpy\[^\n\r\]*, 9\\);" "ldist" } } */
> > > +/* { dg-final { scan-tree-dump "split to 0 loops and 1 library calls" 
> > > "ldist" } } */
> > > Index: gcc/testsuite/gcc.dg/autopar/pr39500-1.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/autopar/pr39500-1.c    (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/autopar/pr39500-1.c    (working copy)
> > > @@ -1,7 +1,7 @@
> > >  /* pr39500: autopar fails to parallel */
> > >  /* origin: nemoking...@gmail.com(LiFeng) */
> > >  /* { dg-do compile } */
> > > -/* { dg-options "-O2 -ftree-parallelize-loops=4 
> > > -fdump-tree-parloops2-details" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -ftree-parallelize-loops=4 -fdump-tree-parloops2-details" } */
> > >
> > >  void abort (void);
> > >
> > > Index: gcc/testsuite/gcc.dg/autopar/reduc-1char.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/autopar/reduc-1char.c  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/autopar/reduc-1char.c  (working copy)
> > > @@ -61,5 +61,5 @@ int main (void)
> > >
> > >
> > >  /* { dg-final { scan-tree-dump-times "Detected reduction" 3 "parloops2" 
> > > } } */
> > > -/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 4 
> > > "parloops2" } } */
> > > +/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 
> > > "parloops2" } } */
> > >
> > > Index: gcc/testsuite/gcc.dg/autopar/reduc-7.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/autopar/reduc-7.c      (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/autopar/reduc-7.c      (working copy)
> > > @@ -85,5 +85,5 @@ int main (void)
> > >
> > >
> > >  /* { dg-final { scan-tree-dump-times "Detected reduction" 2 "parloops2" 
> > > } } */
> > > -/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 3 
> > > "parloops2" } } */
> > > +/* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 2 
> > > "parloops2" } } */
> > >
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/gen-vect-2.c  (working copy)
> > > @@ -1,6 +1,6 @@
> > >  /* { dg-do run { target vect_cmdline_needed } } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic" } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } 
> > > */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns -ftree-vectorize 
> > > -fdump-tree-vect-details -fvect-cost-model=dynamic" } */
> > > +/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } 
> > > } */
> > >
> > >  #include <stdlib.h>
> > >
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c (working copy)
> > > @@ -1,6 +1,6 @@
> > >  /* { dg-do run { target vect_cmdline_needed } } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic" } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } 
> > > */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns -ftree-vectorize 
> > > -fdump-tree-vect-details -fvect-cost-model=dynamic" } */
> > > +/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } 
> > > } */
> > >
> > >  #include <stdlib.h>
> > >
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c (working copy)
> > > @@ -1,6 +1,6 @@
> > >  /* { dg-do run { target vect_cmdline_needed } } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic" } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } 
> > > */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns -ftree-vectorize 
> > > -fdump-tree-vect-details -fvect-cost-model=dynamic" } */
> > > +/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } 
> > > } */
> > >
> > >  #include <stdlib.h>
> > >
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do run { target vect_cmdline_needed } } */
> > > -/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details 
> > > -fno-vect-cost-model" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns -ftree-vectorize 
> > > -fdump-tree-vect-details -fno-vect-cost-model" } */
> > >  /* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } 
> > > } */
> > >
> > >  #include <stdlib.h>
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt-2.c (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile } */
> > > -/* { dg-options "-O2 -fdump-tree-ivopts" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -fdump-tree-ivopts" } */
> > >  /* { dg-skip-if "PR68644" { hppa*-*-* powerpc*-*-* } } */
> > >
> > >  void
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt.c   (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/ivopts-lt.c   (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile } */
> > > -/* { dg-options "-O2 -fdump-tree-ivopts" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -fdump-tree-ivopts" } */
> > >  /* { dg-require-effective-target stdint_types } */
> > >
> > >  #include "stdint.h"
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-1.c       (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do run } */
> > > -/* { dg-options "-O2 -fno-inline -fpredictive-commoning 
> > > -fdump-tree-pcom-details" } */
> > > +/* { dg-options "-O2 -fno-inline -fno-tree-loop-distribute-patterns 
> > > -fpredictive-commoning -fdump-tree-pcom-details" } */
> > >
> > >  int arr[105] = {2, 3, 5, 7, 11};
> > >  int result0[10] = {2, 3, 5, 7, 11};
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-2.c       (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do run } */
> > > -/* { dg-options "-O2 -fno-inline -fpredictive-commoning 
> > > -fdump-tree-pcom-details" } */
> > > +/* { dg-options "-O2 -fno-inline -fno-tree-loop-distribute-patterns 
> > > -fpredictive-commoning -fdump-tree-pcom-details" } */
> > >
> > >  int arr[105] = {2, 3, 5, 7, 11};
> > >  int result0[10] = {2, 3, 5, 7, 11};
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-3.c       (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do run } */
> > > -/* { dg-options "-O2 -fno-inline -fpredictive-commoning 
> > > -fdump-tree-pcom-details" } */
> > > +/* { dg-options "-O2 -fno-inline -fno-tree-loop-distribute-patterns 
> > > -fpredictive-commoning -fdump-tree-pcom-details" } */
> > >
> > >  int arr1[105] = {2, 3, 5, 7, 11, 13, 0};
> > >  int arr2[105] = {2, 3, 5, 7, 11, 13, 0};
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/predcom-dse-4.c       (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do run } */
> > > -/* { dg-options "-O2 -fno-inline -fpredictive-commoning 
> > > -fdump-tree-pcom-details" } */
> > > +/* { dg-options "-O2 -fno-inline -fno-tree-loop-distribute-patterns 
> > > -fpredictive-commoning -fdump-tree-pcom-details" } */
> > >
> > >  int arr[105] = {2, 3, 5, 7, 11};
> > >  int result0[10] = {2, 3, 5, 7, 11};
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/prefetch-7.c  (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
> > > -/* { dg-options "-O2 -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > >
> > >  #define K 1000000
> > >  int a[K];
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/prefetch-8.c  (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
> > > -/* { dg-options "-O2 -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > >
> > >  #define K 1000000
> > >  int a[K];
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/prefetch-9.c  (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
> > > -/* { dg-options "-O2 -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > > +/* { dg-options "-O2 -fno-tree-loop-distribute-patterns 
> > > -fprefetch-loop-arrays -march=amdfam10 --param 
> > > simultaneous-prefetches=100 -fdump-tree-aprefetch-details 
> > > -fdump-tree-optimized" } */
> > >
> > >  #define K 1000000
> > >  int a[K], b[K];
> > > Index: gcc/testsuite/gcc.dg/tree-ssa/scev-11.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/tree-ssa/scev-11.c     (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/tree-ssa/scev-11.c     (working copy)
> > > @@ -15,7 +15,7 @@ foo (int n)
> > >      {
> > >        unsigned char uc = (unsigned char)i;
> > >        a[i] = i;
> > > -      b[uc] = 0;
> > > +      b[uc] = 1;
> > >      }
> > >
> > >    bar (a);
> > > Index: gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c        
> > > (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-31.c        
> > > (working copy)
> > > @@ -1,4 +1,5 @@
> > >  /* { dg-require-effective-target vect_int } */
> > > +/* { dg-additional-options "-fno-tree-loop-distribute-patterns" } */
> > >
> > >  #include <stdarg.h>
> > >  #include "../../tree-vect.h"
> > > Index: gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c        
> > > (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/vect/costmodel/i386/costmodel-vect-33.c        
> > > (working copy)
> > > @@ -1,5 +1,6 @@
> > >  /* { dg-do compile } */
> > >  /* { dg-require-effective-target vect_int } */
> > > +/* { dg-additional-options "-fno-tree-loop-distribute-patterns" } */
> > >
> > >  #include <stdarg.h>
> > >  #include "../../tree-vect.h"
> > > Index: gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c      
> > > (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-31.c      
> > > (working copy)
> > > @@ -1,4 +1,5 @@
> > >  /* { dg-require-effective-target vect_int } */
> > > +/* { dg-additional-options "-fno-tree-loop-distribute-patterns" } */
> > >
> > >  #include <stdarg.h>
> > >  #include "../../tree-vect.h"
> > > Index: gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c      
> > > (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/vect/costmodel/x86_64/costmodel-vect-33.c      
> > > (working copy)
> > > @@ -1,5 +1,6 @@
> > >  /* { dg-do compile } */
> > >  /* { dg-require-effective-target vect_int } */
> > > +/* { dg-additional-options "-fno-tree-loop-distribute-patterns" } */
> > >
> > >  #include <stdarg.h>
> > >  #include "../../tree-vect.h"
> > > Index: gcc/testsuite/gcc.dg/vect/vect.exp
> > > ===================================================================
> > > --- gcc/testsuite/gcc.dg/vect/vect.exp  (revision 271513)
> > > +++ gcc/testsuite/gcc.dg/vect/vect.exp  (working copy)
> > > @@ -45,7 +45,7 @@ if ![check_vect_support_and_set_flags] {
> > >  }
> > >
> > >  # These flags are used for all targets.
> > > -lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" 
> > > "-fno-common"
> > > +lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" 
> > > "-fno-tree-loop-distribute-patterns" "-fno-vect-cost-model" "-fno-common"
> > >
> > >  # Initialize `dg'.
> > >  dg-init
> > > Index: gcc/testsuite/gcc.target/i386/pr30970.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.target/i386/pr30970.c     (revision 271513)
> > > +++ gcc/testsuite/gcc.target/i386/pr30970.c     (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile }
> > > -/* { dg-options "-msse2 -O2 -ftree-vectorize -mtune=generic" } */
> > > +/* { dg-options "-msse2 -O2 -fno-tree-loop-distribute-patterns 
> > > -ftree-vectorize -mtune=generic" } */
> > >
> > >  #define N 256
> > >  int b[N];
> > > Index: gcc/testsuite/gcc.target/i386/vect-double-1.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.target/i386/vect-double-1.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.target/i386/vect-double-1.c       (working copy)
> > > @@ -1,6 +1,6 @@
> > >  /* { dg-do compile } */
> > >  /* { dg-skip-if "" { *-*-* } { "-march=*" } { "-march=core2" } } */
> > > -/* { dg-options "-O2 -ftree-vectorize -mfpmath=sse -march=core2 
> > > -fdump-tree-vect-stats" } */
> > > +/* { dg-options "-O2 -ftree-vectorize -fno-tree-loop-distribute-patterns 
> > > -mfpmath=sse -march=core2 -fdump-tree-vect-stats" } */
> > >  /* { dg-add-options bind_pic_locally } */
> > >
> > >  extern void abort (void);
> > > Index: gcc/testsuite/gcc.target/i386/vect-double-2.c
> > > ===================================================================
> > > --- gcc/testsuite/gcc.target/i386/vect-double-2.c       (revision 271513)
> > > +++ gcc/testsuite/gcc.target/i386/vect-double-2.c       (working copy)
> > > @@ -1,5 +1,5 @@
> > >  /* { dg-do compile } */
> > > -/* { dg-options "-O2 -ftree-vectorize -mfpmath=sse -msse2 -mtune=atom 
> > > -fdump-tree-vect-stats" } */
> > > +/* { dg-options "-O2 -ftree-vectorize -fno-tree-loop-distribute-patterns 
> > > -mfpmath=sse -msse2 -mtune=atom -fdump-tree-vect-stats" } */
> > >
> > >  extern void abort (void);
> > >
> > > Index: gcc/testsuite/gfortran.dg/vect/vect-5.f90
> > > ===================================================================
> > > --- gcc/testsuite/gfortran.dg/vect/vect-5.f90   (revision 271513)
> > > +++ gcc/testsuite/gfortran.dg/vect/vect-5.f90   (working copy)
> > > @@ -1,5 +1,5 @@
> > >  ! { dg-require-effective-target vect_int }
> > > -! { dg-additional-options "--param vect-max-peeling-for-alignment=0" }
> > > +! { dg-additional-options "-fno-tree-loop-distribute-patterns --param 
> > > vect-max-peeling-for-alignment=0" }
> > >
> > >          Subroutine foo (N, M)
> > >          Integer N
> > > Index: gcc/testsuite/gfortran.dg/vect/vect-8.f90
> > > ===================================================================
> > > --- gcc/testsuite/gfortran.dg/vect/vect-8.f90   (revision 271513)
> > > +++ gcc/testsuite/gfortran.dg/vect/vect-8.f90   (working copy)
> > > @@ -1,6 +1,6 @@
> > >  ! { dg-do compile }
> > >  ! { dg-require-effective-target vect_double }
> > > -! { dg-additional-options "-finline-matmul-limit=0" }
> > > +! { dg-additional-options "-fno-tree-loop-distribute-patterns 
> > > -finline-matmul-limit=0" }
> > >
> > >  module lfk_prec
> > >   integer, parameter :: dp=kind(1.d0)
> > > Index: gcc/tree-loop-distribution.c
> > > ===================================================================
> > > --- gcc/tree-loop-distribution.c        (revision 271513)
> > > +++ gcc/tree-loop-distribution.c        (working copy)
> > > @@ -115,6 +115,7 @@ along with GCC; see the file COPYING3.
> > >  #include "params.h"
> > >  #include "tree-vectorizer.h"
> > >  #include "tree-eh.h"
> > > +#include "gimple-fold.h"
> > >
> > >
> > >  #define MAX_DATAREFS_NUM \
> > > @@ -1028,6 +1029,7 @@ generate_memset_builtin (struct loop *lo
> > >    fn = build_fold_addr_expr (builtin_decl_implicit (BUILT_IN_MEMSET));
> > >    fn_call = gimple_build_call (fn, 3, mem, val, nb_bytes);
> > >    gsi_insert_after (&gsi, fn_call, GSI_CONTINUE_LINKING);
> > > +  fold_stmt (&gsi);
> > >
> > >    if (dump_file && (dump_flags & TDF_DETAILS))
> > >      {
> > > @@ -1071,6 +1073,7 @@ generate_memcpy_builtin (struct loop *lo
> > >    fn = build_fold_addr_expr (builtin_decl_implicit (kind));
> > >    fn_call = gimple_build_call (fn, 3, dest, src, nb_bytes);
> > >    gsi_insert_after (&gsi, fn_call, GSI_CONTINUE_LINKING);
> > > +  fold_stmt (&gsi);
> > >
> > >    if (dump_file && (dump_flags & TDF_DETAILS))
> > >      {
> > > @@ -2769,7 +2772,8 @@ finalize_partitions (struct loop *loop,
> > >
> > >  static int
> > >  distribute_loop (struct loop *loop, vec<gimple *> stmts,
> > > -                control_dependences *cd, int *nb_calls, bool *destroy_p)
> > > +                control_dependences *cd, int *nb_calls, bool *destroy_p,
> > > +                bool only_patterns_p)
> > >  {
> > >    ddrs_table = new hash_table<ddr_hasher> (389);
> > >    struct graph *rdg;
> > > @@ -2843,7 +2847,7 @@ distribute_loop (struct loop *loop, vec<
> > >
> > >    /* If we are only distributing patterns but did not detect any,
> > >       simply bail out.  */
> > > -  if (!flag_tree_loop_distribution
> > > +  if (only_patterns_p
> > >        && !any_builtin)
> > >      {
> > >        nbp = 0;
> > > @@ -2855,7 +2859,7 @@ distribute_loop (struct loop *loop, vec<
> > >       a loop into pieces, separated by builtin calls.  That is, we
> > >       only want no or a single loop body remaining.  */
> > >    struct partition *into;
> > > -  if (!flag_tree_loop_distribution)
> > > +  if (only_patterns_p)
> > >      {
> > >        for (i = 0; partitions.iterate (i, &into); ++i)
> > >         if (!partition_builtin_p (into))
> > > @@ -3085,7 +3089,6 @@ prepare_perfect_loop_nest (struct loop *
> > >          && loop_outer (outer)
> > >          && outer->inner == loop && loop->next == NULL
> > >          && single_exit (outer)
> > > -        && optimize_loop_for_speed_p (outer)
> > >          && !chrec_contains_symbols_defined_in_loop (niters, outer->num)
> > >          && (niters = number_of_latch_executions (outer)) != NULL_TREE
> > >          && niters != chrec_dont_know)
> > > @@ -3139,9 +3142,11 @@ pass_loop_distribution::execute (functio
> > >       walking to innermost loops.  */
> > >    FOR_EACH_LOOP (loop, LI_ONLY_INNERMOST)
> > >      {
> > > -      /* Don't distribute multiple exit edges loop, or cold loop.  */
> > > +      /* Don't distribute multiple exit edges loop, or cold loop when
> > > +         not doing pattern detection.  */
> > >        if (!single_exit (loop)
> > > -         || !optimize_loop_for_speed_p (loop))
> > > +         || (!flag_tree_loop_distribute_patterns
> > > +             && !optimize_loop_for_speed_p (loop)))
> > >         continue;
> > >
> > >        /* Don't distribute loop if niters is unknown.  */
> > > @@ -3169,9 +3174,10 @@ pass_loop_distribution::execute (functio
> > >
> > >           bool destroy_p;
> > >           int nb_generated_loops, nb_generated_calls;
> > > -         nb_generated_loops = distribute_loop (loop, work_list, cd,
> > > -                                               &nb_generated_calls,
> > > -                                               &destroy_p);
> > > +         nb_generated_loops
> > > +           = distribute_loop (loop, work_list, cd, &nb_generated_calls,
> > > +                              &destroy_p, (!optimize_loop_for_speed_p 
> > > (loop)
> > > +                                           || 
> > > !flag_tree_loop_distribution));
> > >           if (destroy_p)
> > >             loops_to_be_destroyed.safe_push (loop);
> > >
> >
>
> --
> Richard Biener <rguent...@suse.de>
> SUSE Linux GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany;
> GF: Felix Imendörffer, Mary Higgins, Sri Rasiah; HRB 21284 (AG Nürnberg)
gcc/testsuite/ChangeLog:

2019-05-27  Christophe Lyon  <christophe.l...@linaro.org>

        PR tree-optimization/88440
        gcc/testsuite/
        * gcc.target/aarch64/sve/index_offset_1.c: Add 
-fno-tree-loop-distribute-patterns.
        * gcc.target/aarch64/sve/single_1.c: Likewise.
        * gcc.target/aarch64/sve/single_2.c: Likewise.
        * gcc.target/aarch64/sve/single_3.c: Likewise.
        * gcc.target/aarch64/sve/single_4.c: Likewise.
        * gcc.target/aarch64/sve/vec_init_1.c: Likewise.
        * gcc.target/aarch64/vect-fmovd-zero.c: Likewise.
        * gcc.target/aarch64/vect-fmovf-zero.c: Likewise.
        * gcc.target/arm/ivopts.c: Likewise.

diff --git a/gcc/testsuite/gcc.target/aarch64/sve/index_offset_1.c 
b/gcc/testsuite/gcc.target/aarch64/sve/index_offset_1.c
index 31d46aa..a26be32 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/index_offset_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/index_offset_1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -msve-vector-bits=256" } */
+/* { dg-options "-O2 -ftree-vectorize -msve-vector-bits=256 
-fno-tree-loop-distribute-patterns" } */
 
 #define SIZE (15 * 8 + 3)
 
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/single_1.c 
b/gcc/testsuite/gcc.target/aarch64/sve/single_1.c
index 11b88ae..e3a8409 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/single_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/single_1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=256" } */
+/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=256 
-fno-tree-loop-distribute-patterns" } */
 
 #ifndef N
 #define N 32
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/single_2.c 
b/gcc/testsuite/gcc.target/aarch64/sve/single_2.c
index 1fbf489..195ee20 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/single_2.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/single_2.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=512" } */
+/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=512 
-fno-tree-loop-distribute-patterns" } */
 
 #define N 64
 #include "single_1.c"
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/single_3.c 
b/gcc/testsuite/gcc.target/aarch64/sve/single_3.c
index a3688b6..e031276 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/single_3.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/single_3.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=1024" } 
*/
+/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=1024 
-fno-tree-loop-distribute-patterns" } */
 
 #define N 128
 #include "single_1.c"
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/single_4.c 
b/gcc/testsuite/gcc.target/aarch64/sve/single_4.c
index 08965d3..01ff7f6 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/single_4.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/single_4.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=2048" } 
*/
+/* { dg-options "-O2 -ftree-vectorize -fopenmp-simd -msve-vector-bits=2048 
-fno-tree-loop-distribute-patterns" } */
 
 #define N 256
 #include "single_1.c"
diff --git a/gcc/testsuite/gcc.target/aarch64/sve/vec_init_1.c 
b/gcc/testsuite/gcc.target/aarch64/sve/vec_init_1.c
index 6042606..1624ab1 100644
--- a/gcc/testsuite/gcc.target/aarch64/sve/vec_init_1.c
+++ b/gcc/testsuite/gcc.target/aarch64/sve/vec_init_1.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize" } */
+/* { dg-options "-O2 -ftree-vectorize -fno-tree-loop-distribute-patterns" } */
 
 #include <stdint.h>
 
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c 
b/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
index c987f5f..a51aa33 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all 
-fno-vect-cost-model" } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all 
-fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */
 
 #pragma GCC target "+nosve"
 
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c 
b/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
index 22a0535..8dfd26b 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all 
-fno-vect-cost-model" } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all 
-fno-vect-cost-model -fno-tree-loop-distribute-patterns" } */
 
 #pragma GCC target "+nosve"
 
diff --git a/gcc/testsuite/gcc.target/arm/ivopts.c 
b/gcc/testsuite/gcc.target/arm/ivopts.c
index 2bb6cc4..5d27240 100644
--- a/gcc/testsuite/gcc.target/arm/ivopts.c
+++ b/gcc/testsuite/gcc.target/arm/ivopts.c
@@ -1,5 +1,5 @@
 /* { dg-do assemble } */
-/* { dg-options "-Os -fdump-tree-ivopts -save-temps" } */
+/* { dg-options "-Os -fdump-tree-ivopts -save-temps 
-fno-tree-loop-distribute-patterns" } */
 
 void
 tr5 (short array[], int n)

Reply via email to