virtual void assignPassManager(PMStack &PMS);
};
+/// Different types of internal pass managers. External pass managers
+/// (PassManager and FunctionPassManager) are not represented here.
+/// Ordering of pass manager types is important here.
+enum PassManagerType {
+ PMT_Unknown = 0,
+ PMT_ModulePassManager = 1, /// MPPassManager
+ PMT_CallGraphPassManager, /// CGPassManager
+ PMT_FunctionPassManager, /// FPPassManager
+ PMT_LoopPassManager, /// LPPassManager
+ PMT_BasicBlockPassManager /// BBPassManager
+};
+
/// PMStack
/// Top level pass manager (see PasManager.cpp) maintains active Pass Managers
/// using PMStack. Each Pass implements assignPassManager() to connect itself
return PassVector.size();
}
+ virtual PassManagerType getPassManagerType() {
+ assert ( 0 && "Invalid use of getPassManagerType");
+ return PMT_Unknown;
+ }
protected:
// If a FunctionPass F is the last user of ModulePass info M
BasicBlockPass *BP = static_cast<BasicBlockPass *>(PassVector[N]);
return BP;
}
+
+ virtual PassManagerType getPassManagerType() {
+ return PMT_BasicBlockPassManager;
+ }
};
//===----------------------------------------------------------------------===//
return FP;
}
+ virtual PassManagerType getPassManagerType() {
+ return PMT_FunctionPassManager;
+ }
private:
// Active Pass Manager
BBPassManager *activeBBPassManager;
return MP;
}
+ virtual PassManagerType getPassManagerType() { return PMT_ModulePassManager; }
private:
// Active Pass Manager
FPPassManager *activeFunctionPassManager;