src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/ReplacementsImpl.java
changeset 48861 47f19ff9903c
parent 47798 9fe9292f5931
child 49451 e06f9607f370
equal deleted inserted replaced
48860:5bce1b7e7800 48861:47f19ff9903c
    34 import java.util.List;
    34 import java.util.List;
    35 import java.util.concurrent.ConcurrentHashMap;
    35 import java.util.concurrent.ConcurrentHashMap;
    36 import java.util.concurrent.ConcurrentMap;
    36 import java.util.concurrent.ConcurrentMap;
    37 import java.util.concurrent.atomic.AtomicInteger;
    37 import java.util.concurrent.atomic.AtomicInteger;
    38 
    38 
       
    39 import org.graalvm.collections.EconomicMap;
       
    40 import org.graalvm.collections.Equivalence;
    39 import org.graalvm.compiler.api.replacements.Fold;
    41 import org.graalvm.compiler.api.replacements.Fold;
    40 import org.graalvm.compiler.api.replacements.MethodSubstitution;
    42 import org.graalvm.compiler.api.replacements.MethodSubstitution;
    41 import org.graalvm.compiler.api.replacements.Snippet;
    43 import org.graalvm.compiler.api.replacements.Snippet;
    42 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
    44 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
    43 import org.graalvm.compiler.api.replacements.SnippetTemplateCache;
    45 import org.graalvm.compiler.api.replacements.SnippetTemplateCache;
    45 import org.graalvm.compiler.bytecode.BytecodeProvider;
    47 import org.graalvm.compiler.bytecode.BytecodeProvider;
    46 import org.graalvm.compiler.bytecode.ResolvedJavaMethodBytecode;
    48 import org.graalvm.compiler.bytecode.ResolvedJavaMethodBytecode;
    47 import org.graalvm.compiler.core.common.GraalOptions;
    49 import org.graalvm.compiler.core.common.GraalOptions;
    48 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
    50 import org.graalvm.compiler.core.common.spi.ConstantFieldProvider;
    49 import org.graalvm.compiler.debug.DebugCloseable;
    51 import org.graalvm.compiler.debug.DebugCloseable;
    50 import org.graalvm.compiler.debug.DebugHandlersFactory;
       
    51 import org.graalvm.compiler.debug.DebugContext;
    52 import org.graalvm.compiler.debug.DebugContext;
    52 import org.graalvm.compiler.debug.DebugContext.Description;
    53 import org.graalvm.compiler.debug.DebugContext.Description;
       
    54 import org.graalvm.compiler.debug.DebugHandlersFactory;
    53 import org.graalvm.compiler.debug.GraalError;
    55 import org.graalvm.compiler.debug.GraalError;
    54 import org.graalvm.compiler.debug.TimerKey;
    56 import org.graalvm.compiler.debug.TimerKey;
    55 import org.graalvm.compiler.graph.Node;
    57 import org.graalvm.compiler.graph.Node;
    56 import org.graalvm.compiler.graph.Node.NodeIntrinsic;
    58 import org.graalvm.compiler.graph.Node.NodeIntrinsic;
    57 import org.graalvm.compiler.java.GraphBuilderPhase;
    59 import org.graalvm.compiler.java.GraphBuilderPhase;
    79 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
    81 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
    80 import org.graalvm.compiler.phases.tiers.PhaseContext;
    82 import org.graalvm.compiler.phases.tiers.PhaseContext;
    81 import org.graalvm.compiler.phases.util.Providers;
    83 import org.graalvm.compiler.phases.util.Providers;
    82 import org.graalvm.compiler.word.Word;
    84 import org.graalvm.compiler.word.Word;
    83 import org.graalvm.compiler.word.WordOperationPlugin;
    85 import org.graalvm.compiler.word.WordOperationPlugin;
    84 import org.graalvm.util.EconomicMap;
       
    85 import org.graalvm.util.Equivalence;
       
    86 
    86 
    87 import jdk.vm.ci.code.TargetDescription;
    87 import jdk.vm.ci.code.TargetDescription;
    88 import jdk.vm.ci.meta.ConstantReflectionProvider;
    88 import jdk.vm.ci.meta.ConstantReflectionProvider;
    89 import jdk.vm.ci.meta.MetaAccessProvider;
    89 import jdk.vm.ci.meta.MetaAccessProvider;
    90 import jdk.vm.ci.meta.ResolvedJavaMethod;
    90 import jdk.vm.ci.meta.ResolvedJavaMethod;
   272         if (plugin != null && (!plugin.inlineOnly() || invokeBci >= 0)) {
   272         if (plugin != null && (!plugin.inlineOnly() || invokeBci >= 0)) {
   273             MetaAccessProvider metaAccess = providers.getMetaAccess();
   273             MetaAccessProvider metaAccess = providers.getMetaAccess();
   274             if (plugin instanceof MethodSubstitutionPlugin) {
   274             if (plugin instanceof MethodSubstitutionPlugin) {
   275                 MethodSubstitutionPlugin msPlugin = (MethodSubstitutionPlugin) plugin;
   275                 MethodSubstitutionPlugin msPlugin = (MethodSubstitutionPlugin) plugin;
   276                 ResolvedJavaMethod substitute = msPlugin.getSubstitute(metaAccess);
   276                 ResolvedJavaMethod substitute = msPlugin.getSubstitute(metaAccess);
   277                 StructuredGraph graph = graphs.get(substitute);
   277                 StructuredGraph graph = UseSnippetGraphCache.getValue(options) ? graphs.get(substitute) : null;
   278                 if (graph == null) {
   278                 if (graph == null) {
   279                     try (DebugContext debug = openDebugContext("Substitution_", method)) {
   279                     try (DebugContext debug = openDebugContext("Substitution_", method)) {
   280                         graph = makeGraph(debug, msPlugin.getBytecodeProvider(), substitute, null, method);
   280                         graph = makeGraph(debug, msPlugin.getBytecodeProvider(), substitute, null, method);
       
   281                         if (!UseSnippetGraphCache.getValue(options)) {
       
   282                             return graph;
       
   283                         }
   281                         graph.freeze();
   284                         graph.freeze();
   282                         graphs.putIfAbsent(substitute, graph);
   285                         graphs.putIfAbsent(substitute, graph);
   283                         graph = graphs.get(substitute);
   286                         graph = graphs.get(substitute);
   284                     }
   287                     }
   285                 }
   288                 }