111 import jdk.vm.ci.meta.JavaConstant;
112 import jdk.vm.ci.meta.JavaKind;
113 import jdk.vm.ci.meta.MetaAccessProvider;
114 import jdk.vm.ci.meta.ResolvedJavaMethod;
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 * @param stampProvider
128 */
129 public static Plugins create(GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection,
130 SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, StampProvider stampProvider, ReplacementsImpl replacements) {
131 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, metaAccess);
132
133 Plugins plugins = new Plugins(invocationPlugins);
134 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
135 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
136 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
137
138 plugins.appendTypePlugin(nodePlugin);
139 plugins.appendNodePlugin(nodePlugin);
140 if (GeneratePIC.getValue()) {
141 // AOT needs to filter out bad invokes
142 plugins.prependNodePlugin(new NodePlugin() {
143 @Override
144 public boolean handleInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
145 if (b.parsingIntrinsic()) {
146 return false;
147 }
148 // check if the holder has a valid fingerprint
149 if (FingerprintUtil.getFingerprint((HotSpotResolvedObjectType) method.getDeclaringClass()) == 0) {
150 // Deopt otherwise
151 b.append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
|
111 import jdk.vm.ci.meta.JavaConstant;
112 import jdk.vm.ci.meta.JavaKind;
113 import jdk.vm.ci.meta.MetaAccessProvider;
114 import jdk.vm.ci.meta.ResolvedJavaMethod;
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 * @param stampProvider
128 */
129 public static Plugins create(GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess, ConstantReflectionProvider constantReflection,
130 SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, StampProvider stampProvider, ReplacementsImpl replacements) {
131 InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config);
132
133 Plugins plugins = new Plugins(invocationPlugins);
134 NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
135 HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
136 HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
137
138 plugins.appendTypePlugin(nodePlugin);
139 plugins.appendNodePlugin(nodePlugin);
140 if (GeneratePIC.getValue()) {
141 // AOT needs to filter out bad invokes
142 plugins.prependNodePlugin(new NodePlugin() {
143 @Override
144 public boolean handleInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
145 if (b.parsingIntrinsic()) {
146 return false;
147 }
148 // check if the holder has a valid fingerprint
149 if (FingerprintUtil.getFingerprint((HotSpotResolvedObjectType) method.getDeclaringClass()) == 0) {
150 // Deopt otherwise
151 b.append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
|