|
Get the registers that are being used by this instruction.
regUsage doesn't need to do any trickery for jumps and such.
Just state precisely the regs read and written by that insn.
The consequences of control flow transfers, as far as register
allocation goes, are taken care of by the register allocator.
|
|
|
Apply a given mapping to all the register references in this
instruction.
|
|
|
Checks whether this instruction is a jump/branch instruction.
One that can change the flow of control in a way that the
register allocator needs to worry about.
|
|
|
Give the possible destinations of this jump instruction.
Must be defined for all jumpish instructions.
|
|
|
Change the destination of this jump instruction.
Used in the linear allocator when adding fixup blocks for join
points.
|
|
|
:: Reg | the reg to spill
| -> Int | the current stack delta
| -> Int | spill slot to use
| -> instr | | An instruction to spill a register into a spill slot.
|
|
|
|
:: Reg | the reg to reload.
| -> Int | the current stack delta
| -> Int | the spill slot to use
| -> instr | | An instruction to reload a register from a spill slot.
|
|
|
|
See if this instruction is telling us the current C stack delta
|
|
|
Check whether this instruction is some meta thing inserted into
the instruction stream for other purposes.
Not something that has to be treated as a real machine instruction
and have its registers allocated.
eg, comments, delta, ldata, etc.
|
|
|
:: Reg | source register
| -> Reg | destination register
| -> instr | | Copy the value in a register to another one.
Must work for all register classes.
|
|
|
|
Take the source and destination from this reg -> reg move instruction
or Nothing if it's not one
|
|
|
Make an unconditional jump instruction.
For architectures with branch delay slots, its ok to put
a NOP after the jump. Don't fill the delay slot with an
instruction that references regs or you'll confuse the
linear allocator.
|