# HG changeset patch # User Christos Kotselidis # Date 1377696142 -7200 # Node ID ea7a15d708a850b6167cc81d204ef69f2faf6fb5 # Parent 1092208e498663aa89a786b56f50b4fcb934a3c9 Allow conditional unsafe load lowering only AFTER_GUARDS (emmit G1 Ref barrier) diff -r 1092208e4986 -r ea7a15d708a8 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Wed Aug 28 13:45:02 2013 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java Wed Aug 28 15:22:22 2013 +0200 @@ -643,7 +643,7 @@ UnsafeLoadNode load = (UnsafeLoadNode) n; assert load.kind() != Kind.Illegal; boolean compressible = (!load.object().isNullConstant() && load.accessKind() == Kind.Object); - if (addReadBarrier(load)) { + if (addReadBarrier(load, tool)) { unsafeLoadSnippets.lower(load, tool); } else { IndexedLocationNode location = IndexedLocationNode.create(ANY_LOCATION, load.accessKind(), load.displacement(), load.offset(), graph, 1); @@ -852,13 +852,12 @@ } } - private static boolean addReadBarrier(UnsafeLoadNode load) { - if (useG1GC()) { - if (load.object().kind() == Kind.Object && load.accessKind() == Kind.Object && !ObjectStamp.isObjectAlwaysNull(load.object())) { - ResolvedJavaType type = ObjectStamp.typeOrNull(load.object()); - if (type != null && !type.isArray()) { - return true; - } + private static boolean addReadBarrier(UnsafeLoadNode load, LoweringTool tool) { + if (useG1GC() && tool.getLoweringType() == LoweringType.AFTER_GUARDS && load.object().kind() == Kind.Object && load.accessKind() == Kind.Object && + !ObjectStamp.isObjectAlwaysNull(load.object())) { + ResolvedJavaType type = ObjectStamp.typeOrNull(load.object()); + if (type != null && !type.isArray()) { + return true; } } return false;