class CSEMIRBuilder
Declaration
class CSEMIRBuilder : public MachineIRBuilder { /* full declaration omitted */ };
Description
Defines a builder that does CSE of MachineInstructions using GISelCSEInfo. Eg usage. GISelCSEInfo *Info = &getAnalysis <GISelCSEAnalysisWrapperPass >().getCSEInfo(); CSEMIRBuilder CB(Builder.getState()); CB.setCSEInfo(Info); auto A = CB.buildConstant(s32, 42); auto B = CB.buildConstant(s32, 42); assert(A == B); unsigned CReg = MRI.createGenericVirtualRegister(s32); auto C = CB.buildConstant(CReg, 42); assert(C->getOpcode() == TargetOpcode::COPY); Explicitly passing in a register would materialize a copy if possible. CSEMIRBuilder also does trivial constant folding for binary ops.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:32
Inherits from: MachineIRBuilder
Member Variables
Method Overview
- public llvm::MachineInstrBuilder buildConstant(const llvm::DstOp & Res, const llvm::ConstantInt & Val)
- public llvm::MachineInstrBuilder buildFConstant(const llvm::DstOp & Res, const llvm::ConstantFP & Val)
- public llvm::MachineInstrBuilder buildInstr(unsigned int Opc, ArrayRef<llvm::DstOp> DstOps, ArrayRef<llvm::SrcOp> SrcOps, Optional<unsigned int> Flag = None)
- private bool canPerformCSEForOpc(unsigned int Opc) const
- private bool checkCopyToDefsPossible(ArrayRef<llvm::DstOp> DstOps)
- private bool dominates(MachineBasicBlock::const_iterator A, MachineBasicBlock::const_iterator B) const
- private llvm::MachineInstrBuilder generateCopiesIfRequired(ArrayRef<llvm::DstOp> DstOps, llvm::MachineInstrBuilder & MIB)
- private llvm::MachineInstrBuilder getDominatingInstrForID(llvm::FoldingSetNodeID & ID, void *& NodeInsertPos)
- private llvm::MachineInstrBuilder memoizeMI(llvm::MachineInstrBuilder MIB, void * NodeInsertPos)
- private void profileDstOp(const llvm::DstOp & Op, llvm::GISelInstProfileBuilder & B) const
- private void profileDstOps(ArrayRef<llvm::DstOp> Ops, llvm::GISelInstProfileBuilder & B) const
- private void profileEverything(unsigned int Opc, ArrayRef<llvm::DstOp> DstOps, ArrayRef<llvm::SrcOp> SrcOps, Optional<unsigned int> Flags, llvm::GISelInstProfileBuilder & B) const
- private void profileMBBOpcode(llvm::GISelInstProfileBuilder & B, unsigned int Opc) const
- private void profileSrcOp(const llvm::SrcOp & Op, llvm::GISelInstProfileBuilder & B) const
- private void profileSrcOps(ArrayRef<llvm::SrcOp> Ops, llvm::GISelInstProfileBuilder & B) const
Inherited from MachineIRBuilder:
- public buildAShr
- public buildAbs
- public buildAdd
- public buildAddrSpaceCast
- public buildAnd
- public buildAnyExt
- public buildAnyExtOrTrunc
- public buildAssertAlign
- public buildAssertOp
- public buildAssertSExt
- public buildAssertZExt
- public buildAtomicCmpXchg
- public buildAtomicCmpXchgWithSuccess
- public buildAtomicRMW
- public buildAtomicRMWAdd
- public buildAtomicRMWAnd
- public buildAtomicRMWFAdd
- public buildAtomicRMWFMax
- public buildAtomicRMWFMin
- public buildAtomicRMWFSub
- public buildAtomicRMWMax
- public buildAtomicRMWMin
- public buildAtomicRMWNand
- public buildAtomicRMWOr
- public buildAtomicRMWSub
- public buildAtomicRMWUmax
- public buildAtomicRMWUmin
- public buildAtomicRMWXchg
- public buildAtomicRMWXor
- public buildBSwap
- public buildBitReverse
- public buildBitcast
- public buildBlockAddress
- public buildBoolExt
- public buildBoolExtInReg
- public buildBr
- public buildBrCond
- public buildBrIndirect
- public buildBrJT
- public buildBuildVector
- public buildBuildVectorConstant
- public buildBuildVectorTrunc
- public buildCTLZ
- public buildCTLZ_ZERO_UNDEF
- public buildCTPOP
- public buildCTTZ
- public buildCTTZ_ZERO_UNDEF
- public buildCast
- public buildConcatVectors
- public buildConstDbgValue
- public buildConstant
- public buildConstant
- public buildConstant
- public buildCopy
- public buildDbgLabel
- public buildDeleteTrailingVectorElements
- public buildDirectDbgValue
- public buildDynStackAlloc
- public buildExtOrTrunc
- public buildExtract
- public buildExtractVectorElement
- public buildFAbs
- public buildFAdd
- public buildFCanonicalize
- public buildFCmp
- public buildFConstant
- public buildFConstant
- public buildFConstant
- public buildFCopysign
- public buildFDiv
- public buildFExp2
- public buildFFloor
- public buildFIDbgValue
- public buildFLog
- public buildFLog2
- public buildFMA
- public buildFMAD
- public buildFMaxNum
- public buildFMaxNumIEEE
- public buildFMinNum
- public buildFMinNumIEEE
- public buildFMul
- public buildFNeg
- public buildFPExt
- public buildFPTOSI
- public buildFPTOUI
- public buildFPTrunc
- public buildFPow
- public buildFSub
- public buildFence
- public buildFrameIndex
- public buildFreeze
- public buildGlobalValue
- public buildICmp
- public buildIndirectDbgValue
- public buildInsert
- public buildInsertVectorElement
- public buildInstr
- public buildInstr
- public buildInstrNoInsert
- public buildIntToPtr
- public buildIntrinsic
- public buildIntrinsic
- public buildIntrinsicTrunc
- public buildJumpTable
- public buildLShr
- public buildLoad
- public buildLoad
- public buildLoadFromOffset
- public buildLoadInstr
- public buildMaskLowPtrBits
- public buildMemCpy
- public buildMemTransferInst
- public buildMerge
- public buildMerge
- public buildMul
- public buildNeg
- public buildNot
- public buildOr
- public buildPadVectorWithUndefElements
- public buildPtrAdd
- public buildPtrMask
- public buildPtrToInt
- public buildRotateLeft
- public buildRotateRight
- public buildSAdde
- public buildSAddo
- public buildSExt
- public buildSExtInReg
- public buildSExtOrTrunc
- public buildSITOFP
- public buildSMax
- public buildSMin
- public buildSMulH
- public buildSSube
- public buildSSubo
- public buildSbfx
- public buildSelect
- public buildShl
- public buildShuffleSplat
- public buildShuffleVector
- public buildSplatVector
- public buildStore
- public buildStore
- public buildSub
- public buildTrunc
- public buildUAdde
- public buildUAddo
- public buildUITOFP
- public buildUMax
- public buildUMin
- public buildUMulH
- public buildURem
- public buildUSube
- public buildUSubo
- public buildUbfx
- public buildUndef
- public buildUnmerge
- public buildUnmerge
- public buildUnmerge
- public buildVecReduceAdd
- public buildVecReduceAnd
- public buildVecReduceFAdd
- public buildVecReduceFMax
- public buildVecReduceFMin
- public buildVecReduceFMul
- public buildVecReduceMul
- public buildVecReduceOr
- public buildVecReduceSMax
- public buildVecReduceSMin
- public buildVecReduceSeqFAdd
- public buildVecReduceSeqFMul
- public buildVecReduceUMax
- public buildVecReduceUMin
- public buildVecReduceXor
- public buildXor
- public buildZExt
- public buildZExtInReg
- public buildZExtOrTrunc
- public getBoolExtOp
- public getCSEInfo
- public getCSEInfo
- public getDL
- public getDataLayout
- public getDebugLoc
- public getInsertPt
- public getMBB
- public getMBB
- public getMF
- public getMF
- public getMRI
- public getMRI
- public getState
- public getTII
- public insertInstr
- public materializePtrAdd
- protected recordInsertion
- public setCSEInfo
- public setChangeObserver
- public setDebugLoc
- public setInsertPt
- public setInstr
- public setInstrAndDebugLoc
- public setMBB
- public setMF
- public stopObservingChanges
- protected validateBinaryOp
- protected validateSelectOp
- protected validateShiftOp
- protected validateTruncExt
- protected validateUnaryOp
Methods
¶llvm::MachineInstrBuilder buildConstant(
const llvm::DstOp& Res,
const llvm::ConstantInt& Val)
llvm::MachineInstrBuilder buildConstant(
const llvm::DstOp& Res,
const llvm::ConstantInt& Val)
Description
Build and insert \p Res = G_CONSTANT \p Val G_CONSTANT is an integer constant with the specified size and value. \p Val will be extended or truncated to the size of \p Reg.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:100
Parameters
- const llvm::DstOp& Res
- const llvm::ConstantInt& Val
Returns
The newly created instruction.
¶llvm::MachineInstrBuilder buildFConstant(
const llvm::DstOp& Res,
const llvm::ConstantFP& Val)
llvm::MachineInstrBuilder buildFConstant(
const llvm::DstOp& Res,
const llvm::ConstantFP& Val)
Description
Build and insert \p Res = G_FCONSTANT \p Val G_FCONSTANT is a floating-point constant with the specified size and value.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:105
Parameters
- const llvm::DstOp& Res
- const llvm::ConstantFP& Val
Returns
The newly created instruction.
¶llvm::MachineInstrBuilder buildInstr(
unsigned int Opc,
ArrayRef<llvm::DstOp> DstOps,
ArrayRef<llvm::SrcOp> SrcOps,
Optional<unsigned int> Flag = None)
llvm::MachineInstrBuilder buildInstr(
unsigned int Opc,
ArrayRef<llvm::DstOp> DstOps,
ArrayRef<llvm::SrcOp> SrcOps,
Optional<unsigned int> Flag = None)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:94
Parameters
- unsigned int Opc
- ArrayRef<llvm::DstOp> DstOps
- ArrayRef<llvm::SrcOp> SrcOps
- Optional<unsigned int> Flag = None
¶bool canPerformCSEForOpc(unsigned int Opc) const
bool canPerformCSEForOpc(unsigned int Opc) const
Description
Simple check if we can CSE (we have the CSEInfo) or if this Opcode is safe to CSE.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:54
Parameters
- unsigned int Opc
¶bool checkCopyToDefsPossible(
ArrayRef<llvm::DstOp> DstOps)
bool checkCopyToDefsPossible(
ArrayRef<llvm::DstOp> DstOps)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:88
Parameters
- ArrayRef<llvm::DstOp> DstOps
¶bool dominates(
MachineBasicBlock::const_iterator A,
MachineBasicBlock::const_iterator B) const
bool dominates(
MachineBasicBlock::const_iterator A,
MachineBasicBlock::const_iterator B) const
Description
Returns true if A dominates B (within the same basic block). Both iterators must be in the same basic block.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:43
Parameters
¶llvm::MachineInstrBuilder
generateCopiesIfRequired(
ArrayRef<llvm::DstOp> DstOps,
llvm::MachineInstrBuilder& MIB)
llvm::MachineInstrBuilder
generateCopiesIfRequired(
ArrayRef<llvm::DstOp> DstOps,
llvm::MachineInstrBuilder& MIB)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:82
Parameters
- ArrayRef<llvm::DstOp> DstOps
- llvm::MachineInstrBuilder& MIB
¶llvm::MachineInstrBuilder getDominatingInstrForID(
llvm::FoldingSetNodeID& ID,
void*& NodeInsertPos)
llvm::MachineInstrBuilder getDominatingInstrForID(
llvm::FoldingSetNodeID& ID,
void*& NodeInsertPos)
Description
For given ID, find a machineinstr in the CSE Map. If found, check if it dominates the current insertion point and if not, move it just before the current insertion point and return it. If not found, return Null MachineInstrBuilder.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:50
Parameters
- llvm::FoldingSetNodeID& ID
- void*& NodeInsertPos
¶llvm::MachineInstrBuilder memoizeMI(
llvm::MachineInstrBuilder MIB,
void* NodeInsertPos)
llvm::MachineInstrBuilder memoizeMI(
llvm::MachineInstrBuilder MIB,
void* NodeInsertPos)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:78
Parameters
- llvm::MachineInstrBuilder MIB
- void* NodeInsertPos
¶void profileDstOp(
const llvm::DstOp& Op,
llvm::GISelInstProfileBuilder& B) const
void profileDstOp(
const llvm::DstOp& Op,
llvm::GISelInstProfileBuilder& B) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:56
Parameters
- const llvm::DstOp& Op
- llvm::GISelInstProfileBuilder& B
¶void profileDstOps(
ArrayRef<llvm::DstOp> Ops,
llvm::GISelInstProfileBuilder& B) const
void profileDstOps(
ArrayRef<llvm::DstOp> Ops,
llvm::GISelInstProfileBuilder& B) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:58
Parameters
- ArrayRef<llvm::DstOp> Ops
- llvm::GISelInstProfileBuilder& B
¶void profileEverything(
unsigned int Opc,
ArrayRef<llvm::DstOp> DstOps,
ArrayRef<llvm::SrcOp> SrcOps,
Optional<unsigned int> Flags,
llvm::GISelInstProfileBuilder& B) const
void profileEverything(
unsigned int Opc,
ArrayRef<llvm::DstOp> DstOps,
ArrayRef<llvm::SrcOp> SrcOps,
Optional<unsigned int> Flags,
llvm::GISelInstProfileBuilder& B) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:72
Parameters
- unsigned int Opc
- ArrayRef<llvm::DstOp> DstOps
- ArrayRef<llvm::SrcOp> SrcOps
- Optional<unsigned int> Flags
- llvm::GISelInstProfileBuilder& B
¶void profileMBBOpcode(
llvm::GISelInstProfileBuilder& B,
unsigned int Opc) const
void profileMBBOpcode(
llvm::GISelInstProfileBuilder& B,
unsigned int Opc) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:70
Parameters
- llvm::GISelInstProfileBuilder& B
- unsigned int Opc
¶void profileSrcOp(
const llvm::SrcOp& Op,
llvm::GISelInstProfileBuilder& B) const
void profileSrcOp(
const llvm::SrcOp& Op,
llvm::GISelInstProfileBuilder& B) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:63
Parameters
- const llvm::SrcOp& Op
- llvm::GISelInstProfileBuilder& B
¶void profileSrcOps(
ArrayRef<llvm::SrcOp> Ops,
llvm::GISelInstProfileBuilder& B) const
void profileSrcOps(
ArrayRef<llvm::SrcOp> Ops,
llvm::GISelInstProfileBuilder& B) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CSEMIRBuilder.h:65
Parameters
- ArrayRef<llvm::SrcOp> Ops
- llvm::GISelInstProfileBuilder& B