summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-02 17:51:48 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-02 17:51:48 +0000
commit27bcd4c149c032fdb87f1763f590177c1e6e73ec (patch)
tree3584a25f602ea6b06f29196faa368726a894e5db
parentf206296f95beecbc552bbf248a361f07895204d0 (diff)
downloadgcc-27bcd4c149c032fdb87f1763f590177c1e6e73ec.tar.gz
* cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed
jumps post reload. * toplev.c (rest_of_compilation): Revert Richard's patch. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53052 138bc75d-0d04-0410-961f-82ee72b054a4
-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 587695850e3..0c2c5e964ad 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 f5a82383a00..3fcd8a40357 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 580384f184c..4eb120bf0de 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 ();