1 /*
2 * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
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 */
107
108 /**
109 * Defines the {@link Plugins} used when running on HotSpot.
110 */
111 public class HotSpotGraphBuilderPlugins {
112
113 /**
114 * Creates a {@link Plugins} object that should be used when running on HotSpot.
115 *
116 * @param constantReflection
117 * @param snippetReflection
118 * @param foreignCalls
119 */
120 public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
121 ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, ReplacementsImpl replacements) {
122 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
123
124 Plugins plugins = new Plugins(invocationPlugins);
125 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
126 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
127 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
128
129 plugins.appendTypePlugin(nodePlugin);
130 plugins.appendNodePlugin(nodePlugin);
131 OptionValues options = replacements.getOptions();
132 if (!GeneratePIC.getValue(options)) {
133 plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));
134 }
135 plugins.appendInlineInvokePlugin(replacements);
136 if (InlineDuringParsing.getValue(options)) {
137 plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
138 }
139
140 if (GeneratePIC.getValue(options)) {
141 plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
142 if (TieredAOT.getValue(options)) {
143 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
144 }
145 }
146
147 invocationPlugins.defer(new Runnable() {
|
1 /*
2 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
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 */
107
108 /**
109 * Defines the {@link Plugins} used when running on HotSpot.
110 */
111 public class HotSpotGraphBuilderPlugins {
112
113 /**
114 * Creates a {@link Plugins} object that should be used when running on HotSpot.
115 *
116 * @param constantReflection
117 * @param snippetReflection
118 * @param foreignCalls
119 */
120 public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
121 ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, ReplacementsImpl replacements) {
122 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
123
124 Plugins plugins = new Plugins(invocationPlugins);
125 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
126 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
127 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin, config, wordTypes);
128
129 plugins.appendTypePlugin(nodePlugin);
130 plugins.appendNodePlugin(nodePlugin);
131 OptionValues options = replacements.getOptions();
132 if (!GeneratePIC.getValue(options)) {
133 plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));
134 }
135 plugins.appendInlineInvokePlugin(replacements);
136 if (InlineDuringParsing.getValue(options)) {
137 plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
138 }
139
140 if (GeneratePIC.getValue(options)) {
141 plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
142 if (TieredAOT.getValue(options)) {
143 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
144 }
145 }
146
147 invocationPlugins.defer(new Runnable() {
|