diff options
author | Jeff Law <law@redhat.com> | 2002-02-04 09:03:14 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 2002-02-04 09:03:14 -0700 |
commit | 5b1cacd89e1977d35cad4bedaf6915900d0a6971 (patch) | |
tree | e8df6f9cdd391074172099255b71b5000ca7ade6 /gcc | |
parent | 5987ca1c3806cf5e6d829ba2a92961499aea2da0 (diff) | |
download | gcc-5b1cacd89e1977d35cad4bedaf6915900d0a6971.zip gcc-5b1cacd89e1977d35cad4bedaf6915900d0a6971.tar.gz gcc-5b1cacd89e1977d35cad4bedaf6915900d0a6971.tar.bz2 |
cfgrtl.c (try_redirect_by_replacing_jump): Remove associated CODE_LABEL and jump table when...
* cfgrtl.c (try_redirect_by_replacing_jump): Remove associated
CODE_LABEL and jump table when replacing a table jump with a
simple jump.
From-SVN: r49478
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 15 |
2 files changed, 20 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19dd639..63c0ce5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Mon Feb 4 09:05:58 2002 Jeffrey A Law (law@redhat.com) + + * cfgrtl.c (try_redirect_by_replacing_jump): Remove associated + CODE_LABEL and jump table when replacing a table jump with a + simple jump. + 2002-02-04 Ulrich Weigand <uweigand@de.ibm.com> * config/s390/s390-protos.h (legitimize_la_operand, diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index f318798..9e8269b 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -714,7 +714,7 @@ try_redirect_by_replacing_jump (e, target) else { rtx target_label = block_label (target); - rtx barrier; + rtx barrier, tmp; emit_jump_insn_after (gen_jump (target_label), insn); JUMP_LABEL (src->end) = target_label; @@ -723,8 +723,21 @@ try_redirect_by_replacing_jump (e, target) fprintf (rtl_dump_file, "Replacing insn %i by jump %i\n", INSN_UID (insn), INSN_UID (src->end)); + delete_insn_chain (kill_from, insn); + /* Recognize a tablejump that we are converting to a + simple jump and remove its associated CODE_LABEL + and ADDR_VEC or ADDR_DIFF_VEC. */ + if ((tmp = JUMP_LABEL (insn)) != NULL_RTX + && (tmp = NEXT_INSN (tmp)) != NULL_RTX + && GET_CODE (tmp) == JUMP_INSN + && (GET_CODE (PATTERN (tmp)) == ADDR_VEC + || GET_CODE (PATTERN (tmp)) == ADDR_DIFF_VEC)) + { + delete_insn_chain (JUMP_LABEL (insn), tmp); + } + barrier = next_nonnote_insn (src->end); if (!barrier || GET_CODE (barrier) != BARRIER) emit_barrier_after (src->end); |