Skip to content

Commit e1037fa

Browse files
committed
[GR-68589] Truffle: fix instanceof snippet replacement in non canonical graphs.
PullRequest: graal/21830
2 parents af56822 + ec5d6be commit e1037fa

File tree

3 files changed

+8
-24
lines changed

3 files changed

+8
-24
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/InstanceOfSnippetsTemplates.java

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,12 @@
3131
import jdk.graal.compiler.core.common.calc.CanonicalCondition;
3232
import jdk.graal.compiler.debug.Assertions;
3333
import jdk.graal.compiler.graph.Node;
34-
import jdk.graal.compiler.nodes.ConditionAnchorNode;
3534
import jdk.graal.compiler.nodes.ConstantNode;
36-
import jdk.graal.compiler.nodes.FixedGuardNode;
3735
import jdk.graal.compiler.nodes.IfNode;
3836
import jdk.graal.compiler.nodes.LogicConstantNode;
3937
import jdk.graal.compiler.nodes.LogicNode;
4038
import jdk.graal.compiler.nodes.NodeView;
4139
import jdk.graal.compiler.nodes.PhiNode;
42-
import jdk.graal.compiler.nodes.ShortCircuitOrNode;
4340
import jdk.graal.compiler.nodes.StructuredGraph;
4441
import jdk.graal.compiler.nodes.ValueNode;
4542
import jdk.graal.compiler.nodes.calc.CompareNode;
@@ -110,7 +107,12 @@ public void lower(FloatingNode instanceOf, LoweringTool tool) {
110107
*/
111108
protected InstanceOfUsageReplacer createReplacer(FloatingNode instanceOf, Instantiation instantiation, Node usage, final StructuredGraph graph) {
112109
InstanceOfUsageReplacer replacer;
113-
if (!canMaterialize(usage)) {
110+
111+
final boolean mustMaterializeAsConditional = usage instanceof ConditionalNode cn && cn.trueValue().isConstant() && cn.falseValue().isConstant();
112+
if (mustMaterializeAsConditional) {
113+
ConditionalNode c = (ConditionalNode) usage;
114+
replacer = new MaterializationUsageReplacer(instantiation, c.trueValue(), c.falseValue(), instanceOf, c);
115+
} else {
114116
ValueNode trueValue = ConstantNode.forInt(1, graph);
115117
ValueNode falseValue = ConstantNode.forInt(0, graph);
116118
if (instantiation.isInitialized() && (trueValue != instantiation.trueValue || falseValue != instantiation.falseValue)) {
@@ -122,28 +124,10 @@ protected InstanceOfUsageReplacer createReplacer(FloatingNode instanceOf, Instan
122124
falseValue = instantiation.falseValue;
123125
}
124126
replacer = new NonMaterializationUsageReplacer(instantiation, trueValue, falseValue, instanceOf, usage);
125-
} else {
126-
assert usage instanceof ConditionalNode : "unexpected usage of " + instanceOf + ": " + usage;
127-
ConditionalNode c = (ConditionalNode) usage;
128-
replacer = new MaterializationUsageReplacer(instantiation, c.trueValue(), c.falseValue(), instanceOf, c);
129127
}
130128
return replacer;
131129
}
132130

133-
/**
134-
* Determines if an {@code instanceof} usage can be materialized.
135-
*/
136-
protected boolean canMaterialize(Node usage) {
137-
if (usage instanceof ConditionalNode) {
138-
ConditionalNode cn = (ConditionalNode) usage;
139-
return cn.trueValue().isConstant() && cn.falseValue().isConstant();
140-
}
141-
if (usage instanceof IfNode || usage instanceof FixedGuardNode || usage instanceof ShortCircuitOrNode || usage instanceof ConditionAnchorNode) {
142-
return false;
143-
}
144-
return true;
145-
}
146-
147131
/**
148132
* The result of instantiating an instanceof snippet. This enables a snippet instantiation to be
149133
* re-used which reduces compile time and produces better code.

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/truffle/PartialEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ public void doGraphPE(TruffleTierContext context, InlineInvokePlugin inlineInvok
434434
new TruffleSourceLanguagePositionProvider(context.task),
435435
graphCache, getCreateCachedGraphScope());
436436

437-
if (TruffleCompilerOptions.maximumGraalGraphSiteEnabled(context.compilerOptions)) {
437+
if (TruffleCompilerOptions.maximumGraalGraphSizeEnabled(context.compilerOptions)) {
438438
GraphSizeListener listener = new GraphSizeListener(context.compilerOptions, context.graph);
439439
try (Graph.NodeEventScope ignored = context.graph.trackNodeEvents(listener)) {
440440
assert !context.graph.isSubstitution();

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/truffle/TruffleCompilerOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@ public static String validateOption(String key, String uncheckedValue) {
407407
}
408408
}
409409

410-
public static boolean maximumGraalGraphSiteEnabled(OptionValues options) {
410+
public static boolean maximumGraalGraphSizeEnabled(OptionValues options) {
411411
int val = MaximumGraalGraphSize.getValue(options);
412412
return val > 0;
413413
}

0 commit comments

Comments
 (0)