1 //===- LoopPass.cpp - Loop Pass and Loop Pass Manager ---------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements LoopPass and LPPassManager. All loop optimization
11 // and transformation passes are derived from LoopPass. LPPassManager is
12 // responsible for managing LoopPasses.
14 //===----------------------------------------------------------------------===//
16 #include "llvm/Analysis/LoopPass.h"
17 #include "llvm/Assembly/PrintModulePass.h"
18 #include "llvm/Support/Debug.h"
19 #include "llvm/Support/Timer.h"
24 /// PrintLoopPass - Print a Function corresponding to a Loop.
26 class PrintLoopPass : public LoopPass {
29 raw_ostream &Out; // raw_ostream to print on.
33 PrintLoopPass() : LoopPass(ID), Out(dbgs()) {}
34 PrintLoopPass(const std::string &B, raw_ostream &o)
35 : LoopPass(ID), Banner(B), Out(o) {}
37 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
41 bool runOnLoop(Loop *L, LPPassManager &) {
43 for (Loop::block_iterator b = L->block_begin(), be = L->block_end();
52 char PrintLoopPass::ID = 0;
55 //===----------------------------------------------------------------------===//
59 char LPPassManager::ID = 0;
61 LPPassManager::LPPassManager(int Depth)
62 : FunctionPass(ID), PMDataManager(Depth) {
69 /// Delete loop from the loop queue and loop hierarchy (LoopInfo).
70 void LPPassManager::deleteLoopFromQueue(Loop *L) {
72 if (Loop *ParentLoop = L->getParentLoop()) { // Not a top-level loop.
73 // Reparent all of the blocks in this loop. Since BBLoop had a parent,
74 // they are now all in it.
75 for (Loop::block_iterator I = L->block_begin(), E = L->block_end();
77 if (LI->getLoopFor(*I) == L) // Don't change blocks in subloops.
78 LI->changeLoopFor(*I, ParentLoop);
80 // Remove the loop from its parent loop.
81 for (Loop::iterator I = ParentLoop->begin(), E = ParentLoop->end();;
83 assert(I != E && "Couldn't find loop");
85 ParentLoop->removeChildLoop(I);
90 // Move all subloops into the parent loop.
92 ParentLoop->addChildLoop(L->removeChildLoop(L->end()-1));
94 // Reparent all of the blocks in this loop. Since BBLoop had no parent,
95 // they no longer in a loop at all.
97 for (unsigned i = 0; i != L->getBlocks().size(); ++i) {
98 // Don't change blocks in subloops.
99 if (LI->getLoopFor(L->getBlocks()[i]) == L) {
100 LI->removeBlock(L->getBlocks()[i]);
105 // Remove the loop from the top-level LoopInfo object.
106 for (LoopInfo::iterator I = LI->begin(), E = LI->end();; ++I) {
107 assert(I != E && "Couldn't find loop");
114 // Move all of the subloops to the top-level.
116 LI->addTopLevelLoop(L->removeChildLoop(L->end()-1));
121 // If L is current loop then skip rest of the passes and let
122 // runOnFunction remove L from LQ. Otherwise, remove L from LQ now
123 // and continue applying other passes on CurrentLoop.
124 if (CurrentLoop == L) {
129 for (std::deque<Loop *>::iterator I = LQ.begin(),
130 E = LQ.end(); I != E; ++I) {
138 // Inset loop into loop nest (LoopInfo) and loop queue (LQ).
139 void LPPassManager::insertLoop(Loop *L, Loop *ParentLoop) {
141 assert (CurrentLoop != L && "Cannot insert CurrentLoop");
143 // Insert into loop nest
145 ParentLoop->addChildLoop(L);
147 LI->addTopLevelLoop(L);
149 insertLoopIntoQueue(L);
152 void LPPassManager::insertLoopIntoQueue(Loop *L) {
153 // Insert L into loop queue
154 if (L == CurrentLoop)
156 else if (!L->getParentLoop())
157 // This is top level loop.
160 // Insert L after the parent loop.
161 for (std::deque<Loop *>::iterator I = LQ.begin(),
162 E = LQ.end(); I != E; ++I) {
163 if (*I == L->getParentLoop()) {
164 // deque does not support insert after.
173 // Reoptimize this loop. LPPassManager will re-insert this loop into the
174 // queue. This allows LoopPass to change loop nest for the loop. This
175 // utility may send LPPassManager into infinite loops so use caution.
176 void LPPassManager::redoLoop(Loop *L) {
177 assert (CurrentLoop == L && "Can redo only CurrentLoop");
181 /// cloneBasicBlockSimpleAnalysis - Invoke cloneBasicBlockAnalysis hook for
183 void LPPassManager::cloneBasicBlockSimpleAnalysis(BasicBlock *From,
184 BasicBlock *To, Loop *L) {
185 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
186 LoopPass *LP = getContainedPass(Index);
187 LP->cloneBasicBlockAnalysis(From, To, L);
191 /// deleteSimpleAnalysisValue - Invoke deleteAnalysisValue hook for all passes.
192 void LPPassManager::deleteSimpleAnalysisValue(Value *V, Loop *L) {
193 if (BasicBlock *BB = dyn_cast<BasicBlock>(V)) {
194 for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE;
196 Instruction &I = *BI;
197 deleteSimpleAnalysisValue(&I, L);
200 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
201 LoopPass *LP = getContainedPass(Index);
202 LP->deleteAnalysisValue(V, L);
207 // Recurse through all subloops and all loops into LQ.
208 static void addLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) {
210 for (Loop::iterator I = L->begin(), E = L->end(); I != E; ++I)
211 addLoopIntoQueue(*I, LQ);
214 /// Pass Manager itself does not invalidate any analysis info.
215 void LPPassManager::getAnalysisUsage(AnalysisUsage &Info) const {
216 // LPPassManager needs LoopInfo. In the long term LoopInfo class will
217 // become part of LPPassManager.
218 Info.addRequired<LoopInfo>();
219 Info.setPreservesAll();
222 /// run - Execute all of the passes scheduled for execution. Keep track of
223 /// whether any of the passes modifies the function, and if so, return true.
224 bool LPPassManager::runOnFunction(Function &F) {
225 LI = &getAnalysis<LoopInfo>();
226 bool Changed = false;
228 // Collect inherited analysis from Module level pass manager.
229 populateInheritedAnalysis(TPM->activeStack);
231 // Populate Loop Queue
232 for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I)
233 addLoopIntoQueue(*I, LQ);
235 if (LQ.empty()) // No loops, skip calling finalizers
239 for (std::deque<Loop *>::const_iterator I = LQ.begin(), E = LQ.end();
242 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
243 LoopPass *P = getContainedPass(Index);
244 Changed |= P->doInitialization(L, *this);
249 while (!LQ.empty()) {
251 CurrentLoop = LQ.back();
252 skipThisLoop = false;
253 redoThisLoop = false;
255 // Run all passes on the current Loop.
256 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
257 LoopPass *P = getContainedPass(Index);
259 dumpPassInfo(P, EXECUTION_MSG, ON_LOOP_MSG,
260 CurrentLoop->getHeader()->getName());
263 initializeAnalysisImpl(P);
266 PassManagerPrettyStackEntry X(P, *CurrentLoop->getHeader());
267 TimeRegion PassTimer(getPassTimer(P));
269 Changed |= P->runOnLoop(CurrentLoop, *this);
273 dumpPassInfo(P, MODIFICATION_MSG, ON_LOOP_MSG,
274 skipThisLoop ? "<deleted>" :
275 CurrentLoop->getHeader()->getName());
279 // Manually check that this loop is still healthy. This is done
280 // instead of relying on LoopInfo::verifyLoop since LoopInfo
281 // is a function pass and it's really expensive to verify every
282 // loop in the function every time. That level of checking can be
283 // enabled with the -verify-loop-info option.
285 TimeRegion PassTimer(getPassTimer(LI));
286 CurrentLoop->verifyLoop();
289 // Then call the regular verifyAnalysis functions.
290 verifyPreservedAnalysis(P);
293 removeNotPreservedAnalysis(P);
294 recordAvailableAnalysis(P);
296 skipThisLoop ? "<deleted>" :
297 CurrentLoop->getHeader()->getName(),
301 // Do not run other passes on this loop.
305 // If the loop was deleted, release all the loop passes. This frees up
306 // some memory, and avoids trouble with the pass manager trying to call
307 // verifyAnalysis on them.
309 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
310 Pass *P = getContainedPass(Index);
311 freePass(P, "<deleted>", ON_LOOP_MSG);
314 // Pop the loop from queue after running all passes.
318 LQ.push_back(CurrentLoop);
322 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
323 LoopPass *P = getContainedPass(Index);
324 Changed |= P->doFinalization();
330 /// Print passes managed by this manager
331 void LPPassManager::dumpPassStructure(unsigned Offset) {
332 errs().indent(Offset*2) << "Loop Pass Manager\n";
333 for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
334 Pass *P = getContainedPass(Index);
335 P->dumpPassStructure(Offset + 1);
336 dumpLastUses(P, Offset+1);
341 //===----------------------------------------------------------------------===//
344 Pass *LoopPass::createPrinterPass(raw_ostream &O,
345 const std::string &Banner) const {
346 return new PrintLoopPass(Banner, O);
349 // Check if this pass is suitable for the current LPPassManager, if
350 // available. This pass P is not suitable for a LPPassManager if P
351 // is not preserving higher level analysis info used by other
352 // LPPassManager passes. In such case, pop LPPassManager from the
353 // stack. This will force assignPassManager() to create new
354 // LPPassManger as expected.
355 void LoopPass::preparePassManager(PMStack &PMS) {
357 // Find LPPassManager
358 while (!PMS.empty() &&
359 PMS.top()->getPassManagerType() > PMT_LoopPassManager)
362 // If this pass is destroying high level information that is used
363 // by other passes that are managed by LPM then do not insert
364 // this pass in current LPM. Use new LPPassManager.
365 if (PMS.top()->getPassManagerType() == PMT_LoopPassManager &&
366 !PMS.top()->preserveHigherLevelAnalysis(this))
370 /// Assign pass manager to manage this pass.
371 void LoopPass::assignPassManager(PMStack &PMS,
372 PassManagerType PreferredType) {
373 // Find LPPassManager
374 while (!PMS.empty() &&
375 PMS.top()->getPassManagerType() > PMT_LoopPassManager)
379 if (PMS.top()->getPassManagerType() == PMT_LoopPassManager)
380 LPPM = (LPPassManager*)PMS.top();
382 // Create new Loop Pass Manager if it does not exist.
383 assert (!PMS.empty() && "Unable to create Loop Pass Manager");
384 PMDataManager *PMD = PMS.top();
386 // [1] Create new Call Graph Pass Manager
387 LPPM = new LPPassManager(PMD->getDepth() + 1);
388 LPPM->populateInheritedAnalysis(PMS);
390 // [2] Set up new manager's top level manager
391 PMTopLevelManager *TPM = PMD->getTopLevelManager();
392 TPM->addIndirectPassManager(LPPM);
394 // [3] Assign manager to manage this new manager. This may create
395 // and push new managers into PMS
396 Pass *P = LPPM->getAsPass();
397 TPM->schedulePass(P);
399 // [4] Push new manager into PMS