diff mbox series

Fix PR92205

Message ID nycvar.YFH.7.76.1910241410080.5566@zhemvz.fhfr.qr
State New
Headers show
Series Fix PR92205 | expand

Commit Message

Richard Biener Oct. 24, 2019, 12:10 p.m. UTC
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

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.

	* gcc.dg/vect/pr92205.c: New testcase.
diff mbox series

Patch

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	(revision 277365)
+++ gcc/tree-vect-loop.c	(working copy)
@@ -5697,6 +5697,8 @@  vectorizable_reduction (stmt_vec_info st
 
   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);
@@ -5749,8 +5751,10 @@  vectorizable_reduction (stmt_vec_info st
 	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))))))
@@ -6233,8 +6237,6 @@  vectorizable_reduction (stmt_vec_info st
       && 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);
Index: gcc/testsuite/gcc.dg/vect/pr92205.c
===================================================================
--- gcc/testsuite/gcc.dg/vect/pr92205.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/vect/pr92205.c	(working copy)
@@ -0,0 +1,13 @@ 
+/* { 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 } } } } } */