Documentation ¶
Index ¶
- Constants
- Variables
- func IrArchTryIntoCopy(v IrNode) (Reg, Reg, bool)
- func IrTryIntoCopy(v IrNode) (Reg, Reg, bool)
- type ABILowering
- type BasicBlock
- type BasicBlockIter
- type BlockMerge
- type BranchElim
- type CFG
- type CSE
- type Compaction
- type ConstProp
- type Constness
- type CopyElim
- type FuncData
- type FuncLayout
- type Fusion
- type Int65
- type IrAMD64_BSWAP
- type IrAMD64_BTSQ_ri
- type IrAMD64_BTSQ_rr
- type IrAMD64_BinOp
- type IrAMD64_BinOp_ri
- type IrAMD64_BinOp_rm
- type IrAMD64_BinOp_rr
- type IrAMD64_CALL_gcwb
- type IrAMD64_CALL_mem
- type IrAMD64_CALL_reg
- type IrAMD64_CMPQ_im
- type IrAMD64_CMPQ_ir
- type IrAMD64_CMPQ_mi
- type IrAMD64_CMPQ_mp
- type IrAMD64_CMPQ_mr
- type IrAMD64_CMPQ_pm
- type IrAMD64_CMPQ_pr
- type IrAMD64_CMPQ_ri
- type IrAMD64_CMPQ_rm
- type IrAMD64_CMPQ_rp
- type IrAMD64_CMPQ_rr
- type IrAMD64_CmpOp
- type IrAMD64_INT
- type IrAMD64_JMP
- type IrAMD64_JNC
- type IrAMD64_Jcc_im
- type IrAMD64_Jcc_ir
- type IrAMD64_Jcc_mi
- type IrAMD64_Jcc_mp
- type IrAMD64_Jcc_mr
- type IrAMD64_Jcc_pm
- type IrAMD64_Jcc_pr
- type IrAMD64_Jcc_ri
- type IrAMD64_Jcc_rm
- type IrAMD64_Jcc_rp
- type IrAMD64_Jcc_rr
- type IrAMD64_LEA
- type IrAMD64_MOVSLQ
- type IrAMD64_MOV_abs
- type IrAMD64_MOV_load
- type IrAMD64_MOV_load_be
- type IrAMD64_MOV_load_stack
- type IrAMD64_MOV_ptr
- type IrAMD64_MOV_reg
- type IrAMD64_MOV_store_be
- type IrAMD64_MOV_store_i
- type IrAMD64_MOV_store_p
- type IrAMD64_MOV_store_r
- type IrAMD64_MOV_store_stack
- type IrAMD64_MemOp
- type IrAMD64_NEG
- type IrAMD64_RET
- type IrAlias
- type IrBinaryExpr
- type IrBinaryOp
- type IrBitTestSet
- type IrBranch
- type IrBreakpoint
- type IrCallFunc
- type IrCallMethod
- type IrCallNative
- type IrClobberList
- type IrConstInt
- type IrConstPtr
- type IrDefinitions
- type IrEntry
- type IrImmovable
- type IrImpure
- type IrLEA
- type IrLoad
- type IrLoadArg
- type IrNode
- func IrArchConstInt(r Reg, v int64) IrNode
- func IrArchConstPtr(r Reg, p unsafe.Pointer) IrNode
- func IrArchCopy(r Reg, v Reg) IrNode
- func IrArchLoadStack(reg Reg, offs uintptr, kind IrSlotKind) IrNode
- func IrArchStoreStack(reg Reg, offs uintptr, kind IrSlotKind) IrNode
- func IrArchZero(r Reg) IrNode
- func IrCopy(r Reg, v Reg) IrNode
- func IrCreateSpill(reg Reg, id int, op IrSpillOp) IrNode
- func IrCreateSpillEx(reg Reg, ptr bool, id int, op IrSpillOp) IrNode
- func IrSlotGen(s IrSpillSlot) IrNode
- type IrNop
- type IrPhi
- type IrReturn
- type IrSlotAlive
- type IrSlotKind
- type IrSpill
- type IrSpillOp
- type IrSpillSlot
- type IrStore
- type IrSuccessors
- type IrSwitch
- type IrTerminator
- type IrUnaryExpr
- type IrUnaryOp
- type IrUsages
- type IrWriteBarrier
- type Layout
- type Likeliness
- type Lowering
- type Mem
- type OperandAlloc
- type Pass
- type PassDescriptor
- type PhiElim
- type PhiProp
- type Pos
- type Reduce
- type Reg
- type RegAlloc
- type Rematerialize
- type Reorder
- type ReturnSpread
- type SlotSet
- type SplitCritical
- type StackLiveness
- type TDCE
- type WriteBarrier
- type ZeroReg
Constants ¶
const ( K_sys = 0 K_zero = 1 K_temp = 2 K_arch = 3 K_norm = 4 )
Variables ¶
var ( MinInt65 = Int65{0, 1} MaxInt65 = Int65{math.MaxUint64, 0} )
var ArchRegIds = map[x86_64.Register64]uint64{ x86_64.RAX: 0, x86_64.RCX: 1, x86_64.RDX: 2, x86_64.RBX: 3, x86_64.RSP: 4, x86_64.RBP: 5, x86_64.RSI: 6, x86_64.RDI: 7, x86_64.R8: 8, x86_64.R9: 9, x86_64.R10: 10, x86_64.R11: 11, x86_64.R12: 12, x86_64.R13: 13, x86_64.R14: 14, x86_64.R15: 15, }
var ArchRegNames = map[x86_64.Register64]string{ x86_64.RAX: "rax", x86_64.RCX: "rcx", x86_64.RDX: "rdx", x86_64.RBX: "rbx", x86_64.RSP: "rsp", x86_64.RBP: "rbp", x86_64.RSI: "rsi", x86_64.RDI: "rdi", x86_64.R8: "r8", x86_64.R9: "r9", x86_64.R10: "r10", x86_64.R11: "r11", x86_64.R12: "r12", x86_64.R13: "r13", x86_64.R14: "r14", x86_64.R15: "r15", }
var ArchRegReserved = map[x86_64.Register64]bool{ x86_64.RSP: true, x86_64.RBP: true, }
var ArchRegs = [...]x86_64.Register64{ x86_64.RAX, x86_64.RCX, x86_64.RDX, x86_64.RBX, x86_64.RSP, x86_64.RBP, x86_64.RSI, x86_64.RDI, x86_64.R8, x86_64.R9, x86_64.R10, x86_64.R11, x86_64.R12, x86_64.R13, x86_64.R14, x86_64.R15, }
var Passes = []PassDescriptor{ {Name: "Early Constant Propagation", Pass: new(ConstProp)}, {Name: "Early Reduction", Pass: new(Reduce)}, {Name: "Branch Elimination", Pass: new(BranchElim)}, {Name: "Return Spreading", Pass: new(ReturnSpread)}, {Name: "Value Reordering", Pass: new(Reorder)}, {Name: "Late Constant Propagation", Pass: new(ConstProp)}, {Name: "Late Reduction", Pass: new(Reduce)}, {Name: "Machine Dependent Lowering", Pass: new(Lowering)}, {Name: "Zero Register Substitution", Pass: new(ZeroReg)}, {Name: "Write Barrier Insertion", Pass: new(WriteBarrier)}, {Name: "ABI-Specific Lowering", Pass: new(ABILowering)}, {Name: "Instruction Fusion", Pass: new(Fusion)}, {Name: "Instruction Compaction", Pass: new(Compaction)}, {Name: "Block Merging", Pass: new(BlockMerge)}, {Name: "Critical Edge Splitting", Pass: new(SplitCritical)}, {Name: "Phi Propagation", Pass: new(PhiProp)}, {Name: "Operand Allocation", Pass: new(OperandAlloc)}, {Name: "Constant Rematerialize", Pass: new(Rematerialize)}, {Name: "Pre-allocation TDCE", Pass: new(TDCE)}, {Name: "Register Allocation", Pass: new(RegAlloc)}, {Name: "Stack Liveness Analysis", Pass: new(StackLiveness)}, {Name: "Function Layout", Pass: new(Layout)}, }
var Reductions = []PassDescriptor{ {Name: "Common Sub-expression Elimination", Pass: new(CSE)}, {Name: "Phi Elimination", Pass: new(PhiElim)}, {Name: "Copy Elimination", Pass: new(CopyElim)}, {Name: "Trivial Dead Code Elimination", Pass: new(TDCE)}, }
Functions ¶
Types ¶
type ABILowering ¶
type ABILowering struct{}
ABILowering lowers ABI-specific instructions to machine specific instructions.
func (ABILowering) Apply ¶
func (self ABILowering) Apply(cfg *CFG)
type BasicBlock ¶
type BasicBlock struct { Id int Phi []*IrPhi Ins []IrNode Pred []*BasicBlock Term IrTerminator }
func (*BasicBlock) String ¶
func (self *BasicBlock) String() string
type BasicBlockIter ¶
type BasicBlockIter struct {
// contains filtered or unexported fields
}
func (*BasicBlockIter) Block ¶
func (self *BasicBlockIter) Block() *BasicBlock
func (*BasicBlockIter) ForEach ¶
func (self *BasicBlockIter) ForEach(action func(bb *BasicBlock))
func (*BasicBlockIter) Next ¶
func (self *BasicBlockIter) Next() bool
func (*BasicBlockIter) Reversed ¶
func (self *BasicBlockIter) Reversed() []*BasicBlock
type BlockMerge ¶
type BlockMerge struct{}
BlockMerge merges redundant intermediate blocks (blocks with a single outgoing edge which goes to another block with a single incoming edge).
func (BlockMerge) Apply ¶
func (BlockMerge) Apply(cfg *CFG)
type BranchElim ¶
type BranchElim struct{}
BranchElim removes branches that can be proved unreachable.
func (BranchElim) Apply ¶
func (self BranchElim) Apply(cfg *CFG)
type CFG ¶
type CFG struct { Func FuncData Root *BasicBlock Depth map[int]int Layout *abi.FunctionLayout DominatedBy map[int]*BasicBlock DominatorOf map[int][]*BasicBlock DominanceFrontier map[int][]*BasicBlock // contains filtered or unexported fields }
func (*CFG) CreateBlock ¶
func (self *CFG) CreateBlock() (r *BasicBlock)
func (*CFG) CreateRegister ¶
func (*CFG) CreateUnreachable ¶
func (self *CFG) CreateUnreachable(bb *BasicBlock) (ret *BasicBlock)
func (*CFG) PostOrder ¶
func (self *CFG) PostOrder() *BasicBlockIter
type Compaction ¶
type Compaction struct{}
Compaction is like Fusion, but it performs the reverse action to reduce redundant operations.
func (Compaction) Apply ¶
func (self Compaction) Apply(cfg *CFG)
type FuncLayout ¶
type FuncLayout struct { Ins []IrNode Start map[int]int Block map[int]*BasicBlock }
func (*FuncLayout) String ¶
func (self *FuncLayout) String() string
type Fusion ¶
type Fusion struct{}
Fusion fuses simple instructions into more complex one, to reduce the instruction count.
type Int65 ¶
type Int65 struct {
// contains filtered or unexported fields
}
func (Int65) CompareZero ¶
type IrAMD64_BSWAP ¶
func (*IrAMD64_BSWAP) Clone ¶
func (self *IrAMD64_BSWAP) Clone() IrNode
func (*IrAMD64_BSWAP) Definitions ¶
func (self *IrAMD64_BSWAP) Definitions() []*Reg
func (*IrAMD64_BSWAP) String ¶
func (self *IrAMD64_BSWAP) String() string
func (*IrAMD64_BSWAP) Usages ¶
func (self *IrAMD64_BSWAP) Usages() []*Reg
type IrAMD64_BTSQ_ri ¶
func (*IrAMD64_BTSQ_ri) Clone ¶
func (self *IrAMD64_BTSQ_ri) Clone() IrNode
func (*IrAMD64_BTSQ_ri) Definitions ¶
func (self *IrAMD64_BTSQ_ri) Definitions() []*Reg
func (*IrAMD64_BTSQ_ri) String ¶
func (self *IrAMD64_BTSQ_ri) String() string
func (*IrAMD64_BTSQ_ri) Usages ¶
func (self *IrAMD64_BTSQ_ri) Usages() []*Reg
type IrAMD64_BTSQ_rr ¶
func (*IrAMD64_BTSQ_rr) Clone ¶
func (self *IrAMD64_BTSQ_rr) Clone() IrNode
func (*IrAMD64_BTSQ_rr) Definitions ¶
func (self *IrAMD64_BTSQ_rr) Definitions() []*Reg
func (*IrAMD64_BTSQ_rr) String ¶
func (self *IrAMD64_BTSQ_rr) String() string
func (*IrAMD64_BTSQ_rr) Usages ¶
func (self *IrAMD64_BTSQ_rr) Usages() []*Reg
type IrAMD64_BinOp ¶
type IrAMD64_BinOp uint8
const ( IrAMD64_BinAdd IrAMD64_BinOp = iota IrAMD64_BinSub IrAMD64_BinMul IrAMD64_BinAnd IrAMD64_BinOr IrAMD64_BinXor IrAMD64_BinShr )
func (IrAMD64_BinOp) IsAdditive ¶
func (self IrAMD64_BinOp) IsAdditive() bool
func (IrAMD64_BinOp) ScaleFactor ¶
func (self IrAMD64_BinOp) ScaleFactor() int32
func (IrAMD64_BinOp) String ¶
func (self IrAMD64_BinOp) String() string
type IrAMD64_BinOp_ri ¶
type IrAMD64_BinOp_ri struct { R Reg X Reg Y int32 Op IrAMD64_BinOp }
func (*IrAMD64_BinOp_ri) Clone ¶
func (self *IrAMD64_BinOp_ri) Clone() IrNode
func (*IrAMD64_BinOp_ri) Definitions ¶
func (self *IrAMD64_BinOp_ri) Definitions() []*Reg
func (*IrAMD64_BinOp_ri) String ¶
func (self *IrAMD64_BinOp_ri) String() string
func (*IrAMD64_BinOp_ri) Usages ¶
func (self *IrAMD64_BinOp_ri) Usages() []*Reg
type IrAMD64_BinOp_rm ¶
type IrAMD64_BinOp_rm struct { R Reg X Reg Y Mem Op IrAMD64_BinOp }
func (*IrAMD64_BinOp_rm) Clone ¶
func (self *IrAMD64_BinOp_rm) Clone() IrNode
func (*IrAMD64_BinOp_rm) Definitions ¶
func (self *IrAMD64_BinOp_rm) Definitions() []*Reg
func (*IrAMD64_BinOp_rm) MemOp ¶
func (self *IrAMD64_BinOp_rm) MemOp() *Mem
func (*IrAMD64_BinOp_rm) String ¶
func (self *IrAMD64_BinOp_rm) String() string
func (*IrAMD64_BinOp_rm) Usages ¶
func (self *IrAMD64_BinOp_rm) Usages() []*Reg
type IrAMD64_BinOp_rr ¶
type IrAMD64_BinOp_rr struct { R Reg X Reg Y Reg Op IrAMD64_BinOp }
func (*IrAMD64_BinOp_rr) Clone ¶
func (self *IrAMD64_BinOp_rr) Clone() IrNode
func (*IrAMD64_BinOp_rr) Definitions ¶
func (self *IrAMD64_BinOp_rr) Definitions() []*Reg
func (*IrAMD64_BinOp_rr) String ¶
func (self *IrAMD64_BinOp_rr) String() string
func (*IrAMD64_BinOp_rr) Usages ¶
func (self *IrAMD64_BinOp_rr) Usages() []*Reg
type IrAMD64_CALL_gcwb ¶
func (*IrAMD64_CALL_gcwb) Clone ¶
func (self *IrAMD64_CALL_gcwb) Clone() IrNode
func (*IrAMD64_CALL_gcwb) String ¶
func (self *IrAMD64_CALL_gcwb) String() string
func (*IrAMD64_CALL_gcwb) Usages ¶
func (self *IrAMD64_CALL_gcwb) Usages() []*Reg
type IrAMD64_CALL_mem ¶
func (*IrAMD64_CALL_mem) Clone ¶
func (self *IrAMD64_CALL_mem) Clone() IrNode
func (*IrAMD64_CALL_mem) Definitions ¶
func (self *IrAMD64_CALL_mem) Definitions() []*Reg
func (*IrAMD64_CALL_mem) MemOp ¶
func (self *IrAMD64_CALL_mem) MemOp() *Mem
func (*IrAMD64_CALL_mem) String ¶
func (self *IrAMD64_CALL_mem) String() string
func (*IrAMD64_CALL_mem) Usages ¶
func (self *IrAMD64_CALL_mem) Usages() []*Reg
type IrAMD64_CALL_reg ¶
func (*IrAMD64_CALL_reg) Clone ¶
func (self *IrAMD64_CALL_reg) Clone() IrNode
func (*IrAMD64_CALL_reg) Definitions ¶
func (self *IrAMD64_CALL_reg) Definitions() []*Reg
func (*IrAMD64_CALL_reg) String ¶
func (self *IrAMD64_CALL_reg) String() string
func (*IrAMD64_CALL_reg) Usages ¶
func (self *IrAMD64_CALL_reg) Usages() []*Reg
type IrAMD64_CMPQ_im ¶
type IrAMD64_CMPQ_im struct { R Reg X int32 Y Mem N uint8 Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_im) Clone ¶
func (self *IrAMD64_CMPQ_im) Clone() IrNode
func (*IrAMD64_CMPQ_im) Definitions ¶
func (self *IrAMD64_CMPQ_im) Definitions() []*Reg
func (*IrAMD64_CMPQ_im) MemOp ¶
func (self *IrAMD64_CMPQ_im) MemOp() *Mem
func (*IrAMD64_CMPQ_im) String ¶
func (self *IrAMD64_CMPQ_im) String() string
func (*IrAMD64_CMPQ_im) Usages ¶
func (self *IrAMD64_CMPQ_im) Usages() []*Reg
type IrAMD64_CMPQ_ir ¶
type IrAMD64_CMPQ_ir struct { R Reg X int32 Y Reg Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_ir) Clone ¶
func (self *IrAMD64_CMPQ_ir) Clone() IrNode
func (*IrAMD64_CMPQ_ir) Definitions ¶
func (self *IrAMD64_CMPQ_ir) Definitions() []*Reg
func (*IrAMD64_CMPQ_ir) String ¶
func (self *IrAMD64_CMPQ_ir) String() string
func (*IrAMD64_CMPQ_ir) Usages ¶
func (self *IrAMD64_CMPQ_ir) Usages() []*Reg
type IrAMD64_CMPQ_mi ¶
type IrAMD64_CMPQ_mi struct { R Reg X Mem Y int32 N uint8 Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_mi) Clone ¶
func (self *IrAMD64_CMPQ_mi) Clone() IrNode
func (*IrAMD64_CMPQ_mi) Definitions ¶
func (self *IrAMD64_CMPQ_mi) Definitions() []*Reg
func (*IrAMD64_CMPQ_mi) MemOp ¶
func (self *IrAMD64_CMPQ_mi) MemOp() *Mem
func (*IrAMD64_CMPQ_mi) String ¶
func (self *IrAMD64_CMPQ_mi) String() string
func (*IrAMD64_CMPQ_mi) Usages ¶
func (self *IrAMD64_CMPQ_mi) Usages() []*Reg
type IrAMD64_CMPQ_mp ¶
type IrAMD64_CMPQ_mp struct { R Reg X Mem Y unsafe.Pointer Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_mp) Clone ¶
func (self *IrAMD64_CMPQ_mp) Clone() IrNode
func (*IrAMD64_CMPQ_mp) Definitions ¶
func (self *IrAMD64_CMPQ_mp) Definitions() []*Reg
func (*IrAMD64_CMPQ_mp) MemOp ¶
func (self *IrAMD64_CMPQ_mp) MemOp() *Mem
func (*IrAMD64_CMPQ_mp) String ¶
func (self *IrAMD64_CMPQ_mp) String() string
func (*IrAMD64_CMPQ_mp) Usages ¶
func (self *IrAMD64_CMPQ_mp) Usages() []*Reg
type IrAMD64_CMPQ_mr ¶
type IrAMD64_CMPQ_mr struct { R Reg X Mem Y Reg N uint8 Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_mr) Clone ¶
func (self *IrAMD64_CMPQ_mr) Clone() IrNode
func (*IrAMD64_CMPQ_mr) Definitions ¶
func (self *IrAMD64_CMPQ_mr) Definitions() []*Reg
func (*IrAMD64_CMPQ_mr) MemOp ¶
func (self *IrAMD64_CMPQ_mr) MemOp() *Mem
func (*IrAMD64_CMPQ_mr) String ¶
func (self *IrAMD64_CMPQ_mr) String() string
func (*IrAMD64_CMPQ_mr) Usages ¶
func (self *IrAMD64_CMPQ_mr) Usages() []*Reg
type IrAMD64_CMPQ_pm ¶
type IrAMD64_CMPQ_pm struct { R Reg X unsafe.Pointer Y Mem Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_pm) Clone ¶
func (self *IrAMD64_CMPQ_pm) Clone() IrNode
func (*IrAMD64_CMPQ_pm) Definitions ¶
func (self *IrAMD64_CMPQ_pm) Definitions() []*Reg
func (*IrAMD64_CMPQ_pm) MemOp ¶
func (self *IrAMD64_CMPQ_pm) MemOp() *Mem
func (*IrAMD64_CMPQ_pm) String ¶
func (self *IrAMD64_CMPQ_pm) String() string
func (*IrAMD64_CMPQ_pm) Usages ¶
func (self *IrAMD64_CMPQ_pm) Usages() []*Reg
type IrAMD64_CMPQ_pr ¶
type IrAMD64_CMPQ_pr struct { R Reg X unsafe.Pointer Y Reg Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_pr) Clone ¶
func (self *IrAMD64_CMPQ_pr) Clone() IrNode
func (*IrAMD64_CMPQ_pr) Definitions ¶
func (self *IrAMD64_CMPQ_pr) Definitions() []*Reg
func (*IrAMD64_CMPQ_pr) String ¶
func (self *IrAMD64_CMPQ_pr) String() string
func (*IrAMD64_CMPQ_pr) Usages ¶
func (self *IrAMD64_CMPQ_pr) Usages() []*Reg
type IrAMD64_CMPQ_ri ¶
type IrAMD64_CMPQ_ri struct { R Reg X Reg Y int32 Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_ri) Clone ¶
func (self *IrAMD64_CMPQ_ri) Clone() IrNode
func (*IrAMD64_CMPQ_ri) Definitions ¶
func (self *IrAMD64_CMPQ_ri) Definitions() []*Reg
func (*IrAMD64_CMPQ_ri) String ¶
func (self *IrAMD64_CMPQ_ri) String() string
func (*IrAMD64_CMPQ_ri) Usages ¶
func (self *IrAMD64_CMPQ_ri) Usages() []*Reg
type IrAMD64_CMPQ_rm ¶
type IrAMD64_CMPQ_rm struct { R Reg X Reg Y Mem N uint8 Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_rm) Clone ¶
func (self *IrAMD64_CMPQ_rm) Clone() IrNode
func (*IrAMD64_CMPQ_rm) Definitions ¶
func (self *IrAMD64_CMPQ_rm) Definitions() []*Reg
func (*IrAMD64_CMPQ_rm) MemOp ¶
func (self *IrAMD64_CMPQ_rm) MemOp() *Mem
func (*IrAMD64_CMPQ_rm) String ¶
func (self *IrAMD64_CMPQ_rm) String() string
func (*IrAMD64_CMPQ_rm) Usages ¶
func (self *IrAMD64_CMPQ_rm) Usages() []*Reg
type IrAMD64_CMPQ_rp ¶
type IrAMD64_CMPQ_rp struct { R Reg X Reg Y unsafe.Pointer Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_rp) Clone ¶
func (self *IrAMD64_CMPQ_rp) Clone() IrNode
func (*IrAMD64_CMPQ_rp) Definitions ¶
func (self *IrAMD64_CMPQ_rp) Definitions() []*Reg
func (*IrAMD64_CMPQ_rp) String ¶
func (self *IrAMD64_CMPQ_rp) String() string
func (*IrAMD64_CMPQ_rp) Usages ¶
func (self *IrAMD64_CMPQ_rp) Usages() []*Reg
type IrAMD64_CMPQ_rr ¶
type IrAMD64_CMPQ_rr struct { R Reg X Reg Y Reg Op IrAMD64_CmpOp }
func (*IrAMD64_CMPQ_rr) Clone ¶
func (self *IrAMD64_CMPQ_rr) Clone() IrNode
func (*IrAMD64_CMPQ_rr) Definitions ¶
func (self *IrAMD64_CMPQ_rr) Definitions() []*Reg
func (*IrAMD64_CMPQ_rr) String ¶
func (self *IrAMD64_CMPQ_rr) String() string
func (*IrAMD64_CMPQ_rr) Usages ¶
func (self *IrAMD64_CMPQ_rr) Usages() []*Reg
type IrAMD64_CmpOp ¶
type IrAMD64_CmpOp uint8
const ( IrAMD64_CmpEq IrAMD64_CmpOp = iota IrAMD64_CmpNe IrAMD64_CmpLt IrAMD64_CmpGe IrAMD64_CmpLtu IrAMD64_CmpGeu )
func (IrAMD64_CmpOp) Negated ¶
func (self IrAMD64_CmpOp) Negated() IrAMD64_CmpOp
func (IrAMD64_CmpOp) String ¶
func (self IrAMD64_CmpOp) String() string
type IrAMD64_INT ¶
type IrAMD64_INT struct {
I uint8
}
func (*IrAMD64_INT) Clone ¶
func (self *IrAMD64_INT) Clone() IrNode
func (*IrAMD64_INT) String ¶
func (self *IrAMD64_INT) String() string
type IrAMD64_JMP ¶
type IrAMD64_JMP struct {
To *IrBranch
}
func (*IrAMD64_JMP) Clone ¶
func (self *IrAMD64_JMP) Clone() IrNode
func (*IrAMD64_JMP) String ¶
func (self *IrAMD64_JMP) String() string
func (*IrAMD64_JMP) Successors ¶
func (self *IrAMD64_JMP) Successors() IrSuccessors
type IrAMD64_JNC ¶
func (*IrAMD64_JNC) Clone ¶
func (self *IrAMD64_JNC) Clone() IrNode
func (*IrAMD64_JNC) String ¶
func (self *IrAMD64_JNC) String() string
func (*IrAMD64_JNC) Successors ¶
func (self *IrAMD64_JNC) Successors() IrSuccessors
type IrAMD64_Jcc_im ¶
func (*IrAMD64_Jcc_im) Clone ¶
func (self *IrAMD64_Jcc_im) Clone() IrNode
func (*IrAMD64_Jcc_im) MemOp ¶
func (self *IrAMD64_Jcc_im) MemOp() *Mem
func (*IrAMD64_Jcc_im) String ¶
func (self *IrAMD64_Jcc_im) String() string
func (*IrAMD64_Jcc_im) Successors ¶
func (self *IrAMD64_Jcc_im) Successors() IrSuccessors
func (*IrAMD64_Jcc_im) Usages ¶
func (self *IrAMD64_Jcc_im) Usages() []*Reg
type IrAMD64_Jcc_ir ¶
type IrAMD64_Jcc_ir struct { X int32 Y Reg To *IrBranch Ln *IrBranch Op IrAMD64_CmpOp }
func (*IrAMD64_Jcc_ir) Clone ¶
func (self *IrAMD64_Jcc_ir) Clone() IrNode
func (*IrAMD64_Jcc_ir) String ¶
func (self *IrAMD64_Jcc_ir) String() string
func (*IrAMD64_Jcc_ir) Successors ¶
func (self *IrAMD64_Jcc_ir) Successors() IrSuccessors
func (*IrAMD64_Jcc_ir) Usages ¶
func (self *IrAMD64_Jcc_ir) Usages() []*Reg
type IrAMD64_Jcc_mi ¶
func (*IrAMD64_Jcc_mi) Clone ¶
func (self *IrAMD64_Jcc_mi) Clone() IrNode
func (*IrAMD64_Jcc_mi) MemOp ¶
func (self *IrAMD64_Jcc_mi) MemOp() *Mem
func (*IrAMD64_Jcc_mi) String ¶
func (self *IrAMD64_Jcc_mi) String() string
func (*IrAMD64_Jcc_mi) Successors ¶
func (self *IrAMD64_Jcc_mi) Successors() IrSuccessors
func (*IrAMD64_Jcc_mi) Usages ¶
func (self *IrAMD64_Jcc_mi) Usages() []*Reg
type IrAMD64_Jcc_mp ¶
func (*IrAMD64_Jcc_mp) Clone ¶
func (self *IrAMD64_Jcc_mp) Clone() IrNode
func (*IrAMD64_Jcc_mp) MemOp ¶
func (self *IrAMD64_Jcc_mp) MemOp() *Mem
func (*IrAMD64_Jcc_mp) String ¶
func (self *IrAMD64_Jcc_mp) String() string
func (*IrAMD64_Jcc_mp) Successors ¶
func (self *IrAMD64_Jcc_mp) Successors() IrSuccessors
func (*IrAMD64_Jcc_mp) Usages ¶
func (self *IrAMD64_Jcc_mp) Usages() []*Reg
type IrAMD64_Jcc_mr ¶
func (*IrAMD64_Jcc_mr) Clone ¶
func (self *IrAMD64_Jcc_mr) Clone() IrNode
func (*IrAMD64_Jcc_mr) MemOp ¶
func (self *IrAMD64_Jcc_mr) MemOp() *Mem
func (*IrAMD64_Jcc_mr) String ¶
func (self *IrAMD64_Jcc_mr) String() string
func (*IrAMD64_Jcc_mr) Successors ¶
func (self *IrAMD64_Jcc_mr) Successors() IrSuccessors
func (*IrAMD64_Jcc_mr) Usages ¶
func (self *IrAMD64_Jcc_mr) Usages() []*Reg
type IrAMD64_Jcc_pm ¶
func (*IrAMD64_Jcc_pm) Clone ¶
func (self *IrAMD64_Jcc_pm) Clone() IrNode
func (*IrAMD64_Jcc_pm) MemOp ¶
func (self *IrAMD64_Jcc_pm) MemOp() *Mem
func (*IrAMD64_Jcc_pm) String ¶
func (self *IrAMD64_Jcc_pm) String() string
func (*IrAMD64_Jcc_pm) Successors ¶
func (self *IrAMD64_Jcc_pm) Successors() IrSuccessors
func (*IrAMD64_Jcc_pm) Usages ¶
func (self *IrAMD64_Jcc_pm) Usages() []*Reg
type IrAMD64_Jcc_pr ¶
func (*IrAMD64_Jcc_pr) Clone ¶
func (self *IrAMD64_Jcc_pr) Clone() IrNode
func (*IrAMD64_Jcc_pr) String ¶
func (self *IrAMD64_Jcc_pr) String() string
func (*IrAMD64_Jcc_pr) Successors ¶
func (self *IrAMD64_Jcc_pr) Successors() IrSuccessors
func (*IrAMD64_Jcc_pr) Usages ¶
func (self *IrAMD64_Jcc_pr) Usages() []*Reg
type IrAMD64_Jcc_ri ¶
type IrAMD64_Jcc_ri struct { X Reg Y int32 To *IrBranch Ln *IrBranch Op IrAMD64_CmpOp }
func (*IrAMD64_Jcc_ri) Clone ¶
func (self *IrAMD64_Jcc_ri) Clone() IrNode
func (*IrAMD64_Jcc_ri) String ¶
func (self *IrAMD64_Jcc_ri) String() string
func (*IrAMD64_Jcc_ri) Successors ¶
func (self *IrAMD64_Jcc_ri) Successors() IrSuccessors
func (*IrAMD64_Jcc_ri) Usages ¶
func (self *IrAMD64_Jcc_ri) Usages() []*Reg
type IrAMD64_Jcc_rm ¶
func (*IrAMD64_Jcc_rm) Clone ¶
func (self *IrAMD64_Jcc_rm) Clone() IrNode
func (*IrAMD64_Jcc_rm) MemOp ¶
func (self *IrAMD64_Jcc_rm) MemOp() *Mem
func (*IrAMD64_Jcc_rm) String ¶
func (self *IrAMD64_Jcc_rm) String() string
func (*IrAMD64_Jcc_rm) Successors ¶
func (self *IrAMD64_Jcc_rm) Successors() IrSuccessors
func (*IrAMD64_Jcc_rm) Usages ¶
func (self *IrAMD64_Jcc_rm) Usages() []*Reg
type IrAMD64_Jcc_rp ¶
func (*IrAMD64_Jcc_rp) Clone ¶
func (self *IrAMD64_Jcc_rp) Clone() IrNode
func (*IrAMD64_Jcc_rp) String ¶
func (self *IrAMD64_Jcc_rp) String() string
func (*IrAMD64_Jcc_rp) Successors ¶
func (self *IrAMD64_Jcc_rp) Successors() IrSuccessors
func (*IrAMD64_Jcc_rp) Usages ¶
func (self *IrAMD64_Jcc_rp) Usages() []*Reg
type IrAMD64_Jcc_rr ¶
type IrAMD64_Jcc_rr struct { X Reg Y Reg To *IrBranch Ln *IrBranch Op IrAMD64_CmpOp }
func (*IrAMD64_Jcc_rr) Clone ¶
func (self *IrAMD64_Jcc_rr) Clone() IrNode
func (*IrAMD64_Jcc_rr) String ¶
func (self *IrAMD64_Jcc_rr) String() string
func (*IrAMD64_Jcc_rr) Successors ¶
func (self *IrAMD64_Jcc_rr) Successors() IrSuccessors
func (*IrAMD64_Jcc_rr) Usages ¶
func (self *IrAMD64_Jcc_rr) Usages() []*Reg
type IrAMD64_LEA ¶
func (*IrAMD64_LEA) Clone ¶
func (self *IrAMD64_LEA) Clone() IrNode
func (*IrAMD64_LEA) Definitions ¶
func (self *IrAMD64_LEA) Definitions() []*Reg
func (*IrAMD64_LEA) MemOp ¶
func (self *IrAMD64_LEA) MemOp() *Mem
func (*IrAMD64_LEA) String ¶
func (self *IrAMD64_LEA) String() string
func (*IrAMD64_LEA) Usages ¶
func (self *IrAMD64_LEA) Usages() (r []*Reg)
type IrAMD64_MOVSLQ ¶
func (*IrAMD64_MOVSLQ) Clone ¶
func (self *IrAMD64_MOVSLQ) Clone() IrNode
func (*IrAMD64_MOVSLQ) Definitions ¶
func (self *IrAMD64_MOVSLQ) Definitions() []*Reg
func (*IrAMD64_MOVSLQ) String ¶
func (self *IrAMD64_MOVSLQ) String() string
func (*IrAMD64_MOVSLQ) Usages ¶
func (self *IrAMD64_MOVSLQ) Usages() []*Reg
type IrAMD64_MOV_abs ¶
func (*IrAMD64_MOV_abs) Clone ¶
func (self *IrAMD64_MOV_abs) Clone() IrNode
func (*IrAMD64_MOV_abs) Definitions ¶
func (self *IrAMD64_MOV_abs) Definitions() []*Reg
func (*IrAMD64_MOV_abs) String ¶
func (self *IrAMD64_MOV_abs) String() string
type IrAMD64_MOV_load ¶
func (*IrAMD64_MOV_load) Clone ¶
func (self *IrAMD64_MOV_load) Clone() IrNode
func (*IrAMD64_MOV_load) Definitions ¶
func (self *IrAMD64_MOV_load) Definitions() []*Reg
func (*IrAMD64_MOV_load) MemOp ¶
func (self *IrAMD64_MOV_load) MemOp() *Mem
func (*IrAMD64_MOV_load) String ¶
func (self *IrAMD64_MOV_load) String() string
func (*IrAMD64_MOV_load) Usages ¶
func (self *IrAMD64_MOV_load) Usages() (r []*Reg)
type IrAMD64_MOV_load_be ¶
func (*IrAMD64_MOV_load_be) Clone ¶
func (self *IrAMD64_MOV_load_be) Clone() IrNode
func (*IrAMD64_MOV_load_be) Definitions ¶
func (self *IrAMD64_MOV_load_be) Definitions() []*Reg
func (*IrAMD64_MOV_load_be) MemOp ¶
func (self *IrAMD64_MOV_load_be) MemOp() *Mem
func (*IrAMD64_MOV_load_be) String ¶
func (self *IrAMD64_MOV_load_be) String() string
func (*IrAMD64_MOV_load_be) Usages ¶
func (self *IrAMD64_MOV_load_be) Usages() (r []*Reg)
type IrAMD64_MOV_load_stack ¶
type IrAMD64_MOV_load_stack struct { R Reg S uintptr K IrSlotKind }
func (*IrAMD64_MOV_load_stack) Clone ¶
func (self *IrAMD64_MOV_load_stack) Clone() IrNode
func (*IrAMD64_MOV_load_stack) Definitions ¶
func (self *IrAMD64_MOV_load_stack) Definitions() (r []*Reg)
func (*IrAMD64_MOV_load_stack) String ¶
func (self *IrAMD64_MOV_load_stack) String() string
type IrAMD64_MOV_ptr ¶
func (*IrAMD64_MOV_ptr) Clone ¶
func (self *IrAMD64_MOV_ptr) Clone() IrNode
func (*IrAMD64_MOV_ptr) Definitions ¶
func (self *IrAMD64_MOV_ptr) Definitions() []*Reg
func (*IrAMD64_MOV_ptr) String ¶
func (self *IrAMD64_MOV_ptr) String() string
type IrAMD64_MOV_reg ¶
func (*IrAMD64_MOV_reg) Clone ¶
func (self *IrAMD64_MOV_reg) Clone() IrNode
func (*IrAMD64_MOV_reg) Definitions ¶
func (self *IrAMD64_MOV_reg) Definitions() []*Reg
func (*IrAMD64_MOV_reg) String ¶
func (self *IrAMD64_MOV_reg) String() string
func (*IrAMD64_MOV_reg) Usages ¶
func (self *IrAMD64_MOV_reg) Usages() []*Reg
type IrAMD64_MOV_store_be ¶
func (*IrAMD64_MOV_store_be) Clone ¶
func (self *IrAMD64_MOV_store_be) Clone() IrNode
func (*IrAMD64_MOV_store_be) MemOp ¶
func (self *IrAMD64_MOV_store_be) MemOp() *Mem
func (*IrAMD64_MOV_store_be) String ¶
func (self *IrAMD64_MOV_store_be) String() string
func (*IrAMD64_MOV_store_be) Usages ¶
func (self *IrAMD64_MOV_store_be) Usages() (r []*Reg)
type IrAMD64_MOV_store_i ¶
func (*IrAMD64_MOV_store_i) Clone ¶
func (self *IrAMD64_MOV_store_i) Clone() IrNode
func (*IrAMD64_MOV_store_i) MemOp ¶
func (self *IrAMD64_MOV_store_i) MemOp() *Mem
func (*IrAMD64_MOV_store_i) String ¶
func (self *IrAMD64_MOV_store_i) String() string
func (*IrAMD64_MOV_store_i) Usages ¶
func (self *IrAMD64_MOV_store_i) Usages() (r []*Reg)
type IrAMD64_MOV_store_p ¶
func (*IrAMD64_MOV_store_p) Clone ¶
func (self *IrAMD64_MOV_store_p) Clone() IrNode
func (*IrAMD64_MOV_store_p) MemOp ¶
func (self *IrAMD64_MOV_store_p) MemOp() *Mem
func (*IrAMD64_MOV_store_p) String ¶
func (self *IrAMD64_MOV_store_p) String() string
func (*IrAMD64_MOV_store_p) Usages ¶
func (self *IrAMD64_MOV_store_p) Usages() (r []*Reg)
type IrAMD64_MOV_store_r ¶
func (*IrAMD64_MOV_store_r) Clone ¶
func (self *IrAMD64_MOV_store_r) Clone() IrNode
func (*IrAMD64_MOV_store_r) MemOp ¶
func (self *IrAMD64_MOV_store_r) MemOp() *Mem
func (*IrAMD64_MOV_store_r) String ¶
func (self *IrAMD64_MOV_store_r) String() string
func (*IrAMD64_MOV_store_r) Usages ¶
func (self *IrAMD64_MOV_store_r) Usages() (r []*Reg)
type IrAMD64_MOV_store_stack ¶
type IrAMD64_MOV_store_stack struct { R Reg S uintptr K IrSlotKind }
func (*IrAMD64_MOV_store_stack) Clone ¶
func (self *IrAMD64_MOV_store_stack) Clone() IrNode
func (*IrAMD64_MOV_store_stack) String ¶
func (self *IrAMD64_MOV_store_stack) String() string
func (*IrAMD64_MOV_store_stack) Usages ¶
func (self *IrAMD64_MOV_store_stack) Usages() (r []*Reg)
type IrAMD64_MemOp ¶
type IrAMD64_MemOp interface {
MemOp() *Mem
}
type IrAMD64_NEG ¶
func (*IrAMD64_NEG) Clone ¶
func (self *IrAMD64_NEG) Clone() IrNode
func (*IrAMD64_NEG) Definitions ¶
func (self *IrAMD64_NEG) Definitions() []*Reg
func (*IrAMD64_NEG) String ¶
func (self *IrAMD64_NEG) String() string
func (*IrAMD64_NEG) Usages ¶
func (self *IrAMD64_NEG) Usages() []*Reg
type IrAMD64_RET ¶
type IrAMD64_RET struct {
R []Reg
}
func (*IrAMD64_RET) Clone ¶
func (self *IrAMD64_RET) Clone() IrNode
func (*IrAMD64_RET) String ¶
func (self *IrAMD64_RET) String() string
func (*IrAMD64_RET) Successors ¶
func (self *IrAMD64_RET) Successors() IrSuccessors
func (*IrAMD64_RET) Usages ¶
func (self *IrAMD64_RET) Usages() []*Reg
type IrAlias ¶
func (*IrAlias) Definitions ¶
type IrBinaryExpr ¶
type IrBinaryExpr struct { R Reg X Reg Y Reg Op IrBinaryOp }
func (*IrBinaryExpr) Clone ¶
func (self *IrBinaryExpr) Clone() IrNode
func (*IrBinaryExpr) Definitions ¶
func (self *IrBinaryExpr) Definitions() []*Reg
func (*IrBinaryExpr) String ¶
func (self *IrBinaryExpr) String() string
func (*IrBinaryExpr) Usages ¶
func (self *IrBinaryExpr) Usages() []*Reg
type IrBinaryOp ¶
type IrBinaryOp uint8
const ( IrOpAdd IrBinaryOp = iota IrOpSub IrOpMul IrOpAnd IrOpOr IrOpXor IrOpShr IrCmpEq IrCmpNe IrCmpLt IrCmpLtu IrCmpGeu )
func (IrBinaryOp) String ¶
func (self IrBinaryOp) String() string
type IrBitTestSet ¶
func (*IrBitTestSet) Clone ¶
func (self *IrBitTestSet) Clone() IrNode
func (*IrBitTestSet) Definitions ¶
func (self *IrBitTestSet) Definitions() []*Reg
func (*IrBitTestSet) String ¶
func (self *IrBitTestSet) String() string
func (*IrBitTestSet) Usages ¶
func (self *IrBitTestSet) Usages() []*Reg
type IrBranch ¶
type IrBranch struct { To *BasicBlock Likeliness Likeliness }
func IrLikely ¶
func IrLikely(bb *BasicBlock) *IrBranch
func IrUnlikely ¶
func IrUnlikely(bb *BasicBlock) *IrBranch
type IrBreakpoint ¶
type IrBreakpoint struct{}
func (*IrBreakpoint) Clone ¶
func (*IrBreakpoint) Clone() IrNode
func (*IrBreakpoint) String ¶
func (*IrBreakpoint) String() string
type IrCallFunc ¶
type IrCallFunc struct { R Reg In []Reg Out []Reg Func *abi.FunctionLayout }
func (*IrCallFunc) Clone ¶
func (self *IrCallFunc) Clone() IrNode
func (*IrCallFunc) Definitions ¶
func (self *IrCallFunc) Definitions() []*Reg
func (*IrCallFunc) String ¶
func (self *IrCallFunc) String() string
func (*IrCallFunc) Usages ¶
func (self *IrCallFunc) Usages() []*Reg
type IrCallMethod ¶
func (*IrCallMethod) Clone ¶
func (self *IrCallMethod) Clone() IrNode
func (*IrCallMethod) Definitions ¶
func (self *IrCallMethod) Definitions() []*Reg
func (*IrCallMethod) String ¶
func (self *IrCallMethod) String() string
func (*IrCallMethod) Usages ¶
func (self *IrCallMethod) Usages() []*Reg
type IrCallNative ¶
func (*IrCallNative) Clone ¶
func (self *IrCallNative) Clone() IrNode
func (*IrCallNative) Definitions ¶
func (self *IrCallNative) Definitions() []*Reg
func (*IrCallNative) String ¶
func (self *IrCallNative) String() string
func (*IrCallNative) Usages ¶
func (self *IrCallNative) Usages() []*Reg
type IrClobberList ¶
type IrClobberList struct {
R []Reg
}
func IrMarkClobber ¶
func IrMarkClobber(r ...Reg) *IrClobberList
func (*IrClobberList) Clone ¶
func (self *IrClobberList) Clone() IrNode
func (*IrClobberList) String ¶
func (self *IrClobberList) String() string
func (*IrClobberList) Usages ¶
func (self *IrClobberList) Usages() []*Reg
type IrConstInt ¶
func (*IrConstInt) Clone ¶
func (self *IrConstInt) Clone() IrNode
func (*IrConstInt) Definitions ¶
func (self *IrConstInt) Definitions() []*Reg
func (*IrConstInt) String ¶
func (self *IrConstInt) String() string
type IrConstPtr ¶
func (*IrConstPtr) Clone ¶
func (self *IrConstPtr) Clone() IrNode
func (*IrConstPtr) Definitions ¶
func (self *IrConstPtr) Definitions() []*Reg
func (*IrConstPtr) String ¶
func (self *IrConstPtr) String() string
type IrDefinitions ¶
type IrImmovable ¶
type IrImmovable interface { IrNode // contains filtered or unexported methods }
type IrLEA ¶
func (*IrLEA) Definitions ¶
type IrLoad ¶
func (*IrLoad) Definitions ¶
type IrLoadArg ¶
func (*IrLoadArg) Definitions ¶
type IrNode ¶
func IrArchConstInt ¶
func IrArchCopy ¶
func IrArchLoadStack ¶
func IrArchLoadStack(reg Reg, offs uintptr, kind IrSlotKind) IrNode
func IrArchStoreStack ¶
func IrArchStoreStack(reg Reg, offs uintptr, kind IrSlotKind) IrNode
func IrArchZero ¶
func IrSlotGen ¶
func IrSlotGen(s IrSpillSlot) IrNode
type IrReturn ¶
type IrReturn struct {
R []Reg
}
func (*IrReturn) Successors ¶
func (self *IrReturn) Successors() IrSuccessors
type IrSlotAlive ¶
type IrSlotAlive struct {
S []IrSpillSlot
}
func (*IrSlotAlive) Clone ¶
func (self *IrSlotAlive) Clone() IrNode
func (*IrSlotAlive) String ¶
func (self *IrSlotAlive) String() string
type IrSlotKind ¶
type IrSlotKind uint8
const ( IrSlotArgs IrSlotKind = iota IrSlotCall IrSlotLocal )
func (IrSlotKind) String ¶
func (self IrSlotKind) String() string
type IrSpill ¶
type IrSpill struct { R Reg S IrSpillSlot Op IrSpillOp }
func (*IrSpill) Definitions ¶
type IrSpillSlot ¶
type IrSpillSlot uint64
func (IrSpillSlot) ID ¶
func (self IrSpillSlot) ID() int
func (IrSpillSlot) IsPtr ¶
func (self IrSpillSlot) IsPtr() bool
func (IrSpillSlot) String ¶
func (self IrSpillSlot) String() string
type IrSuccessors ¶
type IrSuccessors interface { Next() bool Block() *BasicBlock Value() (int32, bool) Likeliness() Likeliness UpdateBlock(bb *BasicBlock) }
type IrSwitch ¶
func (*IrSwitch) Successors ¶
func (self *IrSwitch) Successors() IrSuccessors
type IrTerminator ¶
type IrTerminator interface { IrNode Successors() IrSuccessors // contains filtered or unexported methods }
func IrArchJump ¶
func IrArchJump(to *BasicBlock) IrTerminator
func IrArchReturn ¶
func IrArchReturn(rr []Reg) IrTerminator
type IrUnaryExpr ¶
func (*IrUnaryExpr) Clone ¶
func (self *IrUnaryExpr) Clone() IrNode
func (*IrUnaryExpr) Definitions ¶
func (self *IrUnaryExpr) Definitions() []*Reg
func (*IrUnaryExpr) String ¶
func (self *IrUnaryExpr) String() string
func (*IrUnaryExpr) Usages ¶
func (self *IrUnaryExpr) Usages() []*Reg
type IrWriteBarrier ¶
func (*IrWriteBarrier) Clone ¶
func (self *IrWriteBarrier) Clone() IrNode
func (*IrWriteBarrier) String ¶
func (self *IrWriteBarrier) String() string
func (*IrWriteBarrier) Usages ¶
func (self *IrWriteBarrier) Usages() []*Reg
type Likeliness ¶
type Likeliness uint8
const ( Likely Likeliness = iota Unlikely )
func (Likeliness) String ¶
func (self Likeliness) String() string
type OperandAlloc ¶
type OperandAlloc struct{}
OperandAlloc for AMD64 converts 3-operand or 2-operand pseudo-instructions to 2-operand or one-operand real instructions.
func (OperandAlloc) Apply ¶
func (OperandAlloc) Apply(cfg *CFG)
type PassDescriptor ¶
type PhiProp ¶
type PhiProp struct{}
PhiProp propagates Phi nodes into it's source blocks, essentially get rid of them. The CFG is no longer in SSA form after this pass.
type Pos ¶
type Pos struct { B *BasicBlock I int }
type Rematerialize ¶
type Rematerialize struct{}
Rematerialize recalculates simple values to reduce register pressure.
func (Rematerialize) Apply ¶
func (Rematerialize) Apply(cfg *CFG)
type Reorder ¶
type Reorder struct{}
Reorder moves value closer to it's usage, which reduces register pressure.
type ReturnSpread ¶
type ReturnSpread struct{}
ReturnSpread spreads the return block to all it's successors, in order to shorten register live ranges.
func (ReturnSpread) Apply ¶
func (ReturnSpread) Apply(cfg *CFG)
type SlotSet ¶
type SlotSet map[IrSpillSlot]struct{}
type SplitCritical ¶
type SplitCritical struct{}
SplitCritical splits critical edges (those that go from a block with more than one outedge to a block with more than one inedge) by inserting an empty block.
PhiProp wants a critical-edge-free CFG so it can safely remove Phi nodes for RegAlloc.
func (SplitCritical) Apply ¶
func (SplitCritical) Apply(cfg *CFG)
type StackLiveness ¶
type StackLiveness struct{}
StackLiveness calculates the liveness of each stack slot.
func (StackLiveness) Apply ¶
func (self StackLiveness) Apply(cfg *CFG)
type TDCE ¶
type TDCE struct{}
TDCE removes trivial dead-code such as unused register definations from CFG.
type WriteBarrier ¶
type WriteBarrier struct{}
WriteBarrier inserts write barriers for pointer stores.
func (WriteBarrier) Apply ¶
func (WriteBarrier) Apply(cfg *CFG)
Source Files ¶
- block.go
- blockiter.go
- builder.go
- cfg.go
- compile.go
- constdata.go
- dominator.go
- funcdata.go
- int65.go
- ir.go
- ir_amd64.go
- pass_abispec.go
- pass_abispec_amd64.go
- pass_blockmerge.go
- pass_branchelim.go
- pass_compact_amd64.go
- pass_comsubexpr.go
- pass_constprop.go
- pass_copyelim.go
- pass_fusion_amd64.go
- pass_layout.go
- pass_lowering_amd64.go
- pass_mbarrier_amd64.go
- pass_operandalloc_amd64.go
- pass_phielim.go
- pass_phiprop.go
- pass_reduce.go
- pass_regalloc.go
- pass_rematerialize.go
- pass_reorder.go
- pass_return_spread.go
- pass_splitcritical.go
- pass_stack_liveness.go
- pass_tdce.go
- pass_zeroreg.go
- phi.go
- pos.go
- rename.go
- slotset.go
- utils.go