public abstract class LoweringPhase extends BasePhase<CoreProviders>
Lowerable nodes to do their lowering.| Modifier and Type | Class and Description |
|---|---|
static class |
LoweringPhase.Frame<T extends LoweringPhase.Frame<?>> |
static class |
LoweringPhase.LoweringStatistics |
BasePhase.ApplyScope, BasePhase.BasePhaseStatistics, BasePhase.PhaseOptions, BasePhase.SharedGlobalPhaseState| Modifier and Type | Method and Description |
|---|---|
boolean |
checkContract() |
static void |
processBlock(LoweringPhase.Frame<?> rootFrame)
This state-machine resembles the following recursion:
|
protected void |
run(StructuredGraph graph,
CoreProviders context) |
protected boolean |
shouldDumpBeforeAtBasicLevel() |
apply, apply, applyScope, codeSizeIncrease, contractorName, equals, getName, hashCode, shouldDumpAfterAtBasicLevelpublic boolean checkContract()
protected boolean shouldDumpBeforeAtBasicLevel()
shouldDumpBeforeAtBasicLevel in class BasePhase<CoreProviders>protected void run(StructuredGraph graph, CoreProviders context)
run in class BasePhase<CoreProviders>public static void processBlock(LoweringPhase.Frame<?> rootFrame)
void processBlock(Block block) {
preprocess();
// Process always reached block first.
Block alwaysReachedBlock = block.getPostdominator();
if (alwaysReachedBlock != null && alwaysReachedBlock.getDominator() == block) {
processBlock(alwaysReachedBlock);
}
// Now go for the other dominators.
for (Block dominated : block.getDominated()) {
if (dominated != alwaysReachedBlock) {
assert dominated.getDominator() == block;
processBlock(dominated);
}
}
postprocess();
}
This is necessary, as the recursive implementation can quickly exceed the stack depth.rootFrame - contains the starting block.