[PATCH] D15922: [Cloning] rename cloneLoopWithPreheader() and add assert to ensure no sub-loops

Vaivaswatha Nagaraj via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 16 21:17:49 PDT 2016


vaivaswatha updated this revision to Diff 53997.
vaivaswatha added a comment.

Updating based on review comments


http://reviews.llvm.org/D15922

Files:
  include/llvm/Transforms/Utils/Cloning.h
  lib/Transforms/Scalar/LoopDistribute.cpp
  lib/Transforms/Utils/CloneFunction.cpp
  lib/Transforms/Utils/LoopVersioning.cpp

Index: lib/Transforms/Utils/LoopVersioning.cpp
===================================================================
--- lib/Transforms/Utils/LoopVersioning.cpp
+++ lib/Transforms/Utils/LoopVersioning.cpp
@@ -102,7 +102,7 @@
   // block is a join between the two loops.
   SmallVector<BasicBlock *, 8> NonVersionedLoopBlocks;
   NonVersionedLoop =
-      cloneLoopWithPreheader(PH, RuntimeCheckBB, VersionedLoop, VMap,
+      cloneInnerLoopWithPreheader(PH, RuntimeCheckBB, VersionedLoop, VMap,
                              ".lver.orig", LI, DT, NonVersionedLoopBlocks);
   remapInstructionsInBlocks(NonVersionedLoopBlocks, VMap);
 
Index: lib/Transforms/Utils/CloneFunction.cpp
===================================================================
--- lib/Transforms/Utils/CloneFunction.cpp
+++ lib/Transforms/Utils/CloneFunction.cpp
@@ -702,11 +702,13 @@
 ///
 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
 /// \p LoopDomBB.  Insert the new blocks before block specified in \p Before.
-Loop *llvm::cloneLoopWithPreheader(BasicBlock *Before, BasicBlock *LoopDomBB,
+/// \p OrigLoop should not have sub-loops.
+Loop *llvm::cloneInnerLoopWithPreheader(BasicBlock *Before, BasicBlock *LoopDomBB,
                                    Loop *OrigLoop, ValueToValueMapTy &VMap,
                                    const Twine &NameSuffix, LoopInfo *LI,
                                    DominatorTree *DT,
                                    SmallVectorImpl<BasicBlock *> &Blocks) {
+  assert(OrigLoop->getSubLoops().empty() && "Loop to be cloned cannot have inner loop");
   Function *F = OrigLoop->getHeader()->getParent();
   Loop *ParentLoop = OrigLoop->getParentLoop();
 
Index: lib/Transforms/Scalar/LoopDistribute.cpp
===================================================================
--- lib/Transforms/Scalar/LoopDistribute.cpp
+++ lib/Transforms/Scalar/LoopDistribute.cpp
@@ -122,10 +122,10 @@
   ///
   /// Updates LoopInfo and DominatorTree using the information that block \p
   /// LoopDomBB dominates the loop.
-  Loop *cloneLoopWithPreheader(BasicBlock *InsertBefore, BasicBlock *LoopDomBB,
+  Loop *cloneInnerLoopWithPreheader(BasicBlock *InsertBefore, BasicBlock *LoopDomBB,
                                unsigned Index, LoopInfo *LI,
                                DominatorTree *DT) {
-    ClonedLoop = ::cloneLoopWithPreheader(InsertBefore, LoopDomBB, OrigLoop,
+    ClonedLoop = ::cloneInnerLoopWithPreheader(InsertBefore, LoopDomBB, OrigLoop,
                                           VMap, Twine(".ldist") + Twine(Index),
                                           LI, DT, ClonedLoopBlocks);
     return ClonedLoop;
@@ -403,7 +403,7 @@
          I != E; ++I, --Index, TopPH = NewLoop->getLoopPreheader()) {
       auto *Part = &*I;
 
-      NewLoop = Part->cloneLoopWithPreheader(TopPH, Pred, Index, LI, DT);
+      NewLoop = Part->cloneInnerLoopWithPreheader(TopPH, Pred, Index, LI, DT);
 
       Part->getVMap()[ExitBlock] = TopPH;
       Part->remapInstructions();
Index: include/llvm/Transforms/Utils/Cloning.h
===================================================================
--- include/llvm/Transforms/Utils/Cloning.h
+++ include/llvm/Transforms/Utils/Cloning.h
@@ -221,7 +221,8 @@
 ///
 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
 /// \p LoopDomBB.  Insert the new blocks before block specified in \p Before.
-Loop *cloneLoopWithPreheader(BasicBlock *Before, BasicBlock *LoopDomBB,
+/// \p OrigLoop should not have sub-loops.
+Loop *cloneInnerLoopWithPreheader(BasicBlock *Before, BasicBlock *LoopDomBB,
                              Loop *OrigLoop, ValueToValueMapTy &VMap,
                              const Twine &NameSuffix, LoopInfo *LI,
                              DominatorTree *DT,


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D15922.53997.patch
Type: text/x-patch
Size: 3794 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160417/971e2a6e/attachment.bin>


More information about the llvm-commits mailing list