LLVM 20.0.0git
|
Provides the logic to execute GlobalISel match tables, which are used by the instruction selector and instruction combiners as their engine to match and apply MIR patterns. More...
#include "llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h"
Classes | |
struct | ExecInfoTy |
struct | MatcherState |
Public Member Functions | |
virtual | ~GIMatchTableExecutor ()=default |
virtual void | setupGeneratedPerFunctionState (MachineFunction &MF)=0 |
virtual void | setupMF (MachineFunction &mf, GISelKnownBits *kb, CodeGenCoverage *covinfo=nullptr, ProfileSummaryInfo *psi=nullptr, BlockFrequencyInfo *bfi=nullptr) |
Setup per-MF executor state. | |
Static Public Member Functions | |
static LLVM_ATTRIBUTE_ALWAYS_INLINE uint64_t | fastDecodeULEB128 (const uint8_t *LLVM_ATTRIBUTE_RESTRICT MatchTable, uint64_t &CurrentIdx) |
Public Attributes | |
CodeGenCoverage * | CoverageInfo = nullptr |
GISelKnownBits * | KB = nullptr |
MachineFunction * | MF = nullptr |
ProfileSummaryInfo * | PSI = nullptr |
BlockFrequencyInfo * | BFI = nullptr |
MachineBasicBlock * | CurMBB = nullptr |
Protected Types | |
using | ComplexRendererFns = std::optional< SmallVector< std::function< void(MachineInstrBuilder &)>, 4 > > |
using | RecordedMIVector = SmallVector< MachineInstr *, 4 > |
using | NewMIVector = SmallVector< MachineInstrBuilder, 4 > |
Static Protected Member Functions | |
template<typename Ty > | |
static Ty | readBytesAs (const uint8_t *MatchTable) |
static ArrayRef< MachineOperand > | getRemainingOperands (const MachineInstr &MI, unsigned FirstVarOp) |
Provides the logic to execute GlobalISel match tables, which are used by the instruction selector and instruction combiners as their engine to match and apply MIR patterns.
Definition at line 586 of file GIMatchTableExecutor.h.
|
protected |
Definition at line 615 of file GIMatchTableExecutor.h.
|
protected |
Definition at line 618 of file GIMatchTableExecutor.h.
|
protected |
Definition at line 617 of file GIMatchTableExecutor.h.
|
virtualdefault |
|
protecteddefault |
|
protected |
Execute a given matcher table and return true if the match was successful and false otherwise.
Definition at line 46 of file GIMatchTableExecutorImpl.h.
References llvm::MachineInstrBuilder::add(), assert(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::canReplaceReg(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingAllUsesOfReg(), llvm::GISelChangeObserver::changingInstr(), llvm::GIMatchTableExecutor::ExecInfoTy< PredicateBitset, ComplexMatcherMemFn, CustomRendererFn >::ComplexPredicates, llvm::constrainOperandRegClass(), llvm::constrainSelectedInstRegOperands(), CoverageInfo, llvm::GIMatchTableExecutor::ExecInfoTy< PredicateBitset, ComplexMatcherMemFn, CustomRendererFn >::CustomRenderers, llvm::dbgs(), DEBUG_WITH_TYPE, llvm::Default, llvm::drop_begin(), E, llvm::SmallVectorBase< Size_T >::empty(), llvm::ConstantInt::equalsInt(), llvm::GISelChangeObserver::erasingInstr(), fastDecodeULEB128(), llvm::GIMatchTableExecutor::ExecInfoTy< PredicateBitset, ComplexMatcherMemFn, CustomRendererFn >::FeatureBitsets, llvm::GISelChangeObserver::finishedChangingAllUsesOfReg(), llvm::IntegerType::get(), llvm::LLT::getAddressSpace(), llvm::MachineMemOperand::getAddrSpace(), llvm::MachineMemOperand::getAlign(), llvm::MachineOperand::getCImm(), llvm::Function::getContext(), llvm::MachineFunction::getDataLayout(), llvm::getDefIgnoringCopies(), llvm::MachineFunction::getFunction(), llvm::MachineOperand::getImm(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineOperand::getIntrinsicID(), llvm::MachineInstr::getMF(), llvm::MachineIRBuilder::getObserver(), llvm::DataLayout::getPointerSizeInBits(), llvm::MachineOperand::getPredicate(), llvm::MachineOperand::getReg(), llvm::RegisterBankInfo::getRegBank(), llvm::RegisterBankInfo::getRegBankFromRegClass(), llvm::MachineFunction::getRegInfo(), llvm::LLT::getScalarSizeInBits(), llvm::MachineMemOperand::getSize(), llvm::MachineMemOperand::getSizeInBits(), llvm::LLT::getSizeInBits(), llvm::getSrcRegIgnoringCopies(), llvm::LocationSize::getValue(), llvm::GICXXCustomAction_Invalid, llvm::GICXXPred_Invalid, llvm::GIM_CheckAPFloatImmPredicate, llvm::GIM_CheckAPIntImmPredicate, llvm::GIM_CheckAtomicOrdering, llvm::GIM_CheckAtomicOrderingOrStrongerThan, llvm::GIM_CheckAtomicOrderingWeakerThan, llvm::GIM_CheckCanReplaceReg, llvm::GIM_CheckCmpPredicate, llvm::GIM_CheckComplexPattern, llvm::GIM_CheckConstantInt, llvm::GIM_CheckConstantInt8, llvm::GIM_CheckCxxInsnPredicate, llvm::GIM_CheckFeatures, llvm::GIM_CheckHasNoUse, llvm::GIM_CheckHasOneUse, llvm::GIM_CheckI64ImmPredicate, llvm::GIM_CheckImmOperandPredicate, llvm::GIM_CheckIntrinsicID, llvm::GIM_CheckIsBuildVectorAllOnes, llvm::GIM_CheckIsBuildVectorAllZeros, llvm::GIM_CheckIsImm, llvm::GIM_CheckIsMBB, llvm::GIM_CheckIsSafeToFold, llvm::GIM_CheckIsSameOperand, llvm::GIM_CheckIsSameOperandIgnoreCopies, llvm::GIM_CheckLiteralInt, llvm::GIM_CheckMemoryAddressSpace, llvm::GIM_CheckMemoryAlignment, llvm::GIM_CheckMemorySizeEqualTo, llvm::GIM_CheckMemorySizeEqualToLLT, llvm::GIM_CheckMemorySizeGreaterThanLLT, llvm::GIM_CheckMemorySizeLessThanLLT, llvm::GIM_CheckNumOperands, llvm::GIM_CheckNumOperandsGE, llvm::GIM_CheckNumOperandsLE, llvm::GIM_CheckOpcode, llvm::GIM_CheckOpcodeIsEither, llvm::GIM_CheckPointerToAny, llvm::GIM_CheckRegBankForClass, llvm::GIM_CheckSimplePredicate, llvm::GIM_CheckType, llvm::GIM_MIFlags, llvm::GIM_MIFlagsNot, llvm::GIM_RecordInsn, llvm::GIM_RecordInsnIgnoreCopies, llvm::GIM_RecordNamedOperand, llvm::GIM_RecordRegType, llvm::GIM_Reject, llvm::GIM_RootCheckRegBankForClass, llvm::GIM_RootCheckType, llvm::GIM_SwitchOpcode, llvm::GIM_SwitchType, llvm::GIM_Try, llvm::GIR_AddCImm, llvm::GIR_AddImm, llvm::GIR_AddImm8, llvm::GIR_AddImplicitDef, llvm::GIR_AddImplicitUse, llvm::GIR_AddIntrinsicID, llvm::GIR_AddRegister, llvm::GIR_AddSimpleTempRegister, llvm::GIR_AddTempRegister, llvm::GIR_AddTempSubRegister, llvm::GIR_BuildConstant, llvm::GIR_BuildMI, llvm::GIR_BuildRootMI, llvm::GIR_ComplexRenderer, llvm::GIR_ComplexSubOperandRenderer, llvm::GIR_ComplexSubOperandSubRegRenderer, llvm::GIR_ConstrainOperandRC, llvm::GIR_ConstrainSelectedInstOperands, llvm::GIR_Copy, llvm::GIR_CopyConstantAsSImm, llvm::GIR_CopyFConstantAsFPImm, llvm::GIR_CopyMIFlags, llvm::GIR_CopyOrAddZeroReg, llvm::GIR_CopyRemaining, llvm::GIR_CopySubReg, llvm::GIR_Coverage, llvm::GIR_CustomOperandRenderer, llvm::GIR_CustomRenderer, llvm::GIR_Done, llvm::GIR_DoneWithCustomAction, llvm::GIR_EraseFromParent, llvm::GIR_EraseRootFromParent_Done, llvm::GIR_MakeTempReg, llvm::GIR_MergeMemOperands, llvm::GIR_MutateOpcode, llvm::GIR_ReplaceReg, llvm::GIR_ReplaceRegWithTempReg, llvm::GIR_RootConstrainSelectedInstOperands, llvm::GIR_RootToRootCopy, llvm::GIR_SetImplicitDefDead, llvm::GIR_SetMIFlags, llvm::GIR_UnsetMIFlags, I, Idx, llvm::RegState::Implicit, llvm::isAtLeastOrStrongerThan(), llvm::isBuildVectorAllOnes(), llvm::isBuildVectorAllZeros(), llvm::MachineOperand::isCImm(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isIntrinsicID(), llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownGE(), llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownLE(), isObviouslySafeToFold(), isOperandImmEqual(), llvm::Register::isPhysical(), llvm::LLT::isPointer(), llvm::MachineOperand::isPredicate(), llvm::MachineOperand::isReg(), llvm::isStrongerThan(), llvm_unreachable, MF, MI, llvm::MinAlign(), llvm::GIMatchTableExecutor::MatcherState::MIs, MRI, llvm::MachineInstr::NoFPExcept, llvm::MachineInstr::operands(), llvm::SmallVectorImpl< T >::pop_back_val(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::GIMatchTableExecutor::MatcherState::RecordedOperands, llvm::GIMatchTableExecutor::MatcherState::RecordedTypes, llvm::GIMatchTableExecutor::MatcherState::Renderers, llvm::SmallVectorImpl< T >::resize(), runCustomAction(), llvm::CodeGenCoverage::setCovered(), llvm::MachineIRBuilder::setInsertPt(), llvm::SignExtend64(), llvm::SmallVectorBase< Size_T >::size(), Size, SubReg, Success, llvm::GIMatchTableExecutor::MatcherState::TempRegisters, testImmPredicate_APFloat(), testImmPredicate_APInt(), testImmPredicate_I64(), testMIPredicate_MI(), testSimplePredicate(), TII, TRI, llvm::GIMatchTableExecutor::ExecInfoTy< PredicateBitset, ComplexMatcherMemFn, CustomRendererFn >::TypeIDMap, and llvm::GIMatchTableExecutor::ExecInfoTy< PredicateBitset, ComplexMatcherMemFn, CustomRendererFn >::TypeObjects.
|
inlinestatic |
Definition at line 752 of file GIMatchTableExecutor.h.
References LLVM_UNLIKELY.
Referenced by executeMatchTable().
Definition at line 687 of file GIMatchTableExecutor.h.
References llvm_unreachable.
|
inlinestaticprotected |
Definition at line 739 of file GIMatchTableExecutor.h.
References llvm::drop_begin(), MI, and Operands.
|
protected |
Return true if the specified operand is a G_PTR_ADD with a G_CONSTANT on the right-hand side.
GlobalISel's separation of pointer and integer types means that we don't need to worry about G_OR with equivalent semantics.
Definition at line 45 of file GIMatchTableExecutor.cpp.
References llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), MRI, and RHS.
|
protected |
Return true if MI can obviously be folded into IntoMI.
MI and IntoMI do not need to be in the same basic blocks, but MI must preceed IntoMI.
Definition at line 62 of file GIMatchTableExecutor.cpp.
References llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineInstr::getParent(), llvm::instructionsWithoutDebug(), and MI.
Referenced by executeMatchTable().
|
protected |
Definition at line 29 of file GIMatchTableExecutor.cpp.
References llvm::getIConstantSplatVal(), llvm::getIConstantVRegValWithLookThrough(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isReg(), MRI, and llvm::Splat.
Referenced by executeMatchTable().
|
inlinestaticprotected |
Definition at line 733 of file GIMatchTableExecutor.h.
|
inlineprotectedvirtual |
Definition at line 713 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
|
pure virtual |
Referenced by setupMF().
|
inlinevirtual |
Setup per-MF executor state.
Reimplemented in llvm::AMDGPUInstructionSelector.
Definition at line 601 of file GIMatchTableExecutor.h.
References BFI, CoverageInfo, CurMBB, KB, MF, PSI, and setupGeneratedPerFunctionState().
Referenced by llvm::Combiner::combineMachineInstrs(), llvm::InstructionSelect::selectMachineFunction(), and llvm::AMDGPUInstructionSelector::setupMF().
|
inlineprotected |
Definition at line 637 of file GIMatchTableExecutor.h.
References BFI, CurMBB, F, llvm::MachineBasicBlock::getBasicBlock(), llvm::MachineFunction::getFunction(), MF, PSI, and llvm::shouldOptimizeForSize().
|
inlineprotectedvirtual |
Definition at line 699 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
|
inlineprotectedvirtual |
Definition at line 695 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
|
inlineprotectedvirtual |
Definition at line 691 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
|
inlineprotectedvirtual |
Definition at line 703 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
|
inlineprotectedvirtual |
Definition at line 709 of file GIMatchTableExecutor.h.
References llvm_unreachable.
Referenced by executeMatchTable().
BlockFrequencyInfo* llvm::GIMatchTableExecutor::BFI = nullptr |
Definition at line 594 of file GIMatchTableExecutor.h.
Referenced by llvm::AMDGPUInstructionSelector::setupMF(), setupMF(), and shouldOptForSize().
CodeGenCoverage* llvm::GIMatchTableExecutor::CoverageInfo = nullptr |
Definition at line 590 of file GIMatchTableExecutor.h.
Referenced by executeMatchTable(), llvm::AMDGPUInstructionSelector::select(), llvm::AMDGPUInstructionSelector::setupMF(), and setupMF().
MachineBasicBlock* llvm::GIMatchTableExecutor::CurMBB = nullptr |
Definition at line 596 of file GIMatchTableExecutor.h.
Referenced by llvm::InstructionSelect::selectMachineFunction(), setupMF(), and shouldOptForSize().
GISelKnownBits* llvm::GIMatchTableExecutor::KB = nullptr |
Definition at line 591 of file GIMatchTableExecutor.h.
Referenced by llvm::AMDGPUInstructionSelector::setupMF(), and setupMF().
MachineFunction* llvm::GIMatchTableExecutor::MF = nullptr |
Definition at line 592 of file GIMatchTableExecutor.h.
Referenced by executeMatchTable(), llvm::InstructionSelect::selectInstr(), llvm::AMDGPUInstructionSelector::setupMF(), setupMF(), and shouldOptForSize().
ProfileSummaryInfo* llvm::GIMatchTableExecutor::PSI = nullptr |
Definition at line 593 of file GIMatchTableExecutor.h.
Referenced by llvm::AMDGPUInstructionSelector::setupMF(), setupMF(), and shouldOptForSize().