From: Devang Patel Date: Thu, 3 Jul 2008 07:04:22 +0000 (+0000) Subject: Preserve dom info. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=98260a474c7a6252611f8e6536b7d40e41f43621;p=oota-llvm.git Preserve dom info. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53089 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/LoopUnroll.cpp b/lib/Transforms/Scalar/LoopUnroll.cpp index 1104c18f0e0..492db4db097 100644 --- a/lib/Transforms/Scalar/LoopUnroll.cpp +++ b/lib/Transforms/Scalar/LoopUnroll.cpp @@ -55,6 +55,12 @@ namespace { AU.addRequired(); AU.addPreservedID(LCSSAID); AU.addPreserved(); + // 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(); + AU.addPreserved(); } }; } @@ -137,8 +143,17 @@ bool LoopUnroll::runOnLoop(Loop *L, LPPassManager &LPM) { } // 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(); + if (DT) { + DT->runOnFunction(*F); + DominanceFrontier *DF = getAnalysisToUpdate(); + if (DF) + DF->runOnFunction(*F); + } return true; }