diff mbox series

Fix PR82473

Message ID alpine.LSU.2.20.1710201250080.8202@zhemvz.fhfr.qr
State New
Headers show
Series Fix PR82473 | expand

Commit Message

Richard Biener Oct. 20, 2017, 10:51 a.m. UTC
The following fixes PR82473 - we were using a random (the first
non-reduction) operand of the reduction stmt to compute ncopies
but that's of course wrong.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2017-10-20  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/82473
	* tree-vect-loop.c (vectorizable_reduction): Properly get at
	the largest input type.

	* gcc.dg/torture/pr82473.c: New testcase.
diff mbox series

Patch

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c	(revision 253926)
+++ gcc/tree-vect-loop.c	(working copy)
@@ -5836,9 +5836,12 @@  vectorizable_reduction (gimple *stmt, gi
 	  reduc_index = i;
 	  continue;
 	}
-      else
+      else if (tem)
 	{
-	  if (!vectype_in)
+	  /* To properly compute ncopies we are interested in the widest
+	     input type in case we're looking at a widening accumulation.  */
+	  if (!vectype_in
+	      || TYPE_VECTOR_SUBPARTS (vectype_in) > TYPE_VECTOR_SUBPARTS (tem))
 	    vectype_in = tem;
 	}
 
Index: gcc/testsuite/gcc.dg/torture/pr82473.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr82473.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr82473.c	(working copy)
@@ -0,0 +1,22 @@ 
+/* { dg-do compile } */
+/* { dg-additional-options "-ftree-vectorize" } */
+
+void
+zz (int x9, short int gt)
+{
+  if (0)
+    {
+      while (gt < 1)
+	{
+	  int pz;
+
+k6:
+	  for (pz = 0; pz < 3; ++pz)
+	    x9 += gt;
+	  ++gt;
+	}
+    }
+
+  if (x9 != 0)
+    goto k6;
+}