< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/UnsafeCompareAndSwapNode.java
Print this page
rev 52509 : [mq]: graal
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -22,80 +22,41 @@
*/
package org.graalvm.compiler.nodes.java;
-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 org.graalvm.compiler.core.common.type.StampFactory;
import org.graalvm.compiler.graph.NodeClass;
import org.graalvm.compiler.nodeinfo.NodeInfo;
+import org.graalvm.compiler.nodes.ConstantNode;
+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.calc.ConditionalNode;
+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 a boolean that contains whether
* the value matched the expected value.
*/
-@NodeInfo(allowedUsageTypes = {Value, Memory}, cycles = CYCLES_8, size = SIZE_8)
-public final class UnsafeCompareAndSwapNode extends AbstractMemoryCheckpoint implements Lowerable, MemoryCheckpoint.Single {
+@NodeInfo
+public final class UnsafeCompareAndSwapNode extends AbstractUnsafeCompareAndSwapNode {
public static final NodeClass<UnsafeCompareAndSwapNode> TYPE = NodeClass.create(UnsafeCompareAndSwapNode.class);
- @Input ValueNode object;
- @Input ValueNode offset;
- @Input ValueNode expected;
- @Input ValueNode newValue;
-
- private final JavaKind valueKind;
- private final LocationIdentity locationIdentity;
public UnsafeCompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, JavaKind valueKind, LocationIdentity locationIdentity) {
- super(TYPE, StampFactory.forKind(JavaKind.Boolean.getStackKind()));
+ super(TYPE, StampFactory.forKind(JavaKind.Boolean.getStackKind()), object, offset, expected, newValue, valueKind, locationIdentity);
assert expected.stamp(NodeView.DEFAULT).isCompatible(newValue.stamp(NodeView.DEFAULT));
- this.object = object;
- this.offset = offset;
- this.expected = expected;
- this.newValue = newValue;
- this.valueKind = valueKind;
- this.locationIdentity = locationIdentity;
- }
-
- 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;
+ protected void finishVirtualize(VirtualizerTool tool, LogicNode equalsNode, ValueNode currentValue) {
+ ValueNode result = ConditionalNode.create(equalsNode, ConstantNode.forBoolean(true, graph()), ConstantNode.forBoolean(false, graph()), NodeView.DEFAULT);
+ if (!result.isAlive()) {
+ tool.addNode(result);
}
-
- @Override
- public void lower(LoweringTool tool) {
- tool.getLowerer().lower(this, tool);
+ tool.replaceWith(result);
}
}
< prev index next >