function.c (thread_prologue_and_epilogue_insns): Fix exit predecessor fallthru flags.
authorZdenek Dvorak <dvorakz@suse.cz>
Fri, 20 Jul 2007 01:32:47 +0000 (03:32 +0200)
committerZdenek Dvorak <rakdver@gcc.gnu.org>
Fri, 20 Jul 2007 01:32:47 +0000 (01:32 +0000)
* function.c (thread_prologue_and_epilogue_insns): Fix exit
predecessor fallthru flags.

From-SVN: r126797

gcc/ChangeLog
gcc/function.c

index 4a999b0281ddae277e3b9e922e420e094db3f6d3..902c61d665917fc811cc6390387d660685871bc7 100644 (file)
@@ -1,3 +1,8 @@
+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
index c69e18b61f11149f107557aef5d0e610f9b69b30..68a3f7e0a43da9aeb28337f39969945f27132a0c 100644 (file)
@@ -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.  */