< 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 >