public final class IntervalAnalysis extends CompilerPhase
Modifier and Type | Field and Description |
---|---|
private static Constructor<CompilerPhase> |
constructor
Constructor for this compiler phase
|
private IR |
ir
the governing ir
|
private BasicBlock |
listOfBlocks
a list of basic blocks in topological order
|
private static boolean |
MUTATE_FMOV
Mark FMOVs that end a live range?
|
private RegisterAllocatorState |
regAllocState |
private BasicBlock |
reverseTopFirst
a reverse topological list of basic blocks
|
container
Constructor and Description |
---|
IntervalAnalysis() |
Modifier and Type | Method and Description |
---|---|
(package private) void |
assignDepthFirstNumbers(ControlFlowGraph cfg)
this method processes all basic blocks, do the following to each block
1) add it to the begining of the "listOfBlocks" list
2) number the instructions
3) process the instructions that restrict physical register
assignment
|
private void |
createTopAndReverseList(ControlFlowGraph cfg)
create topological list and a reverse topological list
the results are on listOfBlocks and reverseTopFirst lists
|
Constructor<CompilerPhase> |
getClassConstructor()
Get a constructor object for this compiler phase
|
String |
getName()
a name for this phase.
|
private void |
initializeRegisters()
Initialize the interval for each register to null.
|
private boolean |
mutateFMOVs(LiveIntervalElement live,
Register register,
int dfnbegin,
int dfnend)
Mutate FMOVs that end live ranges
|
void |
perform(IR ir)
compute live intervals for this ir
the result is a sorted (by beginning point) set of compound
intervals, stored in the private 'intervals' field.
|
boolean |
printingEnabled(OptOptions options,
boolean before)
should we print the ir?
|
private CompoundInterval |
processLiveInterval(LiveIntervalElement live,
BasicBlock bb)
for each live interval associated with this block
we either add a new interval, or extend a previous interval
if it is contiguous
|
boolean |
shouldPerform(OptOptions options)
should we perform this phase?
|
dumpIR, dumpIR, getCompilerPhaseConstructor, getCompilerPhaseConstructor, newExecution, performPhase, reportAdditionalStats, setContainer, verify
private RegisterAllocatorState regAllocState
private BasicBlock listOfBlocks
private BasicBlock reverseTopFirst
private static final boolean MUTATE_FMOV
private static final Constructor<CompilerPhase> constructor
public IntervalAnalysis()
public Constructor<CompilerPhase> getClassConstructor()
getClassConstructor
in class CompilerPhase
public boolean shouldPerform(OptOptions options)
shouldPerform
in class CompilerPhase
options
- the compiler options for the compilationpublic String getName()
getName
in class CompilerPhase
public boolean printingEnabled(OptOptions options, boolean before)
printingEnabled
in class CompilerPhase
options
- the compiler options for the compilationbefore
- true when invoked before perform, false otherwise.public void perform(IR ir)
perform
in class CompilerPhase
ir
- the irprivate void createTopAndReverseList(ControlFlowGraph cfg)
cfg
- the control flow graphvoid assignDepthFirstNumbers(ControlFlowGraph cfg)
cfg
- the control flow graphprivate void initializeRegisters()
private boolean mutateFMOVs(LiveIntervalElement live, Register register, int dfnbegin, int dfnend)
live
- The live interval for a basic block/reg pairregister
- The register for this live intervaldfnbegin
- The (adjusted) begin for this intervaldfnend
- The (adjusted) end for this intervalprivate CompoundInterval processLiveInterval(LiveIntervalElement live, BasicBlock bb)
live
- the liveintervalelement for a basic block/reg pairbb
- the basic block