aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgrtl.c8
-rw-r--r--gcc/toplev.c3
3 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5876958..0c2c5e9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index f5a82383..3fcd8a4 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -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);
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 580384f..4eb120b 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -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 ();