sh-protos.h (sh_mark_label): Declare.

* 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.

From-SVN: r59217
This commit is contained in:
Richard Sandiford 2002-11-18 14:01:23 +00:00 committed by Richard Sandiford
parent 48f5b6723a
commit ea4210ef82
4 changed files with 32 additions and 16 deletions

View File

@ -1,3 +1,10 @@
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.

View 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));

View 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"

View File

@ -3867,14 +3867,7 @@
&& 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"
@ -3896,14 +3889,7 @@
&& 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"