aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTom de Vries <tom@codesourcery.com>2015-07-16 11:51:38 +0000
committerTom de Vries <vries@gcc.gnu.org>2015-07-16 11:51:38 +0000
commit7781d2626e5deb6cd1c683498cc19f4f7daa04e8 (patch)
tree4a01222e6ee45ca66ed88e998e183b165df922ba /gcc
parent79855460bdf36dff2eb97a726475e3f1a4eb5331 (diff)
downloadgcc-7781d2626e5deb6cd1c683498cc19f4f7daa04e8.zip
gcc-7781d2626e5deb6cd1c683498cc19f4f7daa04e8.tar.gz
gcc-7781d2626e5deb6cd1c683498cc19f4f7daa04e8.tar.bz2
Handle exit phi without header phi in create_parallel_loop
2015-07-16 Tom de Vries <tom@codesourcery.com> * tree-parloops.c (create_parallel_loop): Handle case that exit phi does not have a corresponding loop header phi. From-SVN: r225873
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/tree-parloops.c12
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cfdf5e7..764e8bc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2015-07-16 Tom de Vries <tom@codesourcery.com>
+ * tree-parloops.c (create_parallel_loop): Handle case that exit phi does
+ not have a corresponding loop header phi.
+
+2015-07-16 Tom de Vries <tom@codesourcery.com>
+
* tree-parloops.c (create_loads_for_reductions): Handle case that
reduction is unused.
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 2390d9e..ec41834 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2050,13 +2050,17 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
!gsi_end_p (gpi); gsi_next (&gpi))
{
source_location locus;
- tree def;
gphi *phi = gpi.phi ();
- gphi *stmt;
+ tree def = PHI_ARG_DEF_FROM_EDGE (phi, exit);
+ gimple def_stmt = SSA_NAME_DEF_STMT (def);
- stmt = as_a <gphi *> (
- SSA_NAME_DEF_STMT (PHI_ARG_DEF_FROM_EDGE (phi, exit)));
+ /* If the exit phi is not connected to a header phi in the same loop, this
+ value is not modified in the loop, and we're done with this phi. */
+ if (!(gimple_code (def_stmt) == GIMPLE_PHI
+ && gimple_bb (def_stmt) == loop->header))
+ continue;
+ gphi *stmt = as_a <gphi *> (def_stmt);
def = PHI_ARG_DEF_FROM_EDGE (stmt, loop_preheader_edge (loop));
locus = gimple_phi_arg_location_from_edge (stmt,
loop_preheader_edge (loop));