From: rguenth Date: Mon, 7 Oct 2019 07:53:45 +0000 (+0000) Subject: 2019-10-07 Richard Biener X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=446e879d405c5ae2ff84edef164d14d379117348;p=thirdparty%2Fgcc.git 2019-10-07 Richard Biener PR tree-optimization/91975 * tree-ssa-loop-ivcanon.c (constant_after_peeling): Consistently handle invariants. * g++.dg/tree-ssa/ivopts-3.C: Adjust. * gcc.dg/vect/vect-profile-1.c: Disable cunrolli. * gcc.dg/vect/vect-double-reduc-6.c: Disable unrolling of the innermost loop. * gcc.dg/vect/vect-93.c: Likewise. * gcc.dg/vect/vect-105.c: Likewise. * gcc.dg/vect/pr79920.c: Likewise. * gcc.dg/vect/no-vfa-vect-102.c: Likewise. * gcc.dg/vect/no-vfa-vect-101.c: Likewise. * gcc.dg/vect/pr83202-1.c: Operate on a larger array. * gfortran.dg/vect/vect-8.f90: Likewise. * gcc.dg/tree-ssa/cunroll-2.c: Scan early unrolling dump instead of late one. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@276645 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4b7cb0e59246..ef1eb5973cc8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-10-07 Richard Biener + + PR tree-optimization/91975 + * tree-ssa-loop-ivcanon.c (constant_after_peeling): Consistently + handle invariants. + 2019-10-06 Richard Sandiford * var-tracking.c (dataflow_set_clear_at_call): Hoist temporary diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2c7d62a5f664..e8e006061ece 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,20 @@ +2019-10-07 Richard Biener + + PR tree-optimization/91975 + * g++.dg/tree-ssa/ivopts-3.C: Adjust. + * gcc.dg/vect/vect-profile-1.c: Disable cunrolli. + * gcc.dg/vect/vect-double-reduc-6.c: Disable unrolling of + the innermost loop. + * gcc.dg/vect/vect-93.c: Likewise. + * gcc.dg/vect/vect-105.c: Likewise. + * gcc.dg/vect/pr79920.c: Likewise. + * gcc.dg/vect/no-vfa-vect-102.c: Likewise. + * gcc.dg/vect/no-vfa-vect-101.c: Likewise. + * gcc.dg/vect/pr83202-1.c: Operate on a larger array. + * gfortran.dg/vect/vect-8.f90: Likewise. + * gcc.dg/tree-ssa/cunroll-2.c: Scan early unrolling dump instead + of late one. + 2019-10-05 Steven G. Kargl PR fortran/47045 diff --git a/gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C b/gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C index 07ff1b770f87..6760a5b18517 100644 --- a/gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C +++ b/gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C @@ -70,6 +70,8 @@ int main ( int , char** ) { return 0; } -// Verify that on x86_64 and i?86 we use a single IV for the innermost loop +// Verify that on x86_64 and i?86 we unroll the innsermost loop and +// use three IVs for the then innermost loop -// { dg-final { scan-tree-dump "Selected IV set for loop \[0-9\]* at \[^ \]*:64, 3 avg niters, 1 IVs" "ivopts" { target x86_64-*-* i?86-*-* } } } +// { dg-final { scan-tree-dump "Selected IV set for loop \[0-9\]* at \[^ \]*:63, 127 avg niters, 3 IVs" "ivopts" { target x86_64-*-* i?86-*-* } } } +// { dg-final { scan-tree-dump-not "Selected IV set for loop \[0-9\]* at \[^ \]*:64" "ivopts" { target x86_64-*-* i?86-*-* } } } diff --git a/gcc/testsuite/gcc.dg/tree-ssa/cunroll-2.c b/gcc/testsuite/gcc.dg/tree-ssa/cunroll-2.c index b1d1c7d3d852..ae3fec997497 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/cunroll-2.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/cunroll-2.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -fdump-tree-cunroll-details" } */ +/* { dg-options "-O3 -fdump-tree-cunrolli-details" } */ int a[2]; int test2 (void); void @@ -14,4 +14,4 @@ test(int c) } } /* We are not able to get rid of the final conditional because the loop has two exits. */ -/* { dg-final { scan-tree-dump "loop with 1 iterations completely unrolled" "cunroll"} } */ +/* { dg-final { scan-tree-dump "loop with 2 iterations completely unrolled" "cunrolli"} } */ diff --git a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c index 91eb28218bd1..ce934279ddfe 100644 --- a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c +++ b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c @@ -22,6 +22,7 @@ int main1 (int x, int y) { p = (struct extraction *) malloc (sizeof (struct extraction)); /* Not vectorizable: different unknown offset. */ +#pragma GCC unroll 0 for (i = 0; i < N; i++) { *((int *)p + x + i) = a[i]; diff --git a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c index 51f62788dbfd..d9e0529e73f0 100644 --- a/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c +++ b/gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c @@ -28,6 +28,7 @@ int main1 (int x, int y) { } /* Not vectorizable: distance 1. */ +#pragma GCC unroll 0 for (i = 0; i < N - 1; i++) { *((int *)p + x + i + 1) = *((int *)p + x + i); diff --git a/gcc/testsuite/gcc.dg/vect/pr79920.c b/gcc/testsuite/gcc.dg/vect/pr79920.c index 276a2806f0c4..38e0fef779a0 100644 --- a/gcc/testsuite/gcc.dg/vect/pr79920.c +++ b/gcc/testsuite/gcc.dg/vect/pr79920.c @@ -14,6 +14,7 @@ compute_integral (double w_1[18]) for (int ip_1 = 0; ip_1 < 2; ++ip_1) { +#pragma GCC unroll 0 for (int i_0 = 0; i_0 < 6; ++i_0) t33[ip_1][i_0] = ((w_1[i_0*3] * t32[ip_1][0]) + (w_1[i_0*3+2] * t32[ip_1][2])); diff --git a/gcc/testsuite/gcc.dg/vect/pr83202-1.c b/gcc/testsuite/gcc.dg/vect/pr83202-1.c index 33c83de29b87..ac12f079839b 100644 --- a/gcc/testsuite/gcc.dg/vect/pr83202-1.c +++ b/gcc/testsuite/gcc.dg/vect/pr83202-1.c @@ -1,9 +1,9 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_double } */ -void test(double data[8][8]) +void test(double data[16][16]) { - for (int i = 0; i < 8; i++) + for (int i = 0; i < 16; i++) { for (int j = 0; j < i; j+=4) { diff --git a/gcc/testsuite/gcc.dg/vect/vect-105.c b/gcc/testsuite/gcc.dg/vect/vect-105.c index 0024457f9e27..17b6e89d8f69 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-105.c +++ b/gcc/testsuite/gcc.dg/vect/vect-105.c @@ -35,6 +35,7 @@ int main1 (int x) { /* Vectorizable: distance > number of iterations. */ for (i = 1; i < N; i++) { +#pragma GCC unroll 0 for (j = 0; j < N; j++) { *((int *)p + x + i + j) = *((int *)p + x + i + j + 5); diff --git a/gcc/testsuite/gcc.dg/vect/vect-93.c b/gcc/testsuite/gcc.dg/vect/vect-93.c index 397c2ed05aae..c3e12783b2c4 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-93.c +++ b/gcc/testsuite/gcc.dg/vect/vect-93.c @@ -29,6 +29,7 @@ main1 (float *pa) abort (); } +#pragma GCC unroll 0 for (i = 1; i <= N2; i++) { pa[i] = 3.0; diff --git a/gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c b/gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c index 3a4f087da81d..85aec1bf6095 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c +++ b/gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c @@ -19,6 +19,7 @@ foo () { sum = 1; for (j = 0; j < K; j++) +#pragma GCC unroll 0 for (i = 0; i < K; i++) sum *= in[i+k][j]; out[k] = sum; diff --git a/gcc/testsuite/gcc.dg/vect/vect-profile-1.c b/gcc/testsuite/gcc.dg/vect/vect-profile-1.c index 93d7ad131475..922f965806f9 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-profile-1.c +++ b/gcc/testsuite/gcc.dg/vect/vect-profile-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_int } */ -/* { dg-additional-options "-fdump-tree-vect-details-blocks" } */ +/* { dg-additional-options "-fdump-tree-vect-details-blocks -fdisable-tree-cunrolli" } */ /* At least one of these should correspond to a full vector. */ diff --git a/gcc/testsuite/gfortran.dg/vect/vect-8.f90 b/gcc/testsuite/gfortran.dg/vect/vect-8.f90 index e26cdf95e515..386f7de4a7e4 100644 --- a/gcc/testsuite/gfortran.dg/vect/vect-8.f90 +++ b/gcc/testsuite/gfortran.dg/vect/vect-8.f90 @@ -247,7 +247,7 @@ nl1= 1 nl2= 2 fw= 2.000D0 DO ky= 2,n -DO kx= 2,3 +DO kx= 2,4 du1ky= u1(kx,ky+1,nl1)-u1(kx,ky-1,nl1) du2ky= u2(kx,ky+1,nl1)-u2(kx,ky-1,nl1) du3ky= u3(kx,ky+1,nl1)-u3(kx,ky-1,nl1) diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 5952cad7bba7..d38959c3aa2b 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -195,9 +195,8 @@ constant_after_peeling (tree op, gimple *stmt, class loop *loop) /* Induction variables are constants when defined in loop. */ if (loop_containing_stmt (stmt) != loop) return false; - tree ev = analyze_scalar_evolution (loop, op); - if (chrec_contains_undetermined (ev) - || chrec_contains_symbols (ev)) + tree ev = instantiate_parameters (loop, analyze_scalar_evolution (loop, op)); + if (chrec_contains_undetermined (ev)) return false; return true; }