aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/function.c13
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4a999b0..902c61d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2007-07-20 Zdenek Dvorak <dvorakz@suse.cz>
+ * function.c (thread_prologue_and_epilogue_insns): Fix exit
+ predecessor fallthru flags.
+
+2007-07-20 Zdenek Dvorak <dvorakz@suse.cz>
+
* tree-ssa-loop-niter.c (assert_loop_rolls_lt): Convert the operands
of compare to the same type.
* cfgloopmanip.c (add_loop): Update information about loop exits.
diff --git a/gcc/function.c b/gcc/function.c
index c69e18b..68a3f7e 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5256,7 +5256,18 @@ thread_prologue_and_epilogue_insns (void)
epilogue_done:
if (inserted)
- commit_edge_insertions ();
+ {
+ commit_edge_insertions ();
+
+ /* The epilogue insns we inserted may cause the exit edge to no longer
+ be fallthru. */
+ FOR_EACH_EDGE (e, ei, EXIT_BLOCK_PTR->preds)
+ {
+ if (((e->flags & EDGE_FALLTHRU) != 0)
+ && returnjump_p (BB_END (e->src)))
+ e->flags &= ~EDGE_FALLTHRU;
+ }
+ }
#ifdef HAVE_sibcall_epilogue
/* Emit sibling epilogues before any sibling call sites. */