]> granicus.if.org Git - llvm/commitdiff
[LICM] Only recompute LCSSA when we actually promoted something.
authorMichael Kuperstein <mkuper@google.com>
Thu, 29 Dec 2016 22:37:13 +0000 (22:37 +0000)
committerMichael Kuperstein <mkuper@google.com>
Thu, 29 Dec 2016 22:37:13 +0000 (22:37 +0000)
We want to recompute LCSSA only when we actually promoted a value.
This means we only need to look at changes made by promotion when
deciding whether to recompute it or not, not at regular sinking/hoisting.

(This was what the code was documented as doing, just not what it did)

Hopefully NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290726 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/LICM.cpp

index c981a8ff96b0c3579d1dcc2e83372346080aa5bb..30a703799688722c1ebf84a85494f91ce2c628ce 100644 (file)
@@ -255,9 +255,11 @@ bool LoopInvariantCodeMotion::runOnLoop(Loop *L, AliasAnalysis *AA,
     SmallVector<Instruction *, 8> InsertPts;
     PredIteratorCache PIC;
 
+    bool Promoted = false;
+
     // Loop over all of the alias sets in the tracker object.
     for (AliasSet &AS : *CurAST)
-      Changed |= promoteLoopAccessesToScalars(
+      Promoted |= promoteLoopAccessesToScalars(
           AS, ExitBlocks, InsertPts, PIC, LI, DT, TLI, L, CurAST, &SafetyInfo);
 
     // Once we have promoted values across the loop body we have to recursively
@@ -266,9 +268,10 @@ bool LoopInvariantCodeMotion::runOnLoop(Loop *L, AliasAnalysis *AA,
     // FIXME: This is really heavy handed. It would be a bit better to use an
     // SSAUpdater strategy during promotion that was LCSSA aware and reformed
     // it as it went.
-    if (Changed) {
+    if (Promoted)
       formLCSSARecursively(*L, *DT, LI, SE);
-    }
+
+    Changed |= Promoted;
   }
 
   // Check that neither this loop nor its parent have had LCSSA broken. LICM is