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