CallsiteHolder
whose graph has been copied already and thus can be modified without
affecting the original (usually cached) version.Lowerable
nodes that
could be lowered in the current LoweringPhase
.value
that it produced by a guard
.DeoptimizeNode
and replace their
ControlSplitNodes
with FixedGuardNodes
.ComputeInliningRelevance.Scope
object for each one.DeadCodeEliminationPhase.Options.ReduceDCE
.DeadCodeEliminationPhase.Options.ReduceDCE
is false.DeoptimizeNodes
which use the same
FrameState
and merges them together.guard
with anchor
.callee.invoke.callTarget.arguments
).CallsiteHolderExplorable.graph()
provides "fixed" arguments.invocation
that may be inlined.CallsiteHolderExplorable.remainingInvokes
.GuardNodes
into corresponding control-flow structure and
DeoptimizeNodes
.Graph.NodeEventListener
implementation that accumulates event nodes in a
HashSet
.Graph.NodeEventListener
that collects nodes from all events.Graph.NodeEventListener
that collects nodes from all events that match a given
filter.InliningData
grows upon InliningData.moveForward()
deciding to explore (depth-first) a callsite of the graph associated to this
CallsiteHolder
.InliningData
.Invoke
nodes with MethodCallTargetNode
.Lowerable
nodes to do their lowering.InliningData
grows and shrinks as choices are made among the
alternatives below:
not worth inlining: pop stack top, which comprises:
pop any remaining graphs not yet delved into
pop the current invocation
delve
into one of the callsites hosted in the current graph,
such callsite is explored next by InliningData.moveForward()
try to inline
: move past the current graph
(remove it from the topmost element).invocation
.method
and canonicalizes them.MemoryAnchorNode
to the
real last access location.CallsiteHolderExplorable
.invoke
arguments with more precise type than that declared by the corresponding parameter
result
)
under guard
.InliningData.moveForward()
must maintain: "the top invocation records
how many concrete target methods (for it) remain on the InliningData.graphQueue
; those targets
'belong' to the current invocation in question.ValueNode.inferStamp()
on the node and, if it returns true (which means
that the stamp has changed), re-queues the node's usages.calleeInvocation
, where that callsite belongs
to the CallsiteHolderExplorable
at the top of the InliningData.graphQueue
maintained in
this class.
otherwise, to devirtualize the callsite in question.
ValueAnchorNode
by removing inputs that have
already been anchored in a dominating value anchor.