Fix PR94443 with gsi_insert_seq_before [PR94443]
authorKewen Lin <linkw@linux.ibm.com>
Fri, 3 Apr 2020 07:10:08 +0000 (02:10 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Fri, 3 Apr 2020 08:07:46 +0000 (03:07 -0500)
This patch is to fix the stupid mistake by using
gsi_insert_seq_before instead of gsi_insert_before.

BTW, the regression testing on one x86_64 machine from CFarm is
unable to reveal it (I guess due to native arch sandybridge?), so I
specified additional option -march=znver2 and verified the coverage.

Bootstrapped/regtested on powerpc64le-linux-gnu (P9) and
x86_64-pc-linux-gnu, also verified the fail cases in related PRs.

2020-04-03  Kewen Lin  <linkw@gcc.gnu.org>

gcc/
    PR tree-optimization/94443
    * tree-vect-loop.c (vectorizable_live_operation): Use
    gsi_insert_seq_before to replace gsi_insert_before.

gcc/testsuite/
    PR tree-optimization/94443
    * gcc.dg/vect/pr94443.c: New test.

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

index 3087c58806dc6742f3c167e585a9139a965ab6be..472ce173ed2b1e9125867d3e91c1af78630d6c75 100644 (file)
@@ -1,3 +1,9 @@
+2020-04-03  Kewen Lin  <linkw@gcc.gnu.org>
+
+       PR tree-optimization/94443
+       * tree-vect-loop.c (vectorizable_live_operation): Use
+       gsi_insert_seq_before to replace gsi_insert_before.
+
 2020-04-03  Martin Liska  <mliska@suse.cz>
 
        PR ipa/94445
index cd8d7e1548d12e0fdeab9a7a2cc8591c65aa9c18..927abc89b08018086ab7a22510532ea9bbc4f5a7 100644 (file)
@@ -1,3 +1,8 @@
+2020-04-03  Kewen Lin  <linkw@gcc.gnu.org>
+
+       PR tree-optimization/94443
+       * gcc.dg/vect/pr94443.c: New test.
+
 2020-04-02  Sandra Loosemore  <sandra@codesourcery.com>
 
        * lib/target-supports.exp (check_effective_target_sigsetjmp): Test
diff --git a/gcc/testsuite/gcc.dg/vect/pr94443.c b/gcc/testsuite/gcc.dg/vect/pr94443.c
new file mode 100644 (file)
index 0000000..f8cbaf1
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-additional-options "-march=znver2" { target { x86_64-*-* i?86-*-* } } } */
+
+/* Check it to be compiled successfully without any ICE.  */
+
+int a;
+unsigned *b;
+
+void foo()
+{
+  for (unsigned i; i <= a; ++i, ++b)
+    ;
+}
index c9b653491f73879e300526918a5533ee0e627c1d..265bcfdc5afb0eee59d734aa3262b2357047d717 100644 (file)
@@ -8050,7 +8050,7 @@ vectorizable_live_operation (stmt_vec_info stmt_info,
   if (stmts)
     {
       gimple_stmt_iterator exit_gsi = gsi_after_labels (exit_bb);
-      gsi_insert_before (&exit_gsi, stmts, GSI_CONTINUE_LINKING);
+      gsi_insert_seq_before (&exit_gsi, stmts, GSI_SAME_STMT);
 
       /* Remove existing phi from lhs and create one copy from new_tree.  */
       tree lhs_phi = NULL_TREE;
@@ -8063,7 +8063,7 @@ vectorizable_live_operation (stmt_vec_info stmt_info,
              remove_phi_node (&gsi, false);
              lhs_phi = gimple_phi_result (phi);
              gimple *copy = gimple_build_assign (lhs_phi, new_tree);
-             gsi_insert_after (&exit_gsi, copy, GSI_CONTINUE_LINKING);
+             gsi_insert_before (&exit_gsi, copy, GSI_SAME_STMT);
              break;
            }
        }