--- /dev/null
+! { dg-do compile }
+! { dg-additional-options "-O3" }
+! { dg-additional-options "-march=armv8.3-a" { target aarch64-*-* } }
+subroutine sub_c
+ complex, dimension(2,3) :: at
+ complex, dimension(2,4) :: b
+ complex, dimension(3,4) :: c
+ data b / (41., 43.), 0, 0, 0, 0, 0, 0, 0/
+ c = matmul(transpose(at), b)
+ if (any (c /= cres)) stop
+end subroutine sub_c
{
if (dump_enabled_p ())
dump_printf_loc (MSG_NOTE, vect_location,
- "Failed cyclic SLP reference in %p", node);
+ "Failed cyclic SLP reference in %p\n", node);
return false;
}
gcc_assert (SLP_TREE_DEF_TYPE (node) == vect_internal_def);
bool res = true;
unsigned visited_rec_start = visited_vec.length ();
unsigned cost_vec_rec_start = cost_vec->length ();
+ bool seen_non_constant_child = false;
FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
{
res = vect_slp_analyze_node_operations (vinfo, child, node_instance,
cost_vec);
if (!res)
break;
+ if (child && SLP_TREE_DEF_TYPE (child) != vect_constant_def)
+ seen_non_constant_child = true;
+ }
+ /* We're having difficulties scheduling nodes with just constant
+ operands and no scalar stmts since we then cannot compute a stmt
+ insertion place. */
+ if (!seen_non_constant_child && SLP_TREE_SCALAR_STMTS (node).is_empty ())
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "Cannot vectorize all-constant op node %p\n", node);
+ res = false;
}
if (res)