diff options
author | Jeff Law <law@redhat.com> | 2013-10-23 07:54:48 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2013-10-23 07:54:48 -0600 |
commit | b1149e84d407a2ce4622a113b5d408475fc9e7a7 (patch) | |
tree | f3147baa998ae0dfcc8896df58168d9473d4f4c6 /gcc/tree-ssa-threadedge.c | |
parent | c9edbc5fa1c3812f834a625afae0b09c652dc1fa (diff) | |
download | gcc-b1149e84d407a2ce4622a113b5d408475fc9e7a7.zip gcc-b1149e84d407a2ce4622a113b5d408475fc9e7a7.tar.gz gcc-b1149e84d407a2ce4622a113b5d408475fc9e7a7.tar.bz2 |
tree-ssa-threadedge.c (thread_across_edge): Do not allow threading through joiner blocks with abnormal outgoing edges.
* tree-ssa-threadedge.c (thread_across_edge): Do not allow threading
through joiner blocks with abnormal outgoing edges.
* tree-ssa-threadupdate.c (thread_block_1): Renamed from thread_block.
Add parameter JOINERS, to allow/disallow threading through joiner
blocks.
(thread_block): New. Call thread_block_1.
(mark_threaded_blocks): Remove code to filter out certain cases
of threading through joiner blocks.
(thread_through_all_blocks): Document how we can have a dangling
edge AUX field and clear it.
From-SVN: r203975
Diffstat (limited to 'gcc/tree-ssa-threadedge.c')
-rw-r--r-- | gcc/tree-ssa-threadedge.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c index bbc4f9b..810908b 100644 --- a/gcc/tree-ssa-threadedge.c +++ b/gcc/tree-ssa-threadedge.c @@ -1040,6 +1040,16 @@ thread_across_edge (gimple dummy_cond, edge_iterator ei; bool found; + /* If E->dest has abnormal outgoing edges, then there's no guarantee + we can safely redirect any of the edges. Just punt those cases. */ + FOR_EACH_EDGE (taken_edge, ei, e->dest->succs) + if (taken_edge->flags & EDGE_ABNORMAL) + { + remove_temporary_equivalences (stack); + BITMAP_FREE (visited); + return; + } + /* Look at each successor of E->dest to see if we can thread through it. */ FOR_EACH_EDGE (taken_edge, ei, e->dest->succs) { |