# HG changeset patch # User Doug Simon # Date 1416991126 -3600 # Node ID 8b87897f5b424dc9cb5b638beb4eb741f3bf24cb # Parent 7a3bba33f2b7b5cb28199be964c2f7932e28a259 introduced HotSpotGraalRuntimeProvder interface diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotBackend.java Wed Nov 26 09:38:46 2014 +0100 @@ -27,6 +27,7 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.api.meta.LocationIdentity.*; import static com.oracle.graal.compiler.GraalCompiler.*; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.hsail.HSAILHotSpotBackend.Options.*; import static com.oracle.graal.hotspot.hsail.replacements.HSAILNewObjectSnippets.Options.*; @@ -682,7 +683,7 @@ // Emit object array load prologue here. if (isObjectLambda) { boolean useCompressedOops = config.useCompressedOops; - final int arrayElementsOffset = HotSpotGraalRuntime.getArrayBaseOffset(wordKind); + final int arrayElementsOffset = runtime().getArrayBaseOffset(wordKind); String iterationObjArgReg = HSAIL.mapRegister(cc.getArgument(nonConstantParamCount - 1)); /* * iterationObjArgReg will be the highest $d register in use (it is the last parameter) diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/HSAILHotSpotLoweringProvider.java Wed Nov 26 09:38:46 2014 +0100 @@ -67,7 +67,7 @@ if (n instanceof NewInstanceNode) { hsailNewObjectSnippets.lower((NewInstanceNode) n, tool); } else if (n instanceof NewArrayNode) { - hsailNewObjectSnippets.lower((NewArrayNode) n, tool); + hsailNewObjectSnippets.lower((NewArrayNode) n, runtime, tool); } } } diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java --- a/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot.hsail/src/com/oracle/graal/hotspot/hsail/replacements/HSAILNewObjectSnippets.java Wed Nov 26 09:38:46 2014 +0100 @@ -303,13 +303,13 @@ /** * Lowers a {@link NewArrayNode}. */ - public void lower(NewArrayNode newArrayNode, LoweringTool tool) { + public void lower(NewArrayNode newArrayNode, HotSpotGraalRuntimeProvider runtime, LoweringTool tool) { StructuredGraph graph = newArrayNode.graph(); ResolvedJavaType elementType = newArrayNode.elementType(); HotSpotResolvedObjectType arrayType = (HotSpotResolvedObjectType) elementType.getArrayClass(); Kind elementKind = elementType.getKind(); ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), arrayType.klass(), providers.getMetaAccess(), graph); - final int headerSize = HotSpotGraalRuntime.getArrayBaseOffset(elementKind); + final int headerSize = runtime.getArrayBaseOffset(elementKind); // lowerer extends HotSpotLoweringProvider so we can just use that HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer(); int log2ElementSize = CodeUtil.log2(lowerer.arrayScalingFactor(elementKind)); diff -r 7a3bba33f2b7 -r 8b87897f5b42 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 Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Nov 26 09:38:46 2014 +0100 @@ -60,7 +60,7 @@ /** * Singleton class holding the instance of the {@link GraalRuntime}. */ -public final class HotSpotGraalRuntime implements GraalRuntime, RuntimeProvider, StackIntrospection { +public final class HotSpotGraalRuntime implements HotSpotGraalRuntimeProvider { private static final HotSpotGraalRuntime instance; @@ -327,11 +327,6 @@ return backend; } - /** - * Gets the Graal mirror for a {@link Class} object. - * - * @return the {@link ResolvedJavaType} corresponding to {@code javaClass} - */ public ResolvedJavaType fromClass(Class javaClass) { return graalMirrors.get(javaClass); } @@ -376,19 +371,6 @@ return compilerToVm; } - /** - * Converts a name to a Java type. This method attempts to resolve {@code name} to a - * {@link ResolvedJavaType}. - * - * @param name a well formed Java type in {@linkplain JavaType#getName() internal} format - * @param accessingType the context of resolution which must be non-null - * @param resolve specifies whether resolution failure results in an unresolved type being - * return or a {@link LinkageError} being thrown - * @return a Java type for {@code name} which is guaranteed to be of type - * {@link ResolvedJavaType} if {@code resolve == true} - * @throws LinkageError if {@code resolve == true} and the resolution failed - * @throws NullPointerException if {@code accessingClass} is {@code null} - */ public JavaType lookupType(String name, HotSpotResolvedObjectType accessingType, boolean resolve) { Objects.requireNonNull(accessingType, "cannot resolve type without an accessing class"); // If the name represents a primitive type we can short-circuit the lookup. @@ -465,12 +447,7 @@ return Collections.unmodifiableMap(backends); } - /** - * The offset from the origin of an array to the first element. - * - * @return the offset in bytes - */ - public static int getArrayBaseOffset(Kind kind) { + public int getArrayBaseOffset(Kind kind) { switch (kind) { case Boolean: return Unsafe.ARRAY_BOOLEAN_BASE_OFFSET; @@ -495,12 +472,7 @@ } } - /** - * 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 - */ - public static int getArrayIndexScale(Kind kind) { + public int getArrayIndexScale(Kind kind) { switch (kind) { case Boolean: return Unsafe.ARRAY_BOOLEAN_INDEX_SCALE; diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntimeProvider.java Wed Nov 26 09:38:46 2014 +0100 @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.oracle.graal.hotspot; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.code.stack.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.api.runtime.*; +import com.oracle.graal.hotspot.bridge.*; +import com.oracle.graal.hotspot.meta.*; +import com.oracle.graal.runtime.*; + +//JaCoCo Exclude + +/** + * Configuration information for the HotSpot Graal runtime. + */ +public interface HotSpotGraalRuntimeProvider extends GraalRuntime, RuntimeProvider, StackIntrospection, Remote { + + HotSpotVMConfig getConfig(); + + TargetDescription getTarget(); + + CompilerToVM getCompilerToVM(); + + /** + * Converts a name to a Java type. This method attempts to resolve {@code name} to a + * {@link ResolvedJavaType}. + * + * @param name a well formed Java type in {@linkplain JavaType#getName() internal} format + * @param accessingType the context of resolution which must be non-null + * @param resolve specifies whether resolution failure results in an unresolved type being + * return or a {@link LinkageError} being thrown + * @return a Java type for {@code name} which is guaranteed to be of type + * {@link ResolvedJavaType} if {@code resolve == true} + * @throws LinkageError if {@code resolve == true} and the resolution failed + * @throws NullPointerException if {@code accessingClass} is {@code null} + */ + JavaType lookupType(String name, HotSpotResolvedObjectType accessingType, boolean resolve); + + HotSpotProviders getHostProviders(); + + default String getName() { + return getClass().getSimpleName(); + } + + 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} + */ + ResolvedJavaType fromClass(Class clazz); +} diff -r 7a3bba33f2b7 -r 8b87897f5b42 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 Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/DefaultHotSpotLoweringProvider.java Wed Nov 26 09:38:46 2014 +0100 @@ -58,7 +58,7 @@ */ public class DefaultHotSpotLoweringProvider extends DefaultJavaLoweringProvider implements HotSpotLoweringProvider { - protected final HotSpotGraalRuntime runtime; + protected final HotSpotGraalRuntimeProvider runtime; protected final ForeignCallsProvider foreignCalls; protected final HotSpotRegistersProvider registers; @@ -71,7 +71,8 @@ protected UnsafeLoadSnippets.Templates unsafeLoadSnippets; protected AssertionSnippets.Templates assertionSnippets; - public DefaultHotSpotLoweringProvider(HotSpotGraalRuntime runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, TargetDescription target) { + public DefaultHotSpotLoweringProvider(HotSpotGraalRuntimeProvider runtime, MetaAccessProvider metaAccess, ForeignCallsProvider foreignCalls, HotSpotRegistersProvider registers, + TargetDescription target) { super(metaAccess, target); this.runtime = runtime; this.foreignCalls = foreignCalls; @@ -129,7 +130,7 @@ } } else if (n instanceof NewArrayNode) { if (graph.getGuardsStage() == StructuredGraph.GuardsStage.AFTER_FSA) { - newObjectSnippets.lower((NewArrayNode) n, registers, tool); + newObjectSnippets.lower((NewArrayNode) n, registers, runtime, tool); } } else if (n instanceof DynamicNewArrayNode) { if (graph.getGuardsStage() == StructuredGraph.GuardsStage.AFTER_FSA) { @@ -460,7 +461,7 @@ @Override protected int arrayBaseOffset(Kind kind) { - return HotSpotGraalRuntime.getArrayBaseOffset(kind); + return runtime.getArrayBaseOffset(kind); } @Override diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotMetaAccessProvider.java Wed Nov 26 09:38:46 2014 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.hotspot.meta; import static com.oracle.graal.compiler.common.UnsafeAccess.*; +import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*; import static com.oracle.graal.hotspot.meta.HotSpotResolvedJavaType.*; import static com.oracle.graal.hotspot.meta.HotSpotResolvedObjectTypeImpl.*; @@ -295,7 +296,7 @@ int length = Array.getLength(((HotSpotObjectConstantImpl) constant).object()); ResolvedJavaType elementType = lookupJavaType.getComponentType(); Kind elementKind = elementType.getKind(); - final int headerSize = HotSpotGraalRuntime.getArrayBaseOffset(elementKind); + final int headerSize = runtime().getArrayBaseOffset(elementKind); int sizeOfElement = HotSpotGraalRuntime.runtime().getTarget().getSizeInBytes(elementKind); int alignment = HotSpotGraalRuntime.runtime().getTarget().wordSize; int log2ElementSize = CodeUtil.log2(sizeOfElement); diff -r 7a3bba33f2b7 -r 8b87897f5b42 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nfi/NativeCallStubGraphBuilder.java Wed Nov 26 09:38:46 2014 +0100 @@ -117,9 +117,9 @@ // array value Kind arrayElementKind = getElementKind(type); LocationIdentity locationIdentity = NamedLocationIdentity.getArrayLocation(arrayElementKind); - int displacement = getArrayBaseOffset(arrayElementKind); + int displacement = runtime().getArrayBaseOffset(arrayElementKind); ConstantNode index = ConstantNode.forInt(0, g); - int indexScaling = getArrayIndexScale(arrayElementKind); + int indexScaling = runtime().getArrayIndexScale(arrayElementKind); IndexedLocationNode locationNode = IndexedLocationNode.create(locationIdentity, arrayElementKind, displacement, index, g, indexScaling); Stamp wordStamp = StampFactory.forKind(providers.getCodeCache().getTarget().wordKind); ComputeAddressNode arrayAddress = g.unique(ComputeAddressNode.create(boxedElement, locationNode, wordStamp)); diff -r 7a3bba33f2b7 -r 8b87897f5b42 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 Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Wed Nov 26 09:38:46 2014 +0100 @@ -426,12 +426,12 @@ @Fold public static int arrayBaseOffset(Kind elementKind) { - return HotSpotGraalRuntime.getArrayBaseOffset(elementKind); + return runtime().getArrayBaseOffset(elementKind); } @Fold public static int arrayIndexScale(Kind elementKind) { - return HotSpotGraalRuntime.getArrayIndexScale(elementKind); + return runtime().getArrayIndexScale(elementKind); } @Fold diff -r 7a3bba33f2b7 -r 8b87897f5b42 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 Wed Nov 26 09:27:58 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/NewObjectSnippets.java Wed Nov 26 09:38:46 2014 +0100 @@ -410,13 +410,13 @@ /** * Lowers a {@link NewArrayNode}. */ - public void lower(NewArrayNode newArrayNode, HotSpotRegistersProvider registers, LoweringTool tool) { + public void lower(NewArrayNode newArrayNode, HotSpotRegistersProvider registers, HotSpotGraalRuntimeProvider runtime, LoweringTool tool) { StructuredGraph graph = newArrayNode.graph(); ResolvedJavaType elementType = newArrayNode.elementType(); HotSpotResolvedObjectType arrayType = (HotSpotResolvedObjectType) elementType.getArrayClass(); Kind elementKind = elementType.getKind(); ConstantNode hub = ConstantNode.forConstant(KlassPointerStamp.klassNonNull(), arrayType.klass(), providers.getMetaAccess(), graph); - final int headerSize = HotSpotGraalRuntime.getArrayBaseOffset(elementKind); + final int headerSize = runtime.getArrayBaseOffset(elementKind); HotSpotLoweringProvider lowerer = (HotSpotLoweringProvider) providers.getLowerer(); int log2ElementSize = CodeUtil.log2(lowerer.arrayScalingFactor(elementKind));