<div dir="ltr">What's the reasoning/justification for the original vs the change?<div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 10, 2016 at 12:36 PM, Sebastian Pop <span dir="ltr"><<a href="mailto:sebpop@gmail.com" target="_blank">sebpop@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">sebpop created this revision.<br>
sebpop added reviewers: dberlin, atrick, hfinkel.<br>
sebpop added subscribers: llvm-commits, hiraditya.<br>
Herald added a subscriber: mzolotukhin.<br>
<br>
Loops should be rotated only once.  Passes regression test and llvm test-suite.<br>
<br>
Patch wrote by Aditya Kumar and Sebastian Pop.<br>
<br>
<a href="http://reviews.llvm.org/D21237" rel="noreferrer" target="_blank">http://reviews.llvm.org/D21237</a><br>
<br>
Files:<br>
  llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
<br>
Index: llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
===================================================================<br>
--- llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
+++ llvm/lib/Transforms/Scalar/LoopRotation.cpp<br>
@@ -569,9 +569,8 @@<br>
   return true;<br>
 }<br>
<br>
-/// Rotate \c L as many times as possible. Return true if the loop is rotated<br>
-/// at least once.<br>
-static bool iterativelyRotateLoop(Loop *L, unsigned MaxHeaderSize, LoopInfo *LI,<br>
+/// Rotate loop L.  Return true if the loop is rotated.<br>
+static bool rotateLoop(Loop *L, unsigned MaxHeaderSize, LoopInfo *LI,<br>
                                   const TargetTransformInfo *TTI,<br>
                                   AssumptionCache *AC, DominatorTree *DT,<br>
                                   ScalarEvolution *SE) {<br>
@@ -582,13 +581,8 @@<br>
   // upward. Rotation may not be needed if the loop tail can be folded into the<br>
   // loop exit.<br>
   bool SimplifiedLatch = simplifyLoopLatch(L, LI, DT);<br>
-<br>
-  // One loop can be rotated multiple times.<br>
-  bool MadeChange = false;<br>
-  while (rotateLoop(L, MaxHeaderSize, LI, TTI, AC, DT, SE, SimplifiedLatch)) {<br>
-    MadeChange = true;<br>
-    SimplifiedLatch = false;<br>
-  }<br>
+  bool MadeChange = rotateLoop(L, MaxHeaderSize, LI, TTI, AC, DT, SE,<br>
+                               SimplifiedLatch);<br>
<br>
   // Restore the loop metadata.<br>
   // NB! We presume LoopRotation DOESN'T ADD its own metadata.<br>
@@ -613,7 +607,7 @@<br>
   auto *DT = FAM.getCachedResult<DominatorTreeAnalysis>(*F);<br>
   auto *SE = FAM.getCachedResult<ScalarEvolutionAnalysis>(*F);<br>
<br>
-  bool Changed = iterativelyRotateLoop(&L, MaxHeaderSize, LI, TTI, AC, DT, SE);<br>
+  bool Changed = rotateLoop(&L, MaxHeaderSize, LI, TTI, AC, DT, SE);<br>
   if (!Changed)<br>
     return PreservedAnalyses::all();<br>
   return getLoopPassPreservedAnalyses();<br>
@@ -654,7 +648,7 @@<br>
     auto *SEWP = getAnalysisIfAvailable<ScalarEvolutionWrapperPass>();<br>
     auto *SE = SEWP ? &SEWP->getSE() : nullptr;<br>
<br>
-    return iterativelyRotateLoop(L, MaxHeaderSize, LI, TTI, AC, DT, SE);<br>
+    return rotateLoop(L, MaxHeaderSize, LI, TTI, AC, DT, SE);<br>
   }<br>
 };<br>
 }<br>
<br>
<br>
</blockquote></div><br></div>