| /freebsd/contrib/llvm-project/llvm/lib/Transforms/Utils/ |
| H A D | MatrixUtils.cpp | 32 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 D | LoopUnrollRuntime.cpp | 100 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 D | LoopPeel.cpp | 301 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 D | LoopRotationUtils.cpp | 239 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 D | LoopConstrainer.cpp | 133 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 D | LoopUnrollAndJam.cpp | 138 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 D | LoopUtils.cpp | 713 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 D | LoopFuse.cpp | 158 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 D | LoopUnrollAndJamPass.cpp | 365 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 D | LoopDeletion.cpp | 223 BasicBlock *Latch = L->getLoopLatch(); in canProveExitOnFirstIteration() local 225 if (!Predecessor || !Latch) in canProveExitOnFirstIteration() 392 return !LiveEdges.count({ Latch, Header }); in canProveExitOnFirstIteration()
|
| H A D | LoopFlatten.cpp | 408 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 D | LoopPredication.cpp | 1055 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 D | HexagonHardwareLoops.cpp | 404 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 D | GenericLoopInfoImpl.h | 151 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 D | Parallel.h | 60 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 D | X86LowerAMXIntrinsics.cpp | 110 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 D | MachineLoopInfo.cpp | 123 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 D | IVDescriptors.cpp | 1125 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 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()
|
| H A D | LoopInfo.cpp | 176 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 D | LoopInfo.h | 305 BasicBlock *Latch = getLoopLatch(); in isRotatedForm() local 306 return Latch && isLoopExiting(Latch); in isRotatedForm()
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/SPIRV/ |
| H A D | SPIRVUtils.cpp | 587 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 D | MatrixUtils.h | 51 BasicBlock *Latch = nullptr; member
|
| /freebsd/contrib/llvm-project/llvm/lib/Target/ARM/ |
| H A D | MVETPAndVPTOptimisationsPass.cpp | 114 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 D | LoopVectorizationLegality.cpp | 355 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()
|