loop.c (add_label_notes): Do not ignore references to labels before dispatch tables.
authorJeffrey A Law <law@cygnus.com>
Sat, 15 Aug 1998 00:33:57 +0000 (00:33 +0000)
committerJeff Law <law@gcc.gnu.org>
Sat, 15 Aug 1998 00:33:57 +0000 (18:33 -0600)
        * loop.c (add_label_notes): Do not ignore references to labels
        before dispatch tables.  Mirrors Apr 8 change to mark_jump_label.
        * gcse.c (add_label_notes): Similarly.

From-SVN: r21744

gcc/ChangeLog
gcc/gcse.c
gcc/loop.c

index fa2a9aa70e25557d1803916e945bb5a87f286db1..d323f6f93166bd0bf33586ebea501d83eb0bbc86 100644 (file)
@@ -1,5 +1,9 @@
 Fri Aug 14 21:07:03 1998  Jeffrey A Law  (law@cygnus.com)
 
+       * loop.c (add_label_notes): Do not ignore references to labels
+       before dispatch tables.  Mirrors Apr 8 change to mark_jump_label.
+       * gcse.c (add_label_notes): Similarly.
+
        * pa.h (ASM_OUTPUT_MI_THUNK): Strip name encoding.
 
        * m68k.md (adddi_dilshr32): One of the operands must be a register.
index af354691cf1ef8bbe76755d2c2c5963261887603..b51754aa26a184144d749967e271f8bb870975d3 100644 (file)
@@ -4733,17 +4733,13 @@ add_label_notes (x, insn)
 
   if (code == LABEL_REF && !LABEL_REF_NONLOCAL_P (x))
     {
-      rtx next = next_real_insn (XEXP (x, 0));
-
-      /* Don't record labels that refer to dispatch tables.
-        This is not necessary, since the tablejump references the same label.
-        And if we did record them, flow.c would make worse code.  */
-      if (next == 0
-         || ! (GET_CODE (next) == JUMP_INSN
-               && (GET_CODE (PATTERN (next)) == ADDR_VEC
-                   || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)))
-       REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
-                                             REG_NOTES (insn));
+      /* This code used to ignore labels that referred to dispatch tables to
+         avoid flow generating (slighly) worse code.
+
+         We no longer ignore such label references (see LABEL_REF handling in
+         mark_jump_label for additional information).  */
+      REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
+                                           REG_NOTES (insn));
       return;
     }
 
index c9c986947d96364461df80a7efc87abd2b1314d7..c5d1505e9e2eff8789deed1c521be1f85fc00219 100644 (file)
@@ -1627,22 +1627,15 @@ add_label_notes (x, insns)
 
   if (code == LABEL_REF && !LABEL_REF_NONLOCAL_P (x))
     {
-      rtx next = next_real_insn (XEXP (x, 0));
-
-      /* Don't record labels that refer to dispatch tables.
-        This is not necessary, since the tablejump references the same label.
-        And if we did record them, flow.c would make worse code.  */
-      if (next == 0
-         || ! (GET_CODE (next) == JUMP_INSN
-               && (GET_CODE (PATTERN (next)) == ADDR_VEC
-                   || GET_CODE (PATTERN (next)) == ADDR_DIFF_VEC)))
-       {
-         for (insn = insns; insn; insn = NEXT_INSN (insn))
-           if (reg_mentioned_p (XEXP (x, 0), insn))
-             REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
-                                                   REG_NOTES (insn));
-       }
-      return;
+      /* This code used to ignore labels that referred to dispatch tables to
+         avoid flow generating (slighly) worse code.
+
+         We no longer ignore such label references (see LABEL_REF handling in
+         mark_jump_label for additional information).  */
+      for (insn = insns; insn; insn = NEXT_INSN (insn))
+       if (reg_mentioned_p (XEXP (x, 0), insn))
+         REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_LABEL, XEXP (x, 0),
+                                               REG_NOTES (insn));
     }
 
   fmt = GET_RTX_FORMAT (code);