src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File open Sdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta

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

Print this page




  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.core.common.type.StampFactory;
  43 import org.graalvm.compiler.debug.GraalError;
  44 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  45 import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
  46 import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
  47 import org.graalvm.compiler.hotspot.replacements.BigIntegerSubstitutions;
  48 import org.graalvm.compiler.hotspot.replacements.CRC32Substitutions;

  49 import org.graalvm.compiler.hotspot.replacements.CallSiteTargetNode;
  50 import org.graalvm.compiler.hotspot.replacements.CipherBlockChainingSubstitutions;
  51 import org.graalvm.compiler.hotspot.replacements.ClassGetHubNode;
  52 import org.graalvm.compiler.hotspot.replacements.HotSpotClassSubstitutions;
  53 import org.graalvm.compiler.hotspot.replacements.IdentityHashCodeNode;
  54 import org.graalvm.compiler.hotspot.replacements.ObjectCloneNode;
  55 import org.graalvm.compiler.hotspot.replacements.ObjectSubstitutions;
  56 import org.graalvm.compiler.hotspot.replacements.ReflectionGetCallerClassNode;
  57 import org.graalvm.compiler.hotspot.replacements.ReflectionSubstitutions;
  58 import org.graalvm.compiler.hotspot.replacements.SHA2Substitutions;
  59 import org.graalvm.compiler.hotspot.replacements.SHA5Substitutions;
  60 import org.graalvm.compiler.hotspot.replacements.SHASubstitutions;
  61 import org.graalvm.compiler.hotspot.replacements.ThreadSubstitutions;
  62 import org.graalvm.compiler.hotspot.replacements.arraycopy.ArrayCopyNode;
  63 import org.graalvm.compiler.hotspot.word.HotSpotWordTypes;
  64 import org.graalvm.compiler.nodes.ConstantNode;
  65 import org.graalvm.compiler.nodes.DynamicPiNode;
  66 import org.graalvm.compiler.nodes.FixedGuardNode;
  67 import org.graalvm.compiler.nodes.LogicNode;
  68 import org.graalvm.compiler.nodes.NamedLocationIdentity;


 148                 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
 149             }
 150         }
 151 
 152         invocationPlugins.defer(new Runnable() {
 153 
 154             @Override
 155             public void run() {
 156                 BytecodeProvider replacementBytecodeProvider = replacements.getDefaultReplacementBytecodeProvider();
 157                 registerObjectPlugins(invocationPlugins, options, replacementBytecodeProvider);
 158                 registerClassPlugins(plugins, config, replacementBytecodeProvider);
 159                 registerSystemPlugins(invocationPlugins, foreignCalls);
 160                 registerThreadPlugins(invocationPlugins, metaAccess, wordTypes, config, replacementBytecodeProvider);
 161                 if (!GeneratePIC.getValue(options)) {
 162                     registerCallSitePlugins(invocationPlugins);
 163                 }
 164                 registerReflectionPlugins(invocationPlugins, replacementBytecodeProvider);
 165                 registerConstantPoolPlugins(invocationPlugins, wordTypes, config, replacementBytecodeProvider);
 166                 registerAESPlugins(invocationPlugins, config, replacementBytecodeProvider);
 167                 registerCRC32Plugins(invocationPlugins, config, replacementBytecodeProvider);

 168                 registerBigIntegerPlugins(invocationPlugins, config, replacementBytecodeProvider);
 169                 registerSHAPlugins(invocationPlugins, config, replacementBytecodeProvider);
 170                 registerUnsafePlugins(invocationPlugins, replacementBytecodeProvider);
 171                 StandardGraphBuilderPlugins.registerInvocationPlugins(metaAccess, snippetReflection, invocationPlugins, replacementBytecodeProvider, true);
 172 
 173                 for (NodeIntrinsicPluginFactory factory : GraalServices.load(NodeIntrinsicPluginFactory.class)) {
 174                     factory.registerPlugins(invocationPlugins, nodeIntrinsificationProvider);
 175                 }
 176             }
 177         });
 178         return plugins;
 179     }
 180 
 181     private static void registerObjectPlugins(InvocationPlugins plugins, OptionValues options, BytecodeProvider bytecodeProvider) {
 182         Registration r = new Registration(plugins, Object.class, bytecodeProvider);
 183         if (!GeneratePIC.getValue(options)) {
 184             // FIXME: clone() requires speculation and requires a fix in here (to check that
 185             // b.getAssumptions() != null), and in ReplacementImpl.getSubstitution() where there is
 186             // an instantiation of IntrinsicGraphBuilder using a constructor that sets
 187             // AllowAssumptions to YES automatically. The former has to inherit the assumptions


 513         if (config.useSHA512Intrinsics()) {
 514             assert config.sha512ImplCompress != 0L;
 515             Registration r = new Registration(plugins, "sun.security.provider.SHA5", bytecodeProvider);
 516             r.registerMethodSubstitution(SHA5Substitutions.class, SHA5Substitutions.implCompressName, "implCompress0", Receiver.class, byte[].class, int.class);
 517         }
 518     }
 519 
 520     private static void registerCRC32Plugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider bytecodeProvider) {
 521         if (config.useCRC32Intrinsics) {
 522             Registration r = new Registration(plugins, CRC32.class, bytecodeProvider);
 523             r.registerMethodSubstitution(CRC32Substitutions.class, "update", int.class, int.class);
 524             if (Java8OrEarlier) {
 525                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes", int.class, byte[].class, int.class, int.class);
 526                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer", int.class, long.class, int.class, int.class);
 527             } else {
 528                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes0", int.class, byte[].class, int.class, int.class);
 529                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer0", int.class, long.class, int.class, int.class);
 530             }
 531         }
 532     }








 533 }


  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.core.common.type.StampFactory;
  43 import org.graalvm.compiler.debug.GraalError;
  44 import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
  45 import org.graalvm.compiler.hotspot.nodes.CurrentJavaThreadNode;
  46 import org.graalvm.compiler.hotspot.replacements.AESCryptSubstitutions;
  47 import org.graalvm.compiler.hotspot.replacements.BigIntegerSubstitutions;
  48 import org.graalvm.compiler.hotspot.replacements.CRC32Substitutions;
  49 import org.graalvm.compiler.hotspot.replacements.CRC32CSubstitutions;
  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.DynamicPiNode;
  67 import org.graalvm.compiler.nodes.FixedGuardNode;
  68 import org.graalvm.compiler.nodes.LogicNode;
  69 import org.graalvm.compiler.nodes.NamedLocationIdentity;


 149                 plugins.setProfilingPlugin(new HotSpotAOTProfilingPlugin());
 150             }
 151         }
 152 
 153         invocationPlugins.defer(new Runnable() {
 154 
 155             @Override
 156             public void run() {
 157                 BytecodeProvider replacementBytecodeProvider = replacements.getDefaultReplacementBytecodeProvider();
 158                 registerObjectPlugins(invocationPlugins, options, replacementBytecodeProvider);
 159                 registerClassPlugins(plugins, config, replacementBytecodeProvider);
 160                 registerSystemPlugins(invocationPlugins, foreignCalls);
 161                 registerThreadPlugins(invocationPlugins, metaAccess, wordTypes, config, replacementBytecodeProvider);
 162                 if (!GeneratePIC.getValue(options)) {
 163                     registerCallSitePlugins(invocationPlugins);
 164                 }
 165                 registerReflectionPlugins(invocationPlugins, replacementBytecodeProvider);
 166                 registerConstantPoolPlugins(invocationPlugins, wordTypes, config, replacementBytecodeProvider);
 167                 registerAESPlugins(invocationPlugins, config, replacementBytecodeProvider);
 168                 registerCRC32Plugins(invocationPlugins, config, replacementBytecodeProvider);
 169                 registerCRC32CPlugins(invocationPlugins, config, replacementBytecodeProvider);
 170                 registerBigIntegerPlugins(invocationPlugins, config, replacementBytecodeProvider);
 171                 registerSHAPlugins(invocationPlugins, config, replacementBytecodeProvider);
 172                 registerUnsafePlugins(invocationPlugins, replacementBytecodeProvider);
 173                 StandardGraphBuilderPlugins.registerInvocationPlugins(metaAccess, snippetReflection, invocationPlugins, replacementBytecodeProvider, true);
 174 
 175                 for (NodeIntrinsicPluginFactory factory : GraalServices.load(NodeIntrinsicPluginFactory.class)) {
 176                     factory.registerPlugins(invocationPlugins, nodeIntrinsificationProvider);
 177                 }
 178             }
 179         });
 180         return plugins;
 181     }
 182 
 183     private static void registerObjectPlugins(InvocationPlugins plugins, OptionValues options, BytecodeProvider bytecodeProvider) {
 184         Registration r = new Registration(plugins, Object.class, bytecodeProvider);
 185         if (!GeneratePIC.getValue(options)) {
 186             // FIXME: clone() requires speculation and requires a fix in here (to check that
 187             // b.getAssumptions() != null), and in ReplacementImpl.getSubstitution() where there is
 188             // an instantiation of IntrinsicGraphBuilder using a constructor that sets
 189             // AllowAssumptions to YES automatically. The former has to inherit the assumptions


 515         if (config.useSHA512Intrinsics()) {
 516             assert config.sha512ImplCompress != 0L;
 517             Registration r = new Registration(plugins, "sun.security.provider.SHA5", bytecodeProvider);
 518             r.registerMethodSubstitution(SHA5Substitutions.class, SHA5Substitutions.implCompressName, "implCompress0", Receiver.class, byte[].class, int.class);
 519         }
 520     }
 521 
 522     private static void registerCRC32Plugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider bytecodeProvider) {
 523         if (config.useCRC32Intrinsics) {
 524             Registration r = new Registration(plugins, CRC32.class, bytecodeProvider);
 525             r.registerMethodSubstitution(CRC32Substitutions.class, "update", int.class, int.class);
 526             if (Java8OrEarlier) {
 527                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes", int.class, byte[].class, int.class, int.class);
 528                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer", int.class, long.class, int.class, int.class);
 529             } else {
 530                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateBytes0", int.class, byte[].class, int.class, int.class);
 531                 r.registerMethodSubstitution(CRC32Substitutions.class, "updateByteBuffer0", int.class, long.class, int.class, int.class);
 532             }
 533         }
 534     }
 535 
 536     private static void registerCRC32CPlugins(InvocationPlugins plugins, GraalHotSpotVMConfig config, BytecodeProvider bytecodeProvider) {
 537         if (config.useCRC32CIntrinsics) {
 538             Registration r = new Registration(plugins, "java.util.zip.CRC32C", bytecodeProvider);
 539             r.registerMethodSubstitution(CRC32CSubstitutions.class, "updateBytes", int.class, byte[].class, int.class, int.class);
 540             r.registerMethodSubstitution(CRC32CSubstitutions.class, "updateDirectByteBuffer", int.class, long.class, int.class, int.class);
 541         }
 542     }
 543 }
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot/src/org/graalvm/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File