(jump_optimize_1): More accurately detect casesi insns.
authorrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Oct 1999 10:21:47 +0000 (10:21 +0000)
committerrearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Oct 1999 10:21:47 +0000 (10:21 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30099 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/jump.c

index f650a8c..9a7fd94 100644 (file)
@@ -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
index 2328d8f..9a16ac5 100644 (file)
@@ -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,