From e0907c581640cb1034e10ebe42d1ac067d44de30 Mon Sep 17 00:00:00 2001 From: Stefanos Baziotis Date: Fri, 21 Feb 2020 17:07:53 -0600 Subject: [PATCH] [Analysis][Docs] Parents of loops documentation. Recently I had to use it and although one assumes it returns null if there's no parent loop, I think it helps to doc it. Reviewed By: Meinersbur Differential Revision: https://reviews.llvm.org/D74890 --- docs/LoopTerminology.rst | 3 +++ include/llvm/Analysis/LoopInfo.h | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/docs/LoopTerminology.rst b/docs/LoopTerminology.rst index 991282e5051..e33a019da3c 100644 --- a/docs/LoopTerminology.rst +++ b/docs/LoopTerminology.rst @@ -43,6 +43,9 @@ Note that there are some important implications of this definition: * Any two loops are either fully disjoint (no intersecting blocks), or one must be a sub-loop of the other. +* Loops in a function form a forest. One implication of this fact + is that a loop either has no parent or a single parent. + A loop may have an arbitrary number of exits, both explicit (via control flow) and implicit (via throwing calls which transfer control out of the containing function). There is no special requirement on diff --git a/include/llvm/Analysis/LoopInfo.h b/include/llvm/Analysis/LoopInfo.h index a01045124c7..824488e9ead 100644 --- a/include/llvm/Analysis/LoopInfo.h +++ b/include/llvm/Analysis/LoopInfo.h @@ -103,6 +103,14 @@ public: return D; } BlockT *getHeader() const { return getBlocks().front(); } + /// Return the parent loop if it exists or nullptr for top + /// level loops. + + /// A loop is either top-level in a function (that is, it is not + /// contained in any other loop) or it is entirely enclosed in + /// some other loop. + /// If a loop is top-level, it has no parent, otherwise its + /// parent is the innermost loop in which it is enclosed. LoopT *getParentLoop() const { return ParentLoop; } /// This is a raw interface for bypassing addChildLoop.