summaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-threadedge.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2013-09-03 20:43:46 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2013-09-03 20:43:46 +0000
commit631d940c80b318d435d498744950dc1eeacafeaa (patch)
treea84c9f73b9de44d8f8421f514d4b08f7eefa96d7 /gcc/tree-ssa-threadedge.c
parent807a87f926c2c2128e5e854c9fb46b18361f5c77 (diff)
downloadgcc-631d940c80b318d435d498744950dc1eeacafeaa.tar.gz
* tree-ssa-threadedge.c (thread_across_edge): Record entire path
when not threading through a joiner block. Pass joiner/no joiner state to register_jump_thread. * tree-ssa-threadupdate.c (register_jump_thread): Get joiner/no joiner state from argument rather than implying on path length. Dump the entire jump thread path into debugging dump. * tree-flow.h (register_jump_thread): Update prototype. * tree-ssa/ssa-dom-thread-3.c: Update due to changes in debug dump output. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202232 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-threadedge.c')
-rw-r--r--gcc/tree-ssa-threadedge.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/tree-ssa-threadedge.c b/gcc/tree-ssa-threadedge.c
index fc33647cfc8..dddcfce5a3b 100644
--- a/gcc/tree-ssa-threadedge.c
+++ b/gcc/tree-ssa-threadedge.c
@@ -901,6 +901,10 @@ thread_across_edge (gimple dummy_cond,
if (dest == e->dest)
goto fail;
+ vec<edge> path = vNULL;
+ path.safe_push (e);
+ path.safe_push (taken_edge);
+
/* DEST could be null for a computed jump to an absolute
address. If DEST is not null, then see if we can thread
through it as well, this helps capture secondary effects
@@ -922,7 +926,10 @@ thread_across_edge (gimple dummy_cond,
simplify,
visited);
if (e2)
- taken_edge = e2;
+ {
+ taken_edge = e2;
+ path.safe_push (e2);
+ }
}
while (e2);
BITMAP_FREE (visited);
@@ -931,13 +938,10 @@ thread_across_edge (gimple dummy_cond,
remove_temporary_equivalences (stack);
if (taken_edge)
{
- vec<edge> path = vNULL;
propagate_threaded_block_debug_into (taken_edge->dest, e->dest);
- path.safe_push (e);
- path.safe_push (taken_edge);
- register_jump_thread (path);
- path.release ();
+ register_jump_thread (path, false);
}
+ path.release ();
return;
}
}
@@ -1009,7 +1013,7 @@ thread_across_edge (gimple dummy_cond,
{
propagate_threaded_block_debug_into (e3->dest,
taken_edge->dest);
- register_jump_thread (path);
+ register_jump_thread (path, true);
}
}