summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2006-12-21 00:16:50 +0000
committerDevang Patel <dpatel@apple.com>2006-12-21 00:16:50 +0000
commite3068403bdae14287a229e9d7b53c90282946649 (patch)
treeb14195b9c50766a3ab8186836221831a76c79812 /llvm/lib
parent39377e4594d21afde08e229025452f3ff9353b7c (diff)
downloadbcm5719-llvm-e3068403bdae14287a229e9d7b53c90282946649.tar.gz
bcm5719-llvm-e3068403bdae14287a229e9d7b53c90282946649.zip
At the beginning of run, initialize analyis info availability for _ALL_
pass managers. Otherwise, stale available analysis info, from the managers not yet run, may cause pass manager to take wrong turn. This fixes CBE test failures reported by nightly tester. llvm-svn: 32726
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/VMCore/PassManager.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp
index 620d4da9631..3d3858e4a4d 100644
--- a/llvm/lib/VMCore/PassManager.cpp
+++ b/llvm/lib/VMCore/PassManager.cpp
@@ -189,6 +189,8 @@ public:
void dumpPasses() const;
void dumpArguments() const;
+ void initializeAllAnalysisInfo();
+
protected:
/// Collection of pass managers
@@ -773,6 +775,21 @@ void PMTopLevelManager::dumpArguments() const {
cerr << "\n";
}
+void PMTopLevelManager::initializeAllAnalysisInfo() {
+
+ for (std::vector<Pass *>::iterator I = PassManagers.begin(),
+ E = PassManagers.end(); I != E; ++I) {
+ PMDataManager *PMD = dynamic_cast<PMDataManager *>(*I);
+ assert(PMD && "This is not a PassManager");
+ PMD->initializeAnalysisInfo();
+ }
+
+ // Initailize other pass managers
+ for (std::vector<PMDataManager *>::iterator I = IndirectPassManagers.begin(),
+ E = IndirectPassManagers.end(); I != E; ++I)
+ (*I)->initializeAnalysisInfo();
+}
+
//===----------------------------------------------------------------------===//
// PMDataManager implementation
@@ -1051,7 +1068,6 @@ BBPassManager::runOnFunction(Function &F) {
return false;
bool Changed = doInitialization(F);
- initializeAnalysisInfo();
std::string Msg1 = "Executing Pass '";
std::string Msg3 = "' Made Modification '";
@@ -1240,6 +1256,7 @@ bool FunctionPassManagerImpl::run(Function &F) {
dumpArguments();
dumpPasses();
+ initializeAllAnalysisInfo();
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
FPPassManager *FP = getContainedManager(Index);
Changed |= FP->runOnFunction(F);
@@ -1322,8 +1339,6 @@ bool FPPassManager::runOnFunction(Function &F) {
if (F.isExternal())
return false;
- initializeAnalysisInfo();
-
std::string Msg1 = "Executing Pass '";
std::string Msg3 = "' Made Modification '";
@@ -1357,7 +1372,6 @@ bool FPPassManager::runOnFunction(Function &F) {
bool FPPassManager::runOnModule(Module &M) {
bool Changed = doInitialization(M);
- initializeAnalysisInfo();
for(Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
this->runOnFunction(*I);
@@ -1462,7 +1476,6 @@ MPPassManager::addPass(Pass *P) {
bool
MPPassManager::runOnModule(Module &M) {
bool Changed = false;
- initializeAnalysisInfo();
std::string Msg1 = "Executing Pass '";
std::string Msg3 = "' Made Modification '";
@@ -1528,6 +1541,7 @@ bool PassManagerImpl::run(Module &M) {
dumpArguments();
dumpPasses();
+ initializeAllAnalysisInfo();
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
MPPassManager *MP = getContainedManager(Index);
Changed |= MP->runOnModule(M);
OpenPOWER on IntegriCloud