src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/SnippetTemplate.java
changeset 48861 47f19ff9903c
parent 48190 25cfedf27edc
child 49451 e06f9607f370
equal deleted inserted replaced
48860:5bce1b7e7800 48861:47f19ff9903c
    45 import java.util.Map;
    45 import java.util.Map;
    46 import java.util.concurrent.atomic.AtomicInteger;
    46 import java.util.concurrent.atomic.AtomicInteger;
    47 import java.util.concurrent.atomic.AtomicReference;
    47 import java.util.concurrent.atomic.AtomicReference;
    48 import java.util.function.Predicate;
    48 import java.util.function.Predicate;
    49 
    49 
       
    50 import jdk.vm.ci.code.TargetDescription;
       
    51 import jdk.vm.ci.meta.Constant;
       
    52 import jdk.vm.ci.meta.JavaConstant;
       
    53 import jdk.vm.ci.meta.JavaKind;
       
    54 import jdk.vm.ci.meta.Local;
       
    55 import jdk.vm.ci.meta.LocalVariableTable;
       
    56 import jdk.vm.ci.meta.MetaAccessProvider;
       
    57 import jdk.vm.ci.meta.ResolvedJavaMethod;
       
    58 import jdk.vm.ci.meta.ResolvedJavaType;
       
    59 import jdk.vm.ci.meta.Signature;
       
    60 import jdk.vm.ci.meta.ResolvedJavaMethod.Parameter;
       
    61 
       
    62 import org.graalvm.collections.EconomicMap;
       
    63 import org.graalvm.collections.EconomicSet;
       
    64 import org.graalvm.collections.Equivalence;
       
    65 import org.graalvm.collections.UnmodifiableEconomicMap;
    50 import org.graalvm.compiler.api.replacements.Snippet;
    66 import org.graalvm.compiler.api.replacements.Snippet;
       
    67 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
    51 import org.graalvm.compiler.api.replacements.Snippet.ConstantParameter;
    68 import org.graalvm.compiler.api.replacements.Snippet.ConstantParameter;
    52 import org.graalvm.compiler.api.replacements.Snippet.NonNullParameter;
    69 import org.graalvm.compiler.api.replacements.Snippet.NonNullParameter;
    53 import org.graalvm.compiler.api.replacements.Snippet.VarargsParameter;
    70 import org.graalvm.compiler.api.replacements.Snippet.VarargsParameter;
    54 import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
       
    55 import org.graalvm.compiler.core.common.GraalOptions;
    71 import org.graalvm.compiler.core.common.GraalOptions;
    56 import org.graalvm.compiler.core.common.type.Stamp;
    72 import org.graalvm.compiler.core.common.type.Stamp;
    57 import org.graalvm.compiler.core.common.type.StampFactory;
    73 import org.graalvm.compiler.core.common.type.StampFactory;
    58 import org.graalvm.compiler.core.common.type.StampPair;
    74 import org.graalvm.compiler.core.common.type.StampPair;
    59 import org.graalvm.compiler.core.common.type.TypeReference;
    75 import org.graalvm.compiler.core.common.type.TypeReference;
    60 import org.graalvm.compiler.debug.CounterKey;
    76 import org.graalvm.compiler.debug.CounterKey;
    61 import org.graalvm.compiler.debug.DebugCloseable;
    77 import org.graalvm.compiler.debug.DebugCloseable;
       
    78 import org.graalvm.compiler.debug.DebugContext;
    62 import org.graalvm.compiler.debug.DebugHandlersFactory;
    79 import org.graalvm.compiler.debug.DebugHandlersFactory;
    63 import org.graalvm.compiler.debug.DebugContext;
       
    64 import org.graalvm.compiler.debug.DebugContext.Description;
       
    65 import org.graalvm.compiler.debug.GraalError;
    80 import org.graalvm.compiler.debug.GraalError;
    66 import org.graalvm.compiler.debug.TimerKey;
    81 import org.graalvm.compiler.debug.TimerKey;
    67 import org.graalvm.compiler.graph.Graph.Mark;
    82 import org.graalvm.compiler.debug.DebugContext.Description;
    68 import org.graalvm.compiler.graph.Node;
    83 import org.graalvm.compiler.graph.Node;
    69 import org.graalvm.compiler.graph.NodeClass;
    84 import org.graalvm.compiler.graph.NodeClass;
    70 import org.graalvm.compiler.graph.Position;
    85 import org.graalvm.compiler.graph.Position;
       
    86 import org.graalvm.compiler.graph.Graph.Mark;
    71 import org.graalvm.compiler.loop.LoopEx;
    87 import org.graalvm.compiler.loop.LoopEx;
    72 import org.graalvm.compiler.loop.LoopsData;
    88 import org.graalvm.compiler.loop.LoopsData;
    73 import org.graalvm.compiler.loop.phases.LoopTransformations;
    89 import org.graalvm.compiler.loop.phases.LoopTransformations;
    74 import org.graalvm.compiler.nodeinfo.InputType;
    90 import org.graalvm.compiler.nodeinfo.InputType;
    75 import org.graalvm.compiler.nodeinfo.NodeInfo;
    91 import org.graalvm.compiler.nodeinfo.NodeInfo;
    84 import org.graalvm.compiler.nodes.LoopBeginNode;
   100 import org.graalvm.compiler.nodes.LoopBeginNode;
    85 import org.graalvm.compiler.nodes.MergeNode;
   101 import org.graalvm.compiler.nodes.MergeNode;
    86 import org.graalvm.compiler.nodes.NodeView;
   102 import org.graalvm.compiler.nodes.NodeView;
    87 import org.graalvm.compiler.nodes.ParameterNode;
   103 import org.graalvm.compiler.nodes.ParameterNode;
    88 import org.graalvm.compiler.nodes.PhiNode;
   104 import org.graalvm.compiler.nodes.PhiNode;
    89 import org.graalvm.compiler.nodes.PiNode.Placeholder;
       
    90 import org.graalvm.compiler.nodes.PiNode.PlaceholderStamp;
       
    91 import org.graalvm.compiler.nodes.ReturnNode;
   105 import org.graalvm.compiler.nodes.ReturnNode;
    92 import org.graalvm.compiler.nodes.StartNode;
   106 import org.graalvm.compiler.nodes.StartNode;
    93 import org.graalvm.compiler.nodes.StateSplit;
   107 import org.graalvm.compiler.nodes.StateSplit;
    94 import org.graalvm.compiler.nodes.StructuredGraph;
   108 import org.graalvm.compiler.nodes.StructuredGraph;
    95 import org.graalvm.compiler.nodes.StructuredGraph.GuardsStage;
       
    96 import org.graalvm.compiler.nodes.ValueNode;
   109 import org.graalvm.compiler.nodes.ValueNode;
    97 import org.graalvm.compiler.nodes.ValueNodeUtil;
   110 import org.graalvm.compiler.nodes.ValueNodeUtil;
       
   111 import org.graalvm.compiler.nodes.PiNode.Placeholder;
       
   112 import org.graalvm.compiler.nodes.PiNode.PlaceholderStamp;
       
   113 import org.graalvm.compiler.nodes.StructuredGraph.GuardsStage;
    98 import org.graalvm.compiler.nodes.calc.FloatingNode;
   114 import org.graalvm.compiler.nodes.calc.FloatingNode;
    99 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
   115 import org.graalvm.compiler.nodes.java.LoadIndexedNode;
   100 import org.graalvm.compiler.nodes.java.StoreIndexedNode;
   116 import org.graalvm.compiler.nodes.java.StoreIndexedNode;
   101 import org.graalvm.compiler.nodes.memory.MemoryAccess;
   117 import org.graalvm.compiler.nodes.memory.MemoryAccess;
   102 import org.graalvm.compiler.nodes.memory.MemoryAnchorNode;
   118 import org.graalvm.compiler.nodes.memory.MemoryAnchorNode;
   113 import org.graalvm.compiler.options.OptionKey;
   129 import org.graalvm.compiler.options.OptionKey;
   114 import org.graalvm.compiler.options.OptionValues;
   130 import org.graalvm.compiler.options.OptionValues;
   115 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
   131 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
   116 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
   132 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
   117 import org.graalvm.compiler.phases.common.FloatingReadPhase;
   133 import org.graalvm.compiler.phases.common.FloatingReadPhase;
   118 import org.graalvm.compiler.phases.common.FloatingReadPhase.MemoryMapImpl;
       
   119 import org.graalvm.compiler.phases.common.GuardLoweringPhase;
   134 import org.graalvm.compiler.phases.common.GuardLoweringPhase;
   120 import org.graalvm.compiler.phases.common.LoweringPhase;
   135 import org.graalvm.compiler.phases.common.LoweringPhase;
   121 import org.graalvm.compiler.phases.common.RemoveValueProxyPhase;
   136 import org.graalvm.compiler.phases.common.RemoveValueProxyPhase;
       
   137 import org.graalvm.compiler.phases.common.FloatingReadPhase.MemoryMapImpl;
   122 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
   138 import org.graalvm.compiler.phases.common.inlining.InliningUtil;
   123 import org.graalvm.compiler.phases.tiers.PhaseContext;
   139 import org.graalvm.compiler.phases.tiers.PhaseContext;
   124 import org.graalvm.compiler.phases.util.Providers;
   140 import org.graalvm.compiler.phases.util.Providers;
   125 import org.graalvm.compiler.replacements.nodes.ExplodeLoopNode;
   141 import org.graalvm.compiler.replacements.nodes.ExplodeLoopNode;
   126 import org.graalvm.compiler.replacements.nodes.LoadSnippetVarargParameterNode;
   142 import org.graalvm.compiler.replacements.nodes.LoadSnippetVarargParameterNode;
   127 import org.graalvm.util.CollectionsUtil;
   143 import org.graalvm.util.CollectionsUtil;
   128 import org.graalvm.util.EconomicMap;
       
   129 import org.graalvm.util.EconomicSet;
       
   130 import org.graalvm.util.Equivalence;
       
   131 import org.graalvm.util.UnmodifiableEconomicMap;
       
   132 import org.graalvm.word.LocationIdentity;
   144 import org.graalvm.word.LocationIdentity;
   133 import org.graalvm.word.WordBase;
   145 import org.graalvm.word.WordBase;
   134 
       
   135 import jdk.vm.ci.code.TargetDescription;
       
   136 import jdk.vm.ci.meta.Constant;
       
   137 import jdk.vm.ci.meta.JavaConstant;
       
   138 import jdk.vm.ci.meta.JavaKind;
       
   139 import jdk.vm.ci.meta.Local;
       
   140 import jdk.vm.ci.meta.LocalVariableTable;
       
   141 import jdk.vm.ci.meta.MetaAccessProvider;
       
   142 import jdk.vm.ci.meta.ResolvedJavaMethod;
       
   143 import jdk.vm.ci.meta.ResolvedJavaMethod.Parameter;
       
   144 import jdk.vm.ci.meta.ResolvedJavaType;
       
   145 import jdk.vm.ci.meta.Signature;
       
   146 
   146 
   147 /**
   147 /**
   148  * A snippet template is a graph created by parsing a snippet method and then specialized by binding
   148  * A snippet template is a graph created by parsing a snippet method and then specialized by binding
   149  * constants to the snippet's {@link ConstantParameter} parameters.
   149  * constants to the snippet's {@link ConstantParameter} parameters.
   150  *
   150  *