# HG changeset patch # User Doug Simon # Date 1432331915 -7200 # Node ID 513f8d0ae27d2db7c6afd1e7c4c6d7a2bc5be457 # Parent 07b088d61d5dea01722f8fb7d3ae0fd0427fbc97 merge fixes diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Fri May 22 23:58:35 2015 +0200 @@ -32,8 +32,6 @@ import java.lang.reflect.*; import java.util.*; -import sun.misc.*; - import com.oracle.graal.api.code.*; import com.oracle.graal.api.code.stack.*; import com.oracle.graal.api.collections.*; @@ -92,14 +90,14 @@ } private boolean checkArrayIndexScaleInvariants() { - assert getArrayIndexScale(Kind.Byte) == 1; - assert getArrayIndexScale(Kind.Boolean) == 1; - assert getArrayIndexScale(Kind.Char) == 2; - assert getArrayIndexScale(Kind.Short) == 2; - assert getArrayIndexScale(Kind.Int) == 4; - assert getArrayIndexScale(Kind.Long) == 8; - assert getArrayIndexScale(Kind.Float) == 4; - assert getArrayIndexScale(Kind.Double) == 8; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Byte) == 1; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Boolean) == 1; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Char) == 2; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Short) == 2; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Int) == 4; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Long) == 8; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Float) == 4; + assert getJVMCIRuntime().getArrayIndexScale(Kind.Double) == 8; return true; } @@ -414,56 +412,6 @@ return Collections.unmodifiableMap(backends); } - public int getArrayBaseOffset(Kind kind) { - switch (kind) { - case Boolean: - return Unsafe.ARRAY_BOOLEAN_BASE_OFFSET; - case Byte: - return Unsafe.ARRAY_BYTE_BASE_OFFSET; - case Char: - return Unsafe.ARRAY_CHAR_BASE_OFFSET; - case Short: - return Unsafe.ARRAY_SHORT_BASE_OFFSET; - case Int: - return Unsafe.ARRAY_INT_BASE_OFFSET; - case Long: - return Unsafe.ARRAY_LONG_BASE_OFFSET; - case Float: - return Unsafe.ARRAY_FLOAT_BASE_OFFSET; - case Double: - return Unsafe.ARRAY_DOUBLE_BASE_OFFSET; - case Object: - return Unsafe.ARRAY_OBJECT_BASE_OFFSET; - default: - throw GraalInternalError.shouldNotReachHere(); - } - } - - public int getArrayIndexScale(Kind kind) { - switch (kind) { - case Boolean: - return Unsafe.ARRAY_BOOLEAN_INDEX_SCALE; - case Byte: - return Unsafe.ARRAY_BYTE_INDEX_SCALE; - case Char: - return Unsafe.ARRAY_CHAR_INDEX_SCALE; - case Short: - return Unsafe.ARRAY_SHORT_INDEX_SCALE; - case Int: - return Unsafe.ARRAY_INT_INDEX_SCALE; - case Long: - return Unsafe.ARRAY_LONG_INDEX_SCALE; - case Float: - return Unsafe.ARRAY_FLOAT_INDEX_SCALE; - case Double: - return Unsafe.ARRAY_DOUBLE_INDEX_SCALE; - case Object: - return Unsafe.ARRAY_OBJECT_INDEX_SCALE; - default: - throw GraalInternalError.shouldNotReachHere(); - } - } - @Override public T iterateFrames(ResolvedJavaMethod[] initialMethods, ResolvedJavaMethod[] matchingMethods, int initialSkip, InspectedFrameVisitor visitor) { final long[] initialMetaMethods = toMeta(initialMethods); diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Fri May 22 23:58:35 2015 +0200 @@ -77,20 +77,6 @@ HotSpotBackend getHostBackend(); /** - * The offset from the origin of an array to the first element. - * - * @return the offset in bytes - */ - int getArrayBaseOffset(Kind kind); - - /** - * The scale used for the index when accessing elements of an array of this kind. - * - * @return the scale in order to convert the index into a byte offset - */ - int getArrayIndexScale(Kind kind); - - /** * Gets the Graal mirror for a {@link Class} object. * * @return the {@link ResolvedJavaType} corresponding to {@code javaClass} diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantReflectionProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantReflectionProvider.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotConstantReflectionProvider.java Fri May 22 23:58:35 2015 +0200 @@ -106,7 +106,7 @@ return -1; } Class componentType = ((HotSpotObjectConstantImpl) array).object().getClass().getComponentType(); - Kind kind = runtime.getHostProviders().getMetaAccess().lookupJavaType(componentType).getKind(); + Kind kind = runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType(componentType).getKind(); int arraybase = runtime.getArrayBaseOffset(kind); int scale = runtime.getArrayIndexScale(kind); if (offset < arraybase) { diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntimeProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntimeProvider.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotJVMCIRuntimeProvider.java Fri May 22 23:58:35 2015 +0200 @@ -22,6 +22,8 @@ */ package com.oracle.graal.hotspot.jvmci; +import sun.misc.*; + import com.oracle.graal.api.meta.*; import com.oracle.jvmci.runtime.*; @@ -57,4 +59,64 @@ * @return the {@link ResolvedJavaType} corresponding to {@code javaClass} */ ResolvedJavaType fromClass(Class clazz); + + /** + * The offset from the origin of an array to the first element. + * + * @return the offset in bytes + */ + default int getArrayBaseOffset(Kind kind) { + switch (kind) { + case Boolean: + return Unsafe.ARRAY_BOOLEAN_BASE_OFFSET; + case Byte: + return Unsafe.ARRAY_BYTE_BASE_OFFSET; + case Char: + return Unsafe.ARRAY_CHAR_BASE_OFFSET; + case Short: + return Unsafe.ARRAY_SHORT_BASE_OFFSET; + case Int: + return Unsafe.ARRAY_INT_BASE_OFFSET; + case Long: + return Unsafe.ARRAY_LONG_BASE_OFFSET; + case Float: + return Unsafe.ARRAY_FLOAT_BASE_OFFSET; + case Double: + return Unsafe.ARRAY_DOUBLE_BASE_OFFSET; + case Object: + return Unsafe.ARRAY_OBJECT_BASE_OFFSET; + default: + throw new InternalError(kind.toString()); + } + } + + /** + * The scale used for the index when accessing elements of an array of this kind. + * + * @return the scale in order to convert the index into a byte offset + */ + default int getArrayIndexScale(Kind kind) { + switch (kind) { + case Boolean: + return Unsafe.ARRAY_BOOLEAN_INDEX_SCALE; + case Byte: + return Unsafe.ARRAY_BYTE_INDEX_SCALE; + case Char: + return Unsafe.ARRAY_CHAR_INDEX_SCALE; + case Short: + return Unsafe.ARRAY_SHORT_INDEX_SCALE; + case Int: + return Unsafe.ARRAY_INT_INDEX_SCALE; + case Long: + return Unsafe.ARRAY_LONG_INDEX_SCALE; + case Float: + return Unsafe.ARRAY_FLOAT_INDEX_SCALE; + case Double: + return Unsafe.ARRAY_DOUBLE_INDEX_SCALE; + case Object: + return Unsafe.ARRAY_OBJECT_INDEX_SCALE; + default: + throw new InternalError(kind.toString()); + } + } } diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotMetaAccessProvider.java Fri May 22 23:58:35 2015 +0200 @@ -23,7 +23,6 @@ package com.oracle.graal.hotspot.jvmci; import static com.oracle.graal.compiler.common.UnsafeAccess.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.jvmci.HotSpotResolvedJavaType.*; import static com.oracle.graal.hotspot.jvmci.HotSpotResolvedObjectTypeImpl.*; @@ -32,7 +31,6 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; -import com.oracle.graal.hotspot.*; import com.oracle.graal.hotspot.replacements.*; /** @@ -295,9 +293,10 @@ int length = Array.getLength(((HotSpotObjectConstantImpl) constant).object()); ResolvedJavaType elementType = lookupJavaType.getComponentType(); Kind elementKind = elementType.getKind(); - final int headerSize = runtime().getArrayBaseOffset(elementKind); - int sizeOfElement = HotSpotGraalRuntime.runtime().getTarget().getSizeInBytes(elementKind); - int alignment = HotSpotGraalRuntime.runtime().getTarget().wordSize; + final int headerSize = runtime.getArrayBaseOffset(elementKind); + TargetDescription target = runtime.getHostJVMCIBackend().getTarget(); + int sizeOfElement = target.getSizeInBytes(elementKind); + int alignment = target.wordSize; int log2ElementSize = CodeUtil.log2(sizeOfElement); return NewObjectSnippets.computeArrayAllocationSize(length, alignment, headerSize, log2ElementSize); } diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaType.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaType.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedJavaType.java Fri May 22 23:58:35 2015 +0200 @@ -22,7 +22,7 @@ */ package com.oracle.graal.hotspot.jvmci; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; import com.oracle.graal.api.meta.*; diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotResolvedObjectTypeImpl.java Fri May 22 23:58:35 2015 +0200 @@ -23,7 +23,7 @@ package com.oracle.graal.hotspot.jvmci; import static com.oracle.graal.compiler.common.UnsafeAccess.*; -import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; +import static com.oracle.graal.hotspot.jvmci.HotSpotJVMCIRuntime.*; import static java.util.Objects.*; import java.lang.annotation.*; @@ -795,7 +795,7 @@ * Gets the metaspace Klass boxed in a {@link JavaConstant}. */ public JavaConstant klass() { - return HotSpotMetaspaceConstantImpl.forMetaspaceObject(runtime().getTarget().wordKind, getMetaspaceKlass(), this, false); + return HotSpotMetaspaceConstantImpl.forMetaspaceObject(runtime().getHostJVMCIBackend().getTarget().wordKind, getMetaspaceKlass(), this, false); } public boolean isPrimaryType() { @@ -866,7 +866,7 @@ Constructor[] constructors = mirror().getDeclaredConstructors(); ResolvedJavaMethod[] result = new ResolvedJavaMethod[constructors.length]; for (int i = 0; i < constructors.length; i++) { - result[i] = runtime().getHostProviders().getMetaAccess().lookupJavaMethod(constructors[i]); + result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(constructors[i]); assert result[i].isConstructor(); } return result; @@ -877,7 +877,7 @@ Method[] methods = mirror().getDeclaredMethods(); ResolvedJavaMethod[] result = new ResolvedJavaMethod[methods.length]; for (int i = 0; i < methods.length; i++) { - result[i] = runtime().getHostProviders().getMetaAccess().lookupJavaMethod(methods[i]); + result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(methods[i]); assert !result[i].isConstructor(); } return result; diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Fri May 22 23:58:35 2015 +0200 @@ -522,7 +522,7 @@ @Override protected int arrayBaseOffset(Kind kind) { - return runtime.getArrayBaseOffset(kind); + return runtime.getJVMCIRuntime().getArrayBaseOffset(kind); } @Override diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Fri May 22 23:58:35 2015 +0200 @@ -429,12 +429,12 @@ @Fold public static int arrayBaseOffset(Kind elementKind) { - return runtime().getArrayBaseOffset(elementKind); + return runtime().getJVMCIRuntime().getArrayBaseOffset(elementKind); } @Fold public static int arrayIndexScale(Kind elementKind) { - return runtime().getArrayIndexScale(elementKind); + return runtime().getJVMCIRuntime().getArrayIndexScale(elementKind); } @Fold diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Fri May 22 23:58:35 2015 +0200 @@ -447,7 +447,7 @@ HotSpotResolvedObjectType arrayType = (HotSpotResolvedObjectType) elementType.getArrayClass(); Kind elementKind = elementType.getKind(); ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), arrayType.klass(), providers.getMetaAccess(), graph); - final int headerSize = runtime.getArrayBaseOffset(elementKind); + final int headerSize = runtime.getJVMCIRuntime().getArrayBaseOffset(elementKind); HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer(); int log2ElementSize = CodeUtil.log2(lowerer.arrayScalingFactor(elementKind)); diff -r 07b088d61d5d -r 513f8d0ae27d 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 May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopyCallNode.java Fri May 22 23:58:35 2015 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.jvmci.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.nodeinfo.*; @@ -117,7 +118,7 @@ private ValueNode computeBase(ValueNode base, ValueNode pos) { FixedWithNextNode basePtr = graph().add(new GetObjectAddressNode(base)); graph().addBeforeFixed(this, basePtr); - ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), runtime.getArrayBaseOffset(elementKind), pos, runtime.getArrayIndexScale(elementKind))); + ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), runtime.getJVMCIRuntime().getArrayBaseOffset(elementKind), pos, runtime.getJVMCIRuntime().getArrayIndexScale(elementKind))); return graph().unique(new ComputeAddressNode(basePtr, loc, StampFactory.forKind(Kind.Long))); } @@ -192,7 +193,8 @@ } boolean isHeapWordAligned(JavaConstant value, Kind kind) { - return (runtime.getArrayBaseOffset(kind) + (long) value.asInt() * runtime.getArrayIndexScale(kind)) % runtime.getConfig().heapWordSize == 0; + HotSpotJVMCIRuntimeProvider jvmciRuntime = runtime.getJVMCIRuntime(); + return (jvmciRuntime.getArrayBaseOffset(kind) + (long) value.asInt() * jvmciRuntime.getArrayIndexScale(kind)) % runtime.getConfig().heapWordSize == 0; } public void updateAlignedDisjoint() { diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/ArrayCopySnippets.java Fri May 22 23:58:35 2015 +0200 @@ -37,6 +37,7 @@ import com.oracle.graal.debug.*; import com.oracle.graal.debug.Debug.Scope; import com.oracle.graal.graph.*; +import com.oracle.graal.hotspot.jvmci.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.type.*; import com.oracle.graal.hotspot.word.*; diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/arraycopy/CheckcastArrayCopyCallNode.java Fri May 22 23:58:35 2015 +0200 @@ -27,6 +27,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.hotspot.*; +import com.oracle.graal.hotspot.jvmci.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.hotspot.nodes.*; import com.oracle.graal.nodeinfo.*; @@ -94,7 +95,8 @@ private ValueNode computeBase(ValueNode base, ValueNode pos) { FixedWithNextNode basePtr = graph().add(new GetObjectAddressNode(base)); graph().addBeforeFixed(this, basePtr); - ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), runtime.getArrayBaseOffset(Kind.Object), pos, runtime.getArrayIndexScale(Kind.Object))); + HotSpotJVMCIRuntimeProvider jvmciRuntime = runtime.getJVMCIRuntime(); + ValueNode loc = graph().unique(new IndexedLocationNode(getLocationIdentity(), jvmciRuntime.getArrayBaseOffset(Kind.Object), pos, jvmciRuntime.getArrayIndexScale(Kind.Object))); return graph().unique(new ComputeAddressNode(basePtr, loc, StampFactory.forKind(Kind.Long))); } diff -r 07b088d61d5d -r 513f8d0ae27d graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/NativeCallStubGraphBuilder.java --- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/NativeCallStubGraphBuilder.java Fri May 22 23:26:20 2015 +0200 +++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/nfi/NativeCallStubGraphBuilder.java Fri May 22 23:58:35 2015 +0200 @@ -29,6 +29,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.*; import com.oracle.graal.compiler.common.type.*; +import com.oracle.graal.hotspot.jvmci.*; import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.StructuredGraph.AllowAssumptions; @@ -115,9 +116,10 @@ // array value Kind arrayElementKind = getElementKind(type); LocationIdentity locationIdentity = NamedLocationIdentity.getArrayLocation(arrayElementKind); - int displacement = runtime().getArrayBaseOffset(arrayElementKind); + HotSpotJVMCIRuntimeProvider jvmciRuntime = runtime().getJVMCIRuntime(); + int displacement = jvmciRuntime.getArrayBaseOffset(arrayElementKind); ConstantNode index = ConstantNode.forInt(0, g); - int indexScaling = runtime().getArrayIndexScale(arrayElementKind); + int indexScaling = jvmciRuntime.getArrayIndexScale(arrayElementKind); IndexedLocationNode locationNode = g.unique(new IndexedLocationNode(locationIdentity, displacement, index, indexScaling)); Stamp wordStamp = StampFactory.forKind(providers.getWordTypes().getWordKind()); ComputeAddressNode arrayAddress = g.unique(new ComputeAddressNode(boxedElement, locationNode, wordStamp));