| /llvm-project-15.0.7/llvm/lib/Transforms/Utils/ |
| H A D | MatrixUtils.cpp | 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() 90 RowLoop.Latch = RowBody->getSingleSuccessor(); in CreateTiledLoops() [all …]
|
| H A D | LoopUnrollRuntime.cpp | 89 BasicBlock *Latch = L->getLoopLatch(); in ConnectProlog() local 90 assert(Latch && "Loop must have a latch"); in ConnectProlog() 98 for (BasicBlock *Succ : successors(Latch)) { in ConnectProlog() 198 BasicBlock *Latch = L->getLoopLatch(); in ConnectEpilog() local 199 assert(Latch && "Loop must have a latch"); in ConnectEpilog() 276 NewPN->addIncoming(PN.getIncomingValueForBlock(Latch), Latch); in ConnectEpilog() 322 BasicBlock *Latch = L->getLoopLatch(); in CloneLoopBlocks() local 356 if (Latch == *BB) { in CloneLoopBlocks() 579 BasicBlock *Latch = L->getLoopLatch(); in UnrollRuntimeLoopRemainder() local 833 if (PredBB == Latch) in UnrollRuntimeLoopRemainder() [all …]
|
| H A D | LoopPeel.cpp | 86 const BasicBlock *Latch = L->getLoopLatch(); in canPeel() local 87 if (!L->isLoopExiting(Latch)) in canPeel() 91 if (!isa<BranchInst>(Latch->getTerminator())) in canPeel() 184 BasicBlock *Latch = L.getLoopLatch(); in peelToTurnInvariantLoadsDerefencebale() local 203 if (DT.dominates(BB, Latch) && L.isLoopInvariant(Ptr) && in peelToTurnInvariantLoadsDerefencebale() 336 BasicBlock *Latch = L->getLoopLatch(); in violatesLegacyMultiExitLoopCheck() local 337 if (!Latch) in violatesLegacyMultiExitLoopCheck() 583 BasicBlock *Latch = L->getLoopLatch(); in cloneLoopBlocks() local 643 BasicBlock *NewLatch = cast<BasicBlock>(VMap[Latch]); in cloneLoopBlocks() 750 BasicBlock *Latch = L->getLoopLatch(); in peelLoop() local [all …]
|
| H A D | LoopRotationUtils.cpp | 210 BasicBlock *Latch = L->getLoopLatch(); in canRotateDeoptimizingLatchExit() local 211 assert(Latch && "need latch"); in canRotateDeoptimizingLatchExit() 212 BranchInst *BI = dyn_cast<BranchInst>(Latch->getTerminator()); in canRotateDeoptimizingLatchExit() 766 BasicBlock *Latch = L->getLoopLatch(); in simplifyLoopLatch() local 767 if (!Latch || Latch->hasAddressTaken()) in simplifyLoopLatch() 770 BranchInst *Jmp = dyn_cast<BranchInst>(Latch->getTerminator()); in simplifyLoopLatch() 774 BasicBlock *LastExit = Latch->getSinglePredecessor(); in simplifyLoopLatch() 782 if (!shouldSpeculateInstrs(Latch->begin(), Jmp->getIterator(), L)) in simplifyLoopLatch() 785 LLVM_DEBUG(dbgs() << "Folding loop latch " << Latch->getName() << " into " in simplifyLoopLatch() 789 MergeBlockIntoPredecessor(Latch, &DTU, LI, MSSAU, nullptr, in simplifyLoopLatch()
|
| H A D | LoopUtils.cpp | 690 auto *Latch = L->getLoopLatch(); in breakLoopBackedge() local 691 assert(Latch && "multiple latches not yet supported"); in breakLoopBackedge() 704 if (auto *BI = dyn_cast<BranchInst>(Latch->getTerminator())) { in breakLoopBackedge() 714 if (L->isLoopExiting(Latch)) { in breakLoopBackedge() 723 Header->removePredecessor(Latch, true); in breakLoopBackedge() 733 DTU.applyUpdates({{DominatorTree::Delete, Latch, Header}}); in breakLoopBackedge() 735 MSSAU->applyUpdates({{DominatorTree::Delete, Latch, Header}}, DT); in breakLoopBackedge() 743 auto *BackedgeBB = SplitEdge(Latch, Header, &DT, &LI, MSSAU.get()); in breakLoopBackedge() 768 BasicBlock *Latch = L->getLoopLatch(); in getExpectedExitLoopLatchBranch() local 769 if (!Latch) in getExpectedExitLoopLatchBranch() [all …]
|
| H A D | LoopUnrollAndJam.cpp | 139 static bool processHeaderPhiOperands(BasicBlock *Header, BasicBlock *Latch, in processHeaderPhiOperands() argument 144 Value *V = Phi.getIncomingValueForBlock(Latch); in processHeaderPhiOperands() 167 BasicBlock *Latch, in moveHeaderPhiOperandsToForeBlocks() argument 173 processHeaderPhiOperands(Header, Latch, AftBlocks, in moveHeaderPhiOperandsToForeBlocks() 969 BasicBlock *Latch = L->getLoopLatch(); in isSafeToUnrollAndJam() local 973 Header, Latch, AftBlocks, [&AftBlocks, &SubLoop](Instruction *I) { in isSafeToUnrollAndJam()
|
| /llvm-project-15.0.7/llvm/test/Transforms/LoopPredication/ |
| H A D | profitability.ll | 23 ; CHECK: Latch: 40 %result.in3 = phi i64* [ %arg2, %entry ], [ %arg, %Latch ] 41 %j2 = phi i64 [ 0, %entry ], [ %j.next, %Latch ] 46 br i1 %innercmp, label %Latch, label %exit, !prof !0 81 ; CHECK: Latch: 97 %result.in3 = phi i64* [ %arg2, %entry ], [ %arg, %Latch ] 98 %j2 = phi i64 [ 0, %entry ], [ %j.next, %Latch ] 103 br i1 %innercmp, label %Latch, label %exit 136 ; CHECK: Latch: 153 %j2 = phi i64 [ 0, %entry ], [ %j.next, %Latch ] [all …]
|
| /llvm-project-15.0.7/llvm/lib/Transforms/Scalar/ |
| H A D | LoopFuse.cpp | 159 BasicBlock *Latch; member 271 Latch = L->getLoopLatch(); in updateAfterPeeling() 309 << "\tLatch: " << (Latch ? Latch->getName() : "nullptr") << "\n" in dump() 330 if (!Latch) in isEligibleForFusion() 1288 moveInstructionsToTheBeginning(*FC0.Latch, *FC1.Latch, DT, PDT, DI); in mergeLatch() 1356 if (FC0.ExitingBlock != FC0.Latch) in performFusion() 1362 FC0.Latch->replaceSuccessorsPhiUsesWith(FC1.Latch); in performFusion() 1454 if (FC0.Latch != FC0.ExitingBlock) in performFusion() 1644 if (FC0.ExitingBlock != FC0.Latch) in fuseGuardedLoops() 1652 FC0.Latch->replaceSuccessorsPhiUsesWith(FC1.Latch); in fuseGuardedLoops() [all …]
|
| H A D | InductiveRangeCheckElimination.cpp | 463 BasicBlock *Latch = nullptr; member 493 Result.Latch = cast<BasicBlock>(Map(Latch)); in map() 758 BasicBlock *Latch = L.getLoopLatch(); in parseLoopStructure() local 759 assert(Latch && "Simplified loops only have one latch!"); in parseLoopStructure() 761 if (Latch->getTerminator()->getMetadata(ClonedLoopTag)) { in parseLoopStructure() 766 if (!L.isLoopExiting(Latch)) { in parseLoopStructure() 792 const SCEV *LatchCount = SE.getExitCount(&L, Latch); in parseLoopStructure() 1037 Result.Latch = Latch; in parseLoopStructure() 1268 BasicBlock *BBInsertLocation = LS.Latch->getNextNode(); in changeIterationSpaceEnd() 1330 NewPHI->addIncoming(PN.getIncomingValueForBlock(LS.Latch), in changeIterationSpaceEnd() [all …]
|
| H A D | LoopFlatten.cpp | 372 BasicBlock *Latch = L->getLoopLatch(); in findLoopComponents() local 373 if (L->getExitingBlock() != Latch) { in findLoopComponents() 388 bool ContinueOnTrue = L->contains(Latch->getTerminator()->getSuccessor(0)); in findLoopComponents() 404 BackBranch = cast<BranchInst>(Latch->getTerminator()); in findLoopComponents() 415 cast<BinaryOperator>(InductionPHI->getIncomingValueForBlock(Latch)); in findLoopComponents()
|
| H A D | LoopUnrollAndJamPass.cpp | 379 BasicBlock *Latch = L->getLoopLatch(); in tryToUnrollAndJamLoop() local 381 unsigned OuterTripCount = SE.getSmallConstantTripCount(L, Latch); in tryToUnrollAndJamLoop() 382 unsigned OuterTripMultiple = SE.getSmallConstantTripMultiple(L, Latch); in tryToUnrollAndJamLoop()
|
| H A D | LoopDeletion.cpp | 226 BasicBlock *Latch = L->getLoopLatch(); in canProveExitOnFirstIteration() local 228 if (!Predecessor || !Latch) in canProveExitOnFirstIteration() 395 return !LiveEdges.count({ Latch, Header }); in canProveExitOnFirstIteration()
|
| H A D | LoopPredication.cpp | 1117 auto *Latch = L->getLoopLatch(); in predicateLoopExits() local 1118 if (!Latch) in predicateLoopExits() 1125 const SCEV *LatchEC = SE->getExitCount(L, Latch); in predicateLoopExits() 1229 assert(!Latch || DT->dominates(ExitingBB, Latch)); in predicateLoopExits()
|
| /llvm-project-15.0.7/llvm/lib/Target/Hexagon/ |
| H A D | HexagonHardwareLoops.cpp | 409 MachineBasicBlock *Latch = L->getLoopLatch(); in findInductionRegister() local 611 else if (MBB == Latch) in getLoopTripCount() 628 if (ExitingBlock != Latch && (TB == Latch || FB == Latch)) { in getLoopTripCount() 634 if (TB == Latch) in getLoopTripCount() 1595 if (!(Header && Latch && ExitingBlock)) in fixupInductionVariable() 1648 if (ExitingBlock != Latch && (TB == Latch || FB == Latch)) { in fixupInductionVariable() 1657 if (TB == Latch) in fixupInductionVariable() 1900 if (PredB == Latch) in createPreheaderForLoop() 1913 if (PredB != Latch) { in createPreheaderForLoop() 1934 if (MO.getMBB() != Latch) in createPreheaderForLoop() [all …]
|
| /llvm-project-15.0.7/llvm/lib/CodeGen/ |
| H A D | MachineLoopInfo.cpp | 92 if (MachineBasicBlock *Latch = getLoopLatch()) { in findLoopControlBlock() local 93 if (isLoopExiting(Latch)) in findLoopControlBlock() 94 return Latch; in findLoopControlBlock()
|
| /llvm-project-15.0.7/llvm/include/llvm/Analysis/ |
| H A D | LoopInfoImpl.h | 130 const BlockT *Latch = getLoopLatch(); in getUniqueNonLatchExitBlocks() local 131 assert(Latch && "Latch block must exists"); in getUniqueNonLatchExitBlocks() 133 [Latch](const BlockT *BB) { return BB != Latch; }); in getUniqueNonLatchExitBlocks() 218 BlockT *Latch = nullptr; in getLoopLatch() local 221 if (Latch) in getLoopLatch() 223 Latch = Pred; in getLoopLatch() 227 return Latch; in getLoopLatch()
|
| /llvm-project-15.0.7/llvm/include/llvm/Support/ |
| H A D | Parallel.h | 36 class Latch { 42 explicit Latch(uint32_t Count = 0) : Count(Count) {} in Count() 43 ~Latch() { in ~Latch() 66 Latch L;
|
| /llvm-project-15.0.7/llvm/lib/Target/X86/ |
| H A D | X86LowerAMXIntrinsics.cpp | 113 BasicBlock *Latch = in createLoop() local 118 BranchInst::Create(Latch, Body); in createLoop() 123 B.SetInsertPoint(Latch); in createLoop() 126 BranchInst::Create(Header, Exit, Cond, Latch); in createLoop() 127 IV->addIncoming(Inc, Latch); in createLoop() 135 {DominatorTree::Insert, Body, Latch}, in createLoop() 136 {DominatorTree::Insert, Latch, Header}, in createLoop() 137 {DominatorTree::Insert, Latch, Exit}, in createLoop() 143 L->addBasicBlockToLoop(Latch, *LI); in createLoop()
|
| /llvm-project-15.0.7/llvm/lib/Analysis/ |
| H A D | IVDescriptors.cpp | 936 auto *Latch = TheLoop->getLoopLatch(); in isFirstOrderRecurrence() local 937 if (!Preheader || !Latch) in isFirstOrderRecurrence() 942 Phi->getBasicBlockIndex(Latch) < 0) in isFirstOrderRecurrence() 947 auto *Previous = dyn_cast<Instruction>(Phi->getIncomingValueForBlock(Latch)); in isFirstOrderRecurrence() 1407 BasicBlock *Latch = L->getLoopLatch(); in getCastsForInductionPHI() local 1408 if (!Latch) in getCastsForInductionPHI() 1410 Value *Val = PN->getIncomingValueForBlock(Latch); in getCastsForInductionPHI() 1519 BasicBlock *Latch = AR->getLoop()->getLoopLatch(); in isInductionPHI() local 1520 if (!Latch) in isInductionPHI() 1532 dyn_cast<BinaryOperator>(Phi->getIncomingValueForBlock(Latch)); in isInductionPHI()
|
| H A D | LoopInfo.cpp | 171 if (BasicBlock *Latch = getLoopLatch()) in getLatchCmpInst() local 172 if (BranchInst *BI = dyn_cast_or_null<BranchInst>(Latch->getTerminator())) in getLatchCmpInst() 229 BasicBlock *Latch = L.getLoopLatch(); in getCanonicalPredicate() local 230 assert(Latch && "Expecting valid latch"); in getCanonicalPredicate() 232 BranchInst *BI = dyn_cast_or_null<BranchInst>(Latch->getTerminator()); in getCanonicalPredicate() 308 BasicBlock *Latch = getLoopLatch(); in getInductionVariable() local 309 Value *StepInst = IndVar.getIncomingValueForBlock(Latch); in getInductionVariable()
|
| H A D | LoopNestAnalysis.cpp | 54 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()
|
| /llvm-project-15.0.7/llvm/unittests/Transforms/Utils/ |
| H A D | UnrollLoopTest.cpp | 31 TEST(LoopUnrollRuntime, Latch) { in TEST() argument
|
| /llvm-project-15.0.7/llvm/include/llvm/Transforms/Utils/ |
| H A D | MatrixUtils.h | 51 BasicBlock *Latch = nullptr; member
|
| /llvm-project-15.0.7/llvm/lib/Target/ARM/ |
| H A D | MVETPAndVPTOptimisationsPass.cpp | 115 MachineBasicBlock *Latch = ML->getLoopLatch(); in findLoopComponents() local 116 if (!Header || !Latch) { in findLoopComponents() 123 for (auto &T : Latch->terminators()) { in findLoopComponents() 165 (LoopPhi->getOperand(2).getMBB() != Latch && in findLoopComponents() 166 LoopPhi->getOperand(4).getMBB() != Latch)) { in findLoopComponents() 172 Register StartReg = LoopPhi->getOperand(2).getMBB() == Latch in findLoopComponents()
|
| /llvm-project-15.0.7/llvm/lib/Frontend/OpenMP/ |
| H A D | OMPIRBuilder.cpp | 1860 BasicBlock *Latch = in createLoopSkeleton() local 1884 Builder.CreateBr(Latch); in createLoopSkeleton() 1886 Builder.SetInsertPoint(Latch); in createLoopSkeleton() 1890 IndVarPHI->addIncoming(Next, Latch); in createLoopSkeleton() 1901 CL->Latch = Latch; in createLoopSkeleton() 2404 BasicBlock *Latch = CLI->getLatch(); in applyDynamicWorkshareLoop() local 2857 BasicBlock *Latch = Loop->getLatch(); in addLoopMetadata() local 4434 if (Pred != Latch) in getPreheader() 4526 assert(Latch); in assertOK() 4533 assert(!isa<PHINode>(Latch->front())); in assertOK() [all …]
|