Enum cranelift_codegen::ir::instructions::InstructionData
source · pub enum InstructionData {
Show 47 variants
Unary {
opcode: Opcode,
arg: Value,
},
UnaryImm {
opcode: Opcode,
imm: Imm64,
},
UnaryIeee32 {
opcode: Opcode,
imm: Ieee32,
},
UnaryIeee64 {
opcode: Opcode,
imm: Ieee64,
},
UnaryBool {
opcode: Opcode,
imm: bool,
},
UnaryGlobalValue {
opcode: Opcode,
global_value: GlobalValue,
},
Binary {
opcode: Opcode,
args: [Value; 2],
},
BinaryImm {
opcode: Opcode,
arg: Value,
imm: Imm64,
},
Ternary {
opcode: Opcode,
args: [Value; 3],
},
MultiAry {
opcode: Opcode,
args: ValueList,
},
NullAry {
opcode: Opcode,
},
InsertLane {
opcode: Opcode,
args: [Value; 2],
lane: Uimm8,
},
ExtractLane {
opcode: Opcode,
arg: Value,
lane: Uimm8,
},
IntCompare {
opcode: Opcode,
args: [Value; 2],
cond: IntCC,
},
IntCompareImm {
opcode: Opcode,
arg: Value,
cond: IntCC,
imm: Imm64,
},
IntCond {
opcode: Opcode,
arg: Value,
cond: IntCC,
},
FloatCompare {
opcode: Opcode,
args: [Value; 2],
cond: FloatCC,
},
FloatCond {
opcode: Opcode,
arg: Value,
cond: FloatCC,
},
IntSelect {
opcode: Opcode,
args: [Value; 3],
cond: IntCC,
},
Jump {
opcode: Opcode,
args: ValueList,
destination: Ebb,
},
Branch {
opcode: Opcode,
args: ValueList,
destination: Ebb,
},
BranchInt {
opcode: Opcode,
args: ValueList,
cond: IntCC,
destination: Ebb,
},
BranchFloat {
opcode: Opcode,
args: ValueList,
cond: FloatCC,
destination: Ebb,
},
BranchIcmp {
opcode: Opcode,
args: ValueList,
cond: IntCC,
destination: Ebb,
},
BranchTable {
opcode: Opcode,
arg: Value,
destination: Ebb,
table: JumpTable,
},
BranchTableEntry {
opcode: Opcode,
args: [Value; 2],
imm: Uimm8,
table: JumpTable,
},
BranchTableBase {
opcode: Opcode,
table: JumpTable,
},
IndirectJump {
opcode: Opcode,
arg: Value,
table: JumpTable,
},
Call {
opcode: Opcode,
args: ValueList,
func_ref: FuncRef,
},
CallIndirect {
opcode: Opcode,
args: ValueList,
sig_ref: SigRef,
},
FuncAddr {
opcode: Opcode,
func_ref: FuncRef,
},
Load {
opcode: Opcode,
arg: Value,
flags: MemFlags,
offset: Offset32,
},
LoadComplex {
opcode: Opcode,
args: ValueList,
flags: MemFlags,
offset: Offset32,
},
Store {
opcode: Opcode,
args: [Value; 2],
flags: MemFlags,
offset: Offset32,
},
StoreComplex {
opcode: Opcode,
args: ValueList,
flags: MemFlags,
offset: Offset32,
},
StackLoad {
opcode: Opcode,
stack_slot: StackSlot,
offset: Offset32,
},
StackStore {
opcode: Opcode,
arg: Value,
stack_slot: StackSlot,
offset: Offset32,
},
HeapAddr {
opcode: Opcode,
arg: Value,
heap: Heap,
imm: Uimm32,
},
TableAddr {
opcode: Opcode,
arg: Value,
table: Table,
offset: Offset32,
},
RegMove {
opcode: Opcode,
arg: Value,
src: RegUnit,
dst: RegUnit,
},
CopySpecial {
opcode: Opcode,
src: RegUnit,
dst: RegUnit,
},
RegSpill {
opcode: Opcode,
arg: Value,
src: RegUnit,
dst: StackSlot,
},
RegFill {
opcode: Opcode,
arg: Value,
src: StackSlot,
dst: RegUnit,
},
Trap {
opcode: Opcode,
code: TrapCode,
},
CondTrap {
opcode: Opcode,
arg: Value,
code: TrapCode,
},
IntCondTrap {
opcode: Opcode,
arg: Value,
cond: IntCC,
code: TrapCode,
},
FloatCondTrap {
opcode: Opcode,
arg: Value,
cond: FloatCC,
code: TrapCode,
},
}
Variants§
Unary
UnaryImm
UnaryIeee32
UnaryIeee64
UnaryBool
UnaryGlobalValue
Binary
BinaryImm
Ternary
MultiAry
NullAry
InsertLane
ExtractLane
IntCompare
IntCompareImm
IntCond
FloatCompare
FloatCond
IntSelect
Jump
Branch
BranchInt
BranchFloat
BranchIcmp
BranchTable
BranchTableEntry
BranchTableBase
IndirectJump
Call
CallIndirect
FuncAddr
Load
LoadComplex
Store
StoreComplex
StackLoad
StackStore
HeapAddr
TableAddr
RegMove
CopySpecial
RegSpill
RegFill
Trap
CondTrap
IntCondTrap
FloatCondTrap
Implementations§
source§impl InstructionData
impl InstructionData
sourcepub fn typevar_operand(&self, pool: &ValueListPool) -> Option<Value>
pub fn typevar_operand(&self, pool: &ValueListPool) -> Option<Value>
Get the controlling type variable operand.
sourcepub fn arguments<'a>(&'a self, pool: &'a ValueListPool) -> &'_ [Value]
pub fn arguments<'a>(&'a self, pool: &'a ValueListPool) -> &'_ [Value]
Get the value arguments to this instruction.
sourcepub fn arguments_mut<'a>(
&'a mut self,
pool: &'a mut ValueListPool
) -> &'_ mut [Value]
pub fn arguments_mut<'a>(
&'a mut self,
pool: &'a mut ValueListPool
) -> &'_ mut [Value]
Get mutable references to the value arguments to this instruction.
sourcepub fn take_value_list(&mut self) -> Option<ValueList>
pub fn take_value_list(&mut self) -> Option<ValueList>
Take out the value list with all the value arguments and return it.
This leaves the value list in the instruction empty. Use
put_value_list
to put the value list back.
sourcepub fn put_value_list(&mut self, vlist: ValueList)
pub fn put_value_list(&mut self, vlist: ValueList)
Put back a value list.
After removing a value list with take_value_list()
, use this
method to put it back. It is required that this instruction has
a format that accepts a value list, and that the existing value
list is empty. This avoids leaking list pool memory.
sourcepub fn eq(&self, other: &Self, pool: &ValueListPool) -> bool
pub fn eq(&self, other: &Self, pool: &ValueListPool) -> bool
Compare two InstructionData
for equality.
This operation requires a reference to a ValueListPool
to
determine if the contents of any ValueLists
are equal.
sourcepub fn hash<H: Hasher>(&self, state: &mut H, pool: &ValueListPool)
pub fn hash<H: Hasher>(&self, state: &mut H, pool: &ValueListPool)
Hash an InstructionData
.
This operation requires a reference to a ValueListPool
to
hash the contents of any ValueLists
.
source§impl InstructionData
impl InstructionData
Analyzing an instruction.
Avoid large matches on instruction formats by using the methods defined here to examine instructions.
sourcepub fn analyze_branch<'a>(&'a self, pool: &'a ValueListPool) -> BranchInfo<'a>
pub fn analyze_branch<'a>(&'a self, pool: &'a ValueListPool) -> BranchInfo<'a>
Return information about the destination of a branch or jump instruction.
Any instruction that can transfer control to another EBB reveals its possible destinations here.
sourcepub fn branch_destination(&self) -> Option<Ebb>
pub fn branch_destination(&self) -> Option<Ebb>
Get the single destination of this branch instruction, if it is a single destination branch or jump.
Multi-destination branches like br_table
return None
.
sourcepub fn branch_destination_mut(&mut self) -> Option<&mut Ebb>
pub fn branch_destination_mut(&mut self) -> Option<&mut Ebb>
Get a mutable reference to the single destination of this branch instruction, if it is a single destination branch or jump.
Multi-destination branches like br_table
return None
.
sourcepub fn analyze_call<'a>(&'a self, pool: &'a ValueListPool) -> CallInfo<'a>
pub fn analyze_call<'a>(&'a self, pool: &'a ValueListPool) -> CallInfo<'a>
Return information about a call instruction.
Any instruction that can call another function reveals its call signature here.
Trait Implementations§
source§impl Clone for InstructionData
impl Clone for InstructionData
source§fn clone(&self) -> InstructionData
fn clone(&self) -> InstructionData
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more