src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java Mon Jun 18 16:13:21 2018 +0200
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.virtual/src/org/graalvm/compiler/virtual/phases/ea/PEReadEliminationClosure.java Mon Jun 18 09:48:22 2018 -0700
@@ -244,29 +244,9 @@
return processLoad(load, load.object(), new FieldLocationIdentity(load.field()), -1, load.field().getJavaKind(), state, effects);
}
- private static JavaKind getElementKindFromStamp(ValueNode array) {
- ResolvedJavaType type = StampTool.typeOrNull(array);
- if (type != null && type.isArray()) {
- return type.getComponentType().getJavaKind();
- } else {
- // It is likely an OSRLocal without valid stamp
- return JavaKind.Illegal;
- }
- }
-
private boolean processStoreIndexed(StoreIndexedNode store, PEReadEliminationBlockState state, GraphEffectList effects) {
int index = store.index().isConstant() ? ((JavaConstant) store.index().asConstant()).asInt() : -1;
- // BASTORE (with elementKind being Byte) can be used to store values in boolean arrays.
JavaKind elementKind = store.elementKind();
- if (elementKind == JavaKind.Byte) {
- elementKind = getElementKindFromStamp(store.array());
- if (elementKind == JavaKind.Illegal) {
- // Could not determine the actual access kind from stamp. Hence kill both.
- state.killReadCache(NamedLocationIdentity.getArrayLocation(JavaKind.Boolean), index);
- state.killReadCache(NamedLocationIdentity.getArrayLocation(JavaKind.Byte), index);
- return false;
- }
- }
LocationIdentity arrayLocation = NamedLocationIdentity.getArrayLocation(elementKind);
if (index != -1) {
return processStore(store, store.array(), arrayLocation, index, elementKind, false, store.value(), state, effects);
@@ -279,15 +259,7 @@
private boolean processLoadIndexed(LoadIndexedNode load, PEReadEliminationBlockState state, GraphEffectList effects) {
if (load.index().isConstant()) {
int index = ((JavaConstant) load.index().asConstant()).asInt();
- // BALOAD (with elementKind being Byte) can be used to retrieve values from boolean
- // arrays.
JavaKind elementKind = load.elementKind();
- if (elementKind == JavaKind.Byte) {
- elementKind = getElementKindFromStamp(load.array());
- if (elementKind == JavaKind.Illegal) {
- return false;
- }
- }
LocationIdentity arrayLocation = NamedLocationIdentity.getArrayLocation(elementKind);
return processLoad(load, load.array(), arrayLocation, index, elementKind, state, effects);
}