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/DebugInfoProbe.h"
18 #include "llvm/Assembly/PrintModulePass.h"
19 #include "llvm/Support/Debug.h"
20 #include "llvm/Support/ManagedStatic.h"
21 #include "llvm/Support/Timer.h"
26 /// PrintLoopPass - Print a Function corresponding to a Loop.
28 class PrintLoopPass
: public LoopPass
{
31 raw_ostream
&Out
; // raw_ostream to print on.
35 PrintLoopPass(const std::string
&B
, raw_ostream
&o
)
36 : LoopPass(ID
), Banner(B
), Out(o
) {}
38 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
42 bool runOnLoop(Loop
*L
, LPPassManager
&) {
44 for (Loop::block_iterator b
= L
->block_begin(), be
= L
->block_end();
53 char PrintLoopPass::ID
= 0;
56 //===----------------------------------------------------------------------===//
59 static DebugInfoProbeInfo
*TheDebugProbe
;
60 static void createDebugInfoProbe() {
61 if (TheDebugProbe
) return;
63 // Constructed the first time this is called. This guarantees that the
64 // object will be constructed, if -enable-debug-info-probe is set,
65 // before static globals, thus it will be destroyed before them.
66 static ManagedStatic
<DebugInfoProbeInfo
> DIP
;
67 TheDebugProbe
= &*DIP
;
70 //===----------------------------------------------------------------------===//
74 char LPPassManager::ID
= 0;
76 LPPassManager::LPPassManager(int Depth
)
77 : FunctionPass(ID
), PMDataManager(Depth
) {
84 /// Delete loop from the loop queue and loop hierarchy (LoopInfo).
85 void LPPassManager::deleteLoopFromQueue(Loop
*L
) {
87 if (Loop
*ParentLoop
= L
->getParentLoop()) { // Not a top-level loop.
88 // Reparent all of the blocks in this loop. Since BBLoop had a parent,
89 // they are now all in it.
90 for (Loop::block_iterator I
= L
->block_begin(), E
= L
->block_end();
92 if (LI
->getLoopFor(*I
) == L
) // Don't change blocks in subloops.
93 LI
->changeLoopFor(*I
, ParentLoop
);
95 // Remove the loop from its parent loop.
96 for (Loop::iterator I
= ParentLoop
->begin(), E
= ParentLoop
->end();;
98 assert(I
!= E
&& "Couldn't find loop");
100 ParentLoop
->removeChildLoop(I
);
105 // Move all subloops into the parent loop.
107 ParentLoop
->addChildLoop(L
->removeChildLoop(L
->end()-1));
109 // Reparent all of the blocks in this loop. Since BBLoop had no parent,
110 // they no longer in a loop at all.
112 for (unsigned i
= 0; i
!= L
->getBlocks().size(); ++i
) {
113 // Don't change blocks in subloops.
114 if (LI
->getLoopFor(L
->getBlocks()[i
]) == L
) {
115 LI
->removeBlock(L
->getBlocks()[i
]);
120 // Remove the loop from the top-level LoopInfo object.
121 for (LoopInfo::iterator I
= LI
->begin(), E
= LI
->end();; ++I
) {
122 assert(I
!= E
&& "Couldn't find loop");
129 // Move all of the subloops to the top-level.
131 LI
->addTopLevelLoop(L
->removeChildLoop(L
->end()-1));
136 // If L is current loop then skip rest of the passes and let
137 // runOnFunction remove L from LQ. Otherwise, remove L from LQ now
138 // and continue applying other passes on CurrentLoop.
139 if (CurrentLoop
== L
) {
144 for (std::deque
<Loop
*>::iterator I
= LQ
.begin(),
145 E
= LQ
.end(); I
!= E
; ++I
) {
153 // Inset loop into loop nest (LoopInfo) and loop queue (LQ).
154 void LPPassManager::insertLoop(Loop
*L
, Loop
*ParentLoop
) {
156 assert (CurrentLoop
!= L
&& "Cannot insert CurrentLoop");
158 // Insert into loop nest
160 ParentLoop
->addChildLoop(L
);
162 LI
->addTopLevelLoop(L
);
164 insertLoopIntoQueue(L
);
167 void LPPassManager::insertLoopIntoQueue(Loop
*L
) {
168 // Insert L into loop queue
169 if (L
== CurrentLoop
)
171 else if (!L
->getParentLoop())
172 // This is top level loop.
175 // Insert L after the parent loop.
176 for (std::deque
<Loop
*>::iterator I
= LQ
.begin(),
177 E
= LQ
.end(); I
!= E
; ++I
) {
178 if (*I
== L
->getParentLoop()) {
179 // deque does not support insert after.
188 // Reoptimize this loop. LPPassManager will re-insert this loop into the
189 // queue. This allows LoopPass to change loop nest for the loop. This
190 // utility may send LPPassManager into infinite loops so use caution.
191 void LPPassManager::redoLoop(Loop
*L
) {
192 assert (CurrentLoop
== L
&& "Can redo only CurrentLoop");
196 /// cloneBasicBlockSimpleAnalysis - Invoke cloneBasicBlockAnalysis hook for
198 void LPPassManager::cloneBasicBlockSimpleAnalysis(BasicBlock
*From
,
199 BasicBlock
*To
, Loop
*L
) {
200 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
201 LoopPass
*LP
= getContainedPass(Index
);
202 LP
->cloneBasicBlockAnalysis(From
, To
, L
);
206 /// deleteSimpleAnalysisValue - Invoke deleteAnalysisValue hook for all passes.
207 void LPPassManager::deleteSimpleAnalysisValue(Value
*V
, Loop
*L
) {
208 if (BasicBlock
*BB
= dyn_cast
<BasicBlock
>(V
)) {
209 for (BasicBlock::iterator BI
= BB
->begin(), BE
= BB
->end(); BI
!= BE
;
211 Instruction
&I
= *BI
;
212 deleteSimpleAnalysisValue(&I
, L
);
215 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
216 LoopPass
*LP
= getContainedPass(Index
);
217 LP
->deleteAnalysisValue(V
, L
);
222 // Recurse through all subloops and all loops into LQ.
223 static void addLoopIntoQueue(Loop
*L
, std::deque
<Loop
*> &LQ
) {
225 for (Loop::iterator I
= L
->begin(), E
= L
->end(); I
!= E
; ++I
)
226 addLoopIntoQueue(*I
, LQ
);
229 /// Pass Manager itself does not invalidate any analysis info.
230 void LPPassManager::getAnalysisUsage(AnalysisUsage
&Info
) const {
231 // LPPassManager needs LoopInfo. In the long term LoopInfo class will
232 // become part of LPPassManager.
233 Info
.addRequired
<LoopInfo
>();
234 Info
.setPreservesAll();
237 /// run - Execute all of the passes scheduled for execution. Keep track of
238 /// whether any of the passes modifies the function, and if so, return true.
239 bool LPPassManager::runOnFunction(Function
&F
) {
240 LI
= &getAnalysis
<LoopInfo
>();
241 bool Changed
= false;
242 createDebugInfoProbe();
244 // Collect inherited analysis from Module level pass manager.
245 populateInheritedAnalysis(TPM
->activeStack
);
247 // Populate Loop Queue
248 for (LoopInfo::iterator I
= LI
->begin(), E
= LI
->end(); I
!= E
; ++I
)
249 addLoopIntoQueue(*I
, LQ
);
251 if (LQ
.empty()) // No loops, skip calling finalizers
255 for (std::deque
<Loop
*>::const_iterator I
= LQ
.begin(), E
= LQ
.end();
258 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
259 LoopPass
*P
= getContainedPass(Index
);
260 Changed
|= P
->doInitialization(L
, *this);
265 while (!LQ
.empty()) {
267 CurrentLoop
= LQ
.back();
268 skipThisLoop
= false;
269 redoThisLoop
= false;
271 // Run all passes on the current Loop.
272 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
273 LoopPass
*P
= getContainedPass(Index
);
274 dumpPassInfo(P
, EXECUTION_MSG
, ON_LOOP_MSG
,
275 CurrentLoop
->getHeader()->getName());
278 initializeAnalysisImpl(P
);
280 TheDebugProbe
->initialize(P
, F
);
282 PassManagerPrettyStackEntry
X(P
, *CurrentLoop
->getHeader());
283 TimeRegion
PassTimer(getPassTimer(P
));
285 Changed
|= P
->runOnLoop(CurrentLoop
, *this);
288 TheDebugProbe
->finalize(P
, F
);
291 dumpPassInfo(P
, MODIFICATION_MSG
, ON_LOOP_MSG
,
292 skipThisLoop
? "<deleted>" :
293 CurrentLoop
->getHeader()->getName());
297 // Manually check that this loop is still healthy. This is done
298 // instead of relying on LoopInfo::verifyLoop since LoopInfo
299 // is a function pass and it's really expensive to verify every
300 // loop in the function every time. That level of checking can be
301 // enabled with the -verify-loop-info option.
303 TimeRegion
PassTimer(getPassTimer(LI
));
304 CurrentLoop
->verifyLoop();
307 // Then call the regular verifyAnalysis functions.
308 verifyPreservedAnalysis(P
);
311 removeNotPreservedAnalysis(P
);
312 recordAvailableAnalysis(P
);
314 skipThisLoop
? "<deleted>" :
315 CurrentLoop
->getHeader()->getName(),
319 // Do not run other passes on this loop.
323 // If the loop was deleted, release all the loop passes. This frees up
324 // some memory, and avoids trouble with the pass manager trying to call
325 // verifyAnalysis on them.
327 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
328 Pass
*P
= getContainedPass(Index
);
329 freePass(P
, "<deleted>", ON_LOOP_MSG
);
332 // Pop the loop from queue after running all passes.
336 LQ
.push_back(CurrentLoop
);
340 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
341 LoopPass
*P
= getContainedPass(Index
);
342 Changed
|= P
->doFinalization();
348 /// Print passes managed by this manager
349 void LPPassManager::dumpPassStructure(unsigned Offset
) {
350 errs().indent(Offset
*2) << "Loop Pass Manager\n";
351 for (unsigned Index
= 0; Index
< getNumContainedPasses(); ++Index
) {
352 Pass
*P
= getContainedPass(Index
);
353 P
->dumpPassStructure(Offset
+ 1);
354 dumpLastUses(P
, Offset
+1);
359 //===----------------------------------------------------------------------===//
362 Pass
*LoopPass::createPrinterPass(raw_ostream
&O
,
363 const std::string
&Banner
) const {
364 return new PrintLoopPass(Banner
, O
);
367 // Check if this pass is suitable for the current LPPassManager, if
368 // available. This pass P is not suitable for a LPPassManager if P
369 // is not preserving higher level analysis info used by other
370 // LPPassManager passes. In such case, pop LPPassManager from the
371 // stack. This will force assignPassManager() to create new
372 // LPPassManger as expected.
373 void LoopPass::preparePassManager(PMStack
&PMS
) {
375 // Find LPPassManager
376 while (!PMS
.empty() &&
377 PMS
.top()->getPassManagerType() > PMT_LoopPassManager
)
380 // If this pass is destroying high level information that is used
381 // by other passes that are managed by LPM then do not insert
382 // this pass in current LPM. Use new LPPassManager.
383 if (PMS
.top()->getPassManagerType() == PMT_LoopPassManager
&&
384 !PMS
.top()->preserveHigherLevelAnalysis(this))
388 /// Assign pass manager to manage this pass.
389 void LoopPass::assignPassManager(PMStack
&PMS
,
390 PassManagerType PreferredType
) {
391 // Find LPPassManager
392 while (!PMS
.empty() &&
393 PMS
.top()->getPassManagerType() > PMT_LoopPassManager
)
397 if (PMS
.top()->getPassManagerType() == PMT_LoopPassManager
)
398 LPPM
= (LPPassManager
*)PMS
.top();
400 // Create new Loop Pass Manager if it does not exist.
401 assert (!PMS
.empty() && "Unable to create Loop Pass Manager");
402 PMDataManager
*PMD
= PMS
.top();
404 // [1] Create new Call Graph Pass Manager
405 LPPM
= new LPPassManager(PMD
->getDepth() + 1);
406 LPPM
->populateInheritedAnalysis(PMS
);
408 // [2] Set up new manager's top level manager
409 PMTopLevelManager
*TPM
= PMD
->getTopLevelManager();
410 TPM
->addIndirectPassManager(LPPM
);
412 // [3] Assign manager to manage this new manager. This may create
413 // and push new managers into PMS
414 Pass
*P
= LPPM
->getAsPass();
415 TPM
->schedulePass(P
);
417 // [4] Push new manager into PMS