use of org.graalvm.compiler.nodes.memory.address.OffsetAddressNode in project graal by oracle.
the class DefaultJavaLoweringProvider method lowerCompareAndSwapNode.
protected void lowerCompareAndSwapNode(UnsafeCompareAndSwapNode cas) {
StructuredGraph graph = cas.graph();
JavaKind valueKind = cas.getValueKind();
ValueNode expectedValue = implicitStoreConvert(graph, valueKind, cas.expected());
ValueNode newValue = implicitStoreConvert(graph, valueKind, cas.newValue());
AddressNode address = graph.unique(new OffsetAddressNode(cas.object(), cas.offset()));
LogicCompareAndSwapNode atomicNode = graph.add(new LogicCompareAndSwapNode(address, cas.getLocationIdentity(), expectedValue, newValue, compareAndSwapBarrierType(cas)));
atomicNode.setStateAfter(cas.stateAfter());
graph.replaceFixedWithFixed(cas, atomicNode);
}
use of org.graalvm.compiler.nodes.memory.address.OffsetAddressNode in project graal by oracle.
the class DefaultJavaLoweringProvider method reconstructArrayIndex.
@Override
public ValueNode reconstructArrayIndex(JavaKind elementKind, AddressNode address) {
StructuredGraph graph = address.graph();
ValueNode offset = ((OffsetAddressNode) address).getOffset();
int base = arrayBaseOffset(elementKind);
ValueNode scaledIndex = graph.unique(new SubNode(offset, ConstantNode.forIntegerStamp(offset.stamp(NodeView.DEFAULT), base, graph)));
int shift = CodeUtil.log2(arrayScalingFactor(elementKind));
ValueNode ret = graph.unique(new RightShiftNode(scaledIndex, ConstantNode.forInt(shift, graph)));
return IntegerConvertNode.convert(ret, StampFactory.forKind(JavaKind.Int), graph, NodeView.DEFAULT);
}
use of org.graalvm.compiler.nodes.memory.address.OffsetAddressNode in project graal by oracle.
the class ObjectAccessTest method assertRead.
private static void assertRead(StructuredGraph graph, JavaKind kind, boolean indexConvert, LocationIdentity locationIdentity) {
JavaReadNode read = (JavaReadNode) graph.start().next();
Assert.assertEquals(kind.getStackKind(), read.stamp(NodeView.DEFAULT).getStackKind());
OffsetAddressNode address = (OffsetAddressNode) read.getAddress();
Assert.assertEquals(graph.getParameter(0), address.getBase());
Assert.assertEquals(locationIdentity, read.getLocationIdentity());
if (indexConvert) {
SignExtendNode convert = (SignExtendNode) address.getOffset();
Assert.assertEquals(convert.getInputBits(), 32);
Assert.assertEquals(convert.getResultBits(), 64);
Assert.assertEquals(graph.getParameter(1), convert.getValue());
} else {
Assert.assertEquals(graph.getParameter(1), address.getOffset());
}
ReturnNode ret = (ReturnNode) read.next();
Assert.assertEquals(read, ret.result());
}
use of org.graalvm.compiler.nodes.memory.address.OffsetAddressNode in project graal by oracle.
the class ObjectAccessTest method assertWrite.
private static void assertWrite(StructuredGraph graph, boolean indexConvert, LocationIdentity locationIdentity) {
JavaWriteNode write = (JavaWriteNode) graph.start().next();
Assert.assertEquals(graph.getParameter(2), write.value());
OffsetAddressNode address = (OffsetAddressNode) write.getAddress();
Assert.assertEquals(graph.getParameter(0), address.getBase());
Assert.assertEquals(BytecodeFrame.AFTER_BCI, write.stateAfter().bci);
Assert.assertEquals(locationIdentity, write.getLocationIdentity());
if (indexConvert) {
SignExtendNode convert = (SignExtendNode) address.getOffset();
Assert.assertEquals(convert.getInputBits(), 32);
Assert.assertEquals(convert.getResultBits(), 64);
Assert.assertEquals(graph.getParameter(1), convert.getValue());
} else {
Assert.assertEquals(graph.getParameter(1), address.getOffset());
}
ReturnNode ret = (ReturnNode) write.next();
Assert.assertEquals(null, ret.result());
}
use of org.graalvm.compiler.nodes.memory.address.OffsetAddressNode in project graal by oracle.
the class PointerTest method assertRead.
private void assertRead(StructuredGraph graph, JavaKind kind, boolean indexConvert, LocationIdentity locationIdentity) {
WordCastNode cast = (WordCastNode) graph.start().next();
JavaReadNode read = (JavaReadNode) cast.next();
Assert.assertEquals(kind.getStackKind(), read.stamp(NodeView.DEFAULT).getStackKind());
OffsetAddressNode address = (OffsetAddressNode) read.getAddress();
Assert.assertEquals(cast, address.getBase());
Assert.assertEquals(graph.getParameter(0), cast.getInput());
Assert.assertEquals(target.wordJavaKind, cast.stamp(NodeView.DEFAULT).getStackKind());
Assert.assertEquals(locationIdentity, read.getLocationIdentity());
if (indexConvert) {
SignExtendNode convert = (SignExtendNode) address.getOffset();
Assert.assertEquals(convert.getInputBits(), 32);
Assert.assertEquals(convert.getResultBits(), 64);
Assert.assertEquals(graph.getParameter(1), convert.getValue());
} else {
Assert.assertEquals(graph.getParameter(1), address.getOffset());
}
ReturnNode ret = (ReturnNode) read.next();
Assert.assertEquals(read, ret.result());
}
Aggregations