aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr85863.f22
-rw-r--r--gcc/tree-vect-stmts.c4
4 files changed, 37 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cec2892..c3ecb0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-05-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/85863
+ * tree-vect-stmts.c (vect_is_simple_cond): Only widen invariant
+ comparisons when vectype is specified.
+ (vectorizable_condition): Do not specify vectype for
+ vect_is_simple_cond when SLP vectorizing.
+
2018-05-21 Michael Meissner <meissner@linux.ibm.com>
PR target/85657
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b903b58..939702c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-05-22 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/85863
+ * gfortran.fortran-torture/compile/pr85863.f: New testcase.
+
2018-05-22 Janus Weil <janus@gcc.gnu.org>
PR fortran/85841
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr85863.f b/gcc/testsuite/gfortran.fortran-torture/compile/pr85863.f
new file mode 100644
index 0000000..57673fd
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr85863.f
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! { dg-additional-options "-ffast-math -ftree-vectorize" }
+ SUBROUTINE SOBOOK(MHSO,HSOMAX,MS)
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ COMPLEX*16 HSOT,HSO1(2)
+ PARAMETER (ZERO=0.0D+00,TWO=2.0D+00)
+ DIMENSION SOL1(3,2),SOL2(3)
+ CALL FOO(SOL1,SOL2)
+ SQRT2=SQRT(TWO)
+ DO IH=1,MHSO
+ IF(MS.EQ.0) THEN
+ HSO1(IH) = DCMPLX(ZERO,-SOL1(3,IH))
+ HSOT = DCMPLX(ZERO,-SOL2(3))
+ ELSE
+ HSO1(IH) = DCMPLX(-SOL1(2,IH),SOL1(1,IH))/SQRT2
+ HSOT = DCMPLX(-SOL2(2),SOL2(1))/SQRT2
+ ENDIF
+ ENDDO
+ HSOT=HSOT+HSO1(1)
+ HSOMAX=MAX(HSOMAX,ABS(HSOT))
+ RETURN
+ END
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 4539f6a..169d8c0 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -8661,7 +8661,7 @@ vect_is_simple_cond (tree cond, vec_info *vinfo,
*comp_vectype = vectype1 ? vectype1 : vectype2;
/* Invariant comparison. */
- if (! *comp_vectype)
+ if (! *comp_vectype && vectype)
{
tree scalar_type = TREE_TYPE (lhs);
/* If we can widen the comparison to match vectype do so. */
@@ -8773,7 +8773,7 @@ vectorizable_condition (gimple *stmt, gimple_stmt_iterator *gsi,
else_clause = gimple_assign_rhs3 (stmt);
if (!vect_is_simple_cond (cond_expr, stmt_info->vinfo,
- &comp_vectype, &dts[0], vectype)
+ &comp_vectype, &dts[0], slp_node ? NULL : vectype)
|| !comp_vectype)
return false;