1 //===- llvm/Analysis/LoopInfo.h - Natural Loop Calculator -------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines the LoopInfo class that is used to identify natural loops
10 // and determine the loop depth of various nodes of the CFG.  A natural loop
11 // has exactly one entry-point, which is called the header. Note that natural
12 // loops may actually be several loops that share the same header node.
13 //
14 // This analysis calculates the nesting structure of loops in a function.  For
15 // each natural loop identified, this analysis identifies natural loops
16 // contained entirely within the loop and the basic blocks the make up the loop.
17 //
18 // It can calculate on the fly various bits of information, for example:
19 //
20 //  * whether there is a preheader for the loop
21 //  * the number of back edges to the header
22 //  * whether or not a particular block branches out of the loop
23 //  * the successor blocks of the loop
24 //  * the loop depth
25 //  * etc...
26 //
27 // Note that this analysis specifically identifies *Loops* not cycles or SCCs
28 // in the CFG.  There can be strongly connected components in the CFG which
29 // this analysis will not recognize and that will not be represented by a Loop
30 // instance.  In particular, a Loop might be inside such a non-loop SCC, or a
31 // non-loop SCC might contain a sub-SCC which is a Loop.
32 //
33 // For an overview of terminology used in this API (and thus all of our loop
34 // analyses or transforms), see docs/LoopTerminology.rst.
35 //
36 //===----------------------------------------------------------------------===//
37 
38 #ifndef LLVM_ANALYSIS_LOOPINFO_H
39 #define LLVM_ANALYSIS_LOOPINFO_H
40 
41 #include "llvm/ADT/DenseMap.h"
42 #include "llvm/ADT/DenseSet.h"
43 #include "llvm/ADT/GraphTraits.h"
44 #include "llvm/ADT/SmallPtrSet.h"
45 #include "llvm/ADT/SmallVector.h"
46 #include "llvm/IR/CFG.h"
47 #include "llvm/IR/Instructions.h"
48 #include "llvm/IR/PassManager.h"
49 #include "llvm/Pass.h"
50 #include "llvm/Support/Allocator.h"
51 #include <algorithm>
52 #include <optional>
53 #include <utility>
54 
55 namespace llvm {
56 
57 class DominatorTree;
58 class InductionDescriptor;
59 class Instruction;
60 class LoopInfo;
61 class Loop;
62 class MDNode;
63 class MemorySSAUpdater;
64 class ScalarEvolution;
65 class raw_ostream;
66 template <class N, bool IsPostDom> class DominatorTreeBase;
67 template <class N, class M> class LoopInfoBase;
68 template <class N, class M> class LoopBase;
69 
70 //===----------------------------------------------------------------------===//
71 /// Instances of this class are used to represent loops that are detected in the
72 /// flow graph.
73 ///
74 template <class BlockT, class LoopT> class LoopBase {
75   LoopT *ParentLoop;
76   // Loops contained entirely within this one.
77   std::vector<LoopT *> SubLoops;
78 
79   // The list of blocks in this loop. First entry is the header node.
80   std::vector<BlockT *> Blocks;
81 
82   SmallPtrSet<const BlockT *, 8> DenseBlockSet;
83 
84 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
85   /// Indicator that this loop is no longer a valid loop.
86   bool IsInvalid = false;
87 #endif
88 
89   LoopBase(const LoopBase<BlockT, LoopT> &) = delete;
90   const LoopBase<BlockT, LoopT> &
91   operator=(const LoopBase<BlockT, LoopT> &) = delete;
92 
93 public:
94   /// Return the nesting level of this loop.  An outer-most loop has depth 1,
95   /// for consistency with loop depth values used for basic blocks, where depth
96   /// 0 is used for blocks not inside any loops.
getLoopDepth()97   unsigned getLoopDepth() const {
98     assert(!isInvalid() && "Loop not in a valid state!");
99     unsigned D = 1;
100     for (const LoopT *CurLoop = ParentLoop; CurLoop;
101          CurLoop = CurLoop->ParentLoop)
102       ++D;
103     return D;
104   }
getHeader()105   BlockT *getHeader() const { return getBlocks().front(); }
106   /// Return the parent loop if it exists or nullptr for top
107   /// level loops.
108 
109   /// A loop is either top-level in a function (that is, it is not
110   /// contained in any other loop) or it is entirely enclosed in
111   /// some other loop.
112   /// If a loop is top-level, it has no parent, otherwise its
113   /// parent is the innermost loop in which it is enclosed.
getParentLoop()114   LoopT *getParentLoop() const { return ParentLoop; }
115 
116   /// Get the outermost loop in which this loop is contained.
117   /// This may be the loop itself, if it already is the outermost loop.
getOutermostLoop()118   const LoopT *getOutermostLoop() const {
119     const LoopT *L = static_cast<const LoopT *>(this);
120     while (L->ParentLoop)
121       L = L->ParentLoop;
122     return L;
123   }
124 
getOutermostLoop()125   LoopT *getOutermostLoop() {
126     LoopT *L = static_cast<LoopT *>(this);
127     while (L->ParentLoop)
128       L = L->ParentLoop;
129     return L;
130   }
131 
132   /// This is a raw interface for bypassing addChildLoop.
setParentLoop(LoopT * L)133   void setParentLoop(LoopT *L) {
134     assert(!isInvalid() && "Loop not in a valid state!");
135     ParentLoop = L;
136   }
137 
138   /// Return true if the specified loop is contained within in this loop.
contains(const LoopT * L)139   bool contains(const LoopT *L) const {
140     assert(!isInvalid() && "Loop not in a valid state!");
141     if (L == this)
142       return true;
143     if (!L)
144       return false;
145     return contains(L->getParentLoop());
146   }
147 
148   /// Return true if the specified basic block is in this loop.
contains(const BlockT * BB)149   bool contains(const BlockT *BB) const {
150     assert(!isInvalid() && "Loop not in a valid state!");
151     return DenseBlockSet.count(BB);
152   }
153 
154   /// Return true if the specified instruction is in this loop.
contains(const InstT * Inst)155   template <class InstT> bool contains(const InstT *Inst) const {
156     return contains(Inst->getParent());
157   }
158 
159   /// Return the loops contained entirely within this loop.
getSubLoops()160   const std::vector<LoopT *> &getSubLoops() const {
161     assert(!isInvalid() && "Loop not in a valid state!");
162     return SubLoops;
163   }
getSubLoopsVector()164   std::vector<LoopT *> &getSubLoopsVector() {
165     assert(!isInvalid() && "Loop not in a valid state!");
166     return SubLoops;
167   }
168   typedef typename std::vector<LoopT *>::const_iterator iterator;
169   typedef
170       typename std::vector<LoopT *>::const_reverse_iterator reverse_iterator;
begin()171   iterator begin() const { return getSubLoops().begin(); }
end()172   iterator end() const { return getSubLoops().end(); }
rbegin()173   reverse_iterator rbegin() const { return getSubLoops().rbegin(); }
rend()174   reverse_iterator rend() const { return getSubLoops().rend(); }
175 
176   // LoopInfo does not detect irreducible control flow, just natural
177   // loops. That is, it is possible that there is cyclic control
178   // flow within the "innermost loop" or around the "outermost
179   // loop".
180 
181   /// Return true if the loop does not contain any (natural) loops.
isInnermost()182   bool isInnermost() const { return getSubLoops().empty(); }
183   /// Return true if the loop does not have a parent (natural) loop
184   // (i.e. it is outermost, which is the same as top-level).
isOutermost()185   bool isOutermost() const { return getParentLoop() == nullptr; }
186 
187   /// Get a list of the basic blocks which make up this loop.
getBlocks()188   ArrayRef<BlockT *> getBlocks() const {
189     assert(!isInvalid() && "Loop not in a valid state!");
190     return Blocks;
191   }
192   typedef typename ArrayRef<BlockT *>::const_iterator block_iterator;
block_begin()193   block_iterator block_begin() const { return getBlocks().begin(); }
block_end()194   block_iterator block_end() const { return getBlocks().end(); }
blocks()195   inline iterator_range<block_iterator> blocks() const {
196     assert(!isInvalid() && "Loop not in a valid state!");
197     return make_range(block_begin(), block_end());
198   }
199 
200   /// Get the number of blocks in this loop in constant time.
201   /// Invalidate the loop, indicating that it is no longer a loop.
getNumBlocks()202   unsigned getNumBlocks() const {
203     assert(!isInvalid() && "Loop not in a valid state!");
204     return Blocks.size();
205   }
206 
207   /// Return a direct, mutable handle to the blocks vector so that we can
208   /// mutate it efficiently with techniques like `std::remove`.
getBlocksVector()209   std::vector<BlockT *> &getBlocksVector() {
210     assert(!isInvalid() && "Loop not in a valid state!");
211     return Blocks;
212   }
213   /// Return a direct, mutable handle to the blocks set so that we can
214   /// mutate it efficiently.
getBlocksSet()215   SmallPtrSetImpl<const BlockT *> &getBlocksSet() {
216     assert(!isInvalid() && "Loop not in a valid state!");
217     return DenseBlockSet;
218   }
219 
220   /// Return a direct, immutable handle to the blocks set.
getBlocksSet()221   const SmallPtrSetImpl<const BlockT *> &getBlocksSet() const {
222     assert(!isInvalid() && "Loop not in a valid state!");
223     return DenseBlockSet;
224   }
225 
226   /// Return true if this loop is no longer valid.  The only valid use of this
227   /// helper is "assert(L.isInvalid())" or equivalent, since IsInvalid is set to
228   /// true by the destructor.  In other words, if this accessor returns true,
229   /// the caller has already triggered UB by calling this accessor; and so it
230   /// can only be called in a context where a return value of true indicates a
231   /// programmer error.
isInvalid()232   bool isInvalid() const {
233 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
234     return IsInvalid;
235 #else
236     return false;
237 #endif
238   }
239 
240   /// True if terminator in the block can branch to another block that is
241   /// outside of the current loop. \p BB must be inside the loop.
isLoopExiting(const BlockT * BB)242   bool isLoopExiting(const BlockT *BB) const {
243     assert(!isInvalid() && "Loop not in a valid state!");
244     assert(contains(BB) && "Exiting block must be part of the loop");
245     for (const auto *Succ : children<const BlockT *>(BB)) {
246       if (!contains(Succ))
247         return true;
248     }
249     return false;
250   }
251 
252   /// Returns true if \p BB is a loop-latch.
253   /// A latch block is a block that contains a branch back to the header.
254   /// This function is useful when there are multiple latches in a loop
255   /// because \fn getLoopLatch will return nullptr in that case.
isLoopLatch(const BlockT * BB)256   bool isLoopLatch(const BlockT *BB) const {
257     assert(!isInvalid() && "Loop not in a valid state!");
258     assert(contains(BB) && "block does not belong to the loop");
259 
260     BlockT *Header = getHeader();
261     auto PredBegin = GraphTraits<Inverse<BlockT *>>::child_begin(Header);
262     auto PredEnd = GraphTraits<Inverse<BlockT *>>::child_end(Header);
263     return std::find(PredBegin, PredEnd, BB) != PredEnd;
264   }
265 
266   /// Calculate the number of back edges to the loop header.
getNumBackEdges()267   unsigned getNumBackEdges() const {
268     assert(!isInvalid() && "Loop not in a valid state!");
269     unsigned NumBackEdges = 0;
270     BlockT *H = getHeader();
271 
272     for (const auto Pred : children<Inverse<BlockT *>>(H))
273       if (contains(Pred))
274         ++NumBackEdges;
275 
276     return NumBackEdges;
277   }
278 
279   //===--------------------------------------------------------------------===//
280   // APIs for simple analysis of the loop.
281   //
282   // Note that all of these methods can fail on general loops (ie, there may not
283   // be a preheader, etc).  For best success, the loop simplification and
284   // induction variable canonicalization pass should be used to normalize loops
285   // for easy analysis.  These methods assume canonical loops.
286 
287   /// Return all blocks inside the loop that have successors outside of the
288   /// loop. These are the blocks _inside of the current loop_ which branch out.
289   /// The returned list is always unique.
290   void getExitingBlocks(SmallVectorImpl<BlockT *> &ExitingBlocks) const;
291 
292   /// If getExitingBlocks would return exactly one block, return that block.
293   /// Otherwise return null.
294   BlockT *getExitingBlock() const;
295 
296   /// Return all of the successor blocks of this loop. These are the blocks
297   /// _outside of the current loop_ which are branched to.
298   void getExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
299 
300   /// If getExitBlocks would return exactly one block, return that block.
301   /// Otherwise return null.
302   BlockT *getExitBlock() const;
303 
304   /// Return true if no exit block for the loop has a predecessor that is
305   /// outside the loop.
306   bool hasDedicatedExits() const;
307 
308   /// Return all unique successor blocks of this loop.
309   /// These are the blocks _outside of the current loop_ which are branched to.
310   void getUniqueExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
311 
312   /// Return all unique successor blocks of this loop except successors from
313   /// Latch block are not considered. If the exit comes from Latch has also
314   /// non Latch predecessor in a loop it will be added to ExitBlocks.
315   /// These are the blocks _outside of the current loop_ which are branched to.
316   void getUniqueNonLatchExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
317 
318   /// If getUniqueExitBlocks would return exactly one block, return that block.
319   /// Otherwise return null.
320   BlockT *getUniqueExitBlock() const;
321 
322   /// Return true if this loop does not have any exit blocks.
323   bool hasNoExitBlocks() const;
324 
325   /// Edge type.
326   typedef std::pair<BlockT *, BlockT *> Edge;
327 
328   /// Return all pairs of (_inside_block_,_outside_block_).
329   void getExitEdges(SmallVectorImpl<Edge> &ExitEdges) const;
330 
331   /// If there is a preheader for this loop, return it. A loop has a preheader
332   /// if there is only one edge to the header of the loop from outside of the
333   /// loop. If this is the case, the block branching to the header of the loop
334   /// is the preheader node.
335   ///
336   /// This method returns null if there is no preheader for the loop.
337   BlockT *getLoopPreheader() const;
338 
339   /// If the given loop's header has exactly one unique predecessor outside the
340   /// loop, return it. Otherwise return null.
341   ///  This is less strict that the loop "preheader" concept, which requires
342   /// the predecessor to have exactly one successor.
343   BlockT *getLoopPredecessor() const;
344 
345   /// If there is a single latch block for this loop, return it.
346   /// A latch block is a block that contains a branch back to the header.
347   BlockT *getLoopLatch() const;
348 
349   /// Return all loop latch blocks of this loop. A latch block is a block that
350   /// contains a branch back to the header.
getLoopLatches(SmallVectorImpl<BlockT * > & LoopLatches)351   void getLoopLatches(SmallVectorImpl<BlockT *> &LoopLatches) const {
352     assert(!isInvalid() && "Loop not in a valid state!");
353     BlockT *H = getHeader();
354     for (const auto Pred : children<Inverse<BlockT *>>(H))
355       if (contains(Pred))
356         LoopLatches.push_back(Pred);
357   }
358 
359   /// Return all inner loops in the loop nest rooted by the loop in preorder,
360   /// with siblings in forward program order.
361   template <class Type>
getInnerLoopsInPreorder(const LoopT & L,SmallVectorImpl<Type> & PreOrderLoops)362   static void getInnerLoopsInPreorder(const LoopT &L,
363                                       SmallVectorImpl<Type> &PreOrderLoops) {
364     SmallVector<LoopT *, 4> PreOrderWorklist;
365     PreOrderWorklist.append(L.rbegin(), L.rend());
366 
367     while (!PreOrderWorklist.empty()) {
368       LoopT *L = PreOrderWorklist.pop_back_val();
369       // Sub-loops are stored in forward program order, but will process the
370       // worklist backwards so append them in reverse order.
371       PreOrderWorklist.append(L->rbegin(), L->rend());
372       PreOrderLoops.push_back(L);
373     }
374   }
375 
376   /// Return all loops in the loop nest rooted by the loop in preorder, with
377   /// siblings in forward program order.
getLoopsInPreorder()378   SmallVector<const LoopT *, 4> getLoopsInPreorder() const {
379     SmallVector<const LoopT *, 4> PreOrderLoops;
380     const LoopT *CurLoop = static_cast<const LoopT *>(this);
381     PreOrderLoops.push_back(CurLoop);
382     getInnerLoopsInPreorder(*CurLoop, PreOrderLoops);
383     return PreOrderLoops;
384   }
getLoopsInPreorder()385   SmallVector<LoopT *, 4> getLoopsInPreorder() {
386     SmallVector<LoopT *, 4> PreOrderLoops;
387     LoopT *CurLoop = static_cast<LoopT *>(this);
388     PreOrderLoops.push_back(CurLoop);
389     getInnerLoopsInPreorder(*CurLoop, PreOrderLoops);
390     return PreOrderLoops;
391   }
392 
393   //===--------------------------------------------------------------------===//
394   // APIs for updating loop information after changing the CFG
395   //
396 
397   /// This method is used by other analyses to update loop information.
398   /// NewBB is set to be a new member of the current loop.
399   /// Because of this, it is added as a member of all parent loops, and is added
400   /// to the specified LoopInfo object as being in the current basic block.  It
401   /// is not valid to replace the loop header with this method.
402   void addBasicBlockToLoop(BlockT *NewBB, LoopInfoBase<BlockT, LoopT> &LI);
403 
404   /// This is used when splitting loops up. It replaces the OldChild entry in
405   /// our children list with NewChild, and updates the parent pointer of
406   /// OldChild to be null and the NewChild to be this loop.
407   /// This updates the loop depth of the new child.
408   void replaceChildLoopWith(LoopT *OldChild, LoopT *NewChild);
409 
410   /// Add the specified loop to be a child of this loop.
411   /// This updates the loop depth of the new child.
addChildLoop(LoopT * NewChild)412   void addChildLoop(LoopT *NewChild) {
413     assert(!isInvalid() && "Loop not in a valid state!");
414     assert(!NewChild->ParentLoop && "NewChild already has a parent!");
415     NewChild->ParentLoop = static_cast<LoopT *>(this);
416     SubLoops.push_back(NewChild);
417   }
418 
419   /// This removes the specified child from being a subloop of this loop. The
420   /// loop is not deleted, as it will presumably be inserted into another loop.
removeChildLoop(iterator I)421   LoopT *removeChildLoop(iterator I) {
422     assert(!isInvalid() && "Loop not in a valid state!");
423     assert(I != SubLoops.end() && "Cannot remove end iterator!");
424     LoopT *Child = *I;
425     assert(Child->ParentLoop == this && "Child is not a child of this loop!");
426     SubLoops.erase(SubLoops.begin() + (I - begin()));
427     Child->ParentLoop = nullptr;
428     return Child;
429   }
430 
431   /// This removes the specified child from being a subloop of this loop. The
432   /// loop is not deleted, as it will presumably be inserted into another loop.
removeChildLoop(LoopT * Child)433   LoopT *removeChildLoop(LoopT *Child) {
434     return removeChildLoop(llvm::find(*this, Child));
435   }
436 
437   /// This adds a basic block directly to the basic block list.
438   /// This should only be used by transformations that create new loops.  Other
439   /// transformations should use addBasicBlockToLoop.
addBlockEntry(BlockT * BB)440   void addBlockEntry(BlockT *BB) {
441     assert(!isInvalid() && "Loop not in a valid state!");
442     Blocks.push_back(BB);
443     DenseBlockSet.insert(BB);
444   }
445 
446   /// interface to reverse Blocks[from, end of loop] in this loop
reverseBlock(unsigned from)447   void reverseBlock(unsigned from) {
448     assert(!isInvalid() && "Loop not in a valid state!");
449     std::reverse(Blocks.begin() + from, Blocks.end());
450   }
451 
452   /// interface to do reserve() for Blocks
reserveBlocks(unsigned size)453   void reserveBlocks(unsigned size) {
454     assert(!isInvalid() && "Loop not in a valid state!");
455     Blocks.reserve(size);
456   }
457 
458   /// This method is used to move BB (which must be part of this loop) to be the
459   /// loop header of the loop (the block that dominates all others).
moveToHeader(BlockT * BB)460   void moveToHeader(BlockT *BB) {
461     assert(!isInvalid() && "Loop not in a valid state!");
462     if (Blocks[0] == BB)
463       return;
464     for (unsigned i = 0;; ++i) {
465       assert(i != Blocks.size() && "Loop does not contain BB!");
466       if (Blocks[i] == BB) {
467         Blocks[i] = Blocks[0];
468         Blocks[0] = BB;
469         return;
470       }
471     }
472   }
473 
474   /// This removes the specified basic block from the current loop, updating the
475   /// Blocks as appropriate. This does not update the mapping in the LoopInfo
476   /// class.
removeBlockFromLoop(BlockT * BB)477   void removeBlockFromLoop(BlockT *BB) {
478     assert(!isInvalid() && "Loop not in a valid state!");
479     auto I = find(Blocks, BB);
480     assert(I != Blocks.end() && "N is not in this list!");
481     Blocks.erase(I);
482 
483     DenseBlockSet.erase(BB);
484   }
485 
486   /// Verify loop structure
487   void verifyLoop() const;
488 
489   /// Verify loop structure of this loop and all nested loops.
490   void verifyLoopNest(DenseSet<const LoopT *> *Loops) const;
491 
492   /// Returns true if the loop is annotated parallel.
493   ///
494   /// Derived classes can override this method using static template
495   /// polymorphism.
isAnnotatedParallel()496   bool isAnnotatedParallel() const { return false; }
497 
498   /// Print loop with all the BBs inside it.
499   void print(raw_ostream &OS, bool Verbose = false, bool PrintNested = true,
500              unsigned Depth = 0) const;
501 
502 protected:
503   friend class LoopInfoBase<BlockT, LoopT>;
504 
505   /// This creates an empty loop.
LoopBase()506   LoopBase() : ParentLoop(nullptr) {}
507 
LoopBase(BlockT * BB)508   explicit LoopBase(BlockT *BB) : ParentLoop(nullptr) {
509     Blocks.push_back(BB);
510     DenseBlockSet.insert(BB);
511   }
512 
513   // Since loop passes like SCEV are allowed to key analysis results off of
514   // `Loop` pointers, we cannot re-use pointers within a loop pass manager.
515   // This means loop passes should not be `delete` ing `Loop` objects directly
516   // (and risk a later `Loop` allocation re-using the address of a previous one)
517   // but should be using LoopInfo::markAsRemoved, which keeps around the `Loop`
518   // pointer till the end of the lifetime of the `LoopInfo` object.
519   //
520   // To make it easier to follow this rule, we mark the destructor as
521   // non-public.
~LoopBase()522   ~LoopBase() {
523     for (auto *SubLoop : SubLoops)
524       SubLoop->~LoopT();
525 
526 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
527     IsInvalid = true;
528 #endif
529     SubLoops.clear();
530     Blocks.clear();
531     DenseBlockSet.clear();
532     ParentLoop = nullptr;
533   }
534 };
535 
536 template <class BlockT, class LoopT>
537 raw_ostream &operator<<(raw_ostream &OS, const LoopBase<BlockT, LoopT> &Loop) {
538   Loop.print(OS);
539   return OS;
540 }
541 
542 // Implementation in LoopInfoImpl.h
543 extern template class LoopBase<BasicBlock, Loop>;
544 
545 /// Represents a single loop in the control flow graph.  Note that not all SCCs
546 /// in the CFG are necessarily loops.
547 class LLVM_EXTERNAL_VISIBILITY Loop : public LoopBase<BasicBlock, Loop> {
548 public:
549   /// A range representing the start and end location of a loop.
550   class LocRange {
551     DebugLoc Start;
552     DebugLoc End;
553 
554   public:
555     LocRange() = default;
LocRange(DebugLoc Start)556     LocRange(DebugLoc Start) : Start(Start), End(Start) {}
LocRange(DebugLoc Start,DebugLoc End)557     LocRange(DebugLoc Start, DebugLoc End)
558         : Start(std::move(Start)), End(std::move(End)) {}
559 
getStart()560     const DebugLoc &getStart() const { return Start; }
getEnd()561     const DebugLoc &getEnd() const { return End; }
562 
563     /// Check for null.
564     ///
565     explicit operator bool() const { return Start && End; }
566   };
567 
568   /// Return true if the specified value is loop invariant.
569   bool isLoopInvariant(const Value *V) const;
570 
571   /// Return true if all the operands of the specified instruction are loop
572   /// invariant.
573   bool hasLoopInvariantOperands(const Instruction *I) const;
574 
575   /// If the given value is an instruction inside of the loop and it can be
576   /// hoisted, do so to make it trivially loop-invariant.
577   /// Return true if \c V is already loop-invariant, and false if \c V can't
578   /// be made loop-invariant. If \c V is made loop-invariant, \c Changed is
579   /// set to true. This function can be used as a slightly more aggressive
580   /// replacement for isLoopInvariant.
581   ///
582   /// If InsertPt is specified, it is the point to hoist instructions to.
583   /// If null, the terminator of the loop preheader is used.
584   ///
585   bool makeLoopInvariant(Value *V, bool &Changed,
586                          Instruction *InsertPt = nullptr,
587                          MemorySSAUpdater *MSSAU = nullptr,
588                          ScalarEvolution *SE = nullptr) const;
589 
590   /// If the given instruction is inside of the loop and it can be hoisted, do
591   /// so to make it trivially loop-invariant.
592   /// Return true if \c I is already loop-invariant, and false if \c I can't
593   /// be made loop-invariant. If \c I is made loop-invariant, \c Changed is
594   /// set to true. This function can be used as a slightly more aggressive
595   /// replacement for isLoopInvariant.
596   ///
597   /// If InsertPt is specified, it is the point to hoist instructions to.
598   /// If null, the terminator of the loop preheader is used.
599   ///
600   bool makeLoopInvariant(Instruction *I, bool &Changed,
601                          Instruction *InsertPt = nullptr,
602                          MemorySSAUpdater *MSSAU = nullptr,
603                          ScalarEvolution *SE = nullptr) const;
604 
605   /// Check to see if the loop has a canonical induction variable: an integer
606   /// recurrence that starts at 0 and increments by one each time through the
607   /// loop. If so, return the phi node that corresponds to it.
608   ///
609   /// The IndVarSimplify pass transforms loops to have a canonical induction
610   /// variable.
611   ///
612   PHINode *getCanonicalInductionVariable() const;
613 
614   /// Get the latch condition instruction.
615   ICmpInst *getLatchCmpInst() const;
616 
617   /// Obtain the unique incoming and back edge. Return false if they are
618   /// non-unique or the loop is dead; otherwise, return true.
619   bool getIncomingAndBackEdge(BasicBlock *&Incoming,
620                               BasicBlock *&Backedge) const;
621 
622   /// Below are some utilities to get the loop guard, loop bounds and induction
623   /// variable, and to check if a given phinode is an auxiliary induction
624   /// variable, if the loop is guarded, and if the loop is canonical.
625   ///
626   /// Here is an example:
627   /// \code
628   /// for (int i = lb; i < ub; i+=step)
629   ///   <loop body>
630   /// --- pseudo LLVMIR ---
631   /// beforeloop:
632   ///   guardcmp = (lb < ub)
633   ///   if (guardcmp) goto preheader; else goto afterloop
634   /// preheader:
635   /// loop:
636   ///   i_1 = phi[{lb, preheader}, {i_2, latch}]
637   ///   <loop body>
638   ///   i_2 = i_1 + step
639   /// latch:
640   ///   cmp = (i_2 < ub)
641   ///   if (cmp) goto loop
642   /// exit:
643   /// afterloop:
644   /// \endcode
645   ///
646   /// - getBounds
647   ///   - getInitialIVValue      --> lb
648   ///   - getStepInst            --> i_2 = i_1 + step
649   ///   - getStepValue           --> step
650   ///   - getFinalIVValue        --> ub
651   ///   - getCanonicalPredicate  --> '<'
652   ///   - getDirection           --> Increasing
653   ///
654   /// - getInductionVariable            --> i_1
655   /// - isAuxiliaryInductionVariable(x) --> true if x == i_1
656   /// - getLoopGuardBranch()
657   ///                 --> `if (guardcmp) goto preheader; else goto afterloop`
658   /// - isGuarded()                     --> true
659   /// - isCanonical                     --> false
660   struct LoopBounds {
661     /// Return the LoopBounds object if
662     /// - the given \p IndVar is an induction variable
663     /// - the initial value of the induction variable can be found
664     /// - the step instruction of the induction variable can be found
665     /// - the final value of the induction variable can be found
666     ///
667     /// Else None.
668     static std::optional<Loop::LoopBounds>
669     getBounds(const Loop &L, PHINode &IndVar, ScalarEvolution &SE);
670 
671     /// Get the initial value of the loop induction variable.
getInitialIVValueLoopBounds672     Value &getInitialIVValue() const { return InitialIVValue; }
673 
674     /// Get the instruction that updates the loop induction variable.
getStepInstLoopBounds675     Instruction &getStepInst() const { return StepInst; }
676 
677     /// Get the step that the loop induction variable gets updated by in each
678     /// loop iteration. Return nullptr if not found.
getStepValueLoopBounds679     Value *getStepValue() const { return StepValue; }
680 
681     /// Get the final value of the loop induction variable.
getFinalIVValueLoopBounds682     Value &getFinalIVValue() const { return FinalIVValue; }
683 
684     /// Return the canonical predicate for the latch compare instruction, if
685     /// able to be calcuated. Else BAD_ICMP_PREDICATE.
686     ///
687     /// A predicate is considered as canonical if requirements below are all
688     /// satisfied:
689     /// 1. The first successor of the latch branch is the loop header
690     ///    If not, inverse the predicate.
691     /// 2. One of the operands of the latch comparison is StepInst
692     ///    If not, and
693     ///    - if the current calcuated predicate is not ne or eq, flip the
694     ///      predicate.
695     ///    - else if the loop is increasing, return slt
696     ///      (notice that it is safe to change from ne or eq to sign compare)
697     ///    - else if the loop is decreasing, return sgt
698     ///      (notice that it is safe to change from ne or eq to sign compare)
699     ///
700     /// Here is an example when both (1) and (2) are not satisfied:
701     /// \code
702     /// loop.header:
703     ///  %iv = phi [%initialiv, %loop.preheader], [%inc, %loop.header]
704     ///  %inc = add %iv, %step
705     ///  %cmp = slt %iv, %finaliv
706     ///  br %cmp, %loop.exit, %loop.header
707     /// loop.exit:
708     /// \endcode
709     /// - The second successor of the latch branch is the loop header instead
710     ///   of the first successor (slt -> sge)
711     /// - The first operand of the latch comparison (%cmp) is the IndVar (%iv)
712     ///   instead of the StepInst (%inc) (sge -> sgt)
713     ///
714     /// The predicate would be sgt if both (1) and (2) are satisfied.
715     /// getCanonicalPredicate() returns sgt for this example.
716     /// Note: The IR is not changed.
717     ICmpInst::Predicate getCanonicalPredicate() const;
718 
719     /// An enum for the direction of the loop
720     /// - for (int i = 0; i < ub; ++i)  --> Increasing
721     /// - for (int i = ub; i > 0; --i)  --> Descresing
722     /// - for (int i = x; i != y; i+=z) --> Unknown
723     enum class Direction { Increasing, Decreasing, Unknown };
724 
725     /// Get the direction of the loop.
726     Direction getDirection() const;
727 
728   private:
LoopBoundsLoopBounds729     LoopBounds(const Loop &Loop, Value &I, Instruction &SI, Value *SV, Value &F,
730                ScalarEvolution &SE)
731         : L(Loop), InitialIVValue(I), StepInst(SI), StepValue(SV),
732           FinalIVValue(F), SE(SE) {}
733 
734     const Loop &L;
735 
736     // The initial value of the loop induction variable
737     Value &InitialIVValue;
738 
739     // The instruction that updates the loop induction variable
740     Instruction &StepInst;
741 
742     // The value that the loop induction variable gets updated by in each loop
743     // iteration
744     Value *StepValue;
745 
746     // The final value of the loop induction variable
747     Value &FinalIVValue;
748 
749     ScalarEvolution &SE;
750   };
751 
752   /// Return the struct LoopBounds collected if all struct members are found,
753   /// else std::nullopt.
754   std::optional<LoopBounds> getBounds(ScalarEvolution &SE) const;
755 
756   /// Return the loop induction variable if found, else return nullptr.
757   /// An instruction is considered as the loop induction variable if
758   /// - it is an induction variable of the loop; and
759   /// - it is used to determine the condition of the branch in the loop latch
760   ///
761   /// Note: the induction variable doesn't need to be canonical, i.e. starts at
762   /// zero and increments by one each time through the loop (but it can be).
763   PHINode *getInductionVariable(ScalarEvolution &SE) const;
764 
765   /// Get the loop induction descriptor for the loop induction variable. Return
766   /// true if the loop induction variable is found.
767   bool getInductionDescriptor(ScalarEvolution &SE,
768                               InductionDescriptor &IndDesc) const;
769 
770   /// Return true if the given PHINode \p AuxIndVar is
771   /// - in the loop header
772   /// - not used outside of the loop
773   /// - incremented by a loop invariant step for each loop iteration
774   /// - step instruction opcode should be add or sub
775   /// Note: auxiliary induction variable is not required to be used in the
776   ///       conditional branch in the loop latch. (but it can be)
777   bool isAuxiliaryInductionVariable(PHINode &AuxIndVar,
778                                     ScalarEvolution &SE) const;
779 
780   /// Return the loop guard branch, if it exists.
781   ///
782   /// This currently only works on simplified loop, as it requires a preheader
783   /// and a latch to identify the guard. It will work on loops of the form:
784   /// \code
785   /// GuardBB:
786   ///   br cond1, Preheader, ExitSucc <== GuardBranch
787   /// Preheader:
788   ///   br Header
789   /// Header:
790   ///  ...
791   ///   br Latch
792   /// Latch:
793   ///   br cond2, Header, ExitBlock
794   /// ExitBlock:
795   ///   br ExitSucc
796   /// ExitSucc:
797   /// \endcode
798   BranchInst *getLoopGuardBranch() const;
799 
800   /// Return true iff the loop is
801   /// - in simplify rotated form, and
802   /// - guarded by a loop guard branch.
isGuarded()803   bool isGuarded() const { return (getLoopGuardBranch() != nullptr); }
804 
805   /// Return true if the loop is in rotated form.
806   ///
807   /// This does not check if the loop was rotated by loop rotation, instead it
808   /// only checks if the loop is in rotated form (has a valid latch that exists
809   /// the loop).
isRotatedForm()810   bool isRotatedForm() const {
811     assert(!isInvalid() && "Loop not in a valid state!");
812     BasicBlock *Latch = getLoopLatch();
813     return Latch && isLoopExiting(Latch);
814   }
815 
816   /// Return true if the loop induction variable starts at zero and increments
817   /// by one each time through the loop.
818   bool isCanonical(ScalarEvolution &SE) const;
819 
820   /// Return true if the Loop is in LCSSA form. If \p IgnoreTokens is set to
821   /// true, token values defined inside loop are allowed to violate LCSSA form.
822   bool isLCSSAForm(const DominatorTree &DT, bool IgnoreTokens = true) const;
823 
824   /// Return true if this Loop and all inner subloops are in LCSSA form. If \p
825   /// IgnoreTokens is set to true, token values defined inside loop are allowed
826   /// to violate LCSSA form.
827   bool isRecursivelyLCSSAForm(const DominatorTree &DT, const LoopInfo &LI,
828                               bool IgnoreTokens = true) const;
829 
830   /// Return true if the Loop is in the form that the LoopSimplify form
831   /// transforms loops to, which is sometimes called normal form.
832   bool isLoopSimplifyForm() const;
833 
834   /// Return true if the loop body is safe to clone in practice.
835   bool isSafeToClone() const;
836 
837   /// Returns true if the loop is annotated parallel.
838   ///
839   /// A parallel loop can be assumed to not contain any dependencies between
840   /// iterations by the compiler. That is, any loop-carried dependency checking
841   /// can be skipped completely when parallelizing the loop on the target
842   /// machine. Thus, if the parallel loop information originates from the
843   /// programmer, e.g. via the OpenMP parallel for pragma, it is the
844   /// programmer's responsibility to ensure there are no loop-carried
845   /// dependencies. The final execution order of the instructions across
846   /// iterations is not guaranteed, thus, the end result might or might not
847   /// implement actual concurrent execution of instructions across multiple
848   /// iterations.
849   bool isAnnotatedParallel() const;
850 
851   /// Return the llvm.loop loop id metadata node for this loop if it is present.
852   ///
853   /// If this loop contains the same llvm.loop metadata on each branch to the
854   /// header then the node is returned. If any latch instruction does not
855   /// contain llvm.loop or if multiple latches contain different nodes then
856   /// 0 is returned.
857   MDNode *getLoopID() const;
858   /// Set the llvm.loop loop id metadata for this loop.
859   ///
860   /// The LoopID metadata node will be added to each terminator instruction in
861   /// the loop that branches to the loop header.
862   ///
863   /// The LoopID metadata node should have one or more operands and the first
864   /// operand should be the node itself.
865   void setLoopID(MDNode *LoopID) const;
866 
867   /// Add llvm.loop.unroll.disable to this loop's loop id metadata.
868   ///
869   /// Remove existing unroll metadata and add unroll disable metadata to
870   /// indicate the loop has already been unrolled.  This prevents a loop
871   /// from being unrolled more than is directed by a pragma if the loop
872   /// unrolling pass is run more than once (which it generally is).
873   void setLoopAlreadyUnrolled();
874 
875   /// Add llvm.loop.mustprogress to this loop's loop id metadata.
876   void setLoopMustProgress();
877 
878   void dump() const;
879   void dumpVerbose() const;
880 
881   /// Return the debug location of the start of this loop.
882   /// This looks for a BB terminating instruction with a known debug
883   /// location by looking at the preheader and header blocks. If it
884   /// cannot find a terminating instruction with location information,
885   /// it returns an unknown location.
886   DebugLoc getStartLoc() const;
887 
888   /// Return the source code span of the loop.
889   LocRange getLocRange() const;
890 
getName()891   StringRef getName() const {
892     if (BasicBlock *Header = getHeader())
893       if (Header->hasName())
894         return Header->getName();
895     return "<unnamed loop>";
896   }
897 
898 private:
899   Loop() = default;
900 
901   friend class LoopInfoBase<BasicBlock, Loop>;
902   friend class LoopBase<BasicBlock, Loop>;
Loop(BasicBlock * BB)903   explicit Loop(BasicBlock *BB) : LoopBase<BasicBlock, Loop>(BB) {}
904   ~Loop() = default;
905 };
906 
907 //===----------------------------------------------------------------------===//
908 /// This class builds and contains all of the top-level loop
909 /// structures in the specified function.
910 ///
911 
912 template <class BlockT, class LoopT> class LoopInfoBase {
913   // BBMap - Mapping of basic blocks to the inner most loop they occur in
914   DenseMap<const BlockT *, LoopT *> BBMap;
915   std::vector<LoopT *> TopLevelLoops;
916   BumpPtrAllocator LoopAllocator;
917 
918   friend class LoopBase<BlockT, LoopT>;
919   friend class LoopInfo;
920 
921   void operator=(const LoopInfoBase &) = delete;
922   LoopInfoBase(const LoopInfoBase &) = delete;
923 
924 public:
925   LoopInfoBase() = default;
~LoopInfoBase()926   ~LoopInfoBase() { releaseMemory(); }
927 
LoopInfoBase(LoopInfoBase && Arg)928   LoopInfoBase(LoopInfoBase &&Arg)
929       : BBMap(std::move(Arg.BBMap)),
930         TopLevelLoops(std::move(Arg.TopLevelLoops)),
931         LoopAllocator(std::move(Arg.LoopAllocator)) {
932     // We have to clear the arguments top level loops as we've taken ownership.
933     Arg.TopLevelLoops.clear();
934   }
935   LoopInfoBase &operator=(LoopInfoBase &&RHS) {
936     BBMap = std::move(RHS.BBMap);
937 
938     for (auto *L : TopLevelLoops)
939       L->~LoopT();
940 
941     TopLevelLoops = std::move(RHS.TopLevelLoops);
942     LoopAllocator = std::move(RHS.LoopAllocator);
943     RHS.TopLevelLoops.clear();
944     return *this;
945   }
946 
releaseMemory()947   void releaseMemory() {
948     BBMap.clear();
949 
950     for (auto *L : TopLevelLoops)
951       L->~LoopT();
952     TopLevelLoops.clear();
953     LoopAllocator.Reset();
954   }
955 
AllocateLoop(ArgsTy &&...Args)956   template <typename... ArgsTy> LoopT *AllocateLoop(ArgsTy &&... Args) {
957     LoopT *Storage = LoopAllocator.Allocate<LoopT>();
958     return new (Storage) LoopT(std::forward<ArgsTy>(Args)...);
959   }
960 
961   /// iterator/begin/end - The interface to the top-level loops in the current
962   /// function.
963   ///
964   typedef typename std::vector<LoopT *>::const_iterator iterator;
965   typedef
966       typename std::vector<LoopT *>::const_reverse_iterator reverse_iterator;
begin()967   iterator begin() const { return TopLevelLoops.begin(); }
end()968   iterator end() const { return TopLevelLoops.end(); }
rbegin()969   reverse_iterator rbegin() const { return TopLevelLoops.rbegin(); }
rend()970   reverse_iterator rend() const { return TopLevelLoops.rend(); }
empty()971   bool empty() const { return TopLevelLoops.empty(); }
972 
973   /// Return all of the loops in the function in preorder across the loop
974   /// nests, with siblings in forward program order.
975   ///
976   /// Note that because loops form a forest of trees, preorder is equivalent to
977   /// reverse postorder.
978   SmallVector<LoopT *, 4> getLoopsInPreorder() const;
979 
980   /// Return all of the loops in the function in preorder across the loop
981   /// nests, with siblings in *reverse* program order.
982   ///
983   /// Note that because loops form a forest of trees, preorder is equivalent to
984   /// reverse postorder.
985   ///
986   /// Also note that this is *not* a reverse preorder. Only the siblings are in
987   /// reverse program order.
988   SmallVector<LoopT *, 4> getLoopsInReverseSiblingPreorder() const;
989 
990   /// Return the inner most loop that BB lives in. If a basic block is in no
991   /// loop (for example the entry node), null is returned.
getLoopFor(const BlockT * BB)992   LoopT *getLoopFor(const BlockT *BB) const { return BBMap.lookup(BB); }
993 
994   /// Same as getLoopFor.
995   const LoopT *operator[](const BlockT *BB) const { return getLoopFor(BB); }
996 
997   /// Return the loop nesting level of the specified block. A depth of 0 means
998   /// the block is not inside any loop.
getLoopDepth(const BlockT * BB)999   unsigned getLoopDepth(const BlockT *BB) const {
1000     const LoopT *L = getLoopFor(BB);
1001     return L ? L->getLoopDepth() : 0;
1002   }
1003 
1004   // True if the block is a loop header node
isLoopHeader(const BlockT * BB)1005   bool isLoopHeader(const BlockT *BB) const {
1006     const LoopT *L = getLoopFor(BB);
1007     return L && L->getHeader() == BB;
1008   }
1009 
1010   /// Return the top-level loops.
getTopLevelLoops()1011   const std::vector<LoopT *> &getTopLevelLoops() const { return TopLevelLoops; }
1012 
1013   /// Return the top-level loops.
getTopLevelLoopsVector()1014   std::vector<LoopT *> &getTopLevelLoopsVector() { return TopLevelLoops; }
1015 
1016   /// This removes the specified top-level loop from this loop info object.
1017   /// The loop is not deleted, as it will presumably be inserted into
1018   /// another loop.
removeLoop(iterator I)1019   LoopT *removeLoop(iterator I) {
1020     assert(I != end() && "Cannot remove end iterator!");
1021     LoopT *L = *I;
1022     assert(L->isOutermost() && "Not a top-level loop!");
1023     TopLevelLoops.erase(TopLevelLoops.begin() + (I - begin()));
1024     return L;
1025   }
1026 
1027   /// Change the top-level loop that contains BB to the specified loop.
1028   /// This should be used by transformations that restructure the loop hierarchy
1029   /// tree.
changeLoopFor(BlockT * BB,LoopT * L)1030   void changeLoopFor(BlockT *BB, LoopT *L) {
1031     if (!L) {
1032       BBMap.erase(BB);
1033       return;
1034     }
1035     BBMap[BB] = L;
1036   }
1037 
1038   /// Replace the specified loop in the top-level loops list with the indicated
1039   /// loop.
changeTopLevelLoop(LoopT * OldLoop,LoopT * NewLoop)1040   void changeTopLevelLoop(LoopT *OldLoop, LoopT *NewLoop) {
1041     auto I = find(TopLevelLoops, OldLoop);
1042     assert(I != TopLevelLoops.end() && "Old loop not at top level!");
1043     *I = NewLoop;
1044     assert(!NewLoop->ParentLoop && !OldLoop->ParentLoop &&
1045            "Loops already embedded into a subloop!");
1046   }
1047 
1048   /// This adds the specified loop to the collection of top-level loops.
addTopLevelLoop(LoopT * New)1049   void addTopLevelLoop(LoopT *New) {
1050     assert(New->isOutermost() && "Loop already in subloop!");
1051     TopLevelLoops.push_back(New);
1052   }
1053 
1054   /// This method completely removes BB from all data structures,
1055   /// including all of the Loop objects it is nested in and our mapping from
1056   /// BasicBlocks to loops.
removeBlock(BlockT * BB)1057   void removeBlock(BlockT *BB) {
1058     auto I = BBMap.find(BB);
1059     if (I != BBMap.end()) {
1060       for (LoopT *L = I->second; L; L = L->getParentLoop())
1061         L->removeBlockFromLoop(BB);
1062 
1063       BBMap.erase(I);
1064     }
1065   }
1066 
1067   // Internals
1068 
isNotAlreadyContainedIn(const LoopT * SubLoop,const LoopT * ParentLoop)1069   static bool isNotAlreadyContainedIn(const LoopT *SubLoop,
1070                                       const LoopT *ParentLoop) {
1071     if (!SubLoop)
1072       return true;
1073     if (SubLoop == ParentLoop)
1074       return false;
1075     return isNotAlreadyContainedIn(SubLoop->getParentLoop(), ParentLoop);
1076   }
1077 
1078   /// Create the loop forest using a stable algorithm.
1079   void analyze(const DominatorTreeBase<BlockT, false> &DomTree);
1080 
1081   // Debugging
1082   void print(raw_ostream &OS) const;
1083 
1084   void verify(const DominatorTreeBase<BlockT, false> &DomTree) const;
1085 
1086   /// Destroy a loop that has been removed from the `LoopInfo` nest.
1087   ///
1088   /// This runs the destructor of the loop object making it invalid to
1089   /// reference afterward. The memory is retained so that the *pointer* to the
1090   /// loop remains valid.
1091   ///
1092   /// The caller is responsible for removing this loop from the loop nest and
1093   /// otherwise disconnecting it from the broader `LoopInfo` data structures.
1094   /// Callers that don't naturally handle this themselves should probably call
1095   /// `erase' instead.
destroy(LoopT * L)1096   void destroy(LoopT *L) {
1097     L->~LoopT();
1098 
1099     // Since LoopAllocator is a BumpPtrAllocator, this Deallocate only poisons
1100     // \c L, but the pointer remains valid for non-dereferencing uses.
1101     LoopAllocator.Deallocate(L);
1102   }
1103 };
1104 
1105 // Implementation in LoopInfoImpl.h
1106 extern template class LoopInfoBase<BasicBlock, Loop>;
1107 
1108 class LoopInfo : public LoopInfoBase<BasicBlock, Loop> {
1109   typedef LoopInfoBase<BasicBlock, Loop> BaseT;
1110 
1111   friend class LoopBase<BasicBlock, Loop>;
1112 
1113   void operator=(const LoopInfo &) = delete;
1114   LoopInfo(const LoopInfo &) = delete;
1115 
1116 public:
1117   LoopInfo() = default;
1118   explicit LoopInfo(const DominatorTreeBase<BasicBlock, false> &DomTree);
1119 
LoopInfo(LoopInfo && Arg)1120   LoopInfo(LoopInfo &&Arg) : BaseT(std::move(static_cast<BaseT &>(Arg))) {}
1121   LoopInfo &operator=(LoopInfo &&RHS) {
1122     BaseT::operator=(std::move(static_cast<BaseT &>(RHS)));
1123     return *this;
1124   }
1125 
1126   /// Handle invalidation explicitly.
1127   bool invalidate(Function &F, const PreservedAnalyses &PA,
1128                   FunctionAnalysisManager::Invalidator &);
1129 
1130   // Most of the public interface is provided via LoopInfoBase.
1131 
1132   /// Update LoopInfo after removing the last backedge from a loop. This updates
1133   /// the loop forest and parent loops for each block so that \c L is no longer
1134   /// referenced, but does not actually delete \c L immediately. The pointer
1135   /// will remain valid until this LoopInfo's memory is released.
1136   void erase(Loop *L);
1137 
1138   /// Returns true if replacing From with To everywhere is guaranteed to
1139   /// preserve LCSSA form.
replacementPreservesLCSSAForm(Instruction * From,Value * To)1140   bool replacementPreservesLCSSAForm(Instruction *From, Value *To) {
1141     // Preserving LCSSA form is only problematic if the replacing value is an
1142     // instruction.
1143     Instruction *I = dyn_cast<Instruction>(To);
1144     if (!I)
1145       return true;
1146     // If both instructions are defined in the same basic block then replacement
1147     // cannot break LCSSA form.
1148     if (I->getParent() == From->getParent())
1149       return true;
1150     // If the instruction is not defined in a loop then it can safely replace
1151     // anything.
1152     Loop *ToLoop = getLoopFor(I->getParent());
1153     if (!ToLoop)
1154       return true;
1155     // If the replacing instruction is defined in the same loop as the original
1156     // instruction, or in a loop that contains it as an inner loop, then using
1157     // it as a replacement will not break LCSSA form.
1158     return ToLoop->contains(getLoopFor(From->getParent()));
1159   }
1160 
1161   /// Checks if moving a specific instruction can break LCSSA in any loop.
1162   ///
1163   /// Return true if moving \p Inst to before \p NewLoc will break LCSSA,
1164   /// assuming that the function containing \p Inst and \p NewLoc is currently
1165   /// in LCSSA form.
movementPreservesLCSSAForm(Instruction * Inst,Instruction * NewLoc)1166   bool movementPreservesLCSSAForm(Instruction *Inst, Instruction *NewLoc) {
1167     assert(Inst->getFunction() == NewLoc->getFunction() &&
1168            "Can't reason about IPO!");
1169 
1170     auto *OldBB = Inst->getParent();
1171     auto *NewBB = NewLoc->getParent();
1172 
1173     // Movement within the same loop does not break LCSSA (the equality check is
1174     // to avoid doing a hashtable lookup in case of intra-block movement).
1175     if (OldBB == NewBB)
1176       return true;
1177 
1178     auto *OldLoop = getLoopFor(OldBB);
1179     auto *NewLoop = getLoopFor(NewBB);
1180 
1181     if (OldLoop == NewLoop)
1182       return true;
1183 
1184     // Check if Outer contains Inner; with the null loop counting as the
1185     // "outermost" loop.
1186     auto Contains = [](const Loop *Outer, const Loop *Inner) {
1187       return !Outer || Outer->contains(Inner);
1188     };
1189 
1190     // To check that the movement of Inst to before NewLoc does not break LCSSA,
1191     // we need to check two sets of uses for possible LCSSA violations at
1192     // NewLoc: the users of NewInst, and the operands of NewInst.
1193 
1194     // If we know we're hoisting Inst out of an inner loop to an outer loop,
1195     // then the uses *of* Inst don't need to be checked.
1196 
1197     if (!Contains(NewLoop, OldLoop)) {
1198       for (Use &U : Inst->uses()) {
1199         auto *UI = cast<Instruction>(U.getUser());
1200         auto *UBB = isa<PHINode>(UI) ? cast<PHINode>(UI)->getIncomingBlock(U)
1201                                      : UI->getParent();
1202         if (UBB != NewBB && getLoopFor(UBB) != NewLoop)
1203           return false;
1204       }
1205     }
1206 
1207     // If we know we're sinking Inst from an outer loop into an inner loop, then
1208     // the *operands* of Inst don't need to be checked.
1209 
1210     if (!Contains(OldLoop, NewLoop)) {
1211       // See below on why we can't handle phi nodes here.
1212       if (isa<PHINode>(Inst))
1213         return false;
1214 
1215       for (Use &U : Inst->operands()) {
1216         auto *DefI = dyn_cast<Instruction>(U.get());
1217         if (!DefI)
1218           return false;
1219 
1220         // This would need adjustment if we allow Inst to be a phi node -- the
1221         // new use block won't simply be NewBB.
1222 
1223         auto *DefBlock = DefI->getParent();
1224         if (DefBlock != NewBB && getLoopFor(DefBlock) != NewLoop)
1225           return false;
1226       }
1227     }
1228 
1229     return true;
1230   }
1231 
1232   // Return true if a new use of V added in ExitBB would require an LCSSA PHI
1233   // to be inserted at the begining of the block.  Note that V is assumed to
1234   // dominate ExitBB, and ExitBB must be the exit block of some loop.  The
1235   // IR is assumed to be in LCSSA form before the planned insertion.
1236   bool wouldBeOutOfLoopUseRequiringLCSSA(const Value *V,
1237                                          const BasicBlock *ExitBB) const;
1238 
1239 };
1240 
1241 /// Enable verification of loop info.
1242 ///
1243 /// The flag enables checks which are expensive and are disabled by default
1244 /// unless the `EXPENSIVE_CHECKS` macro is defined.  The `-verify-loop-info`
1245 /// flag allows the checks to be enabled selectively without re-compilation.
1246 extern bool VerifyLoopInfo;
1247 
1248 // Allow clients to walk the list of nested loops...
1249 template <> struct GraphTraits<const Loop *> {
1250   typedef const Loop *NodeRef;
1251   typedef LoopInfo::iterator ChildIteratorType;
1252 
1253   static NodeRef getEntryNode(const Loop *L) { return L; }
1254   static ChildIteratorType child_begin(NodeRef N) { return N->begin(); }
1255   static ChildIteratorType child_end(NodeRef N) { return N->end(); }
1256 };
1257 
1258 template <> struct GraphTraits<Loop *> {
1259   typedef Loop *NodeRef;
1260   typedef LoopInfo::iterator ChildIteratorType;
1261 
1262   static NodeRef getEntryNode(Loop *L) { return L; }
1263   static ChildIteratorType child_begin(NodeRef N) { return N->begin(); }
1264   static ChildIteratorType child_end(NodeRef N) { return N->end(); }
1265 };
1266 
1267 /// Analysis pass that exposes the \c LoopInfo for a function.
1268 class LoopAnalysis : public AnalysisInfoMixin<LoopAnalysis> {
1269   friend AnalysisInfoMixin<LoopAnalysis>;
1270   static AnalysisKey Key;
1271 
1272 public:
1273   typedef LoopInfo Result;
1274 
1275   LoopInfo run(Function &F, FunctionAnalysisManager &AM);
1276 };
1277 
1278 /// Printer pass for the \c LoopAnalysis results.
1279 class LoopPrinterPass : public PassInfoMixin<LoopPrinterPass> {
1280   raw_ostream &OS;
1281 
1282 public:
1283   explicit LoopPrinterPass(raw_ostream &OS) : OS(OS) {}
1284   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
1285 };
1286 
1287 /// Verifier pass for the \c LoopAnalysis results.
1288 struct LoopVerifierPass : public PassInfoMixin<LoopVerifierPass> {
1289   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
1290 };
1291 
1292 /// The legacy pass manager's analysis pass to compute loop information.
1293 class LoopInfoWrapperPass : public FunctionPass {
1294   LoopInfo LI;
1295 
1296 public:
1297   static char ID; // Pass identification, replacement for typeid
1298 
1299   LoopInfoWrapperPass();
1300 
1301   LoopInfo &getLoopInfo() { return LI; }
1302   const LoopInfo &getLoopInfo() const { return LI; }
1303 
1304   /// Calculate the natural loop information for a given function.
1305   bool runOnFunction(Function &F) override;
1306 
1307   void verifyAnalysis() const override;
1308 
1309   void releaseMemory() override { LI.releaseMemory(); }
1310 
1311   void print(raw_ostream &O, const Module *M = nullptr) const override;
1312 
1313   void getAnalysisUsage(AnalysisUsage &AU) const override;
1314 };
1315 
1316 /// Function to print a loop's contents as LLVM's text IR assembly.
1317 void printLoop(Loop &L, raw_ostream &OS, const std::string &Banner = "");
1318 
1319 /// Find and return the loop attribute node for the attribute @p Name in
1320 /// @p LoopID. Return nullptr if there is no such attribute.
1321 MDNode *findOptionMDForLoopID(MDNode *LoopID, StringRef Name);
1322 
1323 /// Find string metadata for a loop.
1324 ///
1325 /// Returns the MDNode where the first operand is the metadata's name. The
1326 /// following operands are the metadata's values. If no metadata with @p Name is
1327 /// found, return nullptr.
1328 MDNode *findOptionMDForLoop(const Loop *TheLoop, StringRef Name);
1329 
1330 std::optional<bool> getOptionalBoolLoopAttribute(const Loop *TheLoop,
1331                                                  StringRef Name);
1332 
1333 /// Returns true if Name is applied to TheLoop and enabled.
1334 bool getBooleanLoopAttribute(const Loop *TheLoop, StringRef Name);
1335 
1336 /// Find named metadata for a loop with an integer value.
1337 std::optional<int> getOptionalIntLoopAttribute(const Loop *TheLoop,
1338                                                StringRef Name);
1339 
1340 /// Find named metadata for a loop with an integer value. Return \p Default if
1341 /// not set.
1342 int getIntLoopAttribute(const Loop *TheLoop, StringRef Name, int Default = 0);
1343 
1344 /// Find string metadata for loop
1345 ///
1346 /// If it has a value (e.g. {"llvm.distribute", 1} return the value as an
1347 /// operand or null otherwise.  If the string metadata is not found return
1348 /// Optional's not-a-value.
1349 std::optional<const MDOperand *> findStringMetadataForLoop(const Loop *TheLoop,
1350                                                            StringRef Name);
1351 
1352 /// Look for the loop attribute that requires progress within the loop.
1353 /// Note: Most consumers probably want "isMustProgress" which checks
1354 /// the containing function attribute too.
1355 bool hasMustProgress(const Loop *L);
1356 
1357 /// Return true if this loop can be assumed to make progress.  (i.e. can't
1358 /// be infinite without side effects without also being undefined)
1359 bool isMustProgress(const Loop *L);
1360 
1361 /// Return true if this loop can be assumed to run for a finite number of
1362 /// iterations.
1363 bool isFinite(const Loop *L);
1364 
1365 /// Return whether an MDNode might represent an access group.
1366 ///
1367 /// Access group metadata nodes have to be distinct and empty. Being
1368 /// always-empty ensures that it never needs to be changed (which -- because
1369 /// MDNodes are designed immutable -- would require creating a new MDNode). Note
1370 /// that this is not a sufficient condition: not every distinct and empty NDNode
1371 /// is representing an access group.
1372 bool isValidAsAccessGroup(MDNode *AccGroup);
1373 
1374 /// Create a new LoopID after the loop has been transformed.
1375 ///
1376 /// This can be used when no follow-up loop attributes are defined
1377 /// (llvm::makeFollowupLoopID returning None) to stop transformations to be
1378 /// applied again.
1379 ///
1380 /// @param Context        The LLVMContext in which to create the new LoopID.
1381 /// @param OrigLoopID     The original LoopID; can be nullptr if the original
1382 ///                       loop has no LoopID.
1383 /// @param RemovePrefixes Remove all loop attributes that have these prefixes.
1384 ///                       Use to remove metadata of the transformation that has
1385 ///                       been applied.
1386 /// @param AddAttrs       Add these loop attributes to the new LoopID.
1387 ///
1388 /// @return A new LoopID that can be applied using Loop::setLoopID().
1389 llvm::MDNode *
1390 makePostTransformationMetadata(llvm::LLVMContext &Context, MDNode *OrigLoopID,
1391                                llvm::ArrayRef<llvm::StringRef> RemovePrefixes,
1392                                llvm::ArrayRef<llvm::MDNode *> AddAttrs);
1393 
1394 } // End llvm namespace
1395 
1396 #endif
1397