74 import org.graalvm.compiler.nodes.LogicNode;
75 import org.graalvm.compiler.nodes.NamedLocationIdentity;
76 import org.graalvm.compiler.nodes.NodeView;
77 import org.graalvm.compiler.nodes.ValueNode;
78 import org.graalvm.compiler.nodes.calc.AddNode;
79 import org.graalvm.compiler.nodes.calc.IntegerConvertNode;
80 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
81 import org.graalvm.compiler.nodes.graphbuilderconf.ForeignCallPlugin;
82 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
83 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
84 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
85 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
86 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
87 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
88 import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;
89 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
90 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
91 import org.graalvm.compiler.nodes.memory.ReadNode;
92 import org.graalvm.compiler.nodes.memory.address.AddressNode;
93 import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode;
94 import org.graalvm.compiler.nodes.spi.LoweringProvider;
95 import org.graalvm.compiler.nodes.spi.StampProvider;
96 import org.graalvm.compiler.nodes.util.GraphUtil;
97 import org.graalvm.compiler.options.OptionValues;
98 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
99 import org.graalvm.compiler.replacements.InlineDuringParsingPlugin;
100 import org.graalvm.compiler.replacements.MethodHandlePlugin;
101 import org.graalvm.compiler.replacements.NodeIntrinsificationProvider;
102 import org.graalvm.compiler.replacements.ReplacementsImpl;
103 import org.graalvm.compiler.replacements.StandardGraphBuilderPlugins;
104 import org.graalvm.compiler.serviceprovider.GraalServices;
105 import org.graalvm.compiler.word.WordOperationPlugin;
106 import org.graalvm.compiler.word.WordTypes;
107 import jdk.internal.vm.compiler.word.LocationIdentity;
108
109 import jdk.vm.ci.code.CodeUtil;
110 import jdk.vm.ci.meta.ConstantReflectionProvider;
111 import jdk.vm.ci.meta.DeoptimizationAction;
112 import jdk.vm.ci.meta.DeoptimizationReason;
113 import jdk.vm.ci.meta.JavaKind;
114 import jdk.vm.ci.meta.MetaAccessProvider;
115 import jdk.vm.ci.meta.ResolvedJavaMethod;
116 import sun.misc.Unsafe;
117
118 /**
119 * Defines the {@link Plugins} used when running on HotSpot.
120 */
121 public class HotSpotGraphBuilderPlugins {
122
123 /**
124 * Creates a {@link Plugins} object that should be used when running on HotSpot.
125 *
126 * @param constantReflection
127 * @param snippetReflection
128 * @param foreignCalls
129 * @param stampProvider
130 */
131 public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
132 ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, LoweringProvider lowerer,
133 StampProvider stampProvider, ReplacementsImpl replacements) {
134 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
135
136 Plugins plugins = new Plugins(invocationPlugins);
137 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, lowerer, wordTypes);
138 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
139 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
140
141 plugins.appendTypePlugin(nodePlugin);
142 plugins.appendNodePlugin(nodePlugin);
143 OptionValues options = replacements.getOptions();
144 if (!GeneratePIC.getValue(options)) {
145 plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));
146 }
147 plugins.appendInlineInvokePlugin(replacements);
148 if (InlineDuringParsing.getValue(options)) {
149 plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
150 }
151
152 if (GeneratePIC.getValue(options)) {
153 plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
154 if (TieredAOT.getValue(options)) {
155 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
156 }
157 }
|
74 import org.graalvm.compiler.nodes.LogicNode;
75 import org.graalvm.compiler.nodes.NamedLocationIdentity;
76 import org.graalvm.compiler.nodes.NodeView;
77 import org.graalvm.compiler.nodes.ValueNode;
78 import org.graalvm.compiler.nodes.calc.AddNode;
79 import org.graalvm.compiler.nodes.calc.IntegerConvertNode;
80 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
81 import org.graalvm.compiler.nodes.graphbuilderconf.ForeignCallPlugin;
82 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
83 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
84 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
85 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
86 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
87 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
88 import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;
89 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
90 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
91 import org.graalvm.compiler.nodes.memory.ReadNode;
92 import org.graalvm.compiler.nodes.memory.address.AddressNode;
93 import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode;
94 import org.graalvm.compiler.nodes.util.GraphUtil;
95 import org.graalvm.compiler.options.OptionValues;
96 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
97 import org.graalvm.compiler.replacements.InlineDuringParsingPlugin;
98 import org.graalvm.compiler.replacements.MethodHandlePlugin;
99 import org.graalvm.compiler.replacements.NodeIntrinsificationProvider;
100 import org.graalvm.compiler.replacements.ReplacementsImpl;
101 import org.graalvm.compiler.replacements.StandardGraphBuilderPlugins;
102 import org.graalvm.compiler.serviceprovider.GraalServices;
103 import org.graalvm.compiler.word.WordOperationPlugin;
104 import org.graalvm.compiler.word.WordTypes;
105 import jdk.internal.vm.compiler.word.LocationIdentity;
106
107 import jdk.vm.ci.code.CodeUtil;
108 import jdk.vm.ci.meta.ConstantReflectionProvider;
109 import jdk.vm.ci.meta.DeoptimizationAction;
110 import jdk.vm.ci.meta.DeoptimizationReason;
111 import jdk.vm.ci.meta.JavaKind;
112 import jdk.vm.ci.meta.MetaAccessProvider;
113 import jdk.vm.ci.meta.ResolvedJavaMethod;
114 import sun.misc.Unsafe;
115
116 /**
117 * Defines the {@link Plugins} used when running on HotSpot.
118 */
119 public class HotSpotGraphBuilderPlugins {
120
121 /**
122 * Creates a {@link Plugins} object that should be used when running on HotSpot.
123 *
124 * @param constantReflection
125 * @param snippetReflection
126 * @param foreignCalls
127 */
128 public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
129 ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, ReplacementsImpl replacements) {
130 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
131
132 Plugins plugins = new Plugins(invocationPlugins);
133 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
134 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
135 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
136
137 plugins.appendTypePlugin(nodePlugin);
138 plugins.appendNodePlugin(nodePlugin);
139 OptionValues options = replacements.getOptions();
140 if (!GeneratePIC.getValue(options)) {
141 plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));
142 }
143 plugins.appendInlineInvokePlugin(replacements);
144 if (InlineDuringParsing.getValue(options)) {
145 plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
146 }
147
148 if (GeneratePIC.getValue(options)) {
149 plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
150 if (TieredAOT.getValue(options)) {
151 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
152 }
153 }
|