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 * |