From 1b6763cfb592988efc9ee945479d35ca657bbf4e Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 2 May 2002 19:51:48 +0200 Subject: [PATCH] cfgrtl.c (try_redirect_by_replacing_jump): Do not kill computed jumps post reload. * 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 | 6 ++++++ gcc/cfgrtl.c | 8 +++++++- gcc/toplev.c | 3 ++- 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 + + * 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 * 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 (); -- 2.30.2