# HG changeset patch # User Stefan Anzinger # Date 1434113528 -7200 # Node ID 49dad3e40b57bfa89a098fff1c48b694653b3909 # Parent c5bcd42183ebe1b17dd3abbcb4a95d8175ba0e73 Convert addresses in ArrayCopyCallNode to word size diff -r c5bcd42183eb -r 49dad3e40b57 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java --- 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)) { diff -r c5bcd42183eb -r 49dad3e40b57 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java --- 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)); }