< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java

Print this page


   1 /*
   2  * Copyright (c) 2015, 2016, 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  */
  23 package org.graalvm.compiler.hotspot.meta;
  24 
  25 import static jdk.vm.ci.meta.DeoptimizationAction.InvalidateRecompile;
  26 import static jdk.vm.ci.meta.DeoptimizationReason.Unresolved;
  27 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  28 import static org.graalvm.compiler.hotspot.meta.HotSpotAOTProfilingPlugin.Options.TieredAOT;
  29 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_THREAD_OBJECT_LOCATION;
  30 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing;
  31 import static org.graalvm.compiler.serviceprovider.JDK9Method.Java8OrEarlier;
  32 
  33 import java.lang.invoke.ConstantCallSite;
  34 import java.lang.invoke.MutableCallSite;
  35 import java.lang.invoke.VolatileCallSite;
  36 import java.lang.reflect.Method;
  37 import java.lang.reflect.Modifier;
  38 import java.math.BigInteger;
  39 import java.util.zip.CRC32;
  40 
  41 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
  42 import org.graalvm.compiler.bytecode.BytecodeProvider;
  43 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
  44 import org.graalvm.compiler.debug.GraalError;
  45 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  46 import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
  47 import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
  48 import org.graalvm.compiler.hotspot.replacements.BigIntegerSubstitutions;
  49 import org.graalvm.compiler.hotspot.replacements.CRC32Substitutions;
  50 import org.graalvm.compiler.hotspot.replacements.CallSiteTargetNode;
  51 import org.graalvm.compiler.hotspot.replacements.CipherBlockChainingSubstitutions;
  52 import org.graalvm.compiler.hotspot.replacements.ClassGetHubNode;
  53 import org.graalvm.compiler.hotspot.replacements.HotSpotClassSubstitutions;
  54 import org.graalvm.compiler.hotspot.replacements.IdentityHashCodeNode;
  55 import org.graalvm.compiler.hotspot.replacements.ObjectCloneNode;
  56 import org.graalvm.compiler.hotspot.replacements.ObjectSubstitutions;
  57 import org.graalvm.compiler.hotspot.replacements.ReflectionGetCallerClassNode;
  58 import org.graalvm.compiler.hotspot.replacements.ReflectionSubstitutions;
  59 import org.graalvm.compiler.hotspot.replacements.SHA2Substitutions;
  60 import org.graalvm.compiler.hotspot.replacements.SHA5Substitutions;
  61 import org.graalvm.compiler.hotspot.replacements.SHASubstitutions;
  62 import org.graalvm.compiler.hotspot.replacements.ThreadSubstitutions;
  63 import org.graalvm.compiler.hotspot.replacements.arraycopy.ArrayCopyNode;
  64 import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
  65 import org.graalvm.compiler.nodes.ConstantNode;
  66 import org.graalvm.compiler.nodes.DeoptimizeNode;
  67 import org.graalvm.compiler.nodes.DynamicPiNode;
  68 import org.graalvm.compiler.nodes.FixedGuardNode;
  69 import org.graalvm.compiler.nodes.LogicNode;
  70 import org.graalvm.compiler.nodes.NamedLocationIdentity;
  71 import org.graalvm.compiler.nodes.PiNode;
  72 import org.graalvm.compiler.nodes.ValueNode;
  73 import org.graalvm.compiler.nodes.calc.AddNode;
  74 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
  75 import org.graalvm.compiler.nodes.graphbuilderconf.ForeignCallPlugin;
  76 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
  77 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  78 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
  79 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
  80 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
  81 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
  82 import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;
  83 import org.graalvm.compiler.nodes.graphbuilderconf.NodePlugin;
  84 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
  85 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  86 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  87 import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode;
  88 import org.graalvm.compiler.nodes.spi.StampProvider;
  89 import org.graalvm.compiler.nodes.util.GraphUtil;
  90 import org.graalvm.compiler.options.OptionValues;
  91 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
  92 import org.graalvm.compiler.replacements.InlineDuringParsingPlugin;
  93 import org.graalvm.compiler.replacements.MethodHandlePlugin;
  94 import org.graalvm.compiler.replacements.NodeIntrinsificationProvider;
  95 import org.graalvm.compiler.replacements.ReplacementsImpl;
  96 import org.graalvm.compiler.replacements.StandardGraphBuilderPlugins;
  97 import org.graalvm.compiler.serviceprovider.GraalServices;
  98 import org.graalvm.compiler.serviceprovider.JDK9Method;
  99 import org.graalvm.compiler.word.WordOperationPlugin;
 100 import org.graalvm.compiler.word.WordTypes;
 101 import org.graalvm.word.LocationIdentity;
 102 
 103 import jdk.vm.ci.code.CodeUtil;
 104 import jdk.vm.ci.hotspot.HotSpotObjectConstant;
 105 import jdk.vm.ci.hotspot.HotSpotResolvedJavaType;
 106 import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
 107 import jdk.vm.ci.meta.ConstantReflectionProvider;
 108 import jdk.vm.ci.meta.DeoptimizationAction;
 109 import jdk.vm.ci.meta.DeoptimizationReason;
 110 import jdk.vm.ci.meta.JavaConstant;
 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      * @param stampProvider
 128      */
 129     public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
 130                     ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, StampProvider stampProvider,
 131                     ReplacementsImpl replacements) {
 132         InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
 133 
 134         Plugins plugins = new Plugins(invocationPlugins);
 135         NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
 136         HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
 137         HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
 138 
 139         plugins.appendTypePlugin(nodePlugin);
 140         plugins.appendNodePlugin(nodePlugin);
 141         OptionValues options = replacements.getOptions();
 142         if (GeneratePIC.getValue(options)) {
 143             // AOT needs to filter out bad invokes
 144             plugins.prependNodePlugin(new NodePlugin() {
 145                 @Override
 146                 public boolean handleInvoke(GraphBuilderContext b, ResolvedJavaMethod method, ValueNode[] args) {
 147                     if (b.parsingIntrinsic()) {
 148                         return false;
 149                     }
 150                     // check if the holder has a valid fingerprint
 151                     if (((HotSpotResolvedObjectType) method.getDeclaringClass()).getFingerprint() == 0) {
 152                         // Deopt otherwise
 153                         b.append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
 154                         return true;
 155                     }
 156                     // the last argument that may come from appendix, check if it is a supported
 157                     // constant type
 158                     if (args.length > 0) {
 159                         JavaConstant constant = args[args.length - 1].asJavaConstant();
 160                         if (constant != null && constant instanceof HotSpotObjectConstant) {
 161                             HotSpotResolvedJavaType type = (HotSpotResolvedJavaType) ((HotSpotObjectConstant) constant).getType();
 162                             Class<?> clazz = type.mirror();
 163                             if (clazz.equals(String.class)) {
 164                                 return false;
 165                             }
 166                             if (Class.class.isAssignableFrom(clazz) && ((HotSpotResolvedObjectType) type).getFingerprint() != 0) {
 167                                 return false;
 168                             }
 169                             b.append(new DeoptimizeNode(InvalidateRecompile, Unresolved));
 170                             return true;
 171                         }
 172                     }
 173                     return false;
 174                 }
 175             });
 176         }
 177         plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));

 178         plugins.appendInlineInvokePlugin(replacements);
 179         if (InlineDuringParsing.getValue(options)) {
 180             plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
 181         }
 182 
 183         if (GeneratePIC.getValue(options)) {
 184             plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
 185             if (TieredAOT.getValue(options)) {
 186                 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
 187             }
 188         }
 189 
 190         invocationPlugins.defer(new Runnable() {
 191 
 192             @Override
 193             public void run() {
 194                 BytecodeProvider replacementBytecodeProvider = replacements.getDefaultReplacementBytecodeProvider();
 195                 registerObjectPlugins(invocationPlugins, options, replacementBytecodeProvider);
 196                 registerClassPlugins(plugins, config, replacementBytecodeProvider);
 197                 registerSystemPlugins(invocationPlugins, foreignCalls);
 198                 registerThreadPlugins(invocationPlugins, metaAccess, wordTypes, config, replacementBytecodeProvider);

 199                 registerCallSitePlugins(invocationPlugins);

 200                 registerReflectionPlugins(invocationPlugins, replacementBytecodeProvider);
 201                 registerConstantPoolPlugins(invocationPlugins, wordTypes, config, replacementBytecodeProvider);
 202                 registerAESPlugins(invocationPlugins, config, replacementBytecodeProvider);
 203                 registerCRC32Plugins(invocationPlugins, config, replacementBytecodeProvider);
 204                 registerBigIntegerPlugins(invocationPlugins, config, replacementBytecodeProvider);
 205                 registerSHAPlugins(invocationPlugins, config, replacementBytecodeProvider);
 206                 registerUnsafePlugins(invocationPlugins, replacementBytecodeProvider);
 207                 StandardGraphBuilderPlugins.registerInvocationPlugins(metaAccess, snippetReflection, invocationPlugins, replacementBytecodeProvider, true);
 208 
 209                 for (NodeIntrinsicPluginFactory factory : GraalServices.load(NodeIntrinsicPluginFactory.class)) {
 210                     factory.registerPlugins(invocationPlugins, nodeIntrinsificationProvider);
 211                 }
 212             }
 213         });
 214         return plugins;
 215     }
 216 
 217     private static void registerObjectPlugins(InvocationPlugins plugins, OptionValues options, BytecodeProvider bytecodeProvider) {
 218         Registration r = new Registration(plugins, Object.class, bytecodeProvider);
 219         if (!GeneratePIC.getValue(options)) {


   1 /*
   2  * Copyright (c) 2015, 2017, 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  */
  23 package org.graalvm.compiler.hotspot.meta;
  24 


  25 import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
  26 import static org.graalvm.compiler.hotspot.meta.HotSpotAOTProfilingPlugin.Options.TieredAOT;
  27 import static org.graalvm.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_THREAD_OBJECT_LOCATION;
  28 import static org.graalvm.compiler.java.BytecodeParserOptions.InlineDuringParsing;
  29 import static org.graalvm.compiler.serviceprovider.JDK9Method.Java8OrEarlier;
  30 
  31 import java.lang.invoke.ConstantCallSite;
  32 import java.lang.invoke.MutableCallSite;
  33 import java.lang.invoke.VolatileCallSite;
  34 import java.lang.reflect.Method;
  35 import java.lang.reflect.Modifier;
  36 import java.math.BigInteger;
  37 import java.util.zip.CRC32;
  38 
  39 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
  40 import org.graalvm.compiler.bytecode.BytecodeProvider;
  41 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
  42 import org.graalvm.compiler.debug.GraalError;
  43 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  44 import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
  45 import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
  46 import org.graalvm.compiler.hotspot.replacements.BigIntegerSubstitutions;
  47 import org.graalvm.compiler.hotspot.replacements.CRC32Substitutions;
  48 import org.graalvm.compiler.hotspot.replacements.CallSiteTargetNode;
  49 import org.graalvm.compiler.hotspot.replacements.CipherBlockChainingSubstitutions;
  50 import org.graalvm.compiler.hotspot.replacements.ClassGetHubNode;
  51 import org.graalvm.compiler.hotspot.replacements.HotSpotClassSubstitutions;
  52 import org.graalvm.compiler.hotspot.replacements.IdentityHashCodeNode;
  53 import org.graalvm.compiler.hotspot.replacements.ObjectCloneNode;
  54 import org.graalvm.compiler.hotspot.replacements.ObjectSubstitutions;
  55 import org.graalvm.compiler.hotspot.replacements.ReflectionGetCallerClassNode;
  56 import org.graalvm.compiler.hotspot.replacements.ReflectionSubstitutions;
  57 import org.graalvm.compiler.hotspot.replacements.SHA2Substitutions;
  58 import org.graalvm.compiler.hotspot.replacements.SHA5Substitutions;
  59 import org.graalvm.compiler.hotspot.replacements.SHASubstitutions;
  60 import org.graalvm.compiler.hotspot.replacements.ThreadSubstitutions;
  61 import org.graalvm.compiler.hotspot.replacements.arraycopy.ArrayCopyNode;
  62 import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
  63 import org.graalvm.compiler.nodes.ConstantNode;

  64 import org.graalvm.compiler.nodes.DynamicPiNode;
  65 import org.graalvm.compiler.nodes.FixedGuardNode;
  66 import org.graalvm.compiler.nodes.LogicNode;
  67 import org.graalvm.compiler.nodes.NamedLocationIdentity;
  68 import org.graalvm.compiler.nodes.PiNode;
  69 import org.graalvm.compiler.nodes.ValueNode;
  70 import org.graalvm.compiler.nodes.calc.AddNode;
  71 import org.graalvm.compiler.nodes.calc.LeftShiftNode;
  72 import org.graalvm.compiler.nodes.graphbuilderconf.ForeignCallPlugin;
  73 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
  74 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderContext;
  75 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin;
  76 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugin.Receiver;
  77 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins;
  78 import org.graalvm.compiler.nodes.graphbuilderconf.InvocationPlugins.Registration;
  79 import org.graalvm.compiler.nodes.graphbuilderconf.NodeIntrinsicPluginFactory;

  80 import org.graalvm.compiler.nodes.java.InstanceOfDynamicNode;
  81 import org.graalvm.compiler.nodes.memory.HeapAccess.BarrierType;
  82 import org.graalvm.compiler.nodes.memory.address.AddressNode;
  83 import org.graalvm.compiler.nodes.memory.address.OffsetAddressNode;
  84 import org.graalvm.compiler.nodes.spi.StampProvider;
  85 import org.graalvm.compiler.nodes.util.GraphUtil;
  86 import org.graalvm.compiler.options.OptionValues;
  87 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
  88 import org.graalvm.compiler.replacements.InlineDuringParsingPlugin;
  89 import org.graalvm.compiler.replacements.MethodHandlePlugin;
  90 import org.graalvm.compiler.replacements.NodeIntrinsificationProvider;
  91 import org.graalvm.compiler.replacements.ReplacementsImpl;
  92 import org.graalvm.compiler.replacements.StandardGraphBuilderPlugins;
  93 import org.graalvm.compiler.serviceprovider.GraalServices;
  94 import org.graalvm.compiler.serviceprovider.JDK9Method;
  95 import org.graalvm.compiler.word.WordOperationPlugin;
  96 import org.graalvm.compiler.word.WordTypes;
  97 import org.graalvm.word.LocationIdentity;
  98 
  99 import jdk.vm.ci.code.CodeUtil;



 100 import jdk.vm.ci.meta.ConstantReflectionProvider;
 101 import jdk.vm.ci.meta.DeoptimizationAction;
 102 import jdk.vm.ci.meta.DeoptimizationReason;

 103 import jdk.vm.ci.meta.JavaKind;
 104 import jdk.vm.ci.meta.MetaAccessProvider;
 105 import jdk.vm.ci.meta.ResolvedJavaMethod;
 106 import sun.misc.Unsafe;
 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      * @param stampProvider
 120      */
 121     public static Plugins create(CompilerConfiguration compilerConfiguration, GraalHotSpotVMConfig config, HotSpotWordTypes wordTypes, MetaAccessProvider metaAccess,
 122                     ConstantReflectionProvider constantReflection, SnippetReflectionProvider snippetReflection, ForeignCallsProvider foreignCalls, StampProvider stampProvider,
 123                     ReplacementsImpl replacements) {
 124         InvocationPlugins invocationPlugins = new HotSpotInvocationPlugins(config, compilerConfiguration);
 125 
 126         Plugins plugins = new Plugins(invocationPlugins);
 127         NodeIntrinsificationProvider nodeIntrinsificationProvider = new NodeIntrinsificationProvider(metaAccess, snippetReflection, foreignCalls, wordTypes);
 128         HotSpotWordOperationPlugin wordOperationPlugin = new HotSpotWordOperationPlugin(snippetReflection, wordTypes);
 129         HotSpotNodePlugin nodePlugin = new HotSpotNodePlugin(wordOperationPlugin);
 130 
 131         plugins.appendTypePlugin(nodePlugin);
 132         plugins.appendNodePlugin(nodePlugin);
 133         OptionValues options = replacements.getOptions();
 134         if (!GeneratePIC.getValue(options)) {


































 135             plugins.appendNodePlugin(new MethodHandlePlugin(constantReflection.getMethodHandleAccess(), true));
 136         }
 137         plugins.appendInlineInvokePlugin(replacements);
 138         if (InlineDuringParsing.getValue(options)) {
 139             plugins.appendInlineInvokePlugin(new InlineDuringParsingPlugin());
 140         }
 141 
 142         if (GeneratePIC.getValue(options)) {
 143             plugins.setClassInitializationPlugin(new HotSpotClassInitializationPlugin());
 144             if (TieredAOT.getValue(options)) {
 145                 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
 146             }
 147         }
 148 
 149         invocationPlugins.defer(new Runnable() {
 150 
 151             @Override
 152             public void run() {
 153                 BytecodeProvider replacementBytecodeProvider = replacements.getDefaultReplacementBytecodeProvider();
 154                 registerObjectPlugins(invocationPlugins, options, replacementBytecodeProvider);
 155                 registerClassPlugins(plugins, config, replacementBytecodeProvider);
 156                 registerSystemPlugins(invocationPlugins, foreignCalls);
 157                 registerThreadPlugins(invocationPlugins, metaAccess, wordTypes, config, replacementBytecodeProvider);
 158                 if (!GeneratePIC.getValue(options)) {
 159                     registerCallSitePlugins(invocationPlugins);
 160                 }
 161                 registerReflectionPlugins(invocationPlugins, replacementBytecodeProvider);
 162                 registerConstantPoolPlugins(invocationPlugins, wordTypes, config, replacementBytecodeProvider);
 163                 registerAESPlugins(invocationPlugins, config, replacementBytecodeProvider);
 164                 registerCRC32Plugins(invocationPlugins, config, replacementBytecodeProvider);
 165                 registerBigIntegerPlugins(invocationPlugins, config, replacementBytecodeProvider);
 166                 registerSHAPlugins(invocationPlugins, config, replacementBytecodeProvider);
 167                 registerUnsafePlugins(invocationPlugins, replacementBytecodeProvider);
 168                 StandardGraphBuilderPlugins.registerInvocationPlugins(metaAccess, snippetReflection, invocationPlugins, replacementBytecodeProvider, true);
 169 
 170                 for (NodeIntrinsicPluginFactory factory : GraalServices.load(NodeIntrinsicPluginFactory.class)) {
 171                     factory.registerPlugins(invocationPlugins, nodeIntrinsificationProvider);
 172                 }
 173             }
 174         });
 175         return plugins;
 176     }
 177 
 178     private static void registerObjectPlugins(InvocationPlugins plugins, OptionValues options, BytecodeProvider bytecodeProvider) {
 179         Registration r = new Registration(plugins, Object.class, bytecodeProvider);
 180         if (!GeneratePIC.getValue(options)) {


< prev index next >