[llvm-commits] [llvm] r53089 - /llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp

Devang Patel dpatel at apple.com
Thu Jul 3 00:04:22 PDT 2008


Author: dpatel
Date: Thu Jul  3 02:04:22 2008
New Revision: 53089

URL: http://llvm.org/viewvc/llvm-project?rev=53089&view=rev
Log:
Preserve dom info.

Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp?rev=53089&r1=53088&r2=53089&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnroll.cpp Thu Jul  3 02:04:22 2008
@@ -55,6 +55,12 @@
       AU.addRequired<LoopInfo>();
       AU.addPreservedID(LCSSAID);
       AU.addPreserved<LoopInfo>();
+      // FIXME: Loop unroll requires LCSSA. And LCSSA requires dom info.
+      // If loop unroll does not preserve dom info then LCSSA pass on next
+      // loop will receive invalid dom info.
+      // For now, recreate dom info, if loop is unrolled.
+      AU.addPreserved<DominatorTree>();
+      AU.addPreserved<DominanceFrontier>();
     }
   };
 }
@@ -137,8 +143,17 @@
   }
 
   // Unroll the loop.
+  Function *F = L->getHeader()->getParent();
   if (!UnrollLoop(L, Count, LI, &LPM))
     return false;
 
+  // FIXME: Reconstruct dom info, because it is not preserved properly.
+  DominatorTree *DT = getAnalysisToUpdate<DominatorTree>();
+  if (DT) {
+    DT->runOnFunction(*F);
+    DominanceFrontier *DF = getAnalysisToUpdate<DominanceFrontier>();
+    if (DF)
+      DF->runOnFunction(*F);
+  }
   return true;
 }





More information about the llvm-commits mailing list