< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/StandardGraphBuilderPlugins.java
Print this page
@@ -28,10 +28,11 @@
import static jdk.vm.ci.code.MemoryBarriers.JMM_PRE_VOLATILE_WRITE;
import static jdk.vm.ci.code.MemoryBarriers.LOAD_LOAD;
import static jdk.vm.ci.code.MemoryBarriers.LOAD_STORE;
import static jdk.vm.ci.code.MemoryBarriers.STORE_LOAD;
import static jdk.vm.ci.code.MemoryBarriers.STORE_STORE;
+import static org.graalvm.compiler.nodes.NamedLocationIdentity.OFF_HEAP_LOCATION;
import static org.graalvm.compiler.serviceprovider.JDK9Method.Java8OrEarlier;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.Arrays;
@@ -648,11 +649,11 @@
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode address) {
// Emits a null-check for the otherwise unused receiver
unsafe.get();
- b.addPush(returnKind, new UnsafeMemoryLoadNode(address, returnKind, LocationIdentity.any()));
+ b.addPush(returnKind, new UnsafeMemoryLoadNode(address, returnKind, OFF_HEAP_LOCATION));
b.getGraph().markUnsafeAccess();
return true;
}
@Override
@@ -660,11 +661,12 @@
// Emits a null-check for the otherwise unused receiver
unsafe.get();
if (isVolatile) {
b.add(new MembarNode(JMM_PRE_VOLATILE_READ));
}
- b.addPush(returnKind, new RawLoadNode(object, offset, returnKind, LocationIdentity.any()));
+ LocationIdentity locationIdentity = object.isNullConstant() ? OFF_HEAP_LOCATION : LocationIdentity.any();
+ b.addPush(returnKind, new RawLoadNode(object, offset, returnKind, locationIdentity));
if (isVolatile) {
b.add(new MembarNode(JMM_POST_VOLATILE_READ));
}
b.getGraph().markUnsafeAccess();
return true;
@@ -683,11 +685,11 @@
@Override
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver unsafe, ValueNode address, ValueNode value) {
// Emits a null-check for the otherwise unused receiver
unsafe.get();
- b.add(new UnsafeMemoryStoreNode(address, value, kind, LocationIdentity.any()));
+ b.add(new UnsafeMemoryStoreNode(address, value, kind, OFF_HEAP_LOCATION));
b.getGraph().markUnsafeAccess();
return true;
}
@Override
@@ -695,11 +697,12 @@
// Emits a null-check for the otherwise unused receiver
unsafe.get();
if (isVolatile) {
b.add(new MembarNode(JMM_PRE_VOLATILE_WRITE));
}
- b.add(new RawStoreNode(object, offset, value, kind, LocationIdentity.any()));
+ LocationIdentity locationIdentity = object.isNullConstant() ? OFF_HEAP_LOCATION : LocationIdentity.any();
+ b.add(new RawStoreNode(object, offset, value, kind, locationIdentity));
if (isVolatile) {
b.add(new MembarNode(JMM_POST_VOLATILE_WRITE));
}
b.getGraph().markUnsafeAccess();
return true;
< prev index next >