changeset 21936:49dad3e40b57

Convert addresses in ArrayCopyCallNode to word size
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Fri, 12 Jun 2015 14:52:08 +0200
parents c5bcd42183eb
children e701664f4168
files graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java
diffstat 2 files changed, 6 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java	Fri Jun 12 14:42:29 2015 +0200
+++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java	Fri Jun 12 14:52:08 2015 +0200
@@ -48,14 +48,14 @@
     public AddressNode lower(ValueNode base, ValueNode offset) {
         JavaConstant immBase = asImmediate(base);
         if (immBase != null && SPARCAssembler.isSimm13(immBase)) {
-            return lower(signExtend(offset), immBase.asLong());
+            return lower(offset, immBase.asLong());
         }
 
         JavaConstant immOffset = asImmediate(offset);
         if (immOffset != null && SPARCAssembler.isSimm13(immOffset)) {
             return lower(base, immOffset.asLong());
         }
-        return base.graph().unique(new SPARCIndexedAddressNode(base, signExtend(offset)));
+        return base.graph().unique(new SPARCIndexedAddressNode(base, offset));
     }
 
     private AddressNode lower(ValueNode base, long displacement) {
@@ -81,10 +81,6 @@
         return base.graph().unique(new SPARCImmediateAddressNode(base, (int) displacement));
     }
 
-    private static SignExtendNode signExtend(ValueNode node) {
-        return node.graph().unique(new SignExtendNode(node, Kind.Long.getBitCount()));
-    }
-
     private JavaConstant asImmediate(ValueNode value) {
         JavaConstant c = value.asJavaConstant();
         if (c != null && c.getKind().isNumericInteger() && !codeCache.needsDataPatch(c)) {
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java	Fri Jun 12 14:42:29 2015 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java	Fri Jun 12 14:52:08 2015 +0200
@@ -121,9 +121,11 @@
         FixedWithNextNode basePtr = graph().add(new GetObjectAddressNode(base));
         graph().addBeforeFixed(this, basePtr);
         HotSpotJVMCIRuntimeProvider jvmciRuntime = runtime.getJVMCIRuntime();
+        Stamp wordStamp = StampFactory.forKind(runtime.getTarget().wordKind);
+        ValueNode wordPos = IntegerConvertNode.convert(pos, wordStamp, graph());
         int shift = CodeUtil.log2(jvmciRuntime.getArrayIndexScale(elementKind));
-        ValueNode scaledIndex = graph().unique(new LeftShiftNode(pos, ConstantNode.forInt(shift, graph())));
-        ValueNode offset = graph().unique(new AddNode(scaledIndex, ConstantNode.forInt(jvmciRuntime.getArrayBaseOffset(elementKind), graph())));
+        ValueNode scaledIndex = graph().unique(new LeftShiftNode(wordPos, ConstantNode.forInt(shift, graph())));
+        ValueNode offset = graph().unique(new AddNode(scaledIndex, ConstantNode.forIntegerStamp(wordStamp, jvmciRuntime.getArrayBaseOffset(elementKind), graph())));
         return graph().unique(new OffsetAddressNode(basePtr, offset));
     }