cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed jumps post reload.
authorJan Hubicka <jh@suse.cz>
Thu, 2 May 2002 17:51:48 +0000 (19:51 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 2 May 2002 17:51:48 +0000 (17:51 +0000)
* cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
jumps post reload.
* toplev.c (rest_of_compilation): Revert Richard's patch.

From-SVN: r53052

gcc/ChangeLog
gcc/cfgrtl.c
gcc/toplev.c

index 587695850e3609869e0760266607a24d17edd37a..0c2c5e964ad929835e4edbab509ef58b37e61f0c 100644 (file)
@@ -1,3 +1,9 @@
+Thu May  2 19:50:04 CEST 2002  Jan Hubicka  <jh@suse.cz>
+
+       * cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
+       jumps post reload.
+       * toplev.c (rest_of_compilation): Revert Richard's patch.
+
 2001-05-02  John David Anglin  <dave@hiauly1.hia.nrc.ca>
 
        * pa/x-ada (ADA_CFLAGS): Rename to X_ADA_CFLAGS.
index f5a82383a002557ae08cc814cbebc61c2767f319..3fcd8a40357773e9f71eeaf2bcb80d117e068984 100644 (file)
@@ -713,7 +713,7 @@ try_redirect_by_replacing_jump (e, target)
   basic_block src = e->src;
   rtx insn = src->end, kill_from;
   edge tmp;
-  rtx set;
+  rtx set, table;
   int fallthru = 0;
 
   /* Verify that all targets will be TARGET.  */
@@ -723,6 +723,12 @@ try_redirect_by_replacing_jump (e, target)
 
   if (tmp || !onlyjump_p (insn))
     return false;
+  if (reload_completed && JUMP_LABEL (insn)
+      && (table = NEXT_INSN (JUMP_LABEL (insn))) != NULL_RTX
+      && GET_CODE (table) == JUMP_INSN
+      && (GET_CODE (PATTERN (table)) == ADDR_VEC
+         || GET_CODE (PATTERN (table)) == ADDR_DIFF_VEC))
+    return false;
 
   /* Avoid removing branch with side effects.  */
   set = single_set (insn);
index 580384f184c95f2ce86eae0840181f790fb567b2..4eb120bf0de341911283206017b196aaa8ec3e12 100644 (file)
@@ -3313,7 +3313,8 @@ rest_of_compilation (decl)
         splitting possibly introduced more crossjumping oppurtuntities.
         Except that we can't actually run crossjumping without running 
         another DCE pass, which we can't do after reg-stack.  */
-      cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK);
+      cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_POST_REGSTACK
+                  | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0));
       if (flag_reorder_blocks)
        {
          reorder_basic_blocks ();