diff options
author | Tom de Vries <tom@codesourcery.com> | 2015-07-16 11:51:38 +0000 |
---|---|---|
committer | Tom de Vries <vries@gcc.gnu.org> | 2015-07-16 11:51:38 +0000 |
commit | 7781d2626e5deb6cd1c683498cc19f4f7daa04e8 (patch) | |
tree | 4a01222e6ee45ca66ed88e998e183b165df922ba /gcc | |
parent | 79855460bdf36dff2eb97a726475e3f1a4eb5331 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-parloops.c | 12 |
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)); |