use of org.graalvm.compiler.truffle.compiler.TruffleTierConfiguration in project graal by oracle.
the class HotSpotTruffleCompilerImpl method create.
public static HotSpotTruffleCompilerImpl create(final TruffleCompilerRuntime runtime) {
OptionValues options = runtime.getGraalOptions(OptionValues.class);
HotSpotGraalRuntimeProvider hotspotGraalRuntime = (HotSpotGraalRuntimeProvider) getCompiler(options).getGraalRuntime();
SnippetReflectionProvider snippetReflection = hotspotGraalRuntime.getRequiredCapability(SnippetReflectionProvider.class);
HotSpotBackend backend = hotspotGraalRuntime.getHostBackend();
GraphBuilderPhase phase = (GraphBuilderPhase) backend.getSuites().getDefaultGraphBuilderSuite().findPhase(GraphBuilderPhase.class).previous();
Plugins plugins = phase.getGraphBuilderConfig().getPlugins();
final PartialEvaluatorConfiguration lastTierPe = createPartialEvaluatorConfiguration(hotspotGraalRuntime.getCompilerConfigurationName());
final TruffleTierConfiguration lastTierSetup = new TruffleTierConfiguration(lastTierPe, backend, options);
CompilerConfigurationFactory lowTierCompilerConfigurationFactory = new EconomyCompilerConfigurationFactory();
CompilerConfiguration compilerConfiguration = lowTierCompilerConfigurationFactory.createCompilerConfiguration();
HotSpotBackendFactory backendFactory = lowTierCompilerConfigurationFactory.createBackendMap().getBackendFactory(backend.getTarget().arch);
HotSpotBackend firstTierBackend = backendFactory.createBackend(hotspotGraalRuntime, compilerConfiguration, HotSpotJVMCIRuntime.runtime(), null);
Suites firstTierSuites = firstTierBackend.getSuites().getDefaultSuites(options);
LIRSuites firstTierLirSuites = firstTierBackend.getSuites().getDefaultLIRSuites(options);
Providers firstTierProviders = firstTierBackend.getProviders();
PartialEvaluatorConfiguration firstTierPe = new EconomyPartialEvaluatorConfiguration();
firstTierBackend.completeInitialization(HotSpotJVMCIRuntime.runtime(), options);
TruffleTierConfiguration firstTierSetup = new TruffleTierConfiguration(firstTierPe, firstTierBackend, firstTierProviders, firstTierSuites, firstTierLirSuites);
final TruffleCompilerConfiguration compilerConfig = new TruffleCompilerConfiguration(runtime, plugins, snippetReflection, firstTierSetup, lastTierSetup);
return new HotSpotTruffleCompilerImpl(hotspotGraalRuntime, compilerConfig);
}
use of org.graalvm.compiler.truffle.compiler.TruffleTierConfiguration in project graal by oracle.
the class HotSpotTruffleCompilerImpl method compileTruffleStub.
/**
* Utility to compile a truffle stub. Truffle stubs avoid deoptimization as much as possible and
* therefore deactivate all speculation and use of profiling information. Also note that truffle
* stubs do not perform any inlining and resolve classes eagerly.
*/
private CompilationResult compileTruffleStub(DebugContext debug, ResolvedJavaMethod javaMethod, CompilationIdentifier compilationId, CompilationResultBuilderFactory resultFactory, InvocationPlugins plugins) {
TruffleTierConfiguration tier = config.lastTier();
Suites newSuites = tier.suites().copy();
removeInliningPhase(newSuites);
StructuredGraph graph = //
new StructuredGraph.Builder(debug.getOptions(), debug, AllowAssumptions.NO).useProfilingInfo(//
false).method(//
javaMethod).compilationId(compilationId).build();
final Providers lastTierProviders = tier.providers();
final Backend backend = tier.backend();
HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) lastTierProviders.getCodeCache();
boolean infoPoints = codeCache.shouldDebugNonSafepoints();
GraphBuilderConfiguration newBuilderConfig = //
GraphBuilderConfiguration.getDefault(new Plugins(plugins)).withEagerResolving(//
true).withUnresolvedIsError(//
true).withNodeSourcePosition(infoPoints);
new GraphBuilderPhase.Instance(lastTierProviders, newBuilderConfig, OptimisticOptimizations.ALL, null).apply(graph);
PhaseSuite<HighTierContext> graphBuilderSuite = getGraphBuilderSuite(codeCache, backend.getSuites());
return compileGraph(graph, javaMethod, lastTierProviders, backend, graphBuilderSuite, OptimisticOptimizations.ALL, graph.getProfilingInfo(), newSuites, tier.lirSuites(), new CompilationResult(compilationId), resultFactory, false);
}
use of org.graalvm.compiler.truffle.compiler.TruffleTierConfiguration in project graal by oracle.
the class TruffleSupport method createSubstrateTruffleCompilerImpl.
protected static SubstrateTruffleCompiler createSubstrateTruffleCompilerImpl(SubstrateTruffleRuntime runtime, String compilerConfigurationName) {
GraalFeature graalFeature = ImageSingletons.lookup(GraalFeature.class);
SnippetReflectionProvider snippetReflectionProvider = graalFeature.getHostedProviders().getSnippetReflection();
final GraphBuilderConfiguration.Plugins graphBuilderPlugins = graalFeature.getHostedProviders().getGraphBuilderPlugins();
final TruffleTierConfiguration firstTier = new TruffleTierConfiguration(new EconomyPartialEvaluatorConfiguration(), GraalSupport.getRuntimeConfig().getBackendForNormalMethod(), GraalSupport.getFirstTierProviders(), GraalSupport.getFirstTierSuites(), GraalSupport.getFirstTierLirSuites());
PartialEvaluatorConfiguration peConfig = TruffleCompilerImpl.createPartialEvaluatorConfiguration(compilerConfigurationName);
final TruffleTierConfiguration lastTier = new TruffleTierConfiguration(peConfig, GraalSupport.getRuntimeConfig().getBackendForNormalMethod(), GraalSupport.getRuntimeConfig().getProviders(), GraalSupport.getSuites(), GraalSupport.getLIRSuites());
final TruffleCompilerConfiguration truffleCompilerConfig = new TruffleCompilerConfiguration(runtime, graphBuilderPlugins, snippetReflectionProvider, firstTier, lastTier);
return new SubstrateTruffleCompilerImpl(truffleCompilerConfig);
}
Aggregations