35 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
36 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
37 import org.graalvm.compiler.hotspot.HotSpotBackend;
38 import org.graalvm.compiler.hotspot.HotSpotBackendFactory;
39 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
40 import org.graalvm.compiler.hotspot.HotSpotReplacementsImpl;
41 import org.graalvm.compiler.hotspot.meta.AddressLoweringHotSpotSuitesProvider;
42 import org.graalvm.compiler.hotspot.meta.HotSpotForeignCallsProvider;
43 import org.graalvm.compiler.hotspot.meta.HotSpotGraalConstantFieldProvider;
44 import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
45 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider;
46 import org.graalvm.compiler.hotspot.meta.HotSpotLoweringProvider;
47 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
48 import org.graalvm.compiler.hotspot.meta.HotSpotRegisters;
49 import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
50 import org.graalvm.compiler.hotspot.meta.HotSpotSnippetReflectionProvider;
51 import org.graalvm.compiler.hotspot.meta.HotSpotStampProvider;
52 import org.graalvm.compiler.hotspot.meta.HotSpotSuitesProvider;
53 import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
54 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
55 import org.graalvm.compiler.nodes.spi.LoweringProvider;
56 import org.graalvm.compiler.nodes.spi.Replacements;
57 import org.graalvm.compiler.options.OptionValues;
58 import org.graalvm.compiler.phases.common.AddressLoweringPhase;
59 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
60 import org.graalvm.compiler.phases.util.Providers;
61 import org.graalvm.compiler.replacements.amd64.AMD64GraphBuilderPlugins;
62 import org.graalvm.compiler.replacements.classfile.ClassfileBytecodeProvider;
63 import org.graalvm.compiler.serviceprovider.ServiceProvider;
64 import org.graalvm.compiler.word.WordTypes;
65
66 import jdk.vm.ci.amd64.AMD64;
67 import jdk.vm.ci.code.Architecture;
68 import jdk.vm.ci.code.Register;
69 import jdk.vm.ci.code.RegisterConfig;
70 import jdk.vm.ci.code.TargetDescription;
71 import jdk.vm.ci.common.InitTimer;
72 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
73 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
74 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
75 import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider;
125 }
126 try (InitTimer rt = timer("create ForeignCalls provider")) {
127 foreignCalls = createForeignCalls(jvmciRuntime, graalRuntime, metaAccess, codeCache, wordTypes, nativeABICallerSaveRegisters);
128 }
129 try (InitTimer rt = timer("create Lowerer provider")) {
130 lowerer = createLowerer(graalRuntime, metaAccess, foreignCalls, registers, constantReflection, target);
131 }
132 HotSpotStampProvider stampProvider = new HotSpotStampProvider();
133 Providers p = new Providers(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, null, stampProvider);
134
135 try (InitTimer rt = timer("create SnippetReflection provider")) {
136 snippetReflection = createSnippetReflection(graalRuntime, constantReflection, wordTypes);
137 }
138 try (InitTimer rt = timer("create Bytecode provider")) {
139 bytecodeProvider = new ClassfileBytecodeProvider(metaAccess, snippetReflection);
140 }
141 try (InitTimer rt = timer("create Replacements provider")) {
142 replacements = createReplacements(options, p, snippetReflection, bytecodeProvider);
143 }
144 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) {
145 plugins = createGraphBuilderPlugins(compilerConfiguration, config, options, target, constantReflection, foreignCalls, lowerer, metaAccess, snippetReflection, replacements, wordTypes,
146 stampProvider);
147 replacements.setGraphBuilderPlugins(plugins);
148 }
149 try (InitTimer rt = timer("create Suites provider")) {
150 suites = createSuites(config, graalRuntime, compilerConfiguration, plugins, registers, replacements, options);
151 }
152 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, suites, registers,
153 snippetReflection, wordTypes,
154 plugins);
155 }
156 try (InitTimer rt = timer("instantiate backend")) {
157 return createBackend(config, graalRuntime, providers);
158 }
159 }
160
161 protected Plugins createGraphBuilderPlugins(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, OptionValues options, TargetDescription target,
162 HotSpotConstantReflectionProvider constantReflection, HotSpotHostForeignCallsProvider foreignCalls, LoweringProvider lowerer, HotSpotMetaAccessProvider metaAccess,
163 HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, HotSpotWordTypes wordTypes, HotSpotStampProvider stampProvider) {
164 Plugins plugins = HotSpotGraphBuilderPlugins.create(compilerConfiguration, config, wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, lowerer, stampProvider,
165 replacements);
166 AMD64GraphBuilderPlugins.register(plugins, replacements.getDefaultReplacementBytecodeProvider(), (AMD64) target.arch, GraalArithmeticStubs.getValue(options), false);
167 return plugins;
168 }
169
170 protected AMD64HotSpotBackend createBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) {
171 return new AMD64HotSpotBackend(config, runtime, providers);
172 }
173
174 protected HotSpotRegistersProvider createRegisters() {
175 return new HotSpotRegisters(AMD64.r15, AMD64.r12, AMD64.rsp);
176 }
177
178 protected HotSpotReplacementsImpl createReplacements(OptionValues options, Providers p, SnippetReflectionProvider snippetReflection, BytecodeProvider bytecodeProvider) {
179 return new HotSpotReplacementsImpl(options, p, snippetReflection, bytecodeProvider, p.getCodeCache().getTarget());
180 }
181
182 protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess,
183 HotSpotCodeCacheProvider codeCache, WordTypes wordTypes, Value[] nativeABICallerSaveRegisters) {
184 return new AMD64HotSpotForeignCallsProvider(jvmciRuntime, runtime, metaAccess, codeCache, wordTypes, nativeABICallerSaveRegisters);
185 }
|
35 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
36 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
37 import org.graalvm.compiler.hotspot.HotSpotBackend;
38 import org.graalvm.compiler.hotspot.HotSpotBackendFactory;
39 import org.graalvm.compiler.hotspot.HotSpotGraalRuntimeProvider;
40 import org.graalvm.compiler.hotspot.HotSpotReplacementsImpl;
41 import org.graalvm.compiler.hotspot.meta.AddressLoweringHotSpotSuitesProvider;
42 import org.graalvm.compiler.hotspot.meta.HotSpotForeignCallsProvider;
43 import org.graalvm.compiler.hotspot.meta.HotSpotGraalConstantFieldProvider;
44 import org.graalvm.compiler.hotspot.meta.HotSpotGraphBuilderPlugins;
45 import org.graalvm.compiler.hotspot.meta.HotSpotHostForeignCallsProvider;
46 import org.graalvm.compiler.hotspot.meta.HotSpotLoweringProvider;
47 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
48 import org.graalvm.compiler.hotspot.meta.HotSpotRegisters;
49 import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
50 import org.graalvm.compiler.hotspot.meta.HotSpotSnippetReflectionProvider;
51 import org.graalvm.compiler.hotspot.meta.HotSpotStampProvider;
52 import org.graalvm.compiler.hotspot.meta.HotSpotSuitesProvider;
53 import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
54 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
55 import org.graalvm.compiler.nodes.spi.Replacements;
56 import org.graalvm.compiler.options.OptionValues;
57 import org.graalvm.compiler.phases.common.AddressLoweringPhase;
58 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
59 import org.graalvm.compiler.phases.util.Providers;
60 import org.graalvm.compiler.replacements.amd64.AMD64GraphBuilderPlugins;
61 import org.graalvm.compiler.replacements.classfile.ClassfileBytecodeProvider;
62 import org.graalvm.compiler.serviceprovider.ServiceProvider;
63 import org.graalvm.compiler.word.WordTypes;
64
65 import jdk.vm.ci.amd64.AMD64;
66 import jdk.vm.ci.code.Architecture;
67 import jdk.vm.ci.code.Register;
68 import jdk.vm.ci.code.RegisterConfig;
69 import jdk.vm.ci.code.TargetDescription;
70 import jdk.vm.ci.common.InitTimer;
71 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
72 import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
73 import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime;
74 import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider;
124 }
125 try (InitTimer rt = timer("create ForeignCalls provider")) {
126 foreignCalls = createForeignCalls(jvmciRuntime, graalRuntime, metaAccess, codeCache, wordTypes, nativeABICallerSaveRegisters);
127 }
128 try (InitTimer rt = timer("create Lowerer provider")) {
129 lowerer = createLowerer(graalRuntime, metaAccess, foreignCalls, registers, constantReflection, target);
130 }
131 HotSpotStampProvider stampProvider = new HotSpotStampProvider();
132 Providers p = new Providers(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, null, stampProvider);
133
134 try (InitTimer rt = timer("create SnippetReflection provider")) {
135 snippetReflection = createSnippetReflection(graalRuntime, constantReflection, wordTypes);
136 }
137 try (InitTimer rt = timer("create Bytecode provider")) {
138 bytecodeProvider = new ClassfileBytecodeProvider(metaAccess, snippetReflection);
139 }
140 try (InitTimer rt = timer("create Replacements provider")) {
141 replacements = createReplacements(options, p, snippetReflection, bytecodeProvider);
142 }
143 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) {
144 plugins = createGraphBuilderPlugins(compilerConfiguration, config, options, target, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes);
145 replacements.setGraphBuilderPlugins(plugins);
146 }
147 try (InitTimer rt = timer("create Suites provider")) {
148 suites = createSuites(config, graalRuntime, compilerConfiguration, plugins, registers, replacements, options);
149 }
150 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, suites, registers,
151 snippetReflection, wordTypes,
152 plugins);
153 }
154 try (InitTimer rt = timer("instantiate backend")) {
155 return createBackend(config, graalRuntime, providers);
156 }
157 }
158
159 protected Plugins createGraphBuilderPlugins(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, OptionValues options, TargetDescription target,
160 HotSpotConstantReflectionProvider constantReflection, HotSpotHostForeignCallsProvider foreignCalls, HotSpotMetaAccessProvider metaAccess,
161 HotSpotSnippetReflectionProvider snippetReflection, HotSpotReplacementsImpl replacements, HotSpotWordTypes wordTypes) {
162 Plugins plugins = HotSpotGraphBuilderPlugins.create(compilerConfiguration, config, wordTypes, metaAccess, constantReflection, snippetReflection, foreignCalls, replacements);
163 AMD64GraphBuilderPlugins.register(plugins, replacements.getDefaultReplacementBytecodeProvider(), (AMD64) target.arch, GraalArithmeticStubs.getValue(options), false);
164 return plugins;
165 }
166
167 protected AMD64HotSpotBackend createBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) {
168 return new AMD64HotSpotBackend(config, runtime, providers);
169 }
170
171 protected HotSpotRegistersProvider createRegisters() {
172 return new HotSpotRegisters(AMD64.r15, AMD64.r12, AMD64.rsp);
173 }
174
175 protected HotSpotReplacementsImpl createReplacements(OptionValues options, Providers p, SnippetReflectionProvider snippetReflection, BytecodeProvider bytecodeProvider) {
176 return new HotSpotReplacementsImpl(options, p, snippetReflection, bytecodeProvider, p.getCodeCache().getTarget());
177 }
178
179 protected AMD64HotSpotForeignCallsProvider createForeignCalls(HotSpotJVMCIRuntime jvmciRuntime, HotSpotGraalRuntimeProvider runtime, HotSpotMetaAccessProvider metaAccess,
180 HotSpotCodeCacheProvider codeCache, WordTypes wordTypes, Value[] nativeABICallerSaveRegisters) {
181 return new AMD64HotSpotForeignCallsProvider(jvmciRuntime, runtime, metaAccess, codeCache, wordTypes, nativeABICallerSaveRegisters);
182 }
|