From badc4fae531cc0fdaa8e58f481c3b1d23ea7dd56 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 7 Dec 2006 22:34:21 +0000 Subject: When new pass manager is created, initialize available analysis info of existing manager at the same level. Otherwise, such info may be considered as available, which not true. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32334 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/PassManager.cpp | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index d0672d1..76869fe 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -652,13 +652,17 @@ FunctionPassManagerImpl_New::addPass(Pass *P) { // If P is a BasicBlockPass then use BasicBlockPassManager_New. if (BasicBlockPass *BP = dynamic_cast(P)) { - if (!activeBBPassManager - || !activeBBPassManager->addPass(BP)) { + if (!activeBBPassManager || !activeBBPassManager->addPass(BP)) { - // TODO : intialize AvailableAnalysis info + // If active manager exists then clear its analysis info. + if (activeBBPassManager) + activeBBPassManager->initializeAnalysisInfo(); + // Create and add new manager activeBBPassManager = new BasicBlockPassManager_New(); addPassToManager(activeBBPassManager, false); + + // Add pass into new manager. This time it must succeed. if (!activeBBPassManager->addPass(BP)) assert(0 && "Unable to add Pass"); } @@ -675,8 +679,13 @@ FunctionPassManagerImpl_New::addPass(Pass *P) { return false; addPassToManager (FP); - // TODO : intialize AvailableAnalysis info - activeBBPassManager = NULL; + + // If active manager exists then clear its analysis info. + if (activeBBPassManager) { + activeBBPassManager->initializeAnalysisInfo(); + activeBBPassManager = NULL; + } + return true; } @@ -784,11 +793,15 @@ ModulePassManager_New::addPass(Pass *P) { if (!activeFunctionPassManager || !activeFunctionPassManager->addPass(P)) { - // TODO : intialize AvailableAnalysis info - activeFunctionPassManager = NULL; + // If active manager exists then clear its analysis info. + if (activeFunctionPassManager) + activeFunctionPassManager->initializeAnalysisInfo(); + // Create and add new manager activeFunctionPassManager = new FunctionPassManagerImpl_New(); addPassToManager(activeFunctionPassManager, false); + + // Add pass into new manager. This time it must succeed. if (!activeFunctionPassManager->addPass(FP)) assert(0 && "Unable to add pass"); } @@ -805,8 +818,12 @@ ModulePassManager_New::addPass(Pass *P) { return false; addPassToManager(MP); - // TODO : intialize AvailableAnalysis info - activeFunctionPassManager = NULL; + // If active manager exists then clear its analysis info. + if (activeFunctionPassManager) { + activeFunctionPassManager->initializeAnalysisInfo(); + activeFunctionPassManager = NULL; + } + return true; } -- cgit v1.1