From d840495b15862ef5d62af317e76be37d71948540 Mon Sep 17 00:00:00 2001 From: Zdenek Dvorak Date: Tue, 14 Sep 2004 09:49:04 +0200 Subject: tree-cfg.c (thread_jumps): Update dominators correctly in case destination of threaded edge dominates its... * tree-cfg.c (thread_jumps): Update dominators correctly in case destination of threaded edge dominates its source. From-SVN: r87486 --- gcc/tree-cfg.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'gcc/tree-cfg.c') diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 8e9e5af..6f21467 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3970,9 +3970,11 @@ thread_jumps (void) set_immediate_dominator (CDI_DOMINATORS, old_dest, bb); /* Now proceed like if we forwarded just over one edge at a time. - Algorithm for forwarding over edge A --> B then is + Algorithm for forwarding edge S --> A over edge A --> B then + is - if (idom (B) == A) + if (idom (B) == A + && !dominated_by (S, B)) idom (B) = idom (A); recount_idom (A); */ @@ -3980,7 +3982,8 @@ thread_jumps (void) { tmp = old_dest->succ->dest; - if (get_immediate_dominator (CDI_DOMINATORS, tmp) == old_dest) + if (get_immediate_dominator (CDI_DOMINATORS, tmp) == old_dest + && !dominated_by_p (CDI_DOMINATORS, bb, tmp)) { dom = get_immediate_dominator (CDI_DOMINATORS, old_dest); set_immediate_dominator (CDI_DOMINATORS, tmp, dom); -- cgit v1.1