# HG changeset patch # User Tom Rodriguez # Date 1398212724 25200 # Node ID c2f715edadecfe878ca69aee89a00a7671a58da4 # Parent 0c9406f9338fd0e1ff16d9e05625f0da242ef219 fix code to improve unsafe array location identity diff -r 0c9406f9338f -r c2f715edadec graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Tue Apr 22 16:41:46 2014 -0700 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/UnsafeAccessNode.java Tue Apr 22 17:25:24 2014 -0700 @@ -79,15 +79,15 @@ } } } - // Temporarily disable this as it appears to break truffle. - // ResolvedJavaType receiverType = StampTool.typeOrNull(object()); - // if (receiverType != null && receiverType.isArray()) { - // LocationIdentity identity = - // NamedLocationIdentity.getArrayLocation(receiverType.getComponentType().getKind()); - // // Try to build a better location node - // ValueNode location = offset(); - // return cloneAsArrayAccess(location, identity); - // } + if (this.getLocationIdentity() == LocationIdentity.ANY_LOCATION) { + ResolvedJavaType receiverType = StampTool.typeOrNull(object()); + // Try to build a better location identity. + if (receiverType != null && receiverType.isArray()) { + LocationIdentity identity = NamedLocationIdentity.getArrayLocation(receiverType.getComponentType().getKind()); + assert !graph().isAfterFloatingReadPhase() : "cannot add more precise memory location after floating read phase"; + return cloneAsArrayAccess(offset(), identity); + } + } return this; }