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