Mercurial > hg > graal-jvmci-8
changeset 11454:ea7a15d708a8
Allow conditional unsafe load lowering only AFTER_GUARDS (emmit G1 Ref barrier)
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Wed, 28 Aug 2013 15:22:22 +0200 |
parents | 1092208e4986 |
children | dafee8e3eecd |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotRuntime.java |
diffstat | 1 files changed, 7 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- 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;