33
33
#include < algorithm>
34
34
#include < unordered_set>
35
35
using namespace llvm ;
36
- using namespace llvm ::legacy;
37
36
38
37
// See PassManagers.h for Pass Manager infrastructure overview.
39
38
@@ -387,6 +386,66 @@ class FunctionPassManagerImpl : public Pass,
387
386
void FunctionPassManagerImpl::anchor () {}
388
387
389
388
char FunctionPassManagerImpl::ID = 0 ;
389
+
390
+ // ===----------------------------------------------------------------------===//
391
+ // FunctionPassManagerImpl implementation
392
+ //
393
+ bool FunctionPassManagerImpl::doInitialization (Module &M) {
394
+ bool Changed = false ;
395
+
396
+ dumpArguments ();
397
+ dumpPasses ();
398
+
399
+ for (ImmutablePass *ImPass : getImmutablePasses ())
400
+ Changed |= ImPass->doInitialization (M);
401
+
402
+ for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index)
403
+ Changed |= getContainedManager (Index)->doInitialization (M);
404
+
405
+ return Changed;
406
+ }
407
+
408
+ bool FunctionPassManagerImpl::doFinalization (Module &M) {
409
+ bool Changed = false ;
410
+
411
+ for (int Index = getNumContainedManagers () - 1 ; Index >= 0 ; --Index)
412
+ Changed |= getContainedManager (Index)->doFinalization (M);
413
+
414
+ for (ImmutablePass *ImPass : getImmutablePasses ())
415
+ Changed |= ImPass->doFinalization (M);
416
+
417
+ return Changed;
418
+ }
419
+
420
+ void FunctionPassManagerImpl::releaseMemoryOnTheFly () {
421
+ if (!wasRun)
422
+ return ;
423
+ for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
424
+ FPPassManager *FPPM = getContainedManager (Index);
425
+ for (unsigned Index = 0 ; Index < FPPM->getNumContainedPasses (); ++Index) {
426
+ FPPM->getContainedPass (Index)->releaseMemory ();
427
+ }
428
+ }
429
+ wasRun = false ;
430
+ }
431
+
432
+ // Execute all the passes managed by this top level manager.
433
+ // Return true if any function is modified by a pass.
434
+ bool FunctionPassManagerImpl::run (Function &F) {
435
+ bool Changed = false ;
436
+
437
+ initializeAllAnalysisInfo ();
438
+ for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
439
+ Changed |= getContainedManager (Index)->runOnFunction (F);
440
+ F.getContext ().yield ();
441
+ }
442
+
443
+ for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index)
444
+ getContainedManager (Index)->cleanup ();
445
+
446
+ wasRun = true ;
447
+ return Changed;
448
+ }
390
449
} // namespace legacy
391
450
} // namespace llvm
392
451
@@ -406,7 +465,7 @@ class MPPassManager : public Pass, public PMDataManager {
406
465
// Delete on the fly managers.
407
466
~MPPassManager () override {
408
467
for (auto &OnTheFlyManager : OnTheFlyManagers) {
409
- FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
468
+ legacy:: FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
410
469
delete FPP;
411
470
}
412
471
}
@@ -451,7 +510,7 @@ class MPPassManager : public Pass, public PMDataManager {
451
510
for (unsigned Index = 0 ; Index < getNumContainedPasses (); ++Index) {
452
511
ModulePass *MP = getContainedPass (Index);
453
512
MP->dumpPassStructure (Offset + 1 );
454
- MapVector<Pass *, FunctionPassManagerImpl *>::const_iterator I =
513
+ MapVector<Pass *, legacy:: FunctionPassManagerImpl *>::const_iterator I =
455
514
OnTheFlyManagers.find (MP);
456
515
if (I != OnTheFlyManagers.end ())
457
516
I->second ->dumpPassStructure (Offset + 2 );
@@ -471,7 +530,7 @@ class MPPassManager : public Pass, public PMDataManager {
471
530
private:
472
531
// / Collection of on the fly FPPassManagers. These managers manage
473
532
// / function passes that are required by module passes.
474
- MapVector<Pass *, FunctionPassManagerImpl *> OnTheFlyManagers;
533
+ MapVector<Pass *, legacy:: FunctionPassManagerImpl *> OnTheFlyManagers;
475
534
};
476
535
477
536
char MPPassManager::ID = 0 ;
@@ -534,6 +593,33 @@ class PassManagerImpl : public Pass,
534
593
void PassManagerImpl::anchor () {}
535
594
536
595
char PassManagerImpl::ID = 0 ;
596
+
597
+ // ===----------------------------------------------------------------------===//
598
+ // PassManagerImpl implementation
599
+
600
+ //
601
+ // / run - Execute all of the passes scheduled for execution. Keep track of
602
+ // / whether any of the passes modifies the module, and if so, return true.
603
+ bool PassManagerImpl::run (Module &M) {
604
+ bool Changed = false ;
605
+
606
+ dumpArguments ();
607
+ dumpPasses ();
608
+
609
+ for (ImmutablePass *ImPass : getImmutablePasses ())
610
+ Changed |= ImPass->doInitialization (M);
611
+
612
+ initializeAllAnalysisInfo ();
613
+ for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
614
+ Changed |= getContainedManager (Index)->runOnModule (M);
615
+ M.getContext ().yield ();
616
+ }
617
+
618
+ for (ImmutablePass *ImPass : getImmutablePasses ())
619
+ Changed |= ImPass->doFinalization (M);
620
+
621
+ return Changed;
622
+ }
537
623
} // namespace legacy
538
624
} // namespace llvm
539
625
@@ -1314,12 +1400,15 @@ AnalysisResolver::findImplPass(Pass *P, AnalysisID AnalysisPI, Function &F) {
1314
1400
return PM.getOnTheFlyPass (P, AnalysisPI, F);
1315
1401
}
1316
1402
1403
+ namespace llvm {
1404
+ namespace legacy {
1405
+
1317
1406
// ===----------------------------------------------------------------------===//
1318
1407
// FunctionPassManager implementation
1319
1408
1320
1409
// / Create new Function pass manager
1321
1410
FunctionPassManager::FunctionPassManager (Module *m) : M(m) {
1322
- FPM = new FunctionPassManagerImpl ();
1411
+ FPM = new legacy:: FunctionPassManagerImpl ();
1323
1412
// FPM is the top level manager.
1324
1413
FPM->setTopLevelManager (FPM);
1325
1414
@@ -1358,36 +1447,8 @@ bool FunctionPassManager::doInitialization() {
1358
1447
bool FunctionPassManager::doFinalization () {
1359
1448
return FPM->doFinalization (*M);
1360
1449
}
1361
-
1362
- // ===----------------------------------------------------------------------===//
1363
- // FunctionPassManagerImpl implementation
1364
- //
1365
- bool FunctionPassManagerImpl::doInitialization (Module &M) {
1366
- bool Changed = false ;
1367
-
1368
- dumpArguments ();
1369
- dumpPasses ();
1370
-
1371
- for (ImmutablePass *ImPass : getImmutablePasses ())
1372
- Changed |= ImPass->doInitialization (M);
1373
-
1374
- for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index)
1375
- Changed |= getContainedManager (Index)->doInitialization (M);
1376
-
1377
- return Changed;
1378
- }
1379
-
1380
- bool FunctionPassManagerImpl::doFinalization (Module &M) {
1381
- bool Changed = false ;
1382
-
1383
- for (int Index = getNumContainedManagers () - 1 ; Index >= 0 ; --Index)
1384
- Changed |= getContainedManager (Index)->doFinalization (M);
1385
-
1386
- for (ImmutablePass *ImPass : getImmutablePasses ())
1387
- Changed |= ImPass->doFinalization (M);
1388
-
1389
- return Changed;
1390
- }
1450
+ } // namespace legacy
1451
+ } // namespace llvm
1391
1452
1392
1453
// / cleanup - After running all passes, clean up pass manager cache.
1393
1454
void FPPassManager::cleanup () {
@@ -1399,35 +1460,6 @@ void FPPassManager::cleanup() {
1399
1460
}
1400
1461
}
1401
1462
1402
- void FunctionPassManagerImpl::releaseMemoryOnTheFly () {
1403
- if (!wasRun)
1404
- return ;
1405
- for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
1406
- FPPassManager *FPPM = getContainedManager (Index);
1407
- for (unsigned Index = 0 ; Index < FPPM->getNumContainedPasses (); ++Index) {
1408
- FPPM->getContainedPass (Index)->releaseMemory ();
1409
- }
1410
- }
1411
- wasRun = false ;
1412
- }
1413
-
1414
- // Execute all the passes managed by this top level manager.
1415
- // Return true if any function is modified by a pass.
1416
- bool FunctionPassManagerImpl::run (Function &F) {
1417
- bool Changed = false ;
1418
-
1419
- initializeAllAnalysisInfo ();
1420
- for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
1421
- Changed |= getContainedManager (Index)->runOnFunction (F);
1422
- F.getContext ().yield ();
1423
- }
1424
-
1425
- for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index)
1426
- getContainedManager (Index)->cleanup ();
1427
-
1428
- wasRun = true ;
1429
- return Changed;
1430
- }
1431
1463
1432
1464
// ===----------------------------------------------------------------------===//
1433
1465
// FPPassManager implementation
@@ -1554,7 +1586,7 @@ MPPassManager::runOnModule(Module &M) {
1554
1586
1555
1587
// Initialize on-the-fly passes
1556
1588
for (auto &OnTheFlyManager : OnTheFlyManagers) {
1557
- FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
1589
+ legacy:: FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
1558
1590
Changed |= FPP->doInitialization (M);
1559
1591
}
1560
1592
@@ -1615,7 +1647,7 @@ MPPassManager::runOnModule(Module &M) {
1615
1647
1616
1648
// Finalize on-the-fly passes
1617
1649
for (auto &OnTheFlyManager : OnTheFlyManagers) {
1618
- FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
1650
+ legacy:: FunctionPassManagerImpl *FPP = OnTheFlyManager.second ;
1619
1651
// We don't know when is the last time an on-the-fly pass is run,
1620
1652
// so we need to releaseMemory / finalize here
1621
1653
FPP->releaseMemoryOnTheFly ();
@@ -1636,9 +1668,9 @@ void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
1636
1668
RequiredPass->getPotentialPassManagerType ()) &&
1637
1669
" Unable to handle Pass that requires lower level Analysis pass" );
1638
1670
1639
- FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
1671
+ legacy:: FunctionPassManagerImpl *FPP = OnTheFlyManagers[P];
1640
1672
if (!FPP) {
1641
- FPP = new FunctionPassManagerImpl ();
1673
+ FPP = new legacy:: FunctionPassManagerImpl ();
1642
1674
// FPP is the top level manager.
1643
1675
FPP->setTopLevelManager (FPP);
1644
1676
@@ -1669,7 +1701,7 @@ void MPPassManager::addLowerLevelRequiredPass(Pass *P, Pass *RequiredPass) {
1669
1701
// / its runOnFunction() for function F.
1670
1702
std::tuple<Pass *, bool > MPPassManager::getOnTheFlyPass (Pass *MP, AnalysisID PI,
1671
1703
Function &F) {
1672
- FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
1704
+ legacy:: FunctionPassManagerImpl *FPP = OnTheFlyManagers[MP];
1673
1705
assert (FPP && " Unable to find on the fly pass" );
1674
1706
1675
1707
FPP->releaseMemoryOnTheFly ();
@@ -1678,32 +1710,8 @@ std::tuple<Pass *, bool> MPPassManager::getOnTheFlyPass(Pass *MP, AnalysisID PI,
1678
1710
Changed);
1679
1711
}
1680
1712
1681
- // ===----------------------------------------------------------------------===//
1682
- // PassManagerImpl implementation
1683
-
1684
- //
1685
- // / run - Execute all of the passes scheduled for execution. Keep track of
1686
- // / whether any of the passes modifies the module, and if so, return true.
1687
- bool PassManagerImpl::run (Module &M) {
1688
- bool Changed = false ;
1689
-
1690
- dumpArguments ();
1691
- dumpPasses ();
1692
-
1693
- for (ImmutablePass *ImPass : getImmutablePasses ())
1694
- Changed |= ImPass->doInitialization (M);
1695
-
1696
- initializeAllAnalysisInfo ();
1697
- for (unsigned Index = 0 ; Index < getNumContainedManagers (); ++Index) {
1698
- Changed |= getContainedManager (Index)->runOnModule (M);
1699
- M.getContext ().yield ();
1700
- }
1701
-
1702
- for (ImmutablePass *ImPass : getImmutablePasses ())
1703
- Changed |= ImPass->doFinalization (M);
1704
-
1705
- return Changed;
1706
- }
1713
+ namespace llvm {
1714
+ namespace legacy {
1707
1715
1708
1716
// ===----------------------------------------------------------------------===//
1709
1717
// PassManager implementation
@@ -1728,6 +1736,8 @@ void PassManager::add(Pass *P) {
1728
1736
bool PassManager::run (Module &M) {
1729
1737
return PM->run (M);
1730
1738
}
1739
+ } // namespace legacy
1740
+ } // namespace llvm
1731
1741
1732
1742
// ===----------------------------------------------------------------------===//
1733
1743
// PMStack implementation
@@ -1818,4 +1828,4 @@ void FunctionPass::assignPassManager(PMStack &PMS,
1818
1828
PM->add (this );
1819
1829
}
1820
1830
1821
- PassManagerBase::~PassManagerBase () {}
1831
+ legacy:: PassManagerBase::~PassManagerBase () {}
0 commit comments