aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-02-29 13:24:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-02-29 13:24:24 +0000
commitcbd400b43e4068a886b7297e4da8599732ef6813 (patch)
tree2a9b0dc37c8942a6016ffe80bb8af16473ed8e6a /gcc
parent84ea0f58505179d38b083f1df788adc7a4597629 (diff)
downloadgcc-cbd400b43e4068a886b7297e4da8599732ef6813.zip
gcc-cbd400b43e4068a886b7297e4da8599732ef6813.tar.gz
gcc-cbd400b43e4068a886b7297e4da8599732ef6813.tar.bz2
re PR tree-optimization/69980 (Supposedly wrong SLP code emitted)
2016-02-19 Richard Biener <rguenther@suse.de> PR tree-optimization/69980 * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Update permutation of those we need to keep. * gfortran.dg/vect/pr69980.f90: New testcase. From-SVN: r233809
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr69980.f9040
-rw-r--r--gcc/tree-vect-slp.c3
4 files changed, 54 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3edc42e..b9bde65 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-02-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69980
+ * tree-vect-slp.c (vect_attempt_slp_rearrange_stmts): Update
+ permutation of those we need to keep.
+
2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
PR target/69706
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e5ec39c..654ba38 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-19 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69980
+ * gfortran.dg/vect/pr69980.f90: New testcase.
+
2016-02-29 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/sparc/20160229-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/vect/pr69980.f90 b/gcc/testsuite/gfortran.dg/vect/pr69980.f90
new file mode 100644
index 0000000..8a20b98
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/pr69980.f90
@@ -0,0 +1,40 @@
+! { dg-do run }
+! { dg-additional-options "-Ofast -fno-inline" }
+
+subroutine check (a, b)
+ real *8, intent(in) :: a(4), b(4)
+
+ IF (abs(a(1)-b(1)) > 1) THEN
+ CALL ABORT
+ END IF
+end subroutine check
+
+program main
+ real *8 :: mu(4,26), mumax(4), mumax2(4)
+
+ integer :: i, k
+
+ do k=1,26
+ do i=1,4
+ mu(i, k) = 4*(i-1) + k
+ end do
+ end do
+
+ mumax = 0;
+ do k=1,26
+ do i=1,3
+ mumax(i) = max(mumax(i), mu(i,k)+mu(i,k))
+ end do
+ end do
+
+ mumax2 = 0;
+ do i=1,3
+ do k=1,26
+ mumax2(i) = max(mumax2(i), mu(i,k)+mu(i,k))
+ end do
+ end do
+
+ CALL check (mumax, mumax2)
+
+ return
+end program
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 988ec10..d713848 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1343,6 +1343,9 @@ vect_attempt_slp_rearrange_stmts (slp_instance slp_instn)
|| (group_size == GROUP_SIZE (vinfo_for_stmt (first_stmt))
&& GROUP_GAP (vinfo_for_stmt (first_stmt)) == 0))
SLP_TREE_LOAD_PERMUTATION (node).release ();
+ else
+ for (j = 0; j < SLP_TREE_LOAD_PERMUTATION (node).length (); ++j)
+ SLP_TREE_LOAD_PERMUTATION (node)[j] = j;
}
return true;