diff options
author | Richard Biener <rguenther@suse.de> | 2016-02-29 13:24:24 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-02-29 13:24:24 +0000 |
commit | cbd400b43e4068a886b7297e4da8599732ef6813 (patch) | |
tree | 2a9b0dc37c8942a6016ffe80bb8af16473ed8e6a /gcc | |
parent | 84ea0f58505179d38b083f1df788adc7a4597629 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/vect/pr69980.f90 | 40 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 3 |
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; |