+2019-01-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/88934
+ * tree-vect-slp.c (vect_mask_constant_operand_p): Always look
+ at the possibly non-constant operand.
+ (vect_get_constant_vectors): Adjust.
+
2019-01-21 H.J. Lu <hongjiu.lu@intel.com>
PR target/71659
+2019-01-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/88934
+ * gfortran.dg/pr88934.f90: New testcase.
+
2019-01-20 Ulrich Drepper <drepper@redhat.com>
Fix after C++ P0600 implementation.
--- /dev/null
+! { dg-do compile }
+! { dg-options "-O -ftree-vectorize" }
+! { dg-additional-options "-mvsx" { target powerpc*-*-* } }
+integer, parameter :: a=3
+ integer , dimension(a,a) :: b
+ logical, dimension(a,a) :: c
+ do i=0,1
+ b = ltoi(c)
+ do j=0,if
+ if (anymatmul(b) /= 0) then
+ end if
+ end do
+ end do
+contains
+ elemental function ltoi(d)
+ logical, intent(in) :: d
+ if (d) then
+ ltoi = 1
+ else
+ ltoi = 0
+ end if
+ end
+end
}
-/* Return 1 if vector type of boolean constant which is OPNUM
- operand in statement STMT_VINFO is a boolean vector. */
+/* Return 1 if vector type STMT_VINFO is a boolean vector. */
static bool
-vect_mask_constant_operand_p (stmt_vec_info stmt_vinfo, int opnum)
+vect_mask_constant_operand_p (stmt_vec_info stmt_vinfo)
{
enum tree_code code = gimple_expr_code (stmt_vinfo->stmt);
tree op, vectype;
enum vect_def_type dt;
/* For comparison and COND_EXPR type is chosen depending
- on the other comparison operand. */
+ on the non-constant other comparison operand. */
if (TREE_CODE_CLASS (code) == tcc_comparison)
{
gassign *stmt = as_a <gassign *> (stmt_vinfo->stmt);
- if (opnum)
- op = gimple_assign_rhs1 (stmt);
- else
- op = gimple_assign_rhs2 (stmt);
+ op = gimple_assign_rhs1 (stmt);
if (!vect_is_simple_use (op, stmt_vinfo->vinfo, &dt, &vectype))
gcc_unreachable ();
if (TREE_CODE (cond) == SSA_NAME)
op = cond;
- else if (opnum)
- op = TREE_OPERAND (cond, 1);
else
op = TREE_OPERAND (cond, 0);
/* Check if vector type is a boolean vector. */
if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op))
- && vect_mask_constant_operand_p (stmt_vinfo, op_num))
+ && vect_mask_constant_operand_p (stmt_vinfo))
vector_type
= build_same_sized_truth_vector_type (STMT_VINFO_VECTYPE (stmt_vinfo));
else