/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 | 101 BasicBlock *Latch = L->getLoopLatch(); in ConnectProlog() local 102 assert(Latch && "Loop must have a latch"); in ConnectProlog() 103 BasicBlock *PrologLatch = cast<BasicBlock>(VMap[Latch]); in ConnectProlog() 110 for (BasicBlock *Succ : successors(Latch)) { in ConnectProlog() 132 Value *V = PN.getIncomingValueForBlock(Latch); in ConnectProlog() 184 if (hasBranchWeightMD(*Latch->getTerminator())) { in ConnectProlog() 217 BasicBlock *Latch = L->getLoopLatch(); in ConnectEpilog() local 218 assert(Latch && "Loop must have a latch"); in ConnectEpilog() 219 BasicBlock *EpilogLatch = cast<BasicBlock>(VMap[Latch]); in ConnectEpilog() 259 Value *V = PN.getIncomingValueForBlock(Latch); in ConnectEpilog() [all …]
|
H A D | LoopPeel.cpp | 299 BasicBlock *Latch = L.getLoopLatch(); in peelToTurnInvariantLoadsDerefencebale() local 318 if (DT.dominates(BB, Latch) && L.isLoopInvariant(Ptr) && in peelToTurnInvariantLoadsDerefencebale() 517 BasicBlock *Latch = L->getLoopLatch(); in violatesLegacyMultiExitLoopCheck() local 518 if (!Latch) in violatesLegacyMultiExitLoopCheck() 521 BranchInst *LatchBR = dyn_cast<BranchInst>(Latch->getTerminator()); in violatesLegacyMultiExitLoopCheck() 522 if (!LatchBR || LatchBR->getNumSuccessors() != 2 || !L->isLoopExiting(Latch)) in violatesLegacyMultiExitLoopCheck() 758 BasicBlock *Latch = L->getLoopLatch(); in cloneLoopBlocks() local 818 BasicBlock *NewLatch = cast<BasicBlock>(VMap[Latch]); in cloneLoopBlocks() 841 Value *LatchVal = NewPHI->getIncomingValueForBlock(Latch); in cloneLoopBlocks() 927 BasicBlock *Latch = L->getLoopLatch(); in peelLoop() 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() 1016 BasicBlock *Latch = L->getLoopLatch(); in simplifyLoopLatch() local 1017 if (!Latch || Latch->hasAddressTaken()) in simplifyLoopLatch() 1020 BranchInst *Jmp = dyn_cast<BranchInst>(Latch->getTerminator()); in simplifyLoopLatch() 1024 BasicBlock *LastExit = Latch->getSinglePredecessor(); in simplifyLoopLatch() 1032 if (!shouldSpeculateInstrs(Latch->begin(), Jmp->getIterator(), L)) in simplifyLoopLatch() 1035 LLVM_DEBUG(dbgs() << "Folding loop latch " << Latch->getName() << " into " in simplifyLoopLatch() 1039 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 | 137 static bool processHeaderPhiOperands(BasicBlock *Header, BasicBlock *Latch, in processHeaderPhiOperands() argument 157 Value *V = Phi.getIncomingValueForBlock(Latch); in processHeaderPhiOperands() 168 BasicBlock *Latch, in moveHeaderPhiOperandsToForeBlocks() argument 173 processHeaderPhiOperands(Header, Latch, AftBlocks, in moveHeaderPhiOperandsToForeBlocks() 963 BasicBlock *Latch = L->getLoopLatch(); in isSafeToUnrollAndJam() local 967 Header, Latch, AftBlocks, [&AftBlocks, &SubLoop](Instruction *I) { in isSafeToUnrollAndJam()
|
H A D | LoopUtils.cpp | 726 auto *Latch = L->getLoopLatch(); in breakLoopBackedge() local 727 assert(Latch && "multiple latches not yet supported"); in breakLoopBackedge() 741 if (auto *BI = dyn_cast<BranchInst>(Latch->getTerminator())) { in breakLoopBackedge() 751 if (L->isLoopExiting(Latch)) { in breakLoopBackedge() 760 Header->removePredecessor(Latch, true); in breakLoopBackedge() 770 DTU.applyUpdates({{DominatorTree::Delete, Latch, Header}}); in breakLoopBackedge() 772 MSSAU->applyUpdates({{DominatorTree::Delete, Latch, Header}}, DT); in breakLoopBackedge() 780 auto *BackedgeBB = SplitEdge(Latch, Header, &DT, &LI, MSSAU.get()); in breakLoopBackedge() 805 BasicBlock *Latch = L->getLoopLatch(); in getExpectedExitLoopLatchBranch() local 806 if (!Latch) in getExpectedExitLoopLatchBranch() [all …]
|
/freebsd/contrib/llvm-project/llvm/lib/Transforms/Scalar/ |
H A D | LoopFuse.cpp | 159 BasicBlock *Latch; member 190 Latch(L->getLoopLatch()), L(L), Valid(true), in FusionCandidate() 235 return Preheader && Header && ExitingBlock && ExitBlock && Latch && L && in isValid() 248 assert(Latch == L->getLoopLatch() && "Latch is out of sync"); in verify() 270 Latch = L->getLoopLatch(); in updateAfterPeeling() 308 << "\tLatch: " << (Latch ? Latch->getName() : "nullptr") << "\n" in dump() 329 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 | InductiveRangeCheckElimination.cpp | 964 BPI->getEdgeProbability(LS.Latch, LS.LatchBrExitIdx); in parseLoopStructure() 596 BasicBlock *Latch = nullptr; global() member 902 BasicBlock *Latch = L.getLoopLatch(); parseLoopStructure() local
|
H A D | LoopUnrollAndJamPass.cpp | 366 BasicBlock *Latch = L->getLoopLatch(); in tryToUnrollAndJamLoop() local 368 unsigned OuterTripCount = SE.getSmallConstantTripCount(L, Latch); in tryToUnrollAndJamLoop() 369 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 | 910 // Latch terminator has no valid profile data, so nothing to check in parseLoopLatchICmp() 935 "Latch term should always have profile data!"); in parseLoopLatchICmp() 1056 auto *Latch = L->getLoopLatch(); in FindWidenableTerminatorAboveLoop() 1057 if (!Latch) in FindWidenableTerminatorAboveLoop() 1064 const SCEV *LatchEC = SE->getExitCount(L, Latch); in FindWidenableTerminatorAboveLoop() 1161 assert(!Latch || DT->dominates(ExitingBB, Latch)); in predicateLoopExits() 1216 LLVM_DEBUG(dbgs() << "Latch check:\n"); in predicateLoopExits() 1139 auto *Latch = L->getLoopLatch(); predicateLoopExits() local
|
H A D | LoopLoadElimination.cpp | 157 return llvm::all_of(Latches, [&](const BasicBlock *Latch) { in doesStoreDominatesAllLatches() argument 158 return DT->dominates(StoreBlock, Latch); in doesStoreDominatesAllLatches()
|
/freebsd/contrib/llvm-project/llvm/lib/Target/Hexagon/ |
H A D | HexagonHardwareLoops.cpp | 411 MachineBasicBlock *Latch = L->getLoopLatch(); in findInductionRegister() local 413 if (!Header || !Preheader || !Latch || !ExitingBlock) in findInductionRegister() 438 if (Phi->getOperand(i+1).getMBB() != Latch) in findInductionRegister() 609 MachineBasicBlock *Latch = L->getLoopLatch(); in getLoopTripCount() local 614 else if (MBB == Latch) in getLoopTripCount() 631 if (ExitingBlock != Latch && (TB == Latch || FB == Latch)) { in getLoopTripCount() 634 bool NotAnalyzed = TII->analyzeBranch(*Latch, LTB, LFB, LCond, false); in getLoopTripCount() 637 if (TB == Latch) in getLoopTripCount() 1593 MachineBasicBlock *Latch = L->getLoopLatch(); in fixupInductionVariable() local 1596 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() 248 BlockT *Latch = nullptr; in getLoopLatch() local 251 if (Latch) in getLoopLatch() 253 Latch = Pred; in getLoopLatch() 257 return Latch; in getLoopLatch()
|
H A D | Parallel.h | 59 class Latch { 65 explicit Latch(uint32_t Count = 0) : Count(Count) {} in Count() 66 ~Latch() { in ~Latch() 90 detail::Latch L;
|
/freebsd/contrib/llvm-project/llvm/lib/Target/X86/ |
H A D | X86LowerAMXIntrinsics.cpp | 112 BasicBlock *Latch = in createLoop() local 117 BranchInst::Create(Latch, Body); in createLoop() 122 B.SetInsertPoint(Latch); in createLoop() 125 BranchInst::Create(Header, Exit, Cond, Latch); in createLoop() 126 IV->addIncoming(Inc, Latch); in createLoop() 134 {DominatorTree::Insert, Body, Latch}, in createLoop() 135 {DominatorTree::Insert, Latch, Header}, in createLoop() 136 {DominatorTree::Insert, Latch, Exit}, in createLoop() 142 L->addBasicBlockToLoop(Latch, *LI); in createLoop()
|
/freebsd/contrib/llvm-project/llvm/lib/CodeGen/ |
H A D | MachineLoopInfo.cpp | 120 if (MachineBasicBlock *Latch = getLoopLatch()) { in findLoopControlBlock() local 121 if (isLoopExiting(Latch)) in findLoopControlBlock() 122 return Latch; in findLoopControlBlock()
|
/freebsd/contrib/llvm-project/llvm/lib/Analysis/ |
H A D | IVDescriptors.cpp | 958 auto *Latch = TheLoop->getLoopLatch(); in isFixedOrderRecurrence() local 959 if (!Preheader || !Latch) in isFixedOrderRecurrence() 964 Phi->getBasicBlockIndex(Latch) < 0) in isFixedOrderRecurrence() 969 auto *Previous = dyn_cast<Instruction>(Phi->getIncomingValueForBlock(Latch)); in isFixedOrderRecurrence() 981 Previous = dyn_cast<Instruction>(PrevPhi->getIncomingValueForBlock(Latch)); in isFixedOrderRecurrence() 1394 BasicBlock *Latch = L->getLoopLatch(); in getCastsForInductionPHI() local 1395 if (!Latch) in getCastsForInductionPHI() 1397 Value *Val = PN->getIncomingValueForBlock(Latch); in getCastsForInductionPHI() 1512 BasicBlock *Latch = AR->getLoop()->getLoopLatch(); in isInductionPHI() local 1513 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 | 309 BasicBlock *Latch = getLoopLatch(); in isRotatedForm() local 310 return Latch && isLoopExiting(Latch); in isRotatedForm()
|
/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 | 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()
|