Home
last modified time | relevance | path

Searched refs:Latch (Results 1 – 25 of 42) sorted by relevance

12

/freebsd/contrib/llvm-project/llvm/lib/Transforms/Utils/
H A DMatrixUtils.cpp32 BasicBlock *Latch = BasicBlock::Create(Header->getContext(), Name + ".latch", in CreateLoop() local
37 BranchInst::Create(Latch, Body); in CreateLoop()
42 B.SetInsertPoint(Latch); in CreateLoop()
45 BranchInst::Create(Header, Exit, Cond, Latch); in CreateLoop()
46 IV->addIncoming(Inc, Latch); in CreateLoop()
54 {DominatorTree::Insert, Body, Latch}, in CreateLoop()
55 {DominatorTree::Insert, Latch, Header}, in CreateLoop()
56 {DominatorTree::Insert, Latch, Exit}, in CreateLoop()
62 L->addBasicBlockToLoop(Latch, LI); in CreateLoop()
86 ColumnLoop.Latch = ColBody->getSingleSuccessor(); in CreateTiledLoops()
[all …]
H A DLoopUnrollRuntime.cpp100 BasicBlock *Latch = L->getLoopLatch(); in ConnectProlog() local
101 assert(Latch && "Loop must have a latch"); in ConnectProlog()
102 BasicBlock *PrologLatch = cast<BasicBlock>(VMap[Latch]); in ConnectProlog()
109 for (BasicBlock *Succ : successors(Latch)) { in ConnectProlog()
131 Value *V = PN.getIncomingValueForBlock(Latch); in ConnectProlog()
183 if (hasBranchWeightMD(*Latch->getTerminator())) { in ConnectProlog()
216 BasicBlock *Latch = L->getLoopLatch(); in ConnectEpilog() local
217 assert(Latch && "Loop must have a latch"); in ConnectEpilog()
218 BasicBlock *EpilogLatch = cast<BasicBlock>(VMap[Latch]); in ConnectEpilog()
258 Value *V = PN.getIncomingValueForBlock(Latch); in ConnectEpilog()
[all …]
H A DLoopPeel.cpp301 BasicBlock *Latch = L.getLoopLatch(); in peelToTurnInvariantLoadsDerefencebale() local
317 if (DT.dominates(BB, Latch) && L.isLoopInvariant(Ptr) && in peelToTurnInvariantLoadsDerefencebale()
342 BasicBlock *Latch = L.getLoopLatch(); in canPeelLastIteration() local
348 return Latch && Latch == L.getExitingBlock() && in canPeelLastIteration()
349 match(Latch->getTerminator(), in canPeelLastIteration()
583 BasicBlock *Latch = L->getLoopLatch(); in violatesLegacyMultiExitLoopCheck() local
584 if (!Latch) in violatesLegacyMultiExitLoopCheck()
587 BranchInst *LatchBR = dyn_cast<BranchInst>(Latch->getTerminator()); in violatesLegacyMultiExitLoopCheck()
588 if (!LatchBR || LatchBR->getNumSuccessors() != 2 || !L->isLoopExiting(Latch)) in violatesLegacyMultiExitLoopCheck()
843 BasicBlock *Latch = L->getLoopLatch(); in cloneLoopBlocks() local
[all …]
H A DLoopRotationUtils.cpp239 BasicBlock *Latch = L->getLoopLatch(); in canRotateDeoptimizingLatchExit() local
240 assert(Latch && "need latch"); in canRotateDeoptimizingLatchExit()
241 BranchInst *BI = dyn_cast<BranchInst>(Latch->getTerminator()); in canRotateDeoptimizingLatchExit()
992 BasicBlock *Latch = L->getLoopLatch(); in simplifyLoopLatch() local
993 if (!Latch || Latch->hasAddressTaken()) in simplifyLoopLatch()
996 BranchInst *Jmp = dyn_cast<BranchInst>(Latch->getTerminator()); in simplifyLoopLatch()
1000 BasicBlock *LastExit = Latch->getSinglePredecessor(); in simplifyLoopLatch()
1008 if (!shouldSpeculateInstrs(Latch->begin(), Jmp->getIterator(), L)) in simplifyLoopLatch()
1011 LLVM_DEBUG(dbgs() << "Folding loop latch " << Latch->getName() << " into " in simplifyLoopLatch()
1015 MergeBlockIntoPredecessor(Latch, &DTU, LI, MSSAU, nullptr, in simplifyLoopLatch()
H A DLoopConstrainer.cpp133 BasicBlock *Latch = L.getLoopLatch(); in parseLoopStructure() local
134 assert(Latch && "Simplified loops only have one latch!"); in parseLoopStructure()
136 if (Latch->getTerminator()->getMetadata(ClonedLoopTag)) { in parseLoopStructure()
141 if (!L.isLoopExiting(Latch)) { in parseLoopStructure()
153 BranchInst *LatchBr = dyn_cast<BranchInst>(Latch->getTerminator()); in parseLoopStructure()
415 Result.Latch = Latch; in parseLoopStructure()
595 BasicBlock *BBInsertLocation = LS.Latch->getNextNode(); in changeIterationSpaceEnd()
656 NewPHI->addIncoming(PN.getIncomingValueForBlock(LS.Latch), in changeIterationSpaceEnd()
668 LS.LatchExit->replacePhiUsesWith(LS.Latch, RRI.ExitSelector); in changeIterationSpaceEnd()
H A DLoopUnrollAndJam.cpp138 static bool processHeaderPhiOperands(BasicBlock *Header, BasicBlock *Latch, in processHeaderPhiOperands() argument
156 Value *V = Phi.getIncomingValueForBlock(Latch); in processHeaderPhiOperands()
167 BasicBlock *Latch, in moveHeaderPhiOperandsToForeBlocks() argument
172 processHeaderPhiOperands(Header, Latch, AftBlocks, in moveHeaderPhiOperandsToForeBlocks()
966 BasicBlock *Latch = L->getLoopLatch(); in isSafeToUnrollAndJam() local
970 Header, Latch, AftBlocks, [&AftBlocks, &SubLoop](Instruction *I) { in isSafeToUnrollAndJam()
H A DLoopUtils.cpp713 auto *Latch = L->getLoopLatch(); in breakLoopBackedge() local
714 assert(Latch && "multiple latches not yet supported"); in breakLoopBackedge()
728 if (auto *BI = dyn_cast<BranchInst>(Latch->getTerminator())) { in breakLoopBackedge()
738 if (L->isLoopExiting(Latch)) { in breakLoopBackedge()
747 Header->removePredecessor(Latch, true); in breakLoopBackedge()
757 DTU.applyUpdates({{DominatorTree::Delete, Latch, Header}}); in breakLoopBackedge()
759 MSSAU->applyUpdates({{DominatorTree::Delete, Latch, Header}}, DT); in breakLoopBackedge()
767 auto *BackedgeBB = SplitEdge(Latch, Header, &DT, &LI, MSSAU.get()); in breakLoopBackedge()
792 BasicBlock *Latch = L->getLoopLatch(); in getExpectedExitLoopLatchBranch() local
793 if (!Latch) in getExpectedExitLoopLatchBranch()
[all …]
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Scalar/
H A DLoopFuse.cpp158 BasicBlock *Latch; member
189 Latch(L->getLoopLatch()), L(L), Valid(true), in FusionCandidate()
234 return Preheader && Header && ExitingBlock && ExitBlock && Latch && L && in isValid()
247 assert(Latch == L->getLoopLatch() && "Latch is out of sync"); in verify()
269 Latch = L->getLoopLatch(); in updateAfterPeeling()
307 << "\tLatch: " << (Latch ? Latch->getName() : "nullptr") << "\n" in dump()
328 if (!Latch) in isEligibleForFusion()
1522 BranchInst *FCLatchBranch = dyn_cast<BranchInst>(FC.Latch->getTerminator()); in simplifyLatchBranch()
1536 moveInstructionsToTheBeginning(*FC0.Latch, *FC1.Latch, DT, PDT, DI); in mergeLatch()
1537 if (BasicBlock *Succ = FC0.Latch->getUniqueSuccessor()) { in mergeLatch()
[all …]
H A DLoopUnrollAndJamPass.cpp365 BasicBlock *Latch = L->getLoopLatch(); in tryToUnrollAndJamLoop() local
367 unsigned OuterTripCount = SE.getSmallConstantTripCount(L, Latch); in tryToUnrollAndJamLoop()
368 unsigned OuterTripMultiple = SE.getSmallConstantTripMultiple(L, Latch); in tryToUnrollAndJamLoop()
H A DLoopDeletion.cpp223 BasicBlock *Latch = L->getLoopLatch(); in canProveExitOnFirstIteration() local
225 if (!Predecessor || !Latch) in canProveExitOnFirstIteration()
392 return !LiveEdges.count({ Latch, Header }); in canProveExitOnFirstIteration()
H A DLoopFlatten.cpp408 BasicBlock *Latch = L->getLoopLatch(); in findLoopComponents() local
409 if (L->getExitingBlock() != Latch) { in findLoopComponents()
424 bool ContinueOnTrue = L->contains(Latch->getTerminator()->getSuccessor(0)); in findLoopComponents()
440 BackBranch = cast<BranchInst>(Latch->getTerminator()); in findLoopComponents()
451 cast<BinaryOperator>(InductionPHI->getIncomingValueForBlock(Latch)); in findLoopComponents()
H A DLoopPredication.cpp1055 auto *Latch = L->getLoopLatch(); in predicateLoopExits() local
1056 if (!Latch) in predicateLoopExits()
1063 const SCEV *LatchEC = SE->getExitCount(L, Latch); in predicateLoopExits()
1160 assert(!Latch || DT->dominates(ExitingBB, Latch)); in predicateLoopExits()
/freebsd/contrib/llvm-project/llvm/lib/Target/Hexagon/
H A DHexagonHardwareLoops.cpp404 MachineBasicBlock *Latch = L->getLoopLatch(); in findInductionRegister() local
406 if (!Header || !Preheader || !Latch || !ExitingBlock) in findInductionRegister()
431 if (Phi->getOperand(i+1).getMBB() != Latch) in findInductionRegister()
602 MachineBasicBlock *Latch = L->getLoopLatch(); in getLoopTripCount() local
607 else if (MBB == Latch) in getLoopTripCount()
624 if (ExitingBlock != Latch && (TB == Latch || FB == Latch)) { in getLoopTripCount()
627 bool NotAnalyzed = TII->analyzeBranch(*Latch, LTB, LFB, LCond, false); in getLoopTripCount()
630 if (TB == Latch) in getLoopTripCount()
1630 MachineBasicBlock *Latch = L->getLoopLatch(); in fixupInductionVariable() local
1633 if (!(Header && Latch && ExitingBlock)) in fixupInductionVariable()
[all …]
/freebsd/contrib/llvm-project/llvm/include/llvm/Support/
H A DGenericLoopInfoImpl.h151 const BlockT *Latch = getLoopLatch(); in getUniqueNonLatchExitBlocks() local
152 assert(Latch && "Latch block must exists"); in getUniqueNonLatchExitBlocks()
154 [Latch](const BlockT *BB) { return BB != Latch; }); in getUniqueNonLatchExitBlocks()
164 BlockT *Latch = getLoopLatch(); in getUniqueLatchExitBlock() local
165 assert(Latch && "Latch block must exists"); in getUniqueLatchExitBlock()
170 return find_singleton<BlockT>(children<BlockT *>(Latch), IsExitBlock); in getUniqueLatchExitBlock()
259 BlockT *Latch = nullptr; in getLoopLatch() local
262 if (Latch) in getLoopLatch()
264 Latch = Pred; in getLoopLatch()
268 return Latch; in getLoopLatch()
H A DParallel.h60 class Latch {
66 explicit Latch(uint32_t Count = 0) : Count(Count) {} in Count()
67 ~Latch() { in ~Latch()
91 detail::Latch L;
/freebsd/contrib/llvm-project/llvm/lib/Target/X86/
H A DX86LowerAMXIntrinsics.cpp110 BasicBlock *Latch = in createLoop() local
115 BranchInst::Create(Latch, Body); in createLoop()
120 B.SetInsertPoint(Latch); in createLoop()
123 BranchInst::Create(Header, Exit, Cond, Latch); in createLoop()
124 IV->addIncoming(Inc, Latch); in createLoop()
132 {DominatorTree::Insert, Body, Latch}, in createLoop()
133 {DominatorTree::Insert, Latch, Header}, in createLoop()
134 {DominatorTree::Insert, Latch, Exit}, in createLoop()
140 L->addBasicBlockToLoop(Latch, *LI); in createLoop()
/freebsd/contrib/llvm-project/llvm/lib/CodeGen/
H A DMachineLoopInfo.cpp123 if (MachineBasicBlock *Latch = getLoopLatch()) { in findLoopControlBlock() local
124 if (isLoopExiting(Latch)) in findLoopControlBlock()
125 return Latch; in findLoopControlBlock()
/freebsd/contrib/llvm-project/llvm/lib/Analysis/
H A DIVDescriptors.cpp1125 auto *Latch = TheLoop->getLoopLatch(); in isFixedOrderRecurrence() local
1126 if (!Preheader || !Latch) in isFixedOrderRecurrence()
1131 Phi->getBasicBlockIndex(Latch) < 0) in isFixedOrderRecurrence()
1136 auto *Previous = dyn_cast<Instruction>(Phi->getIncomingValueForBlock(Latch)); in isFixedOrderRecurrence()
1148 Previous = dyn_cast<Instruction>(PrevPhi->getIncomingValueForBlock(Latch)); in isFixedOrderRecurrence()
1502 BasicBlock *Latch = L->getLoopLatch(); in getCastsForInductionPHI() local
1503 if (!Latch) in getCastsForInductionPHI()
1505 Value *Val = PN->getIncomingValueForBlock(Latch); in getCastsForInductionPHI()
1620 BasicBlock *Latch = AR->getLoop()->getLoopLatch(); in isInductionPHI() local
1621 if (!Latch) in isInductionPHI()
[all …]
H A DLoopNestAnalysis.cpp54 const BasicBlock *Latch = OuterLoop.getLoopLatch(); in getOuterLoopLatchCmp() local
55 assert(Latch && "Expecting a valid loop latch"); in getOuterLoopLatchCmp()
57 const BranchInst *BI = dyn_cast<BranchInst>(Latch->getTerminator()); in getOuterLoopLatchCmp()
H A DLoopInfo.cpp176 if (BasicBlock *Latch = getLoopLatch()) in getLatchCmpInst() local
177 if (BranchInst *BI = dyn_cast_or_null<BranchInst>(Latch->getTerminator())) in getLatchCmpInst()
234 BasicBlock *Latch = L.getLoopLatch(); in getCanonicalPredicate() local
235 assert(Latch && "Expecting valid latch"); in getCanonicalPredicate()
237 BranchInst *BI = dyn_cast_or_null<BranchInst>(Latch->getTerminator()); in getCanonicalPredicate()
313 BasicBlock *Latch = getLoopLatch(); in getInductionVariable() local
314 Value *StepInst = IndVar.getIncomingValueForBlock(Latch); in getInductionVariable()
/freebsd/contrib/llvm-project/llvm/include/llvm/Analysis/
H A DLoopInfo.h305 BasicBlock *Latch = getLoopLatch(); in isRotatedForm() local
306 return Latch && isLoopExiting(Latch); in isRotatedForm()
/freebsd/contrib/llvm-project/llvm/lib/Target/SPIRV/
H A DSPIRVUtils.cpp587 BasicBlock *Latch = L->getLoopLatch(); in CanBeVisited() local
588 assert(Latch); in CanBeVisited()
589 if (Latch == nullptr) in CanBeVisited()
593 if (BlockToOrder.count(Latch) == 0) in CanBeVisited()
613 BasicBlock *Latch = L ? L->getLoopLatch() : nullptr; in GetNodeRank() local
617 if (L == nullptr || L->contains(BB) || Latch == nullptr) { in GetNodeRank()
623 Iterator = BlockToOrder.find(Latch); in GetNodeRank()
/freebsd/contrib/llvm-project/llvm/include/llvm/Transforms/Utils/
H A DMatrixUtils.h51 BasicBlock *Latch = nullptr; member
/freebsd/contrib/llvm-project/llvm/lib/Target/ARM/
H A DMVETPAndVPTOptimisationsPass.cpp114 MachineBasicBlock *Latch = ML->getLoopLatch(); in findLoopComponents() local
115 if (!Header || !Latch) { in findLoopComponents()
122 for (auto &T : Latch->terminators()) { in findLoopComponents()
164 (LoopPhi->getOperand(2).getMBB() != Latch && in findLoopComponents()
165 LoopPhi->getOperand(4).getMBB() != Latch)) { in findLoopComponents()
171 Register StartReg = LoopPhi->getOperand(2).getMBB() == Latch in findLoopComponents()
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Vectorize/
H A DLoopVectorizationLegality.cpp355 BasicBlock *Latch = Lp->getLoopLatch(); in isUniformLoop() local
356 auto *LatchBr = dyn_cast<BranchInst>(Latch->getTerminator()); in isUniformLoop()
372 Value *IVUpdate = IV->getIncomingValueForBlock(Latch); in isUniformLoop()
1399 BasicBlock *Latch = TheLoop->getLoopLatch(); in blockNeedsPredication() local
1402 is_contained(predecessors(Latch), getUncountableEarlyExitingBlock()) && in blockNeedsPredication()
1404 return BB == Latch; in blockNeedsPredication()

12