Modifier and Type | Field and Description |
---|---|
private AbstractControlFlowGraph<?> |
cfg |
private List<? extends AbstractBlockBase<?>> |
codeEmittingOrder
The order in which the code is emitted.
|
private int |
firstVariableNumber |
private boolean |
hasArgInCallerFrame |
private List<? extends AbstractBlockBase<?>> |
linearScanOrder
The linear-scan ordered list of blocks.
|
private BlockMap<List<LIRInstruction>> |
lirInstructions |
static int |
MAX_EXCEPTION_EDGE_OP_DISTANCE_FROM_END
The maximum distance an operation with an exception edge can be from the last instruction of a LIR block.
|
private int |
numVariables |
Constructor and Description |
---|
LIR(AbstractControlFlowGraph<?> cfg,
List<? extends AbstractBlockBase<?>> linearScanOrder,
List<? extends AbstractBlockBase<?>> codeEmittingOrder)
Creates a new LIR instance for the specified compilation.
|
Modifier and Type | Method and Description |
---|---|
List<? extends AbstractBlockBase<?>> |
codeEmittingOrder() |
AbstractControlFlowGraph<?> |
getControlFlowGraph() |
static LabelRef |
getExceptionEdge(LIRInstruction op)
Gets the exception edge (if any) originating at a given operation.
|
List<LIRInstruction> |
getLIRforBlock(AbstractBlockBase<?> block) |
boolean |
hasArgInCallerFrame()
Determines if any of the parameters to the method are passed via the stack where the
parameters are located in the caller's frame.
|
boolean |
hasDebugInfo()
Determines if any instruction in the LIR has debug info associated with it.
|
List<? extends AbstractBlockBase<?>> |
linearScanOrder()
Gets the linear scan ordering of blocks as a list.
|
int |
nextVariable() |
int |
numVariables() |
void |
resetLabels() |
void |
setFirstVariableNumber(int num) |
void |
setHasArgInCallerFrame() |
void |
setLIRforBlock(AbstractBlockBase<?> block,
List<LIRInstruction> list) |
static boolean |
verifyBlock(LIR lir,
AbstractBlockBase<?> block) |
static boolean |
verifyBlocks(LIR lir,
List<? extends AbstractBlockBase<?>> blocks) |
private final AbstractControlFlowGraph<?> cfg
private final List<? extends AbstractBlockBase<?>> linearScanOrder
private final List<? extends AbstractBlockBase<?>> codeEmittingOrder
private int firstVariableNumber
private int numVariables
private final BlockMap<List<LIRInstruction>> lirInstructions
private boolean hasArgInCallerFrame
public static final int MAX_EXCEPTION_EDGE_OP_DISTANCE_FROM_END
The rationale for such a constant is to limit the search for an insertion point when adding move operations at the end of a block. Such moves must be inserted before all control flow instructions.
public LIR(AbstractControlFlowGraph<?> cfg, List<? extends AbstractBlockBase<?>> linearScanOrder, List<? extends AbstractBlockBase<?>> codeEmittingOrder)
public AbstractControlFlowGraph<?> getControlFlowGraph()
public boolean hasDebugInfo()
public List<LIRInstruction> getLIRforBlock(AbstractBlockBase<?> block)
public void setLIRforBlock(AbstractBlockBase<?> block, List<LIRInstruction> list)
public List<? extends AbstractBlockBase<?>> linearScanOrder()
public List<? extends AbstractBlockBase<?>> codeEmittingOrder()
public int numVariables()
public int nextVariable()
public void setFirstVariableNumber(int num)
public void setHasArgInCallerFrame()
public boolean hasArgInCallerFrame()
public static LabelRef getExceptionEdge(LIRInstruction op)
public static boolean verifyBlock(LIR lir, AbstractBlockBase<?> block)
public static boolean verifyBlocks(LIR lir, List<? extends AbstractBlockBase<?>> blocks)
public void resetLabels()