diff options
author | Richard Earnshaw <rearnsha@arm.com> | 1999-10-20 10:21:47 +0000 |
---|---|---|
committer | Richard Earnshaw <rearnsha@gcc.gnu.org> | 1999-10-20 10:21:47 +0000 |
commit | dc9e9f3f8891dad8aad9bf346a68bedeae82c03f (patch) | |
tree | 8b19148a801536dd02ea093c480fa7aa4bae8943 /gcc | |
parent | 2cd6f3b397d8f7ec02a448eb818b7a4893c5cee3 (diff) | |
download | gcc-dc9e9f3f8891dad8aad9bf346a68bedeae82c03f.zip gcc-dc9e9f3f8891dad8aad9bf346a68bedeae82c03f.tar.gz gcc-dc9e9f3f8891dad8aad9bf346a68bedeae82c03f.tar.bz2 |
(jump_optimize_1): More accurately detect casesi insns.
From-SVN: r30099
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/jump.c | 12 |
2 files changed, 12 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f650a8c..9a7fd94 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Wed Oct 20 10:46:41 1999 Richard Earnshaw (rearnsha@arm.com) + + * jump.c (jump_optimize_1): More accurately detect casesi insns. + Tue Oct 19 23:43:50 1999 Jeffrey A Law (law@cygnus.com) * pa.md (call, call_value): Do not emit a blockage after restoring @@ -367,19 +367,23 @@ jump_optimize_1 (f, cross_jump, noop_moves, after_regscan, mark_labels_only) int diff_vec_p = GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC; int len = XVECLEN (pat, diff_vec_p); rtx dispatch = prev_real_insn (insn); + rtx set; for (i = 0; i < len; i++) if (XEXP (XVECEXP (pat, diff_vec_p, i), 0) != XEXP (XVECEXP (pat, diff_vec_p, 0), 0)) break; + if (i == len && dispatch != 0 && GET_CODE (dispatch) == JUMP_INSN && JUMP_LABEL (dispatch) != 0 - /* Don't mess with a casesi insn. */ - && !(GET_CODE (PATTERN (dispatch)) == SET - && (GET_CODE (SET_SRC (PATTERN (dispatch))) - == IF_THEN_ELSE)) + /* Don't mess with a casesi insn. + XXX according to the comment before computed_jump_p(), + all casesi insns should be a parallel of the jump + and a USE of a LABEL_REF. */ + && ! ((set = single_set (dispatch)) != NULL + && (GET_CODE (SET_SRC (set)) == IF_THEN_ELSE)) && next_real_insn (JUMP_LABEL (dispatch)) == insn) { redirect_tablejump (dispatch, |