aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2003-06-07 14:30:49 -0700
committerRichard Henderson <rth@gcc.gnu.org>2003-06-07 14:30:49 -0700
commit1722c2c871e9657e3d4db707816b5e6abe0ad2e8 (patch)
tree4c3e6dfddffa34e347102a0a9603cb42a831546b /gcc/cfgrtl.c
parent5145a02e5ddfd75dfb212e5ab165b21cec63fe18 (diff)
downloadgcc-1722c2c871e9657e3d4db707816b5e6abe0ad2e8.zip
gcc-1722c2c871e9657e3d4db707816b5e6abe0ad2e8.tar.gz
gcc-1722c2c871e9657e3d4db707816b5e6abe0ad2e8.tar.bz2
basic-block.h (EDGE_SIBCALL): New.
* basic-block.h (EDGE_SIBCALL): New. (EDGE_ALL_FLAGS): Update. * cfg.c (dump_edge_info): Add sibcall name. * cfgbuild.c (make_edges): Use EDGE_SIBCALL. * cfgrtl.c (purge_dead_edges): Handle sibcalls. From-SVN: r67602
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r--gcc/cfgrtl.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index b0678f0..21208c9 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2299,6 +2299,19 @@ purge_dead_edges (bb)
return purged;
}
+ else if (GET_CODE (insn) == CALL_INSN && SIBLING_CALL_P (insn))
+ {
+ /* First, there should not be any EH or ABCALL edges resulting
+ from non-local gotos and the like. If there were, we shouldn't
+ have created the sibcall in the first place. Second, there
+ should of course never have been a fallthru edge. */
+ if (!bb->succ || bb->succ->succ_next)
+ abort ();
+ if (bb->succ->flags != EDGE_SIBCALL)
+ abort ();
+
+ return 0;
+ }
/* If we don't see a jump insn, we don't know exactly why the block would
have been broken at this point. Look for a simple, non-fallthru edge,