aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgrtl.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2002-05-02 19:51:48 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2002-05-02 17:51:48 +0000
commit1b6763cfb592988efc9ee945479d35ca657bbf4e (patch)
tree3584a25f602ea6b06f29196faa368726a894e5db /gcc/cfgrtl.c
parent16034e4ba3fd9c4e07b00499535b606b781f80b7 (diff)
downloadgcc-1b6763cfb592988efc9ee945479d35ca657bbf4e.zip
gcc-1b6763cfb592988efc9ee945479d35ca657bbf4e.tar.gz
gcc-1b6763cfb592988efc9ee945479d35ca657bbf4e.tar.bz2
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
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r--gcc/cfgrtl.c8
1 files changed, 7 insertions, 1 deletions
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);