+2019-10-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/92205
+ * tree-vect-loop.c (vectorizable_reduction): Restrict
+ search for alternate vectype_in to lane-reducing patterns
+ we support.
+
2019-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/92203
+2019-10-24 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/92205
+ * gcc.dg/vect/pr92205.c: New testcase.
+
2019-10-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/92203
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_int } */
+
+int b(int n, unsigned char *a)
+{
+ int d = 0;
+ a = __builtin_assume_aligned (a, __BIGGEST_ALIGNMENT__);
+ for (int c = 0; c < n; ++c)
+ d |= a[c];
+ return d;
+}
+
+/* { dg-final { scan-tree-dump "vectorized 1 loops" "vect" { target { vect_unpack && { ! vect_no_bitwise } } } } } */
gassign *stmt = as_a <gassign *> (stmt_info->stmt);
enum tree_code code = gimple_assign_rhs_code (stmt);
+ bool lane_reduc_code_p
+ = (code == DOT_PROD_EXPR || code == WIDEN_SUM_EXPR || code == SAD_EXPR);
int op_type = TREE_CODE_LENGTH (code);
scalar_dest = gimple_assign_lhs (stmt);
return false;
/* To properly compute ncopies we are interested in the widest
- input type in case we're looking at a widening accumulation. */
- if (tem
+ non-reduction input type in case we're looking at a widening
+ accumulation that we later handle in vect_transform_reduction. */
+ if (lane_reduc_code_p
+ && tem
&& (!vectype_in
|| (GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (vectype_in)))
< GET_MODE_SIZE (SCALAR_TYPE_MODE (TREE_TYPE (tem))))))
&& vect_stmt_to_vectorize (use_stmt_info) == stmt_info)
single_defuse_cycle = true;
- bool lane_reduc_code_p
- = (code == DOT_PROD_EXPR || code == WIDEN_SUM_EXPR || code == SAD_EXPR);
if (single_defuse_cycle || lane_reduc_code_p)
{
gcc_assert (code != COND_EXPR);