aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-10-07 07:53:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-10-07 07:53:45 +0000
commit806bdf4e40d31cf55744c876eb9f17654de36b99 (patch)
tree6dc6ccd9075dc7a84dfda6fb6ba4c80c1786f6b9 /gcc
parent3e1f7c33aeaf33ca532fbef745bb4ab1e3b0aa3f (diff)
downloadgcc-806bdf4e40d31cf55744c876eb9f17654de36b99.zip
gcc-806bdf4e40d31cf55744c876eb9f17654de36b99.tar.gz
gcc-806bdf4e40d31cf55744c876eb9f17654de36b99.tar.bz2
re PR tree-optimization/91975 (worse code for small array copy using pointer arithmetic than array indexing)
2019-10-07 Richard Biener <rguenther@suse.de> 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. From-SVN: r276645
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog17
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/ivopts-3.C6
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/cunroll-2.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-vfa-vect-101.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/no-vfa-vect-102.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr79920.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr83202-1.c4
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-105.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-93.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-double-reduc-6.c1
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-profile-1.c2
-rw-r--r--gcc/testsuite/gfortran.dg/vect/vect-8.f902
-rw-r--r--gcc/tree-ssa-loop-ivcanon.c5
14 files changed, 41 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4b7cb0e..ef1eb59 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-10-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/91975
+ * tree-ssa-loop-ivcanon.c (constant_after_peeling): Consistently
+ handle invariants.
+
2019-10-06 Richard Sandiford <richard.sandiford@arm.com>
* var-tracking.c (dataflow_set_clear_at_call): Hoist temporary
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2c7d62a..e8e0060 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,20 @@
+2019-10-07 Richard Biener <rguenther@suse.de>
+
+ 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 <kargl@gcc.gnu.org>
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 07ff1b7..6760a5b 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 b1d1c7d..ae3fec9 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 91eb282..ce93427 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 51f6278..d9e0529 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 276a280..38e0fef 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 33c83de..ac12f07 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 0024457..17b6e89 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 397c2ed..c3e1278 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 3a4f087..85aec1b 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 93d7ad1..922f965 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 e26cdf9..386f7de 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 5952cad..d38959c 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;
}