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]