OSDN Git Service

* cfgrtl.c (try_redirect_by_replacing_jump): Remove associated
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Feb 2002 16:03:14 +0000 (16:03 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 4 Feb 2002 16:03:14 +0000 (16:03 +0000)
        CODE_LABEL and jump table when replacing a table jump with a
        simple jump.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@49478 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgrtl.c

index 19dd639..63c0ce5 100644 (file)
@@ -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,
index f318798..9e8269b 100644 (file)
@@ -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);