LLVM: lib/Transforms/Scalar/LoopTermFold.cpp File Reference (original) (raw)

Go to the source code of this file.

Functions
STATISTIC (NumTermFold, "Number of terminating condition fold recognized and performed")
static std::optional< std::tuple< PHINode *, PHINode *, const SCEV *, bool > > canFoldTermCondOfLoop (Loop *L, ScalarEvolution &SE, DominatorTree &DT, const LoopInfo &LI, const TargetTransformInfo &TTI)
static bool RunTermFold (Loop *L, ScalarEvolution &SE, DominatorTree &DT, LoopInfo &LI, const TargetTransformInfo &TTI, TargetLibraryInfo &TLI, MemorySSA *MSSA)
INITIALIZE_PASS_BEGIN (LoopTermFold, "loop-term-fold", "Loop Terminator Folding", false, false) INITIALIZE_PASS_END(LoopTermFold
Variables
loop term fold
loop term Loop Terminator Folding
loop term Loop Terminator false

DEBUG_TYPE

#define DEBUG_TYPE "loop-term-fold"

canFoldTermCondOfLoop()

Definition at line 52 of file LoopTermFold.cpp.

References llvm::dbgs(), DL, llvm::ScalarEvolution::getBackedgeTakenCount(), llvm::BranchInst::getCondition(), llvm::getLoopEstimatedTripCount(), llvm::User::getOperand(), llvm::ilist_detail::node_parent_access< NodeTy, ParentTy >::getParent(), llvm::SCEVAddRecExpr::getPostIncExpr(), llvm::ScalarEvolution::getSCEV(), llvm::ScalarEvolution::getSmallConstantMaxTripCount(), llvm::SCEVAddRecExpr::getStepRecurrence(), llvm::BasicBlock::getTerminator(), llvm::ScalarEvolution::hasLoopInvariantBackedgeTakenCount(), llvm::SCEVNAryExpr::hasNoSelfWrap(), llvm::Instruction::hasPoisonGeneratingFlags(), llvm::SCEVAddRecExpr::isAffine(), llvm::isAlmostDeadIV(), llvm::SCEVExpander::isHighCostExpansion(), llvm::ScalarEvolution::isKnownNonZero(), llvm::SCEVExpander::isSafeToExpand(), llvm::ScalarEvolution::isSCEVable(), llvm::BranchInst::isUnconditional(), LHS, LLVM_DEBUG, llvm::matchSimpleRecurrence(), llvm::mustExecuteUBIfPoisonOnPathTo(), PostInc, RHS, and llvm::SCEVCheapExpansionBudget.

Referenced by RunTermFold().

INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( LoopTermFold ,
"loop-term-fold" ,
"Loop Terminator Folding" ,
false ,
false
)

RunTermFold()

Definition at line 230 of file LoopTermFold.cpp.

References assert(), canFoldTermCondOfLoop(), llvm::SCEVExpander::clear(), llvm::IRBuilderBase::CreateICmp(), llvm::dbgs(), llvm::DeleteDeadPHIs(), DL, llvm::Instruction::eraseFromParent(), llvm::SCEVExpander::expandCodeFor(), llvm::BranchInst::getCondition(), llvm::BranchInst::getSuccessor(), llvm::BasicBlock::getTerminator(), llvm::CmpInst::ICMP_EQ, llvm::SCEVExpander::isSafeToExpand(), LLVM_DEBUG, llvm::BranchInst::setCondition(), and llvm::BranchInst::swapSuccessors().

Referenced by llvm::LoopTermFoldPass::run().

STATISTIC()

STATISTIC ( NumTermFold ,
"Number of terminating condition fold recognized and performed"
)

false

loop term Loop Terminator false

fold

Folding

loop term Loop Terminator Folding