diff mbox

[Committed,PR69109] Don't allow latch with phi in try_transform_to_exit_first_loop_alt

Message ID 56937EDE.4090005@mentor.com
State New
Headers show

Commit Message

Tom de Vries Jan. 11, 2016, 10:07 a.m. UTC
Hi,

when compiling src/gcc/testsuite/gcc.dg/vect/unswitch-loops-pr26969.c 
and src/gcc/testsuite/gcc.c-torture/compile/pr32399.c with -O2 
-funswitch-loops -ftree-parallelize-loops=2 we run into two different ICEs.

In both cases, -funswitch-loops introduces a virtual memory phi in the 
latch, and transform_to_exit_first_loop_alt assumes there are no phis in 
the latch, and generates invalid ssa as a result.


The patch fixes the problem by testing for phis in the latch in 
try_transform_to_exit_first_loop_alt.

Bootstrapped and reg-tested on x86_64.

Committed to trunk.

Thanks,
- Tom
diff mbox

Patch

Don't allow latch with phi in try_transform_to_exit_first_loop_alt

2016-01-07  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/69109
	* tree-parloops.c (try_transform_to_exit_first_loop_alt): Don't allow
	latch with phi.

	* gcc.dg/autopar/pr69109-2.c: New test.
	* gcc.dg/autopar/pr69109.c: New test.

---
 gcc/testsuite/gcc.dg/autopar/pr69109-2.c | 4 ++++
 gcc/testsuite/gcc.dg/autopar/pr69109.c   | 4 ++++
 gcc/tree-parloops.c                      | 4 ++++
 3 files changed, 12 insertions(+)

diff --git a/gcc/testsuite/gcc.dg/autopar/pr69109-2.c b/gcc/testsuite/gcc.dg/autopar/pr69109-2.c
new file mode 100644
index 0000000..0a3154b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/pr69109-2.c
@@ -0,0 +1,4 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -funswitch-loops" } */
+
+#include "../../gcc.c-torture/compile/pr32399.c"
diff --git a/gcc/testsuite/gcc.dg/autopar/pr69109.c b/gcc/testsuite/gcc.dg/autopar/pr69109.c
new file mode 100644
index 0000000..58f3a9f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/autopar/pr69109.c
@@ -0,0 +1,4 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -funswitch-loops" } */
+
+#include "../vect/unswitch-loops-pr26969.c"
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index d683704..5afaaf8 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -1769,6 +1769,10 @@  try_transform_to_exit_first_loop_alt (struct loop *loop,
   if (!gimple_seq_nondebug_singleton_p (bb_seq (loop->latch)))
     return false;
 
+  /* Check whether the latch contains no phis.  */
+  if (phi_nodes (loop->latch) != NULL)
+    return false;
+
   /* Check whether the latch contains the loop iv increment.  */
   edge back = single_succ_edge (loop->latch);
   edge exit = single_dom_exit (loop);