|
|
|
Description |
Put common type definitions here to break recursive module dependencies.
|
|
Synopsis |
|
|
|
Documentation |
|
|
Used to store the register assignment on entry to a basic block.
We use this to handle join points, where multiple branch instructions
target a particular label. We have to insert fixup code to make
the register assignments from the different sources match up.
|
|
|
Where a vreg is currently stored
A temporary can be marked as living in both a register and memory
(InBoth), for example if it was recently loaded from a spill location.
This makes it cheap to spill (no save instruction required), but we
have to be careful to turn this into InReg if the value in the
register is changed.
| Constructors | | Instances | |
|
|
|
Get the reg numbers stored in this Loc.
|
|
|
Reasons why instructions might be inserted by the spiller.
Used when generating stats for -ddrop-asm-stats.
| Constructors | SpillAlloc !Unique | vreg was spilled to a slot so we could use its
current hreg for another vreg
| SpillClobber !Unique | vreg was moved because its hreg was clobbered
| SpillLoad !Unique | vreg was loaded from a spill slot
| SpillJoinRR !Unique | reg-reg move inserted during join to targets
| SpillJoinRM !Unique | reg-mem move inserted during join to targets
|
|
|
|
|
Used to carry interesting stats out of the register allocator.
| Constructors | |
|
|
|
The register alloctor state
| Constructors | RA_State | | ra_blockassig :: BlockAssignment | the current mapping from basic blocks to
the register assignments at the beginning of that block.
| ra_freeregs :: !FreeRegs | free machine registers
| ra_assig :: RegMap Loc | assignment of temps to locations
| ra_delta :: Int | current stack delta
| ra_stack :: StackMap | free stack slots for spilling
| ra_us :: UniqSupply | unique supply for generating names for join point fixup blocks.
| ra_spills :: [SpillReason] | Record why things were spilled, for -ddrop-asm-stats.
Just keep a list here instead of a map of regs -> reasons.
We don't want to slow down the allocator if we're not going to emit the stats.
|
|
|
|
|
|
The register allocator monad type.
| Constructors | | Instances | |
|
|
Produced by Haddock version 2.6.1 |