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, getNameprivate 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)