This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]