Lines Matching defs:CurLoop
51 void SimpleLoopSafetyInfo::computeLoopSafetyInfo(const Loop *CurLoop) {
52 assert(CurLoop != nullptr && "CurLoop can't be null");
53 BasicBlock *Header = CurLoop->getHeader();
60 assert(Header == *CurLoop->getBlocks().begin() &&
62 for (const BasicBlock *BB : llvm::drop_begin(CurLoop->blocks())) {
68 computeBlockColors(CurLoop);
79 void ICFLoopSafetyInfo::computeLoopSafetyInfo(const Loop *CurLoop) {
80 assert(CurLoop != nullptr && "CurLoop can't be null");
85 for (const auto &BB : CurLoop->blocks())
90 computeBlockColors(CurLoop);
104 void LoopSafetyInfo::computeBlockColors(const Loop *CurLoop) {
107 Function *Fn = CurLoop->getHeader()->getParent();
119 const Loop *CurLoop) {
124 assert(CurLoop->contains(CondExitBlock) && "meaning of exit block");
140 if (!LHS || LHS->getParent() != CurLoop->getHeader())
143 auto *IVStart = LHS->getIncomingValueForBlock(CurLoop->getLoopPreheader());
157 /// Collect all blocks from \p CurLoop which lie on all possible paths from
158 /// the header of \p CurLoop (inclusive) to BB (exclusive) into the set
161 const Loop *CurLoop, const BasicBlock *BB,
164 assert(CurLoop->contains(BB) && "Should only be called for loop blocks!");
165 if (BB == CurLoop->getHeader())
174 assert(CurLoop->contains(Pred) && "Should only reach loop blocks!");
176 if (Pred == CurLoop->getHeader())
178 // TODO: If BB lies in an inner loop of CurLoop, this will traverse over all
190 bool LoopSafetyInfo::allLoopPathsLeadToBlock(const Loop *CurLoop,
193 assert(CurLoop->contains(BB) && "Should only be called for loop blocks!");
196 if (BB == CurLoop->getHeader())
202 collectTransitivePredecessors(CurLoop, BB, Predecessors);
207 for (const BasicBlock *Pred : predecessors(CurLoop->getHeader()))
247 if (CurLoop->contains(Succ) ||
248 !CanProveNotTakenFirstIteration(Succ, DT, CurLoop))
260 const Loop *CurLoop) const {
264 if (Inst.getParent() == CurLoop->getHeader())
274 return allLoopPathsLeadToBlock(CurLoop, Inst.getParent(), DT);
279 const Loop *CurLoop) const {
281 allLoopPathsLeadToBlock(CurLoop, Inst.getParent(), DT);
285 const Loop *CurLoop) const {
286 assert(CurLoop->contains(BB) && "Should only be called for loop blocks!");
289 if (BB == CurLoop->getHeader())
295 collectTransitivePredecessors(CurLoop, BB, Predecessors);
305 const Loop *CurLoop) const {
307 assert(CurLoop->contains(BB) && "Should only be called for loop blocks!");
309 doesNotWriteMemoryBefore(BB, CurLoop);