gccint: Allocation Order
1
1 18.7.2 Order of Allocation of Registers
1 ---------------------------------------
1
1 Registers are allocated in order.
1
1 -- Macro: REG_ALLOC_ORDER
1 If defined, an initializer for a vector of integers, containing the
1 numbers of hard registers in the order in which GCC should prefer
1 to use them (from most preferred to least).
1
1 If this macro is not defined, registers are used lowest numbered
1 first (all else being equal).
1
1 One use of this macro is on machines where the highest numbered
1 registers must always be saved and the save-multiple-registers
1 instruction supports only sequences of consecutive registers. On
1 such machines, define 'REG_ALLOC_ORDER' to be an initializer that
1 lists the highest numbered allocable register first.
1
1 -- Macro: ADJUST_REG_ALLOC_ORDER
1 A C statement (sans semicolon) to choose the order in which to
1 allocate hard registers for pseudo-registers local to a basic
1 block.
1
1 Store the desired register order in the array 'reg_alloc_order'.
1 Element 0 should be the register to allocate first; element 1, the
1 next register; and so on.
1
1 The macro body should not assume anything about the contents of
1 'reg_alloc_order' before execution of the macro.
1
1 On most machines, it is not necessary to define this macro.
1
1 -- Macro: HONOR_REG_ALLOC_ORDER
1 Normally, IRA tries to estimate the costs for saving a register in
1 the prologue and restoring it in the epilogue. This discourages it
1 from using call-saved registers. If a machine wants to ensure that
1 IRA allocates registers in the order given by REG_ALLOC_ORDER even
1 if some call-saved registers appear earlier than call-used ones,
1 then define this macro as a C expression to nonzero. Default is 0.
1
1 -- Macro: IRA_HARD_REGNO_ADD_COST_MULTIPLIER (REGNO)
1 In some case register allocation order is not enough for the
1 Integrated Register Allocator (IRA) to generate a good code. If
1 this macro is defined, it should return a floating point value
1 based on REGNO. The cost of using REGNO for a pseudo will be
1 increased by approximately the pseudo's usage frequency times the
1 value returned by this macro. Not defining this macro is
1 equivalent to having it always return '0.0'.
1
1 On most machines, it is not necessary to define this macro.
1