< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/UnsafeCompareAndExchangeNode.java

Print this page
rev 52509 : [mq]: graal

*** 22,104 **** */ package org.graalvm.compiler.nodes.java; - import jdk.vm.ci.meta.JavaKind; import org.graalvm.compiler.core.common.type.Stamp; import org.graalvm.compiler.graph.NodeClass; import org.graalvm.compiler.nodeinfo.NodeInfo; import org.graalvm.compiler.nodes.NodeView; import org.graalvm.compiler.nodes.ValueNode; ! import org.graalvm.compiler.nodes.memory.AbstractMemoryCheckpoint; ! import org.graalvm.compiler.nodes.memory.MemoryCheckpoint; ! import org.graalvm.compiler.nodes.spi.Lowerable; ! import org.graalvm.compiler.nodes.spi.LoweringTool; import jdk.internal.vm.compiler.word.LocationIdentity; ! import static org.graalvm.compiler.nodeinfo.InputType.Memory; ! import static org.graalvm.compiler.nodeinfo.InputType.Value; ! import static org.graalvm.compiler.nodeinfo.NodeCycles.CYCLES_8; ! import static org.graalvm.compiler.nodeinfo.NodeSize.SIZE_8; /** * Represents an atomic compare-and-swap operation. The result is the current value of the memory * location that was compared. */ ! @NodeInfo(allowedUsageTypes = {Value, Memory}, cycles = CYCLES_8, size = SIZE_8) ! public final class UnsafeCompareAndExchangeNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single { public static final NodeClass<UnsafeCompareAndExchangeNode> TYPE = NodeClass.create(UnsafeCompareAndExchangeNode.class); - @Input ValueNode object; - @Input ValueNode offset; - @Input ValueNode expected; - @Input ValueNode newValue; - - private final JavaKind valueKind; - private final LocationIdentity locationIdentity; public UnsafeCompareAndExchangeNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, JavaKind valueKind, LocationIdentity locationIdentity) { ! super(TYPE, meetInputs(expected.stamp(NodeView.DEFAULT), newValue.stamp(NodeView.DEFAULT))); ! this.object = object; ! this.offset = offset; ! this.expected = expected; ! this.newValue = newValue; ! this.valueKind = valueKind; ! this.locationIdentity = locationIdentity; } private static Stamp meetInputs(Stamp expected, Stamp newValue) { assert expected.isCompatible(newValue); return expected.unrestricted().meet(newValue.unrestricted()); } - public ValueNode object() { - return object; - } - - public ValueNode offset() { - return offset; - } - - public ValueNode expected() { - return expected; - } - - public ValueNode newValue() { - return newValue; - } - - public JavaKind getValueKind() { - return valueKind; - } - - @Override - public LocationIdentity getLocationIdentity() { - return locationIdentity; - } - @Override ! public void lower(LoweringTool tool) { ! tool.getLowerer().lower(this, tool); } } --- 22,60 ---- */ package org.graalvm.compiler.nodes.java; import org.graalvm.compiler.core.common.type.Stamp; import org.graalvm.compiler.graph.NodeClass; import org.graalvm.compiler.nodeinfo.NodeInfo; + import org.graalvm.compiler.nodes.LogicNode; import org.graalvm.compiler.nodes.NodeView; import org.graalvm.compiler.nodes.ValueNode; ! import org.graalvm.compiler.nodes.spi.VirtualizerTool; import jdk.internal.vm.compiler.word.LocationIdentity; ! import jdk.vm.ci.meta.JavaKind; /** * Represents an atomic compare-and-swap operation. The result is the current value of the memory * location that was compared. */ ! @NodeInfo ! public final class UnsafeCompareAndExchangeNode extends AbstractUnsafeCompareAndSwapNode { public static final NodeClass<UnsafeCompareAndExchangeNode> TYPE = NodeClass.create(UnsafeCompareAndExchangeNode.class); public UnsafeCompareAndExchangeNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, JavaKind valueKind, LocationIdentity locationIdentity) { ! super(TYPE, meetInputs(expected.stamp(NodeView.DEFAULT), newValue.stamp(NodeView.DEFAULT)), object, offset, expected, newValue, valueKind, locationIdentity); } private static Stamp meetInputs(Stamp expected, Stamp newValue) { assert expected.isCompatible(newValue); return expected.unrestricted().meet(newValue.unrestricted()); } @Override ! protected void finishVirtualize(VirtualizerTool tool, LogicNode equalsNode, ValueNode currentValue) { ! tool.replaceWith(currentValue); } }
< prev index next >