std::vector<Pass *> ForcedLastUses;
// Top level manager.
- // TODO : Make it a reference.
PMTopLevelManager *TPM;
private:
FunctionPassManager_New::FunctionPassManager_New(ModuleProvider *P) {
FPM = new FunctionPassManagerImpl_New(0);
+ // FPM is the top level manager.
+ FPM->setTopLevelManager(FPM);
MP = P;
}
// Create and add new manager
activeBBPassManager =
new BasicBlockPassManager_New(getDepth() + 1);
+ // Inherit top level manager
+ activeBBPassManager->setTopLevelManager(this->getTopLevelManager());
addPassToManager(activeBBPassManager, false);
TPM->addOtherPassManager(activeBBPassManager);
activeFunctionPassManager =
new FunctionPassManagerImpl_New(getDepth() + 1);
addPassToManager(activeFunctionPassManager, false);
+ // Inherit top level manager
+ activeFunctionPassManager->setTopLevelManager(this->getTopLevelManager());
TPM->addOtherPassManager(activeFunctionPassManager);
// Add pass into new manager. This time it must succeed.
if (!activeManager || !activeManager->addPass(P)) {
activeManager = new ModulePassManager_New(getDepth() + 1);
+ // Inherit top level manager
+ activeManager->setTopLevelManager(this->getTopLevelManager());
// This top level manager is going to manage activeManager.
// Set up analysis resolver to connect them.
/// Create new pass manager
PassManager_New::PassManager_New() {
PM = new PassManagerImpl_New(0);
+ // PM is the top level manager
+ PM->setTopLevelManager(PM);
}
/// add - Add a pass to the queue of passes to run. This passes ownership of