A loop may be unswitched multiple times. Reconstruct dom info. at the end.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55806 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp
index 691a67a..1c4bba2 100644
--- a/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -190,6 +190,7 @@
   DF = getAnalysisToUpdate<DominanceFrontier>();
   DT = getAnalysisToUpdate<DominatorTree>();
   currentLoop = L;
+  Function *F = currentLoop->getHeader()->getParent();
   bool Changed = false;
   do {
     assert(currentLoop->isLCSSAForm());
@@ -197,6 +198,13 @@
     Changed |= processCurrentLoop();
   } while(redoLoop);
 
+  if (Changed) {
+    // FIXME: Reconstruct dom info, because it is not preserved properly.
+    if (DT)
+      DT->runOnFunction(*F);
+    if (DF)
+      DF->runOnFunction(*F);
+  }
   return Changed;
 }
 
@@ -450,11 +458,6 @@
     UnswitchNontrivialCondition(LoopCond, Val, currentLoop);
   }
 
-  // FIXME: Reconstruct dom info, because it is not preserved properly.
-  if (DT)
-    DT->runOnFunction(*F);
-  if (DF)
-    DF->runOnFunction(*F);
   return true;
 }