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