- StartNode
-
The Start node is used to represent the beginning of each method. It's first two inputs
are always a reference to itself and the root node.
- Input edge(s):
-
Start: A reference to itself.
Root: A reference to the Root node.
- Output edge(s):
-
Control: A token representing the control flow of the code.
I_O: This type exists for historical reasons. It is used to serialize certain instructions.
Memory: To serialize memory stores that could interfere with each other, a type to express memory dependencies is used.
Frame Pointer: Represents the frame pointer for this method.
Return Address: Represents the return address of the method.
[Parameters]: The parameters the method receive. Including the this pointer for instance methods.
[Constants]: Literal constants declared inside the method.
- ParmNode
-
The ParmNode is a type of Projection Node and
as such it's able to extract an entry from a tuple. The
purpose of the ParmNode is specifically to extract
one of the outputs of the StartNode - i.e., one of the entry
values for the method. The two inputs to this node are a
reference to the Start node and an index representing one of
the values returned by the Start node: Control, I_O, Memory,
FramePtr, ReturnAdr, Parms. Note that in the IR (or IR
Graph) only the edge to the start node is present, the index
to the Tuple's output of the Start node is somewhat of a
label to that edge.
- Input edge(s):
-
Start: A reference to the start node.
- Output edge(s):
-
A single edge, details will depend on the index of the Start's node Tuple used.
- ReturnNode
-
This node represents the return of a method execution. The
required inputs to the Return node are similar to the
ouputs of the Start node. The inputs are: Control, I_O,
Memory, FramePtr and ReturnAdr. Additionally the node can
receive a reference to the value being returned by the
method.
- Input edge(s):
-
Control: A token representing the control flow of the code.
I_O: This type exists for historical reasons. It is used to serialize certain instructions.
Memory: To serialize memory stores that could interfere with each other, a type to express memory dependencies is used.
Frame Pointer: Represents the frame pointer for this method.
Return Address: Represents the return address of the method.
[Return Value]: A reference to the node representing the value being returned by the method.
- Output edge(s):
-
The return node always has an edge to the
Root node, even if no value is being
returned. Essentially, it just finishes execution of
the method.
- RootNode
-
The one-and-only before-all-else and after-all-else
RootNode. The RootNode represents what happens if the user
runs the whole program repeatedly.
- Input edge(s):
-
Root: A reference to itself.
[Return]: The Root node might have nodes as input, for instance, the ReturnNode.
- Output edge(s):
-
Not applicable.
- CountedLoopNode
-
CountedLoopNodes are simple counted loops.
They are all trip-counted loops, with exactly 1
trip-counter exit path (and maybe some other exit paths).
The trip-counter exit is always last in the loop. The
trip-counter have to stride by a constant; the exit value
is also loop invariant.
CountedLoopNodes and CountedLoopEndNodes come in matched
pairs. The CountedLoopNode has the incoming loop-start
control and the loop-back-control which is always the
IfTrue from the matching CountedLoopEndNode. The
CountedLoopNode act like a RegionNode for the whole loop
body. In fact, they are a subclass of LoopNode
which in turn is a subclass of RegionNode
.
- Input edge(s):
-
Startedge: Control edge representing the control when starting the loop.
BackEdge: Control edge representing the back-edge from the loop.
- Output edge(s):
-
Control token.
- CountedLoopEndNode
-
CountedLoopNodes and CountedLoopEndNodes come in matched
pairs. CountedLoopEndNodes end simple trip counted loops.
They act much like IfNodes. In fact, they are a subclass of
IfNode.
The CountedLoopEndNode has an incoming control (possibly not
the CountedLoopNode if there is control flow in the loop)
and the result of the conditional check of the loop
condition.
- Input edge(s):
-
Root: A reference to itself.
[Return]: The Root node might have nodes as input, for instance, the ReturnNode.
- Output edge(s):
-
Control token.
- CallStaticJavaNode
-
Make a direct subroutine call using Java calling convention (for static calls
and optimized virtual calls, plus calls to wrappers for run-time routines);
generates static stub.
- Input edge(s):
-
Control: A token representing the control flow of the code.
I_O: This type exists for historical reasons. It is used to serialize certain instructions.
Memory: To serialize memory stores that could interfere with each other, a type to express memory dependencies is used.
Frame Pointer: Represents the frame pointer for this method.
Return Address: Represents the return address of the method.
[Parameters]: The parameters the method receive. Including the this pointer for instance methods.
- Output edge(s):
-
FallThrough: xxxxxx
FallThrough IO: xxxxxx
FallThrough Memory: xxxxxx
FallThrough Catch: xxxxxx
CatchAll Catch: xxxxx
CatchAll Memory: xxxx
CatchAll IO: xxxxxx
Result: Projection for the value returned by the method. Might not be used if the return value is not present or ignored.
Exobj: Projection for exception thrown by the method. May not be present.
- CatchNode
-
Helper node to fork exceptions. "Catch" catches any exceptions thrown by
a just-prior call. Looks like a PCTableNode but emits no code - just the
table. The table lookup and branch is implemented by RethrowNode.
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CatchProjNode
-
CatchProjNode controls which exception handler is targetted after a call. It
is passed in the bci of the target handler, or no_handler_bci in case the
projection doesn't lead to an exception handler.
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CreateExNode
-
Helper node to create the exception coming back from a call.
- Input edge(s):
-
Control: xxxxx
I_O: yyyyy
- Output edge(s):
-
Not applicable.
- RethrowNode
-
Rethrow of exception at call site. Ends a procedure before rethrowing; ends
the current basic block like a ReturnNode. Restores register and unwinds
the stack. Rethrow happens in the caller's method.
- Input edge(s):
-
Control: xxxxx
I_O: yyyyy
- Output edge(s):
-
Not applicable.
- LoadNNode
-
Load a narrow oop from memory (either object or array).
A "Narrow OOP" is just a compressed pointer. See in the
printout that the output of LoadN is later used by
DecodeN which transformers the compressed pointer into a
regular full-sized pointer.
- Input edge(s):
-
Control: Represents the execution control token.
Memory: Represents the memory area.
Pointer: From which address to load the data.
- Output edge(s):
-
The compressed/narrow pointer which was stored at the location indicated.
- EncodeNNode
-
- Input edge(s):
-
- Output edge(s):
-
- DecodeNNode
-
Transformers a narrow/compressed pointer into a regular
full-sized pointer.
- Input edge(s):
-
Narrow Pointer: The compressed pointer to be converted to a full pointer.
- Output edge(s):
-
A full-sized pointer.
- ThreadLocalNode
-
Ideal Node which returns the base of ThreadLocalStorage.
- Input edge(s):
-
Not applicable.
- Output edge(s):
-
A pointer to the base of the thread local storage.
- CmpLNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- BoolNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- IfTrueNode and IfFalseNode
-
These nodes are projection nodes that extract the output
of an IfNode (and it's subclasses). All If's have only
to possible outcomes "true" and "false" representing the
direction of the control flow. These two nodes represent
the direction that the control flow must continue.
- Input edge(s):
-
IfNode: The IfNode that controls this control flow path.
- Output edge(s):
-
Control: The control flow token received as input.
- PhiNode
-
PhiNodes merge values from different Control paths.
Slot 0 points to the controlling RegionNode. Other
slots map 1-for-1 with incoming control flow paths to
the RegionNode.
- Input edge(s):
-
Region: Reference to the RegionNode that merges the incoming control flow.
Inputs*: One edge for each definition that will be considered.
- Output edge(s):
-
value: The value choosen according to the control flow taken.
- CMovePNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CMoveLNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- IfNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- RegionNode
-
Region nodes are similar to Phi nodes in the
sense that they merge information. While Phi
nodes merge data coming from different control paths
the Region nodes merge the control flow comming
from different paths. The firt entry of a Region
node points to itself.
- Input edge(s):
-
self: Points to itself.
Tokens*: One edge for each immediate predecessor node controlling the execution flow.
- Output edge(s):
-
control: Control-flow token continuation.
- AddPNode
-
Represents the operation of adding a pointer plus an
integer to get another pointer. NOT commutative, really.
So not really an AddNode.
Usually, not sure if always, this type of node is used
to index into objects in order to access fields.
- Input edge(s):
-
Base: Base address, for GC purposes.
Pointer: Pointer which will be added with offset.
Offset: Integer to be added to pointer.
- Output edge(s):
-
Pointer resulting from the addition.
- HaltNode
-
Throw an exception & die. This seems to be used whenever
the method execution have to be stopped by the runtime,
not to just throw regular Java exception. For instance,
this node is reached after a call to a runtime Trap.
- Input edge(s):
-
Control: Token for method execution flow.
FramePtr: Frame pointer of current method.
- Output edge(s):
-
Not applicable.
- ConNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- ConPNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- LoadPNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- PhiNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- ProjNode
-
Projections project a single element out of a tuple (or
Signature) type. Basically, this is a way to extract one
single specific value from nodes that return multiple
values.
- Input edge(s):
-
src: Reference to the node that produces a Tuple (or Signature) output.
con: An index specifying which element of the tuple should be returned.
- Output edge(s):
-
The value extracted from the tuple.
- StorePNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- StoreNNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- ConNNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- ConLNode / ConINode / ConFNode / ConDNode
-
Represents different types of constants: long, integer,
float and double. Note that constants are unique on the
method. I.e., two identical constants on different
locations of the method are represented just once in the
IR.
- Input edge(s):
-
Not applicable.
- Output edge(s):
-
The literal value represented by the constant.
- ConNKlassNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- ThreadLocalNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CastPP
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CheckCastPP
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.
- CastX2PNode / CastP2XNode
-
- Input edge(s):
-
xxxx: xxxxx
[yyy]: yyyyy
- Output edge(s):
-
Not applicable.