re PR tree-optimization/83957 (ICE: Segmentation fault (in gimple_phi_arg))
authorJakub Jelinek <jakub@redhat.com>
Mon, 22 Jan 2018 23:00:50 +0000 (00:00 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 22 Jan 2018 23:00:50 +0000 (00:00 +0100)
PR tree-optimization/83957
* omp-expand.c (expand_omp_for_generic): Ignore virtual PHIs.  Remove
semicolon after for body surrounded by braces.

* gcc.dg/autopar/pr83957.c: New test.

From-SVN: r256967

gcc/ChangeLog
gcc/omp-expand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/autopar/pr83957.c [new file with mode: 0644]

index d8c30e7..507bb52 100644 (file)
@@ -1,5 +1,9 @@
 2018-01-22  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/83957
+       * omp-expand.c (expand_omp_for_generic): Ignore virtual PHIs.  Remove
+       semicolon after for body surrounded by braces.
+
        PR tree-optimization/83081
        * profile-count.h (profile_probability::split): New method.
        * dojump.c (do_jump_1) <case TRUTH_ANDIF_EXPR, case TRUTH_ORIF_EXPR>:
index 8690f86..90e0631 100644 (file)
@@ -3156,6 +3156,9 @@ expand_omp_for_generic (struct omp_region *region,
              gphi *nphi;
              gphi *exit_phi = psi.phi ();
 
+             if (virtual_operand_p (gimple_phi_result (exit_phi)))
+               continue;
+
              edge l2_to_l3 = find_edge (l2_bb, l3_bb);
              tree exit_res = PHI_ARG_DEF_FROM_EDGE (exit_phi, l2_to_l3);
 
@@ -3178,7 +3181,7 @@ expand_omp_for_generic (struct omp_region *region,
              add_phi_arg (nphi, exit_res, l2_to_l0, UNKNOWN_LOCATION);
 
              add_phi_arg (inner_phi, new_res, l0_to_l1, UNKNOWN_LOCATION);
-           };
+           }
        }
 
       set_immediate_dominator (CDI_DOMINATORS, l2_bb,
index 23cef82..82497ed 100644 (file)
@@ -1,5 +1,8 @@
 2018-01-22  Jakub Jelinek  <jakub@redhat.com>
 
+       PR tree-optimization/83957
+       * gcc.dg/autopar/pr83957.c: New test.
+
        PR tree-optimization/83081
        * gcc.dg/predict-8.c: Adjust expected probability.
 
diff --git a/gcc/testsuite/gcc.dg/autopar/pr83957.c b/gcc/testsuite/gcc.dg/autopar/pr83957.c
new file mode 100644 (file)
index 0000000..7d13ee1
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR tree-optimization/83957 */
+/* { dg-do compile } */
+/* { dg-options "-O1 -ftree-parallelize-loops=2 -fno-tree-dce --param parloops-schedule=dynamic" } */
+
+void
+foo (int *x, int y)
+{
+  if (y < 0)
+    for (; y < 1; ++y)
+      x = &y;
+}