LLVM 24.0.0git
SIFoldOperands.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "si-fold-operands"

Functions

 INITIALIZE_PASS_BEGIN (SIFoldOperandsLegacy, DEBUG_TYPE, "SI Fold Operands", false, false) INITIALIZE_PASS_END(SIFoldOperandsLegacy
static const TargetRegisterClassgetRegOpRC (const MachineRegisterInfo &MRI, const TargetRegisterInfo &TRI, const MachineOperand &MO)
static unsigned macToMad (unsigned Opc)
static void appendFoldCandidate (SmallVectorImpl< FoldCandidate > &FoldList, FoldCandidate &&Entry)
static void appendFoldCandidate (SmallVectorImpl< FoldCandidate > &FoldList, MachineInstr *MI, unsigned OpNo, const FoldableDef &FoldOp, bool Commuted=false, int ShrinkOp=-1)
static bool isPKF32InstrReplicatesLower32BitsOfScalarOperand (const GCNSubtarget *ST, MachineInstr *MI, unsigned OpNo)
static bool checkImmOpForPKF32InstrReplicatesLower32BitsOfScalarOperand (const FoldableDef &OpToFold)
static bool loopModifiesExec (const MachineLoop &L, const SIRegisterInfo &TRI)
static MachineOperandlookUpCopyChain (const SIInstrInfo &TII, const MachineRegisterInfo &MRI, Register SrcReg)
static bool evalBinaryInstruction (unsigned Opcode, int32_t &Result, uint32_t LHS, uint32_t RHS)
static unsigned getMovOpc (bool IsScalar)
static int getOModValue (unsigned Opc, int64_t Val)
static bool isAGPRCopy (const SIRegisterInfo &TRI, const MachineRegisterInfo &MRI, const MachineInstr &Copy, Register &OutReg, unsigned &OutSubReg)
 Checks whether Copy is a AGPR -> VGPR copy.

Variables

 DEBUG_TYPE
SI Fold Operands
SI Fold false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "si-fold-operands"

Definition at line 26 of file SIFoldOperands.cpp.

Function Documentation

◆ appendFoldCandidate() [1/2]

void appendFoldCandidate ( SmallVectorImpl< FoldCandidate > & FoldList,
FoldCandidate && Entry )
static

◆ appendFoldCandidate() [2/2]

void appendFoldCandidate ( SmallVectorImpl< FoldCandidate > & FoldList,
MachineInstr * MI,
unsigned OpNo,
const FoldableDef & FoldOp,
bool Commuted = false,
int ShrinkOp = -1 )
static

Definition at line 810 of file SIFoldOperands.cpp.

References appendFoldCandidate(), and MI.

◆ checkImmOpForPKF32InstrReplicatesLower32BitsOfScalarOperand()

bool checkImmOpForPKF32InstrReplicatesLower32BitsOfScalarOperand ( const FoldableDef & OpToFold)
static

Definition at line 832 of file SIFoldOperands.cpp.

References assert(), llvm::Hi, llvm::Hi_32(), llvm::Lo, and llvm::Lo_32().

◆ evalBinaryInstruction()

bool evalBinaryInstruction ( unsigned Opcode,
int32_t & Result,
uint32_t LHS,
uint32_t RHS )
static

Definition at line 1601 of file SIFoldOperands.cpp.

References LHS, and RHS.

◆ getMovOpc()

unsigned getMovOpc ( bool IsScalar)
static

Definition at line 1675 of file SIFoldOperands.cpp.

◆ getOModValue()

int getOModValue ( unsigned Opc,
int64_t Val )
static

◆ getRegOpRC()

Definition at line 317 of file SIFoldOperands.cpp.

References const, getRegOpRC(), if(), and TRI.

Referenced by getRegOpRC().

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( SIFoldOperandsLegacy ,
DEBUG_TYPE ,
"SI Fold Operands" ,
false ,
false  )

◆ isAGPRCopy()

bool isAGPRCopy ( const SIRegisterInfo & TRI,
const MachineRegisterInfo & MRI,
const MachineInstr & Copy,
Register & OutReg,
unsigned & OutSubReg )
static

Checks whether Copy is a AGPR -> VGPR copy.

Returns true on success and stores the AGPR register in OutReg and the subreg in OutSubReg

Definition at line 2554 of file SIFoldOperands.cpp.

References assert(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), llvm::MachineOperand::getSubReg(), llvm::MachineRegisterInfo::getVRegDef(), llvm::MachineInstr::isCopy(), llvm::Register::isVirtual(), and TRI.

◆ isPKF32InstrReplicatesLower32BitsOfScalarOperand()

bool isPKF32InstrReplicatesLower32BitsOfScalarOperand ( const GCNSubtarget * ST,
MachineInstr * MI,
unsigned OpNo )
static

◆ lookUpCopyChain()

◆ loopModifiesExec()

bool loopModifiesExec ( const MachineLoop & L,
const SIRegisterInfo & TRI )
static

Definition at line 1012 of file SIFoldOperands.cpp.

References MBB, MI, and TRI.

◆ macToMad()

unsigned macToMad ( unsigned Opc)
static

Definition at line 328 of file SIFoldOperands.cpp.

References Opc.

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 310 of file SIFoldOperands.cpp.

◆ false

SI Fold false

Definition at line 310 of file SIFoldOperands.cpp.

◆ Operands

SI Fold Operands

Definition at line 310 of file SIFoldOperands.cpp.

Referenced by AArch64MnemonicSpellCheck(), llvm::logicalview::LVSymbol::addLocationOperands(), llvm::AMDGPURegisterBankInfo::addMappingFromTable(), llvm::logicalview::LVLocation::addObject(), llvm::logicalview::LVLocationSymbol::addObject(), addOptionalImmOperand(), addSrcModifiersAndSrc(), llvm::RISCVDAGToDAGISel::addVectorLoadStoreOperands(), alignReassociatedOperandsByKey(), analyzeLoopUnrollCost(), llvm::CombinerHelper::applyCombineUnmergeMergeToPlainValues(), applyMnemonicAliases(), applyMnemonicAliases(), applyMnemonicAliases(), llvm::R600InstrInfo::buildSlotOfVectorInstruction(), canConvertToFMA(), llvm::MCTargetAsmParser::checkEarlyTargetMatchPredicate(), llvm::SelectionDAGISel::CheckNodePredicateWithOperands(), combinePackingMovIntoStore(), llvm::VPWidenIntrinsicRecipe::computeCallCost(), llvm::VPReplicateRecipe::computeScalarType(), llvm::computeScalarTypeForInstruction(), llvm::ConstantExprKeyType::ConstantExprKeyType(), llvm::ConstantFoldCall(), llvm::MCTargetAsmParser::convertToMapAndConstraints(), llvm::VPBuilder::createNaryOp(), llvm::VPBuilder::createNaryOp(), llvm::VPBuilder::createNaryOp(), llvm::VPBuilder::createNaryOp(), llvm::logicalview::LVReader::createOperation(), llvm::VPBuilder::createOverflowingOp(), llvm::VPBuilder::createScalarIntrinsic(), llvm::VPBuilder::createSingleScalarOp(), CSKYMnemonicSpellCheck(), llvm::SPIRVAuxDataHandler::emitAuxData(), emitLibCall(), llvm::sandboxir::EraseFromParent::EraseFromParent(), EvaluateExpression(), findCCOutInd(), findCondCodeInd(), llvm::InstCombinerImpl::foldAllocaCmp(), llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getAddRecExpr(), llvm::ScalarEvolution::getAddRecExpr(), getCalledFnOperandIndex(), getCalledFunction(), llvm::AArch64TTIImpl::getCastInstrCost(), llvm::BasicTTIImplBase< BasicTTIImpl >::getGEPCost(), llvm::TargetTransformInfo::getGEPCost(), llvm::TargetTransformInfoImplBase::getGEPCost(), llvm::TargetTransformInfoImplCRTPBase< T >::getGEPCost(), llvm::getInlineSpirvType(), llvm::HexagonTTIImpl::getInstructionCost(), llvm::LoopVectorizationCostModel::getInstructionCost(), llvm::NVPTXTTIImpl::getInstructionCost(), llvm::PPCTTIImpl::getInstructionCost(), llvm::TargetTransformInfo::getInstructionCost(), llvm::TargetTransformInfo::getInstructionCost(), llvm::TargetTransformInfoImplBase::getInstructionCost(), llvm::TargetTransformInfoImplCRTPBase< T >::getInstructionCost(), getMnemonicOpsEndInd(), llvm::ScalarEvolution::getMulExpr(), getNMDOps(), llvm::SCEVAddRecExpr::getNumIterationsInRange(), llvm::sandboxir::getOperand(), llvm::SPIRVGlobalRegistry::getOrCreateUnknownType(), getPrefixes(), llvm::logicalview::LVCodeViewReader::getRegisterName(), llvm::logicalview::LVDWARFReader::getRegisterName(), llvm::logicalview::LVIRReader::getRegisterName(), llvm::logicalview::LVReader::getRegisterName(), getRegListInd(), getRelaxedOpcode(), llvm::GIMatchTableExecutor::getRemainingOperands(), llvm::VPCostContext::getScalarizationOverhead(), llvm::ScalarEvolution::getSignExtendExprImpl(), slpvectorizer::BoUpSLP::getSpillCost(), getSubtargetFeatureName(), getSubtargetFeatureName(), llvm::ScalarEvolution::getTruncateExpr(), llvm::ScalarEvolution::getUDivExpr(), llvm::AArch64TTIImpl::getUnrollingPreferences(), llvm::ARMTTIImpl::getUnrollingPreferences(), llvm::RISCVTTIImpl::getUnrollingPreferences(), getVCIXISDNodeVOID(), getVCIXISDNodeWCHAIN(), llvm::ScalarEvolution::getZeroExtendExprImpl(), llvm::PPCTTIImpl::isHardwareLoopProfitable(), isImplicitOperandIn(), isInvalidVOPDY(), isLoopSizeWithinBudget(), IsMemoryAssignmentError(), llvm::WebAssemblyMCInstLower::lower(), lowerBUILD_VECTOR(), llvm::RISCVTargetLowering::lowerDeinterleaveIntrinsicToLoad(), llvm::RISCVTargetLowering::lowerInterleaveIntrinsicToStore(), lowerLaneOp(), lowerShuffleViaVRegSplitting(), lowerVectorIntrinsicScalars(), lowerWaveShuffle(), llvm::VPlanPatternMatch::m_GetElementPtr(), llvm::MCTargetAsmParser::matchAndEmitInstruction(), llvm::CombinerHelper::matchCombineUnmergeMergeToPlainValues(), MatchRegisterAltName(), MatchRegisterName(), MaybePredicatedInst(), llvm::MCAsmBackend::mayNeedRelaxation(), llvm::RISCVAsmBackend::mayNeedRelaxation(), operandsContainWide(), llvm::DWARFDebugLine::LineTable::parse(), parseCC(), llvm::MCTargetAsmParser::parseInstruction(), llvm::MCTargetAsmParser::parseInstruction(), parseRD(), llvm::prettyPrintBaseTypeRef(), llvm::prettyPrintRegisterOp(), previousEqual(), previousIsLoop(), processVCIXOperands(), promoteVCIXScalar(), RefineErrorLoc(), RefineErrorLoc(), removeCCOut(), removeCondCode(), RemoveDeadConstant(), removeVPTCondCode(), llvm::ConstantUniqueMap< ConstantArray >::replaceOperandsInPlace(), llvm::sandboxir::EraseFromParent::revert(), llvm::ScalarEvolution::LoopGuards::rewrite(), llvm::sandboxir::LoadStoreVec::runOnRegion(), scanAssociativeOperands(), llvm::RISCVDAGToDAGISel::Select(), llvm::SelectionDAGISel::SelectCodeCommon(), llvm::RISCVDAGToDAGISel::selectSF_VC_X_SE(), llvm::RISCVDAGToDAGISel::selectVLSEG(), llvm::RISCVDAGToDAGISel::selectVLSEGFF(), llvm::RISCVDAGToDAGISel::selectVLXSEG(), llvm::RISCVDAGToDAGISel::selectVSSEG(), llvm::RISCVDAGToDAGISel::selectVSXSEG(), STATISTIC(), translateLoopMetadata(), llvm::vputils::tryToFoldLiveIns(), llvm::WebAssemblyAsmTypeCheck::typeCheck(), llvm::SelectionDAG::UnrollVectorOp(), llvm::User::User(), validateMemOp(), llvm::SLPVectorizerPass::vectorizeNonVectorizableInsts(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitAddExpr(), SCEVCastSinkingRewriter::visitAddExpr(), llvm::SCEVLoopAddRecRewriter::visitAddRecExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitAddRecExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitMulExpr(), SCEVCastSinkingRewriter::visitMulExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitSequentialUMinExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitSMaxExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitSMinExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitUMaxExpr(), llvm::SCEVRewriteVisitor< SCEVCastSinkingRewriter >::visitUMinExpr(), slpvectorizer::BoUpSLP::VLOperands::VLOperands(), slpvectorizer::BoUpSLP::VLOperands::VLOperands(), llvm::VPBlendRecipe::VPBlendRecipe(), llvm::VPInstruction::VPInstruction(), llvm::VPInstructionWithType::VPInstructionWithType(), llvm::VPPhi::VPPhi(), llvm::VPReductionRecipe::VPReductionRecipe(), llvm::VPReplicateRecipe::VPReplicateRecipe(), llvm::VPWidenGEPRecipe::VPWidenGEPRecipe(), llvm::VPWidenRecipe::VPWidenRecipe(), llvm::VPWidenRecipe::VPWidenRecipe(), llvm::logicalview::LVLocationSymbol::~LVLocationSymbol(), llvm::RISCVAsmBackend::~RISCVAsmBackend(), and llvm::VPReplicateRecipe::~VPReplicateRecipe().