(split_edge): Handle casesi insns.
authorRichard Earnshaw <rearnsha@arm.com>
Wed, 20 Oct 1999 12:45:22 +0000 (12:45 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Wed, 20 Oct 1999 12:45:22 +0000 (12:45 +0000)
From-SVN: r30101

gcc/ChangeLog
gcc/flow.c

index de82cea92939271a09bb962b811005b5e3307097..76ca2b9c837d67282da6f9571c6141f5d32fe738 100644 (file)
@@ -4,6 +4,7 @@ Wed Oct 20 10:46:41 1999  Richard Earnshaw (rearnsha@arm.com)
 
        * flow.c (merge_blocks_move_predecessor_nojumps): Re-order the basic
        block records so that merge_blocks_nomove will clean up correctly.
+       (split_edge): Handle casesi insns.
 
 Tue Oct 19 23:43:50 1999  Jeffrey A Law  (law@cygnus.com)
 
index fcefe0aaa2c5251145db2b0da9f2fbdc65cfbb33..0990bd0d67acff5995401d0b10c564cca49afdac 100644 (file)
@@ -1484,6 +1484,19 @@ split_edge (edge_in)
                --LABEL_NUSES (old_label);
                ++LABEL_NUSES (new_label);
              }
+
+         /* Handle casesi dispatch insns */
+         if ((tmp = single_set (insn)) != NULL
+             && SET_DEST (tmp) == pc_rtx
+             && GET_CODE (SET_SRC (tmp)) == IF_THEN_ELSE
+             && GET_CODE (XEXP (SET_SRC (tmp), 2)) == LABEL_REF
+             && XEXP (XEXP (SET_SRC (tmp), 2), 0) == old_label)
+           {
+             XEXP (SET_SRC (tmp), 2) = gen_rtx_LABEL_REF (VOIDmode, 
+                                                          new_label);
+             --LABEL_NUSES (old_label);
+             ++LABEL_NUSES (new_label);
+           }
        }
       else
        {