Enum cranelift_codegen::ir::instructions::InstructionData [−][src]
pub enum InstructionData {
Show variants
AtomicCas {
opcode: Opcode,
args: [Value; 3],
flags: MemFlags,
},
AtomicRmw {
opcode: Opcode,
args: [Value; 2],
flags: MemFlags,
op: AtomicRmwOp,
},
Binary {
opcode: Opcode,
args: [Value; 2],
},
BinaryImm64 {
opcode: Opcode,
arg: Value,
imm: Imm64,
},
BinaryImm8 {
opcode: Opcode,
arg: Value,
imm: Uimm8,
},
Branch {
opcode: Opcode,
args: ValueList,
destination: Block,
},
BranchFloat {
opcode: Opcode,
args: ValueList,
cond: FloatCC,
destination: Block,
},
BranchIcmp {
opcode: Opcode,
args: ValueList,
cond: IntCC,
destination: Block,
},
BranchInt {
opcode: Opcode,
args: ValueList,
cond: IntCC,
destination: Block,
},
BranchTable {
opcode: Opcode,
arg: Value,
destination: Block,
table: JumpTable,
},
BranchTableBase {
opcode: Opcode,
table: JumpTable,
},
BranchTableEntry {
opcode: Opcode,
args: [Value; 2],
imm: Uimm8,
table: JumpTable,
},
Call {
opcode: Opcode,
args: ValueList,
func_ref: FuncRef,
},
CallIndirect {
opcode: Opcode,
args: ValueList,
sig_ref: SigRef,
},
CondTrap {
opcode: Opcode,
arg: Value,
code: TrapCode,
},
CopySpecial {
opcode: Opcode,
src: RegUnit,
dst: RegUnit,
},
CopyToSsa {
opcode: Opcode,
src: RegUnit,
},
FloatCompare {
opcode: Opcode,
args: [Value; 2],
cond: FloatCC,
},
FloatCond {
opcode: Opcode,
arg: Value,
cond: FloatCC,
},
FloatCondTrap {
opcode: Opcode,
arg: Value,
cond: FloatCC,
code: TrapCode,
},
FuncAddr {
opcode: Opcode,
func_ref: FuncRef,
},
HeapAddr {
opcode: Opcode,
arg: Value,
heap: Heap,
imm: Uimm32,
},
IndirectJump {
opcode: Opcode,
arg: Value,
table: JumpTable,
},
IntCompare {
opcode: Opcode,
args: [Value; 2],
cond: IntCC,
},
IntCompareImm {
opcode: Opcode,
arg: Value,
cond: IntCC,
imm: Imm64,
},
IntCond {
opcode: Opcode,
arg: Value,
cond: IntCC,
},
IntCondTrap {
opcode: Opcode,
arg: Value,
cond: IntCC,
code: TrapCode,
},
IntSelect {
opcode: Opcode,
args: [Value; 3],
cond: IntCC,
},
Jump {
opcode: Opcode,
args: ValueList,
destination: Block,
},
Load {
opcode: Opcode,
arg: Value,
flags: MemFlags,
offset: Offset32,
},
LoadComplex {
opcode: Opcode,
args: ValueList,
flags: MemFlags,
offset: Offset32,
},
LoadNoOffset {
opcode: Opcode,
arg: Value,
flags: MemFlags,
},
MultiAry {
opcode: Opcode,
args: ValueList,
},
NullAry {
opcode: Opcode,
},
RegFill {
opcode: Opcode,
arg: Value,
src: StackSlot,
dst: RegUnit,
},
RegMove {
opcode: Opcode,
arg: Value,
src: RegUnit,
dst: RegUnit,
},
RegSpill {
opcode: Opcode,
arg: Value,
src: RegUnit,
dst: StackSlot,
},
Shuffle {
opcode: Opcode,
args: [Value; 2],
mask: Immediate,
},
StackLoad {
opcode: Opcode,
stack_slot: StackSlot,
offset: Offset32,
},
StackStore {
opcode: Opcode,
arg: Value,
stack_slot: StackSlot,
offset: Offset32,
},
Store {
opcode: Opcode,
args: [Value; 2],
flags: MemFlags,
offset: Offset32,
},
StoreComplex {
opcode: Opcode,
args: ValueList,
flags: MemFlags,
offset: Offset32,
},
StoreNoOffset {
opcode: Opcode,
args: [Value; 2],
flags: MemFlags,
},
TableAddr {
opcode: Opcode,
arg: Value,
table: Table,
offset: Offset32,
},
Ternary {
opcode: Opcode,
args: [Value; 3],
},
TernaryImm8 {
opcode: Opcode,
args: [Value; 2],
imm: Uimm8,
},
Trap {
opcode: Opcode,
code: TrapCode,
},
Unary {
opcode: Opcode,
arg: Value,
},
UnaryBool {
opcode: Opcode,
imm: bool,
},
UnaryConst {
opcode: Opcode,
constant_handle: Constant,
},
UnaryGlobalValue {
opcode: Opcode,
global_value: GlobalValue,
},
UnaryIeee32 {
opcode: Opcode,
imm: Ieee32,
},
UnaryIeee64 {
opcode: Opcode,
imm: Ieee64,
},
UnaryImm {
opcode: Opcode,
imm: Imm64,
},
}Variants
Show fields
Fields of NullAry
opcode: OpcodeShow fields
Fields of UnaryGlobalValue
opcode: Opcodeglobal_value: GlobalValueImplementations
impl InstructionData[src]
impl InstructionData[src]pub fn opcode(&self) -> Opcode[src]
Get the opcode of this instruction.
pub fn typevar_operand(&self, pool: &ValueListPool) -> Option<Value>[src]
Get the controlling type variable operand.
pub fn arguments<'a>(&'a self, pool: &'a ValueListPool) -> &[Value][src]
Get the value arguments to this instruction.
pub fn arguments_mut<'a>(
&'a mut self,
pool: &'a mut ValueListPool
) -> &mut [Value][src]
&'a mut self,
pool: &'a mut ValueListPool
) -> &mut [Value]
Get mutable references to the value arguments to this instruction.
pub fn take_value_list(&mut self) -> Option<ValueList>[src]
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.
pub fn put_value_list(&mut self, vlist: ValueList)[src]
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.
pub fn eq(&self, other: &Self, pool: &ValueListPool) -> bool[src]
Compare two InstructionData for equality.
This operation requires a reference to a ValueListPool to
determine if the contents of any ValueLists are equal.
pub fn hash<H: Hasher>(&self, state: &mut H, pool: &ValueListPool)[src]
Hash an InstructionData.
This operation requires a reference to a ValueListPool to
hash the contents of any ValueLists.
impl InstructionData[src]
impl InstructionData[src]Analyzing an instruction.
Avoid large matches on instruction formats by using the methods defined here to examine instructions.
pub fn analyze_branch<'a>(&'a self, pool: &'a ValueListPool) -> BranchInfo<'a>[src]
Return information about the destination of a branch or jump instruction.
Any instruction that can transfer control to another block reveals its possible destinations here.
pub fn branch_destination(&self) -> Option<Block>[src]
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.
pub fn branch_destination_mut(&mut self) -> Option<&mut Block>[src]
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.
pub fn imm_value(&self) -> Option<DataValue>[src]
Return the value of an immediate if the instruction has one or None otherwise. Only
immediate values are considered, not global values, constant handles, condition codes, etc.
pub fn trap_code(&self) -> Option<TrapCode>[src]
If this is a trapping instruction, get its trap code. Otherwise, return
None.
pub fn cond_code(&self) -> Option<IntCC>[src]
If this is a control-flow instruction depending on an integer condition, gets its
condition. Otherwise, return None.
pub fn fp_cond_code(&self) -> Option<FloatCC>[src]
If this is a control-flow instruction depending on a floating-point condition, gets its
condition. Otherwise, return None.
pub fn trap_code_mut(&mut self) -> Option<&mut TrapCode>[src]
If this is a trapping instruction, get an exclusive reference to its
trap code. Otherwise, return None.
pub fn atomic_rmw_op(&self) -> Option<AtomicRmwOp>[src]
If this is an atomic read/modify/write instruction, return its subopcode.
pub fn load_store_offset(&self) -> Option<i32>[src]
If this is a load/store instruction, returns its immediate offset.
pub fn analyze_call<'a>(&'a self, pool: &'a ValueListPool) -> CallInfo<'a>[src]
Return information about a call instruction.
Any instruction that can call another function reveals its call signature here.
Trait Implementations
impl Clone for InstructionData[src]
impl Clone for InstructionData[src]fn clone(&self) -> InstructionData[src]
pub fn clone_from(&mut self, source: &Self)1.0.0[src]
impl<'a> From<&'a InstructionData> for InstructionFormat[src]
impl<'a> From<&'a InstructionData> for InstructionFormat[src]