public class GuardLoweringPhase extends BasePhase<MidTierContext>
GuardNodes
into corresponding control-flow structure and
DeoptimizeNodes
.
This allow to enter the FIXED_DEOPTS
stage of the graph where
all node that may cause deoptimization are fixed.
It first makes a schedule in order to know where the control flow should be placed. Then, for
each block, it applies two passes. The first one tries to replace null-check guards with implicit
null checks performed by access to the objects that need to be null checked. The second phase
does the actual control-flow expansion of the remaining GuardNodes
.
Modifier and Type | Class and Description |
---|---|
private static class |
GuardLoweringPhase.LowerGuards |
private static class |
GuardLoweringPhase.UseImplicitNullChecks |
Modifier and Type | Field and Description |
---|---|
private static DebugMetric |
metricImplicitNullCheck |
BEFORE_PHASE_DUMP_LEVEL, PHASE_DUMP_LEVEL
Constructor and Description |
---|
GuardLoweringPhase() |
Modifier and Type | Method and Description |
---|---|
private static boolean |
assertNoGuardsLeft(StructuredGraph graph) |
private static void |
processBlock(Block block,
SchedulePhase schedule,
int implicitNullCheckLimit) |
protected void |
run(StructuredGraph graph,
MidTierContext context) |
apply, apply, createName, getName
private static final DebugMetric metricImplicitNullCheck
public GuardLoweringPhase()
protected void run(StructuredGraph graph, MidTierContext context)
run
in class BasePhase<MidTierContext>
private static boolean assertNoGuardsLeft(StructuredGraph graph)
private static void processBlock(Block block, SchedulePhase schedule, int implicitNullCheckLimit)