aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-06-21 11:10:39 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-06-21 11:10:39 +0000
commitb614fca25fac28542b8c6b2df3862688b96e0581 (patch)
tree9ec3e5ea0e446cb2f85234f12ac00415409b28be /gcc
parent1612b1febdd5b6b6ad17c96c980a218bfd40c025 (diff)
downloadgcc-b614fca25fac28542b8c6b2df3862688b96e0581.zip
gcc-b614fca25fac28542b8c6b2df3862688b96e0581.tar.gz
gcc-b614fca25fac28542b8c6b2df3862688b96e0581.tar.bz2
re PR tree-optimization/90913 (ICE in maybe_gen_insn, at optabs.c:7341 since r272239)
2019-06-21 Richard Biener <rguenther@suse.de> PR tree-optimization/90913 * tree-vect-loop-manip.c (vect_loop_versioning): Do not re-use the scalar variant of if-conversion versioning. * gfortran.dg/vect/pr90913.f90: New testcase. From-SVN: r272545
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/vect/pr90913.f9022
-rw-r--r--gcc/tree-vect-loop-manip.c7
4 files changed, 38 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3a6b86b..0c75a0f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-06-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/90913
+ * tree-vect-loop-manip.c (vect_loop_versioning): Do not re-use
+ the scalar variant of if-conversion versioning.
+
2019-06-21 Jakub Jelinek <jakub@redhat.com>
* omp-low.c (lower_rec_simd_input_clauses): Add rvar2 argument,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c5bb450..8181bcd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-06-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/90913
+ * gfortran.dg/vect/pr90913.f90: New testcase.
+
2019-06-21 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/vect/vect-simd-12.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/vect/pr90913.f90 b/gcc/testsuite/gfortran.dg/vect/pr90913.f90
new file mode 100644
index 0000000..d0f2251
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/vect/pr90913.f90
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! { dg-options "-O3 -ffast-math" }
+! { dg-additional-options "-mavx -mveclibabi=svml" { target i?86-*-* x86_64-*-* } }
+subroutine foo (a, b, c, d, e, f, g, h, k, l)
+ implicit none
+ integer :: d, e, f, g, i, j
+ real :: a, b(5,6), c(6), h(6,10,5), k(5,10,2), l(10,5), m, n, o
+ do i=1,5
+ do j=1,6
+ m=l(f,g)*log(c(j))
+ if (m<2) then
+ if (m<-2) then
+ h(j,f,g)=n
+ else
+ h(j,f,g)=o
+ endif
+ endif
+ b(i,j)=a+k(i,d,e)+k(i,1,e)**h(j,f,g)
+ enddo
+ enddo
+ write(*,'()')
+end
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 9cf1d48..c5cabc8 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -3095,9 +3095,12 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
}
/* Apply versioning. If there is already a scalar version created by
- if-conversion re-use that. */
+ if-conversion re-use that. Note we cannot re-use the copy of
+ an if-converted outer-loop when vectorizing the inner loop only. */
gcond *cond;
- if (gimple *call = vect_loop_vectorized_call (loop_to_version, &cond))
+ gimple *call;
+ if ((!loop_to_version->inner || loop == loop_to_version)
+ && (call = vect_loop_vectorized_call (loop_to_version, &cond)))
{
gcc_assert (scalar_loop);
condition_bb = gimple_bb (cond);