16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.tools.jaotc;
25
26 import java.util.ListIterator;
27
28 import org.graalvm.compiler.code.CompilationResult;
29 import org.graalvm.compiler.core.GraalCompiler;
30 import org.graalvm.compiler.core.common.CompilationIdentifier;
31 import org.graalvm.compiler.core.common.CompilationIdentifier.Verbosity;
32 import org.graalvm.compiler.debug.DebugContext;
33 import org.graalvm.compiler.hotspot.HotSpotBackend;
34 import org.graalvm.compiler.hotspot.HotSpotCompiledCodeBuilder;
35 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
36 import org.graalvm.compiler.java.GraphBuilderPhase;
37 import org.graalvm.compiler.lir.asm.CompilationResultBuilderFactory;
38 import org.graalvm.compiler.lir.phases.LIRSuites;
39 import org.graalvm.compiler.nodes.StructuredGraph;
40 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
41 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
42 import org.graalvm.compiler.options.OptionValues;
43 import org.graalvm.compiler.phases.BasePhase;
44 import org.graalvm.compiler.phases.OptimisticOptimizations;
45 import org.graalvm.compiler.phases.PhaseSuite;
46 import org.graalvm.compiler.phases.tiers.HighTierContext;
47 import org.graalvm.compiler.phases.tiers.Suites;
48
49 import jdk.vm.ci.code.InstalledCode;
50 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
51 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
52 import jdk.vm.ci.meta.DefaultProfilingInfo;
53 import jdk.vm.ci.meta.ProfilingInfo;
54 import jdk.vm.ci.meta.ResolvedJavaMethod;
55 import jdk.vm.ci.meta.TriState;
56
57 final class AOTBackend {
58 private final Main main;
59 private final OptionValues graalOptions;
60 private final HotSpotBackend backend;
61 private final HotSpotProviders providers;
62 private final HotSpotCodeCacheProvider codeCache;
63 private final PhaseSuite<HighTierContext> graphBuilderSuite;
64 private final HighTierContext highTierContext;
65
66 AOTBackend(Main main, OptionValues graalOptions, HotSpotBackend backend) {
67 this.main = main;
68 this.graalOptions = graalOptions;
69 this.backend = backend;
70 providers = backend.getProviders();
71 codeCache = providers.getCodeCache();
72 graphBuilderSuite = initGraphBuilderSuite(backend, main.options.compileWithAssertions);
73 highTierContext = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.ALL);
74 }
75
76 PhaseSuite<HighTierContext> getGraphBuilderSuite() {
77 return graphBuilderSuite;
78 }
79
80 HotSpotBackend getBackend() {
81 return backend;
82 }
83
84 HotSpotProviders getProviders() {
85 return providers;
86 }
87
88 private Suites getSuites() {
89 // create suites every time, as we modify options for the compiler
90 return backend.getSuites().getDefaultSuites(graalOptions);
91 }
92
129 ProfilingInfo profilingInfo = DefaultProfilingInfo.get(TriState.FALSE);
130
131 final boolean isImmutablePIC = true;
132 CompilationIdentifier id = new CompilationIdentifier() {
133 @Override
134 public String toString(Verbosity verbosity) {
135 return resolvedMethod.getName();
136 }
137 };
138 CompilationResult compilationResult = new CompilationResult(id, isImmutablePIC);
139
140 return GraalCompiler.compileGraph(graph, resolvedMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, profilingInfo, getSuites(), getLirSuites(),
141 compilationResult, CompilationResultBuilderFactory.Default);
142
143 } catch (Throwable e) {
144 main.handleError(resolvedMethod, e, " (compiling graph)");
145 }
146 return null;
147 }
148
149 private static PhaseSuite<HighTierContext> initGraphBuilderSuite(HotSpotBackend backend, boolean compileWithAssertions) {
150 PhaseSuite<HighTierContext> graphBuilderSuite = backend.getSuites().getDefaultGraphBuilderSuite().copy();
151 ListIterator<BasePhase<? super HighTierContext>> iterator = graphBuilderSuite.findPhase(GraphBuilderPhase.class);
152 GraphBuilderConfiguration baseConfig = ((GraphBuilderPhase) iterator.previous()).getGraphBuilderConfig();
153
154 // Use all default plugins.
155 Plugins plugins = baseConfig.getPlugins();
156 GraphBuilderConfiguration aotConfig = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true).withOmitAssertions(!compileWithAssertions);
157
158 iterator.next();
159 iterator.remove();
160 iterator.add(new GraphBuilderPhase(aotConfig));
161
162 return graphBuilderSuite;
163 }
164
165 void printCompiledMethod(HotSpotResolvedJavaMethod resolvedMethod, CompilationResult compResult) {
166 // This is really not installing the method.
167 InstalledCode installedCode = codeCache.addCode(resolvedMethod, HotSpotCompiledCodeBuilder.createCompiledCode(codeCache, null, null, compResult), null, null);
168 String disassembly = codeCache.disassemble(installedCode);
169 if (disassembly != null) {
170 main.printer.printlnDebug(disassembly);
171 }
172 }
173 }
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 package jdk.tools.jaotc;
25
26 import java.util.ListIterator;
27
28 import org.graalvm.compiler.code.CompilationResult;
29 import org.graalvm.compiler.core.GraalCompiler;
30 import org.graalvm.compiler.core.common.CompilationIdentifier;
31 import org.graalvm.compiler.core.common.CompilationIdentifier.Verbosity;
32 import org.graalvm.compiler.debug.DebugContext;
33 import org.graalvm.compiler.hotspot.HotSpotBackend;
34 import org.graalvm.compiler.hotspot.HotSpotCompiledCodeBuilder;
35 import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
36 import org.graalvm.compiler.hotspot.meta.HotSpotInvokeDynamicPlugin;
37 import org.graalvm.compiler.java.GraphBuilderPhase;
38 import org.graalvm.compiler.lir.asm.CompilationResultBuilderFactory;
39 import org.graalvm.compiler.lir.phases.LIRSuites;
40 import org.graalvm.compiler.nodes.StructuredGraph;
41 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration;
42 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
43 import org.graalvm.compiler.options.OptionValues;
44 import org.graalvm.compiler.phases.BasePhase;
45 import org.graalvm.compiler.phases.OptimisticOptimizations;
46 import org.graalvm.compiler.phases.PhaseSuite;
47 import org.graalvm.compiler.phases.tiers.HighTierContext;
48 import org.graalvm.compiler.phases.tiers.Suites;
49
50 import jdk.vm.ci.code.InstalledCode;
51 import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
52 import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
53 import jdk.vm.ci.meta.DefaultProfilingInfo;
54 import jdk.vm.ci.meta.ProfilingInfo;
55 import jdk.vm.ci.meta.ResolvedJavaMethod;
56 import jdk.vm.ci.meta.TriState;
57
58 final class AOTBackend {
59 private final Main main;
60 private final OptionValues graalOptions;
61 private final HotSpotBackend backend;
62 private final HotSpotProviders providers;
63 private final HotSpotCodeCacheProvider codeCache;
64 private final PhaseSuite<HighTierContext> graphBuilderSuite;
65 private final HighTierContext highTierContext;
66
67 AOTBackend(Main main, OptionValues graalOptions, HotSpotBackend backend, HotSpotInvokeDynamicPlugin inokeDynamicPlugin) {
68 this.main = main;
69 this.graalOptions = graalOptions;
70 this.backend = backend;
71 providers = backend.getProviders();
72 codeCache = providers.getCodeCache();
73 graphBuilderSuite = initGraphBuilderSuite(backend, main.options.compileWithAssertions, inokeDynamicPlugin);
74 highTierContext = new HighTierContext(providers, graphBuilderSuite, OptimisticOptimizations.ALL);
75 }
76
77 PhaseSuite<HighTierContext> getGraphBuilderSuite() {
78 return graphBuilderSuite;
79 }
80
81 HotSpotBackend getBackend() {
82 return backend;
83 }
84
85 HotSpotProviders getProviders() {
86 return providers;
87 }
88
89 private Suites getSuites() {
90 // create suites every time, as we modify options for the compiler
91 return backend.getSuites().getDefaultSuites(graalOptions);
92 }
93
130 ProfilingInfo profilingInfo = DefaultProfilingInfo.get(TriState.FALSE);
131
132 final boolean isImmutablePIC = true;
133 CompilationIdentifier id = new CompilationIdentifier() {
134 @Override
135 public String toString(Verbosity verbosity) {
136 return resolvedMethod.getName();
137 }
138 };
139 CompilationResult compilationResult = new CompilationResult(id, isImmutablePIC);
140
141 return GraalCompiler.compileGraph(graph, resolvedMethod, providers, backend, graphBuilderSuite, OptimisticOptimizations.ALL, profilingInfo, getSuites(), getLirSuites(),
142 compilationResult, CompilationResultBuilderFactory.Default);
143
144 } catch (Throwable e) {
145 main.handleError(resolvedMethod, e, " (compiling graph)");
146 }
147 return null;
148 }
149
150 private static PhaseSuite<HighTierContext> initGraphBuilderSuite(HotSpotBackend backend, boolean compileWithAssertions, HotSpotInvokeDynamicPlugin inokeDynamicPlugin) {
151 PhaseSuite<HighTierContext> graphBuilderSuite = backend.getSuites().getDefaultGraphBuilderSuite().copy();
152 ListIterator<BasePhase<? super HighTierContext>> iterator = graphBuilderSuite.findPhase(GraphBuilderPhase.class);
153 GraphBuilderConfiguration baseConfig = ((GraphBuilderPhase) iterator.previous()).getGraphBuilderConfig();
154
155 // Use all default plugins.
156 Plugins plugins = baseConfig.getPlugins();
157 plugins.setInvokeDynamicPlugin(inokeDynamicPlugin);
158 GraphBuilderConfiguration aotConfig = GraphBuilderConfiguration.getDefault(plugins).withEagerResolving(true).withOmitAssertions(!compileWithAssertions);
159
160 iterator.next();
161 iterator.remove();
162 iterator.add(new GraphBuilderPhase(aotConfig));
163
164 return graphBuilderSuite;
165 }
166
167 void printCompiledMethod(HotSpotResolvedJavaMethod resolvedMethod, CompilationResult compResult) {
168 // This is really not installing the method.
169 InstalledCode installedCode = codeCache.addCode(resolvedMethod, HotSpotCompiledCodeBuilder.createCompiledCode(codeCache, null, null, compResult), null, null);
170 String disassembly = codeCache.disassemble(installedCode);
171 if (disassembly != null) {
172 main.printer.printlnDebug(disassembly);
173 }
174 }
175 }
|