# HG changeset patch # User Stefan Anzinger # Date 1421405332 -3600 # Node ID 9f85ac52d521c2a4b7c81151ba25b0018fde539b # Parent 7735bac1f7814ae249a47dcbb1641889c0df700e [SPARC] make check for EA more tight diff -r 7735bac1f781 -r 9f85ac52d521 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Thu Jan 15 13:56:34 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeLoadNode.java Fri Jan 16 11:48:52 2015 +0100 @@ -70,8 +70,9 @@ if (entryIndex != -1) { ValueNode entry = state.getEntry(entryIndex); - boolean isLoadSafe = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || accessKind() == entry.getKind(); - if (isLoadSafe && (entry.getKind() == getKind() || state.getVirtualObject().entryKind(entryIndex) == accessKind())) { + Kind entryKind = state.getVirtualObject().entryKind(entryIndex); + boolean isLoadSafe = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || accessKind() == entryKind; + if (isLoadSafe && (entry.getKind() == getKind() || entryKind == accessKind())) { tool.replaceWith(entry); } } diff -r 7735bac1f781 -r 9f85ac52d521 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Thu Jan 15 13:56:34 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeStoreNode.java Fri Jan 16 11:48:52 2015 +0100 @@ -88,7 +88,7 @@ if (entryIndex != -1) { Kind entryKind = state.getVirtualObject().entryKind(entryIndex); ValueNode entry = state.getEntry(entryIndex); - boolean isLoadSafe = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || accessKind() == entry.getKind(); + boolean isLoadSafe = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || accessKind() == entryKind; if (isLoadSafe) { if (entry.getKind() == value.getKind() || entryKind == accessKind()) { tool.setVirtualEntry(state, entryIndex, value(), true); diff -r 7735bac1f781 -r 9f85ac52d521 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Thu Jan 15 13:56:34 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/StoreIndexedNode.java Fri Jan 16 11:48:52 2015 +0100 @@ -22,6 +22,8 @@ */ package com.oracle.graal.nodes.java; +import java.nio.*; + import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.nodeinfo.*; @@ -69,8 +71,11 @@ int idx = indexValue.isConstant() ? indexValue.asJavaConstant().asInt() : -1; if (idx >= 0 && idx < arrayState.getVirtualObject().entryCount()) { ResolvedJavaType componentType = arrayState.getVirtualObject().type().getComponentType(); - if (componentType.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.getSuperclass() == null || - (StampTool.typeOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value)))) { + // isStoreSafe prevents on Little Endian machines to not do an implicit cast of + // primitives (Causes troubles with deoptimization) + boolean isStoreSafe = !componentType.isPrimitive() || ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN || componentType.equals(StampTool.typeOrNull(value)); + if (isStoreSafe && + (componentType.isPrimitive() || StampTool.isPointerAlwaysNull(value) || componentType.getSuperclass() == null || (StampTool.typeOrNull(value) != null && componentType.isAssignableFrom(StampTool.typeOrNull(value))))) { tool.setVirtualEntry(arrayState, idx, value(), false); tool.delete(); }