98 @Override |
98 @Override |
99 @SuppressWarnings("try") |
99 @SuppressWarnings("try") |
100 public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider graalRuntime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntime jvmciRuntime, HotSpotBackend host) { |
100 public HotSpotBackend createBackend(HotSpotGraalRuntimeProvider graalRuntime, CompilerConfiguration compilerConfiguration, HotSpotJVMCIRuntime jvmciRuntime, HotSpotBackend host) { |
101 assert host == null; |
101 assert host == null; |
102 |
102 |
|
103 OptionValues options = graalRuntime.getOptions(); |
103 JVMCIBackend jvmci = jvmciRuntime.getHostJVMCIBackend(); |
104 JVMCIBackend jvmci = jvmciRuntime.getHostJVMCIBackend(); |
104 GraalHotSpotVMConfig config = graalRuntime.getVMConfig(); |
105 GraalHotSpotVMConfig config = graalRuntime.getVMConfig(); |
105 HotSpotProviders providers; |
106 HotSpotProviders providers; |
106 HotSpotRegistersProvider registers; |
107 HotSpotRegistersProvider registers; |
107 HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmci.getCodeCache(); |
108 HotSpotCodeCacheProvider codeCache = (HotSpotCodeCacheProvider) jvmci.getCodeCache(); |
154 try (InitTimer rt = timer("create Replacements provider")) { |
155 try (InitTimer rt = timer("create Replacements provider")) { |
155 replacements = createReplacements(target, p, snippetReflection, bytecodeProvider); |
156 replacements = createReplacements(target, p, snippetReflection, bytecodeProvider); |
156 } |
157 } |
157 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { |
158 try (InitTimer rt = timer("create GraphBuilderPhase plugins")) { |
158 plugins = createGraphBuilderPlugins(graalRuntime, compilerConfiguration, config, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, |
159 plugins = createGraphBuilderPlugins(graalRuntime, compilerConfiguration, config, constantReflection, foreignCalls, metaAccess, snippetReflection, replacements, wordTypes, |
159 graalRuntime.getOptions()); |
160 graalRuntime.getOptions(), target); |
160 replacements.setGraphBuilderPlugins(plugins); |
161 replacements.setGraphBuilderPlugins(plugins); |
161 } |
162 } |
162 try (InitTimer rt = timer("create Suites provider")) { |
163 try (InitTimer rt = timer("create Suites provider")) { |
163 suites = createSuites(config, graalRuntime, compilerConfiguration, plugins, replacements); |
164 suites = createSuites(config, graalRuntime, compilerConfiguration, plugins, replacements); |
164 } |
165 } |
165 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, suites, registers, |
166 providers = new HotSpotProviders(metaAccess, codeCache, constantReflection, constantFieldProvider, foreignCalls, lowerer, replacements, suites, registers, |
166 snippetReflection, wordTypes, plugins, gc); |
167 snippetReflection, wordTypes, plugins, gc); |
167 replacements.setProviders(providers); |
168 replacements.setProviders(providers); |
|
169 replacements.maybeInitializeEncoder(options); |
168 } |
170 } |
169 try (InitTimer rt = timer("instantiate backend")) { |
171 try (InitTimer rt = timer("instantiate backend")) { |
170 return createBackend(config, graalRuntime, providers); |
172 return createBackend(config, graalRuntime, providers); |
171 } |
173 } |
172 } |
174 } |
178 HotSpotHostForeignCallsProvider foreignCalls, |
180 HotSpotHostForeignCallsProvider foreignCalls, |
179 HotSpotMetaAccessProvider metaAccess, |
181 HotSpotMetaAccessProvider metaAccess, |
180 HotSpotSnippetReflectionProvider snippetReflection, |
182 HotSpotSnippetReflectionProvider snippetReflection, |
181 HotSpotReplacementsImpl replacements, |
183 HotSpotReplacementsImpl replacements, |
182 HotSpotWordTypes wordTypes, |
184 HotSpotWordTypes wordTypes, |
183 OptionValues options) { |
185 OptionValues options, |
|
186 TargetDescription target) { |
184 Plugins plugins = HotSpotGraphBuilderPlugins.create(graalRuntime, |
187 Plugins plugins = HotSpotGraphBuilderPlugins.create(graalRuntime, |
185 compilerConfiguration, |
188 compilerConfiguration, |
186 config, |
189 config, |
187 wordTypes, |
190 wordTypes, |
188 metaAccess, |
191 metaAccess, |
189 constantReflection, |
192 constantReflection, |
190 snippetReflection, |
193 snippetReflection, |
191 foreignCalls, |
194 foreignCalls, |
192 replacements, |
195 replacements, |
193 options); |
196 options, |
194 AArch64GraphBuilderPlugins.register(plugins, replacements.getDefaultReplacementBytecodeProvider(), false, |
197 target); |
|
198 AArch64GraphBuilderPlugins.register(plugins, replacements, false, // |
195 /* registerMathPlugins */true, /* emitJDK9StringSubstitutions */true, config.useFMAIntrinsics); |
199 /* registerMathPlugins */true, /* emitJDK9StringSubstitutions */true, config.useFMAIntrinsics); |
196 return plugins; |
200 return plugins; |
197 } |
201 } |
198 |
202 |
199 protected AArch64HotSpotBackend createBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |
203 protected AArch64HotSpotBackend createBackend(GraalHotSpotVMConfig config, HotSpotGraalRuntimeProvider runtime, HotSpotProviders providers) { |