summaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-04 21:31:43 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-04 21:31:43 +0000
commitadee86a00b4d598b6499b4c64ca73a7b4447587a (patch)
treec75dac8af5f667f1bb5695a19d09e79c5e0d96a7 /gcc/cfgrtl.c
parent0fe680424fb94569ab446264f5280c9ba859dabd (diff)
downloadgcc-adee86a00b4d598b6499b4c64ca73a7b4447587a.tar.gz
* reload.c (find_reloads): Reorganize if seqeunce to switch.
* cfgrtl.c (rtl_redirect_edge_and_branch): Set the source BB as dirty. (cfglayout_redirect_edge_and_branch): Set the source BB as dirty. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78936 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r--gcc/cfgrtl.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 35d7c9ebe1b..3363a2d9720 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -933,6 +933,8 @@ redirect_branch_edge (edge e, basic_block target)
static bool
rtl_redirect_edge_and_branch (edge e, basic_block target)
{
+ basic_block src = e->src;
+
if (e->flags & (EDGE_ABNORMAL_CALL | EDGE_EH))
return false;
@@ -940,11 +942,15 @@ rtl_redirect_edge_and_branch (edge e, basic_block target)
return true;
if (try_redirect_by_replacing_jump (e, target, false))
- return true;
+ {
+ src->flags |= BB_DIRTY;
+ return true;
+ }
if (!redirect_branch_edge (e, target))
return false;
+ src->flags |= BB_DIRTY;
return true;
}
@@ -2379,7 +2385,10 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
if (e->src != ENTRY_BLOCK_PTR
&& try_redirect_by_replacing_jump (e, dest, true))
- return true;
+ {
+ src->flags |= BB_DIRTY;
+ return true;
+ }
if (e->src == ENTRY_BLOCK_PTR
&& (e->flags & EDGE_FALLTHRU) && !(e->flags & EDGE_COMPLEX))
@@ -2388,6 +2397,7 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
fprintf (dump_file, "Redirecting entry edge from bb %i to %i\n",
e->src->index, dest->index);
+ e->src->flags |= BB_DIRTY;
redirect_edge_succ (e, dest);
return true;
}
@@ -2411,6 +2421,7 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
if (!redirect_branch_edge (e, dest))
abort ();
e->flags |= EDGE_FALLTHRU;
+ e->src->flags |= BB_DIRTY;
return true;
}
/* In case we are redirecting fallthru edge to the branch edge
@@ -2438,6 +2449,7 @@ cfg_layout_redirect_edge_and_branch (edge e, basic_block dest)
if (simplejump_p (BB_END (src)))
abort ();
+ src->flags |= BB_DIRTY;
return ret;
}