diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/extended/OpaqueValueNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/extended/OpaqueValueNode.java index 51f8d7a3c574..39da4a377708 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/extended/OpaqueValueNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/extended/OpaqueValueNode.java @@ -35,10 +35,21 @@ import jdk.graal.compiler.nodes.NodeView; import jdk.graal.compiler.nodes.ValueNode; import jdk.graal.compiler.nodes.spi.LIRLowerable; -import jdk.graal.compiler.nodes.spi.NodeLIRBuilderTool; +import jdk.graal.compiler.phases.common.RemoveOpaqueValuePhase; +/** + * This node type acts as an optimization barrier between its input node and its usages. For + * example, a MulNode with two ConstantNodes as input will be canonicalized to a ConstantNode. This + * optimization will be prevented if either of the two constants is wrapped by an OpaqueValueNode. + *
+ *
+ * This node is not {@link LIRLowerable}, so it should be removed from the graph before LIR + * generation. + * + * @see RemoveOpaqueValuePhase + */ @NodeInfo(cycles = CYCLES_0, size = SIZE_0) -public final class OpaqueValueNode extends OpaqueNode implements NodeWithIdentity, LIRLowerable, GuardingNode, IterableNodeType { +public final class OpaqueValueNode extends OpaqueNode implements NodeWithIdentity, GuardingNode, IterableNodeType { public static final NodeClass