Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2019-12-02  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/92742
        * tree-vect-loop.c (vect_fixup_reduc_chain): Do not
        touch the def-type but verify it is consistent with the
        original stmts.

        * gcc.dg/torture/pr92742.c: New testcase.

Index: gcc/tree-vect-loop.c
===================================================================
--- gcc/tree-vect-loop.c        (revision 278893)
+++ gcc/tree-vect-loop.c        (working copy)
@@ -643,6 +643,8 @@ vect_fixup_reduc_chain (stmt_vec_info st
   do
     {
       stmtp = STMT_VINFO_RELATED_STMT (stmt_info);
+      gcc_checking_assert (STMT_VINFO_DEF_TYPE (stmtp)
+                          == STMT_VINFO_DEF_TYPE (stmt_info));
       REDUC_GROUP_FIRST_ELEMENT (stmtp) = firstp;
       stmt_info = REDUC_GROUP_NEXT_ELEMENT (stmt_info);
       if (stmt_info)
@@ -650,7 +652,6 @@ vect_fixup_reduc_chain (stmt_vec_info st
          = STMT_VINFO_RELATED_STMT (stmt_info);
     }
   while (stmt_info);
-  STMT_VINFO_DEF_TYPE (stmtp) = vect_reduction_def;
 }
 
 /* Fixup scalar cycles that now have their stmts detected as patterns.  */
Index: gcc/testsuite/gcc.dg/torture/pr92742.c
===================================================================
--- gcc/testsuite/gcc.dg/torture/pr92742.c      (nonexistent)
+++ gcc/testsuite/gcc.dg/torture/pr92742.c      (working copy)
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-ftree-vectorize" } */
+
+unsigned int qw;
+
+int
+rs (int iq, int wg)
+{
+  for (qw = 0; qw < 2; ++qw)
+    {
+    }
+
+  while (iq < 1)
+    {
+      wg *= qw * 2;
+      ++iq;
+    }
+
+  return wg;
+}

Reply via email to