TypeOopPtr::_instance_id -> Is set to the idx of the AllocateNode node that creates the particular instance of object to which this `type` represents. TypeOopPtr::is_known_instance() -> Tells whether this type relates to an specific instance of this type. Compile::get_alias_index(const TypePtr* at) -> The memory slice index to which the node that has this type points to. MergeMemNode -> Merge memory slices and at the same time combine the attributes of all slices and produce a single memory slice.
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.


>