< 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 **** /* ! * Copyright (c) 2011, 2016, 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. --- 1,7 ---- /* ! * 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,101 **** */ 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.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 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 { 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())); 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; } ! ! @Override ! public void lower(LoweringTool tool) { ! tool.getLowerer().lower(this, tool); } } --- 22,62 ---- */ package org.graalvm.compiler.nodes.java; 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.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 ! public final class UnsafeCompareAndSwapNode extends AbstractUnsafeCompareAndSwapNode { public static final NodeClass<UnsafeCompareAndSwapNode> TYPE = NodeClass.create(UnsafeCompareAndSwapNode.class); public UnsafeCompareAndSwapNode(ValueNode object, ValueNode offset, ValueNode expected, ValueNode newValue, JavaKind valueKind, LocationIdentity locationIdentity) { ! super(TYPE, StampFactory.forKind(JavaKind.Boolean.getStackKind()), object, offset, expected, newValue, valueKind, locationIdentity); assert expected.stamp(NodeView.DEFAULT).isCompatible(newValue.stamp(NodeView.DEFAULT)); } @Override ! 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); } ! tool.replaceWith(result); } }
< prev index next >