This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Removing REG_OK_STRICT
Hi Zack,
> I would first take a census of all the target macros affected by
> REG_OK_STRICT. Right now targets are allowed to make basically
> arbitrary changes in response to its being defined; tm.texi makes it
> sound like it's just GO_IF_LEGITIMATE_ADDRESS and the REG_OK_* macros,
> but I doubt very much that that is really the full ambit of the
> problem.
REG_OK_STRICT "overloads" more target macros than what I thought, that
is,
EXTRA_CONSTRAINT
GO_IF_LEGITIMATE_ADDRESS
LEGITIMATE_PIC_OPERAND_P
LEGITIMIZE_ADDRESS
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
Here is my new plan:
1) Define the following in defaults.h. (frv port already does this,
so simply remove the duplicate.)
#ifdef REG_OK_STRICT
#define REG_OK_STRICT_P 1
#else
#define REG_OK_STRICT_P 0
#endif
2) In each port, implement the above macros with functions with
"strict" as one of their arguments. Use REG_OK_STRICT_P as follows
#define REG_OK_BASE_P(X) \
h8300_reg_ok_for_base_p ((X), REG_OK_STRICT_P)
While doing so, replace the direct uses of REG_OK_BASE_P and its
friends within the port with their corresponding functions.
3) Once no port directly uses REG_OK_STRICT, remove the definitions of
REG_OK_STRICT and REG_OK_STRICT_P. Add a new argument
REG_OK_STRICT_P to each macro that depends on strictness. For
example, REG_OK_STRICT_P(X) becomes:
#define REG_OK_FOR_BASE_P(X,REG_OK_STRICT_P)
4) Ready for hookization.
Step 2 can be done one port at a time. Step 3 must be done all at
once, but that should be simple enough. Step 4 is trivial because of
Step 2. If people complain about the speed, I suppose we can do the
same thing as hard_regno_regs as Honza did a few days ago.
Suggestions? I attached my worksheet FYI.
Kazu Hirata
alpha
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
arc
REG_OK_FOR_INDEX_P REG_OK_FOR_BASE_P
RTX_OK_FOR_BASE_P RTX_OK_FOR_INDEX_P (these are local macros)
LEGITIMATE_OFFSET_ADDRESS_P (this is local)
GO_IF_LEGITIMATE_ADDRESS
arm
ARM_REG_OK_FOR_BASE_P THUMB_REG_MODE_OK_FOR_BASE_P REG_STRICT_P
REG_MODE_OK_FOR_BASE_P ARM_REG_OK_FOR_INDEX_P THUMB_REG_OK_FOR_INDEX_P
REG_OK_FOR_INDEX_P
ARM_BASE_REGISTER_RTX_P ARM_INDEX_REGISTER_RTX_P
ARM_GO_IF_LEGITIMATE_ADDRESS THUMB_GO_IF_LEGITIMATE_ADDRESS
GO_IF_LEGITIMATE_ADDRESS
avr
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
c4x
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
GO_IF_LEGITIMATE_ADDRESS
cris
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
BASE_P
BASE_OR_AUTOINCR_P
BDAP_INDEX_P
BIAP_INDEX_P
SIMPLE_ADDRESS_P
GO_IF_LEGITIMATE_ADDRESS
fr30
GO_IF_LEGITIMATE_ADDRESS
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
frv
REG_OK_STRICT_P
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
GO_IF_LEGITIMATE_ADDRESS
ia64
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
LEGITIMATE_ADDRESS_REG
LEGITIMATE_ADDRESS_DISP
GO_IF_LEGITIMATE_ADDRESS
h8300
REG_OK_FOR_INDEX_P REG_OK_FOR_BASE_P
OK_FOR_U
EXTRA_CONSTRAINT
GO_IF_LEGITIMATE_ADDRESS
i386
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
i860
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
ip2k
GO_IF_LEGITIMATE_ADDRESS
REG_OK_FOR_BASE_P
iq2000
GO_IF_LEGITIMATE_ADDRESS
REG_MODE_OK_FOR_BASE_P
m32r
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
RTX_OK_FOR_BASE_P
LEGITIMATE_OFFSET_ADDRESS_P LEGITIMATE_LO_SUM_ADDRESS_P
LOAD_POSTINC_P STORE_PREINC_PREDEC_P
GO_IF_LEGITIMATE_ADDRESS
m68hc11
GO_IF_LEGITIMATE_ADDRESS
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
m68k
PCREL_GENERAL_OPERAND_OK
LEGITIMATE_PIC_OPERAND_P
LEGITIMATE_BASE_REG_P
INDIRECTABLE_1_ADDRESS_P
GO_IF_NONINDEXED_ADDRESS
GO_IF_INDEXABLE_BASE
GO_IF_INDEXING
GO_IF_INDEXED_ADDRESS
LEGITIMATE_INDEX_REG_P
LEGITIMATE_INDEX_P
GO_IF_LEGITIMATE_ADDRESS
mcore
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
BASE_REGISTER_RTX_P
INDEX_REGISTER_RTX_P
GO_IF_LEGITIMATE_ADDRESS
mips
REG_MODE_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
mmix
GO_IF_LEGITIMATE_ADDRESS
MMIX_REG_OK_STRICT
EXTRA_CONSTRAINT
REG_OK_FOR_BASE_P
mn10300
REGNO_IN_RANGE_P
REGNO_DATA_P
REGNO_ADDRESS_P
REGNO_SP_P
REGNO_EXTENDED_P
REGNO_AM33_P
REGNO_FP_P
REGNO_OK_FOR_BASE_P
REG_OK_FOR_BASE_P
REGNO_OK_FOR_BIT_BASE_P
REG_OK_FOR_BIT_BASE_P
REGNO_OK_FOR_INDEX_P
REG_OK_FOR_INDEX_P
GO_IF_LEGITIMATE_ADDRESS
OK_FOR_R OK_FOR_T
EXTRA_CONSTRAINT
ns32k
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
INDIRECTABLE_1_ADDRESS_P
GO_IF_NONINDEXED_ADDRESS
GO_IF_INDEXABLE_ADDRESS
GO_IF_INDEXING
INDEX_TERM_P
GO_IF_LEGITIMATE_ADDRESS
pa
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
pdp11
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
rs6000
REG_OK_STRICT_FLAG
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
s390
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
sh
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
SUBREG_OK_FOR_INDEX_P
BASE_REGISTER_RTX_P
INDEX_REGISTER_RTX_P
GO_IF_LEGITIMATE_ADDRESS
LEGITIMIZE_ADDRESS
sparc
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
EXTRA_CONSTRAINT
stormy16
GO_IF_LEGITIMATE_ADDRESS
REG_OK_FOR_BASE_P
REG_OK_FOR_INDEX_P
v850
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
RTX_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS
vax
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
INDIRECTABLE_ADDRESS_P
GO_IF_NONINDEXED_ADDRESS
INDEX_TERM_P
GO_IF_REG_PLUS_INDEX
GO_IF_LEGITIMATE_ADDRESS
xtensa
REG_OK_FOR_INDEX_P
REG_OK_FOR_BASE_P
GO_IF_LEGITIMATE_ADDRESS