< 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,83 +22,39 @@
*/
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.LogicNode;
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 org.graalvm.compiler.nodes.spi.VirtualizerTool;
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;
+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(allowedUsageTypes = {Value, Memory}, cycles = CYCLES_8, size = SIZE_8)
-public final class UnsafeCompareAndExchangeNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single {
+@NodeInfo
+public final class UnsafeCompareAndExchangeNode extends AbstractUnsafeCompareAndSwapNode {
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;
+ 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());
}
- 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);
+ protected void finishVirtualize(VirtualizerTool tool, LogicNode equalsNode, ValueNode currentValue) {
+ tool.replaceWith(currentValue);
}
}
< prev index next >