public interface LIRGeneratorTool extends ArithmeticLIRGenerator, BenchmarkCounterFactory
Modifier and Type | Interface and Description |
---|---|
static class |
LIRGeneratorTool.BlockScope |
static interface |
LIRGeneratorTool.SpillMoveFactory
Factory for creating spill moves.
|
Modifier and Type | Method and Description |
---|---|
<I extends LIRInstruction> |
append(I op) |
jdk.internal.jvmci.meta.AllocatableValue |
asAllocatable(jdk.internal.jvmci.meta.Value value) |
jdk.internal.jvmci.code.RegisterAttributes |
attributes(jdk.internal.jvmci.code.Register register) |
void |
beforeRegisterAllocation()
Called just before register allocation is performed on the LIR owned by this generator.
|
Variable |
emitAddress(jdk.internal.jvmci.code.StackSlotValue slot) |
Variable |
emitArrayEquals(jdk.internal.jvmci.meta.Kind kind,
jdk.internal.jvmci.meta.Value array1,
jdk.internal.jvmci.meta.Value array2,
jdk.internal.jvmci.meta.Value length) |
default jdk.internal.jvmci.meta.Value |
emitAtomicReadAndAdd(jdk.internal.jvmci.meta.Value address,
jdk.internal.jvmci.meta.Value delta)
Emit an atomic read-and-add instruction.
|
default jdk.internal.jvmci.meta.Value |
emitAtomicReadAndWrite(jdk.internal.jvmci.meta.Value address,
jdk.internal.jvmci.meta.Value newValue)
Emit an atomic read-and-write instruction.
|
Variable |
emitBitCount(jdk.internal.jvmci.meta.Value operand) |
Variable |
emitBitScanForward(jdk.internal.jvmci.meta.Value operand) |
Variable |
emitBitScanReverse(jdk.internal.jvmci.meta.Value operand) |
void |
emitBlackhole(jdk.internal.jvmci.meta.Value operand) |
Variable |
emitByteSwap(jdk.internal.jvmci.meta.Value operand) |
Variable |
emitCompareAndSwap(jdk.internal.jvmci.meta.Value address,
jdk.internal.jvmci.meta.Value expectedValue,
jdk.internal.jvmci.meta.Value newValue,
jdk.internal.jvmci.meta.Value trueValue,
jdk.internal.jvmci.meta.Value falseValue) |
void |
emitCompareBranch(jdk.internal.jvmci.meta.PlatformKind cmpKind,
jdk.internal.jvmci.meta.Value left,
jdk.internal.jvmci.meta.Value right,
Condition cond,
boolean unorderedIsTrue,
LabelRef trueDestination,
LabelRef falseDestination,
double trueDestinationProbability) |
Variable |
emitConditionalMove(jdk.internal.jvmci.meta.PlatformKind cmpKind,
jdk.internal.jvmci.meta.Value leftVal,
jdk.internal.jvmci.meta.Value right,
Condition cond,
boolean unorderedIsTrue,
jdk.internal.jvmci.meta.Value trueValue,
jdk.internal.jvmci.meta.Value falseValue) |
default jdk.internal.jvmci.meta.Value |
emitCountLeadingZeros(jdk.internal.jvmci.meta.Value value) |
default jdk.internal.jvmci.meta.Value |
emitCountTrailingZeros(jdk.internal.jvmci.meta.Value value) |
void |
emitData(jdk.internal.jvmci.meta.AllocatableValue dst,
byte[] data)
Emits an op that loads the address of some raw data.
|
void |
emitDeoptimize(jdk.internal.jvmci.meta.Value actionAndReason,
jdk.internal.jvmci.meta.Value failedSpeculation,
LIRFrameState state) |
Variable |
emitForeignCall(ForeignCallLinkage linkage,
LIRFrameState state,
jdk.internal.jvmci.meta.Value... args) |
void |
emitIncomingValues(jdk.internal.jvmci.meta.Value[] params) |
void |
emitIntegerTestBranch(jdk.internal.jvmci.meta.Value left,
jdk.internal.jvmci.meta.Value right,
LabelRef trueDestination,
LabelRef falseDestination,
double trueSuccessorProbability) |
Variable |
emitIntegerTestMove(jdk.internal.jvmci.meta.Value leftVal,
jdk.internal.jvmci.meta.Value right,
jdk.internal.jvmci.meta.Value trueValue,
jdk.internal.jvmci.meta.Value falseValue) |
void |
emitJump(LabelRef label) |
Variable |
emitLoad(jdk.internal.jvmci.meta.LIRKind kind,
jdk.internal.jvmci.meta.Value address,
LIRFrameState state) |
jdk.internal.jvmci.meta.Value |
emitLoadConstant(jdk.internal.jvmci.meta.LIRKind kind,
jdk.internal.jvmci.meta.Constant constant) |
void |
emitMembar(int barriers) |
void |
emitMove(jdk.internal.jvmci.meta.AllocatableValue dst,
jdk.internal.jvmci.meta.Value src) |
Variable |
emitMove(jdk.internal.jvmci.meta.Value input) |
void |
emitNullCheck(jdk.internal.jvmci.meta.Value address,
LIRFrameState state) |
void |
emitOverflowCheckBranch(LabelRef overflow,
LabelRef noOverflow,
jdk.internal.jvmci.meta.LIRKind cmpKind,
double overflowProbability) |
void |
emitReturn(jdk.internal.jvmci.meta.Value input)
Emits a return instruction.
|
void |
emitStore(jdk.internal.jvmci.meta.LIRKind kind,
jdk.internal.jvmci.meta.Value address,
jdk.internal.jvmci.meta.Value input,
LIRFrameState state) |
void |
emitStrategySwitch(jdk.internal.jvmci.meta.JavaConstant[] keyConstants,
double[] keyProbabilities,
LabelRef[] keyTargets,
LabelRef defaultTarget,
Variable value) |
void |
emitStrategySwitch(SwitchStrategy strategy,
Variable key,
LabelRef[] keyTargets,
LabelRef defaultTarget) |
void |
emitUnwind(jdk.internal.jvmci.meta.Value operand) |
LIRGeneratorTool.BlockScope |
getBlockScope(AbstractBlockBase<?> block) |
jdk.internal.jvmci.code.CallingConvention |
getCallingConvention() |
jdk.internal.jvmci.code.CodeCacheProvider |
getCodeCache() |
AbstractBlockBase<?> |
getCurrentBlock() |
ForeignCallsProvider |
getForeignCalls() |
jdk.internal.jvmci.meta.MetaAccessProvider |
getMetaAccess() |
CodeGenProviders |
getProviders() |
LIRGenerationResult |
getResult() |
LIRGeneratorTool.SpillMoveFactory |
getSpillMoveFactory() |
boolean |
hasBlockEnd(AbstractBlockBase<?> block) |
Variable |
load(jdk.internal.jvmci.meta.Value value) |
jdk.internal.jvmci.meta.Value |
loadNonConst(jdk.internal.jvmci.meta.Value value) |
boolean |
needOnlyOopMaps()
Determines if only oop maps are required for the code generated from the LIR.
|
Variable |
newVariable(jdk.internal.jvmci.meta.LIRKind kind)
Create a new
Variable . |
jdk.internal.jvmci.meta.AllocatableValue |
resultOperandFor(jdk.internal.jvmci.meta.LIRKind kind)
Gets the ABI specific operand used to return a value of a given kind from a method.
|
jdk.internal.jvmci.code.TargetDescription |
target() |
emitAdd, emitAnd, emitDiv, emitFloatConvert, emitMathAbs, emitMathSqrt, emitMul, emitMulHigh, emitNarrow, emitNegate, emitNot, emitOr, emitReinterpret, emitRem, emitShl, emitShr, emitSignExtend, emitSub, emitUDiv, emitUMulHigh, emitURem, emitUShr, emitXor, emitZeroExtend, getLIRKind
createBenchmarkCounter, createMultiBenchmarkCounter
CodeGenProviders getProviders()
jdk.internal.jvmci.code.TargetDescription target()
jdk.internal.jvmci.meta.MetaAccessProvider getMetaAccess()
jdk.internal.jvmci.code.CodeCacheProvider getCodeCache()
ForeignCallsProvider getForeignCalls()
AbstractBlockBase<?> getCurrentBlock()
LIRGenerationResult getResult()
boolean hasBlockEnd(AbstractBlockBase<?> block)
LIRGeneratorTool.SpillMoveFactory getSpillMoveFactory()
LIRGeneratorTool.BlockScope getBlockScope(AbstractBlockBase<?> block)
jdk.internal.jvmci.meta.Value emitLoadConstant(jdk.internal.jvmci.meta.LIRKind kind, jdk.internal.jvmci.meta.Constant constant)
Variable emitLoad(jdk.internal.jvmci.meta.LIRKind kind, jdk.internal.jvmci.meta.Value address, LIRFrameState state)
void emitStore(jdk.internal.jvmci.meta.LIRKind kind, jdk.internal.jvmci.meta.Value address, jdk.internal.jvmci.meta.Value input, LIRFrameState state)
void emitNullCheck(jdk.internal.jvmci.meta.Value address, LIRFrameState state)
Variable emitCompareAndSwap(jdk.internal.jvmci.meta.Value address, jdk.internal.jvmci.meta.Value expectedValue, jdk.internal.jvmci.meta.Value newValue, jdk.internal.jvmci.meta.Value trueValue, jdk.internal.jvmci.meta.Value falseValue)
default jdk.internal.jvmci.meta.Value emitAtomicReadAndAdd(jdk.internal.jvmci.meta.Value address, jdk.internal.jvmci.meta.Value delta)
address
- address of the value to be read and writtendelta
- the value to be addeddefault jdk.internal.jvmci.meta.Value emitAtomicReadAndWrite(jdk.internal.jvmci.meta.Value address, jdk.internal.jvmci.meta.Value newValue)
address
- address of the value to be read and writtennewValue
- the new value to be writtenvoid emitDeoptimize(jdk.internal.jvmci.meta.Value actionAndReason, jdk.internal.jvmci.meta.Value failedSpeculation, LIRFrameState state)
Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, jdk.internal.jvmci.meta.Value... args)
jdk.internal.jvmci.code.RegisterAttributes attributes(jdk.internal.jvmci.code.Register register)
Variable newVariable(jdk.internal.jvmci.meta.LIRKind kind)
Variable
.void emitMove(jdk.internal.jvmci.meta.AllocatableValue dst, jdk.internal.jvmci.meta.Value src)
void emitData(jdk.internal.jvmci.meta.AllocatableValue dst, byte[] data)
dst
- the variable into which the address is loadeddata
- the data to be installed with the generated codeVariable emitAddress(jdk.internal.jvmci.code.StackSlotValue slot)
void emitMembar(int barriers)
void emitUnwind(jdk.internal.jvmci.meta.Value operand)
void beforeRegisterAllocation()
void emitIncomingValues(jdk.internal.jvmci.meta.Value[] params)
void emitReturn(jdk.internal.jvmci.meta.Value input)
jdk.internal.jvmci.meta.AllocatableValue asAllocatable(jdk.internal.jvmci.meta.Value value)
jdk.internal.jvmci.meta.Value loadNonConst(jdk.internal.jvmci.meta.Value value)
boolean needOnlyOopMaps()
jdk.internal.jvmci.meta.AllocatableValue resultOperandFor(jdk.internal.jvmci.meta.LIRKind kind)
kind
- the kind of value being returnedkind
<I extends LIRInstruction> I append(I op)
void emitCompareBranch(jdk.internal.jvmci.meta.PlatformKind cmpKind, jdk.internal.jvmci.meta.Value left, jdk.internal.jvmci.meta.Value right, Condition cond, boolean unorderedIsTrue, LabelRef trueDestination, LabelRef falseDestination, double trueDestinationProbability)
void emitOverflowCheckBranch(LabelRef overflow, LabelRef noOverflow, jdk.internal.jvmci.meta.LIRKind cmpKind, double overflowProbability)
void emitIntegerTestBranch(jdk.internal.jvmci.meta.Value left, jdk.internal.jvmci.meta.Value right, LabelRef trueDestination, LabelRef falseDestination, double trueSuccessorProbability)
Variable emitConditionalMove(jdk.internal.jvmci.meta.PlatformKind cmpKind, jdk.internal.jvmci.meta.Value leftVal, jdk.internal.jvmci.meta.Value right, Condition cond, boolean unorderedIsTrue, jdk.internal.jvmci.meta.Value trueValue, jdk.internal.jvmci.meta.Value falseValue)
Variable emitIntegerTestMove(jdk.internal.jvmci.meta.Value leftVal, jdk.internal.jvmci.meta.Value right, jdk.internal.jvmci.meta.Value trueValue, jdk.internal.jvmci.meta.Value falseValue)
void emitStrategySwitch(jdk.internal.jvmci.meta.JavaConstant[] keyConstants, double[] keyProbabilities, LabelRef[] keyTargets, LabelRef defaultTarget, Variable value)
void emitStrategySwitch(SwitchStrategy strategy, Variable key, LabelRef[] keyTargets, LabelRef defaultTarget)
jdk.internal.jvmci.code.CallingConvention getCallingConvention()
Variable emitBitCount(jdk.internal.jvmci.meta.Value operand)
Variable emitBitScanForward(jdk.internal.jvmci.meta.Value operand)
Variable emitBitScanReverse(jdk.internal.jvmci.meta.Value operand)
Variable emitByteSwap(jdk.internal.jvmci.meta.Value operand)
Variable emitArrayEquals(jdk.internal.jvmci.meta.Kind kind, jdk.internal.jvmci.meta.Value array1, jdk.internal.jvmci.meta.Value array2, jdk.internal.jvmci.meta.Value length)
void emitBlackhole(jdk.internal.jvmci.meta.Value operand)
default jdk.internal.jvmci.meta.Value emitCountLeadingZeros(jdk.internal.jvmci.meta.Value value)
default jdk.internal.jvmci.meta.Value emitCountTrailingZeros(jdk.internal.jvmci.meta.Value value)