re PR tree-optimization/92555 (ICE in exact_div, at poly-int.h:2162)
authorRichard Biener <rguenther@suse.de>
Tue, 19 Nov 2019 07:31:28 +0000 (07:31 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 19 Nov 2019 07:31:28 +0000 (07:31 +0000)
2019-09-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/92555
* tree-vect-loop.c (vect_update_vf_for_slp): Also scan PHIs
for non-SLP stmts.

* gcc.dg/vect/pr92555.c: New testcase.

From-SVN: r278430

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/pr92555.c [new file with mode: 0644]
gcc/tree-vect-loop.c

index ab841a228cb99e5cd7f061c99fc5615ff1263e27..98f5c2fc49c38d078f85efb65e4dab689cb625ae 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/92555
+       * tree-vect-loop.c (vect_update_vf_for_slp): Also scan PHIs
+       for non-SLP stmts.
+
 2019-11-19  Martin Liska  <mliska@suse.cz>
 
        PR bootstrap/92540
index d258749ef5b544e4d63aed0fb269afe4b4963f8f..05f38c2acd2c14da3711fce183e38c901f6e621d 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-19  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/92555
+       * gcc.dg/vect/pr92555.c: New testcase.
+
 2019-11-19  Joseph Myers  <joseph@codesourcery.com>
 
        * gcc.dg/c2x-attr-fallthrough-5.c, gcc.dg/c2x-attr-syntax-5.c: New
diff --git a/gcc/testsuite/gcc.dg/vect/pr92555.c b/gcc/testsuite/gcc.dg/vect/pr92555.c
new file mode 100644 (file)
index 0000000..b174e1c
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-fwrapv" } */
+
+signed char rq;
+
+signed char
+pu (int tr, int al)
+{
+  signed char x8;
+
+  while (tr != 0)
+    {
+      for (x8 = 0; x8 >= 0; x8 += 2)
+        ;
+
+      rq ^= al ^ 1;
+      ++x8;
+      ++tr;
+    }
+
+  return x8;
+}
index 02e6bfb9e5d5cbe2ea1cbc65feba4a381717daf5..5ca6b551598fe7f0cffb380921b4ef3f6269ad89 100644 (file)
@@ -1398,6 +1398,18 @@ vect_update_vf_for_slp (loop_vec_info loop_vinfo)
   for (i = 0; i < nbbs; i++)
     {
       basic_block bb = bbs[i];
+      for (gphi_iterator si = gsi_start_phis (bb); !gsi_end_p (si);
+          gsi_next (&si))
+       {
+         stmt_vec_info stmt_info = loop_vinfo->lookup_stmt (si.phi ());
+         if (!stmt_info)
+           continue;
+         if ((STMT_VINFO_RELEVANT_P (stmt_info)
+              || VECTORIZABLE_CYCLE_DEF (STMT_VINFO_DEF_TYPE (stmt_info)))
+             && !PURE_SLP_STMT (stmt_info))
+           /* STMT needs both SLP and loop-based vectorization.  */
+           only_slp_in_loop = false;
+       }
       for (gimple_stmt_iterator si = gsi_start_bb (bb); !gsi_end_p (si);
           gsi_next (&si))
        {