Skip to content

Commit 96e5ab3

Browse files
committed
Ignore deopt nodes with deopt action "None" for deopt cycle detection.
1 parent 782b28c commit 96e5ab3

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/ForceDeoptSpeculationPhase.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ protected void run(StructuredGraph graph, CoreProviders context) {
8787
if (node instanceof DynamicDeoptimizeNode) {
8888
throw new GraalError("%s must be disabled to use this phase", DynamicDeoptimizeNode.class.getSimpleName());
8989
}
90-
if (node instanceof DeoptimizeNode deopt) {
90+
if (node instanceof DeoptimizeNode deopt && deopt.getAction() != DeoptimizationAction.None) {
9191
if (deopt.getSpeculation().equals(NO_SPECULATION)) {
9292
SpeculationLog.Speculation speculation = createSpeculation(graph, signature, deopt);
9393
deopt.setSpeculation(speculation);
@@ -97,12 +97,14 @@ protected void run(StructuredGraph graph, CoreProviders context) {
9797
JavaConstant spec = implicitNullCheck.getDeoptSpeculation();
9898
SpeculationLog.Speculation speculation = spec != null ? context.getMetaAccess().decodeSpeculation(spec, speculationLog) : NO_SPECULATION;
9999
if (speculation.equals(NO_SPECULATION)) {
100-
spec = context.getMetaAccess().encodeSpeculation(createSpeculation(graph, signature, implicitNullCheck));
101100
JavaConstant actionAndReason = implicitNullCheck.getDeoptReasonAndAction();
102-
if (actionAndReason == null) {
103-
actionAndReason = context.getMetaAccess().encodeDeoptActionAndReason(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NullCheckException, 0);
101+
if (actionAndReason == null || context.getMetaAccess().decodeDeoptAction(actionAndReason) != DeoptimizationAction.None) {
102+
spec = context.getMetaAccess().encodeSpeculation(createSpeculation(graph, signature, implicitNullCheck));
103+
if (actionAndReason == null) {
104+
actionAndReason = context.getMetaAccess().encodeDeoptActionAndReason(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.NullCheckException, 0);
105+
}
106+
implicitNullCheck.setImplicitDeoptimization(actionAndReason, spec);
104107
}
105-
implicitNullCheck.setImplicitDeoptimization(actionAndReason, spec);
106108
}
107109
}
108110
}

0 commit comments

Comments
 (0)