* config/sh/sh-protos.h (sh_mark_label): Declare.
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Nov 2002 14:01:23 +0000 (14:01 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 18 Nov 2002 14:01:23 +0000 (14:01 +0000)
* config/sh/sh.c (sh_mark_label): New function, taken from
movdi_const, but fixing the case when the address has an addend.
* config/sh/sh.md (movdi_const, movdi_const_32bit): Use it.

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

gcc/ChangeLog
gcc/config/sh/sh-protos.h
gcc/config/sh/sh.c
gcc/config/sh/sh.md

index 5a61cca..715b380 100644 (file)
@@ -1,5 +1,12 @@
 2002-11-18  Richard Sandiford  <rsandifo@redhat.com>
 
+       * config/sh/sh-protos.h (sh_mark_label): Declare.
+       * config/sh/sh.c (sh_mark_label): New function, taken from
+       movdi_const, but fixing the case when the address has an addend.
+       * config/sh/sh.md (movdi_const, movdi_const_32bit): Use it.
+
+2002-11-18  Richard Sandiford  <rsandifo@redhat.com>
+
        * config/sh/sh.c (pool_node): New field: part_of_sequence_p.
        (add_constant): Set it.
        (dump_table): Don't reorder a constant if part_of_sequence_p.
index a729462..c87000b 100644 (file)
@@ -128,6 +128,7 @@ extern int sh_cfun_interrupt_handler_p PARAMS ((void));
 extern void sh_initialize_trampoline PARAMS ((rtx, rtx, rtx));
 extern enum reg_class sh_cannot_change_mode_class
              PARAMS ((enum machine_mode, enum machine_mode));
+extern void sh_mark_label PARAMS ((rtx, int));
 
 #ifdef HARD_CONST
 extern void fpscr_set_from_mem PARAMS ((int, HARD_REG_SET));
index a26d92b..7ea35dc 100644 (file)
@@ -7764,4 +7764,26 @@ sh_cannot_change_mode_class (from, to)
   return NO_REGS;
 }
 
+
+/* If ADDRESS refers to a CODE_LABEL, add NUSES to the number of times
+   that label is used.  */
+
+void
+sh_mark_label (address, nuses)
+     rtx address;
+     int nuses;
+{
+  if (GOTOFF_P (address))
+    {
+      /* Extract the label or symbol.  */
+      address = XEXP (address, 0);
+      if (GET_CODE (address) == PLUS)
+       address = XEXP (address, 0);
+      address = XVECEXP (address, 0, 0);
+    }
+  if (GET_CODE (address) == LABEL_REF
+      && GET_CODE (XEXP (address, 0)) == CODE_LABEL)
+    LABEL_NUSES (XEXP (address, 0)) += nuses;
+}
+
 #include "gt-sh.h"
index c945496..d57583b 100644 (file)
    && MOVI_SHORI_BASE_OPERAND_P (operands[1])"
   "
 {
-  if (GET_CODE (operands[1]) == LABEL_REF
-      && GET_CODE (XEXP (operands[1], 0)) == CODE_LABEL)
-    LABEL_NUSES (XEXP (operands[1], 0)) += 4;
-  else if (GOTOFF_P (operands[1])
-          && GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == LABEL_REF
-          && (GET_CODE (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0))
-              == CODE_LABEL))
-    LABEL_NUSES (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0)) += 4;
+  sh_mark_label (operands[1], 4);
 }")
 
 (define_expand "movdi_const_32bit"
    && MOVI_SHORI_BASE_OPERAND_P (operands[1])"
   "
 {
-  if (GET_CODE (operands[1]) == LABEL_REF
-      && GET_CODE (XEXP (operands[1], 0)) == CODE_LABEL)
-    LABEL_NUSES (XEXP (operands[1], 0)) += 2;
-  else if (GOTOFF_P (operands[1])
-          && GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == LABEL_REF
-          && (GET_CODE (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0))
-              == CODE_LABEL))
-    LABEL_NUSES (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0)) += 2;
+  sh_mark_label (operands[1], 2);
 }")
 
 (define_expand "movdi_const_16bit"