public abstract class HostVM extends Object
| Modifier and Type | Class and Description |
|---|---|
static interface |
HostVM.MultiMethodAnalysisPolicy
Helpers to determine what analysis actions should be taken for a given Multi-Method version.
|
| Modifier and Type | Field and Description |
|---|---|
protected ClassLoader |
classLoader |
protected static HostVM.MultiMethodAnalysisPolicy |
DEFAULT_MULTIMETHOD_ANALYSIS_POLICY
The default policy does not alter the typical analysis behavior.
|
protected List<BiConsumer<AnalysisMethod,org.graalvm.compiler.nodes.StructuredGraph>> |
methodAfterParsingListeners |
protected org.graalvm.compiler.options.OptionValues |
options |
static Object |
PARSING_FAILED |
static Object |
PARSING_UNHANDLED |
| Modifier | Constructor and Description |
|---|---|
protected |
HostVM(org.graalvm.compiler.options.OptionValues options,
ClassLoader classLoader) |
| Modifier and Type | Method and Description |
|---|---|
void |
addMethodAfterParsingListener(BiConsumer<AnalysisMethod,org.graalvm.compiler.nodes.StructuredGraph> methodAfterParsingHook) |
org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions |
allowAssumptions(AnalysisMethod method) |
boolean |
allowConstantFolding(AnalysisMethod method) |
void |
checkForbidden(AnalysisType type,
AnalysisType.UsageKind kind)
Check if the type is allowed.
|
void |
checkType(ResolvedJavaType type,
AnalysisUniverse universe)
Run additional checks on a type before the corresponding
AnalysisType is created. |
void |
clearInThread() |
FieldValueComputer |
createFieldValueComputer(AnalysisField field) |
abstract org.graalvm.compiler.java.GraphBuilderPhase.Instance |
createGraphBuilderPhase(HostedProviders builderProviders,
org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration graphBuilderConfig,
org.graalvm.compiler.phases.OptimisticOptimizations optimisticOpts,
org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext initialIntrinsicContext) |
InlineBeforeAnalysisGraphDecoder |
createInlineBeforeAnalysisGraphDecoder(BigBang bb,
AnalysisMethod method,
org.graalvm.compiler.nodes.StructuredGraph resultGraph) |
Object |
getConfiguration() |
String |
getImageName()
Gets the name of the native image being built.
|
HostVM.MultiMethodAnalysisPolicy |
getMultiMethodAnalysisPolicy() |
HostedProviders |
getProviders(com.oracle.svm.common.meta.MultiMethod.MultiMethodKey key) |
Function<AnalysisType,ResolvedJavaType> |
getStrengthenGraphsToTargetFunction(com.oracle.svm.common.meta.MultiMethod.MultiMethodKey key)
Returns the function Strengthen Graphs should use to improve types based on analysis results.
|
abstract Comparator<? super ResolvedJavaType> |
getTypeComparator() |
Optional<AnalysisMethod> |
handleForeignCall(org.graalvm.compiler.core.common.spi.ForeignCallDescriptor foreignCallDescriptor,
org.graalvm.compiler.core.common.spi.ForeignCallsProvider foreignCallsProvider)
Hook for handling foreign calls.
|
boolean |
hasNeverInlineDirective(ResolvedJavaMethod method)
Check if the method can be inlined.
|
boolean |
ignoreInstanceOfTypeDisallowed() |
void |
initializeProviders(HostedProviders newProviders) |
void |
installInThread(Object vmConfig) |
abstract boolean |
isInitialized(AnalysisType type)
Check if an
AnalysisType is initialized. |
boolean |
isRelocatedPointer(UniverseMetaAccess metaAccess,
JavaConstant constant)
Check if the provided object is a relocated pointer.
|
void |
methodAfterParsingHook(BigBang bb,
AnalysisMethod method,
org.graalvm.compiler.nodes.StructuredGraph graph)
Can be overwritten to run code after a method is parsed.
|
void |
methodBeforeTypeFlowCreationHook(BigBang bb,
AnalysisMethod method,
org.graalvm.compiler.nodes.StructuredGraph graph)
Can be overwritten to run code before a method is created.
|
void |
notifyClassReachabilityListener(AnalysisUniverse universe,
org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess access) |
abstract void |
onTypeReachable(AnalysisType newValue)
Run initialization tasks for a newly created
AnalysisType. |
org.graalvm.compiler.options.OptionValues |
options() |
Object |
parseGraph(BigBang bb,
org.graalvm.compiler.debug.DebugContext debug,
AnalysisMethod method)
Hooks to allow the VM to perform a custom parsing routine for the graph.
|
boolean |
platformSupported(AnnotatedElement element)
Check if the element is supported on current platform.
|
boolean |
recordInlinedMethods(AnalysisMethod method) |
void |
registerClassReachabilityListener(BiConsumer<org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess,Class<?>> listener) |
void |
registerType(AnalysisType newValue)
Register newly created type.
|
boolean |
skipInterface(AnalysisUniverse universe,
ResolvedJavaType interfaceType,
ResolvedJavaType implementingType) |
org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration |
updateGraphBuilderConfiguration(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration config,
AnalysisMethod method)
Hook to change the
GraphBuilderConfiguration used for parsing a method during
analysis. |
boolean |
validateGraph(PointsToAnalysis bb,
org.graalvm.compiler.nodes.StructuredGraph graph)
Determines when the graph is valid and should be processed by the analysis.
|
protected final org.graalvm.compiler.options.OptionValues options
protected final ClassLoader classLoader
protected final List<BiConsumer<AnalysisMethod,org.graalvm.compiler.nodes.StructuredGraph>> methodAfterParsingListeners
public static final Object PARSING_UNHANDLED
public static final Object PARSING_FAILED
protected static final HostVM.MultiMethodAnalysisPolicy DEFAULT_MULTIMETHOD_ANALYSIS_POLICY
protected HostVM(org.graalvm.compiler.options.OptionValues options,
ClassLoader classLoader)
public org.graalvm.compiler.options.OptionValues options()
public boolean isRelocatedPointer(UniverseMetaAccess metaAccess, JavaConstant constant)
metaAccess - the meta-access providerconstant - the constant to checkpublic Optional<AnalysisMethod> handleForeignCall(org.graalvm.compiler.core.common.spi.ForeignCallDescriptor foreignCallDescriptor, org.graalvm.compiler.core.common.spi.ForeignCallsProvider foreignCallsProvider)
foreignCallDescriptor - the foreign call descriptorforeignCallsProvider - the foreign calls providerAnalysisMethod modeling the foreign call, if supportedpublic void registerClassReachabilityListener(BiConsumer<org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess,Class<?>> listener)
public void notifyClassReachabilityListener(AnalysisUniverse universe, org.graalvm.nativeimage.hosted.Feature.DuringAnalysisAccess access)
public void checkForbidden(AnalysisType type, AnalysisType.UsageKind kind)
type - the type to checkkind - usage kindpublic void registerType(AnalysisType newValue)
newValue - the type to registerpublic void checkType(ResolvedJavaType type,
AnalysisUniverse universe)
AnalysisType is created.type - the hosted typeuniverse - the analysis universepublic abstract void onTypeReachable(AnalysisType newValue)
AnalysisType.newValue - the type to initializepublic abstract boolean isInitialized(AnalysisType type)
AnalysisType is initialized.public org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration updateGraphBuilderConfiguration(org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration config,
AnalysisMethod method)
GraphBuilderConfiguration used for parsing a method during
analysis.config - The default configuration used by the static analysis.method - The method that is going to be parsed with the returned configuration.public abstract org.graalvm.compiler.java.GraphBuilderPhase.Instance createGraphBuilderPhase(HostedProviders builderProviders, org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration graphBuilderConfig, org.graalvm.compiler.phases.OptimisticOptimizations optimisticOpts, org.graalvm.compiler.nodes.graphbuilderconf.IntrinsicContext initialIntrinsicContext)
public String getImageName()
null if this VM is not being used in the context of building a native imagepublic void addMethodAfterParsingListener(BiConsumer<AnalysisMethod,org.graalvm.compiler.nodes.StructuredGraph> methodAfterParsingHook)
public void methodAfterParsingHook(BigBang bb, AnalysisMethod method, org.graalvm.compiler.nodes.StructuredGraph graph)
bb - the analysis enginemethod - the newly parsed methodgraph - the method graphpublic void methodBeforeTypeFlowCreationHook(BigBang bb, AnalysisMethod method, org.graalvm.compiler.nodes.StructuredGraph graph)
bb - the analysis enginemethod - the newly created methodgraph - the method graphpublic boolean hasNeverInlineDirective(ResolvedJavaMethod method)
method - the target methodpublic InlineBeforeAnalysisGraphDecoder createInlineBeforeAnalysisGraphDecoder(BigBang bb, AnalysisMethod method, org.graalvm.compiler.nodes.StructuredGraph resultGraph)
public boolean skipInterface(AnalysisUniverse universe, ResolvedJavaType interfaceType, ResolvedJavaType implementingType)
public boolean platformSupported(AnnotatedElement element)
element - the AnnotatedElement to checkpublic void installInThread(Object vmConfig)
public void clearInThread()
public Object getConfiguration()
public abstract Comparator<? super ResolvedJavaType> getTypeComparator()
public Object parseGraph(BigBang bb, org.graalvm.compiler.debug.DebugContext debug, AnalysisMethod method)
HostVM.PARSING_UNHANDLED when no custom parsing was performed,
HostVM.PARSING_FAILED if a custom parse attempt failed, or a
StructuredGraph when a custom parsing routine has been performed.public boolean validateGraph(PointsToAnalysis bb, org.graalvm.compiler.nodes.StructuredGraph graph)
public org.graalvm.compiler.nodes.StructuredGraph.AllowAssumptions allowAssumptions(AnalysisMethod method)
public boolean recordInlinedMethods(AnalysisMethod method)
public void initializeProviders(HostedProviders newProviders)
public HostedProviders getProviders(com.oracle.svm.common.meta.MultiMethod.MultiMethodKey key)
public HostVM.MultiMethodAnalysisPolicy getMultiMethodAnalysisPolicy()
public boolean ignoreInstanceOfTypeDisallowed()
public Function<AnalysisType,ResolvedJavaType> getStrengthenGraphsToTargetFunction(com.oracle.svm.common.meta.MultiMethod.MultiMethodKey key)
public boolean allowConstantFolding(AnalysisMethod method)
public FieldValueComputer createFieldValueComputer(AnalysisField field)