[LLVMdev] PassManager vs FunctionPassManager

Devang Patel dpatel at apple.com
Thu Jun 21 16:37:14 PDT 2007


On Jun 21, 2007, at 4:13 PM, Dan Gohman wrote:

> Right now, addPassesToEmitFile requires a FunctionPassManager. If I'm
> working with code that uses a plain PassManager and want it to  
> generate
> code, are there any options better than doing this:

That's what FPPassManager does (include/llvm/PassManagers.h) .  
Function pass manager itself is a module level pass.  
FunctionPassManager is external stand alone interface hence it does  
not derive from ModulePass.

-
Devang

> /**
> * Wrapper class to run a FunctionPassManager as a ModulePass so that  
> it
> * can be added to a plain PassManager.
> */
> class FunctionPassManagerModulePass : public ModulePass {
>  FunctionPassManager &Passes;
> public:
>  static char ID; // Pass ID, replacement for typeid
>  explicit FunctionPassManagerModulePass(FunctionPassManager &FPM) :
>    ModulePass((intptr_t)&ID),
>    Passes(FPM)
>  {}
>
>  bool runOnModule(Module &M) {
>    bool Changes = false;
>
>    Changes |= Passes.doInitialization();
>
>    for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
>      if (!I->isDeclaration())
>        Changes |= Passes.run(*I);
>
>    Changes |= Passes.doFinalization();
>
>    return Changes;
>  }
> };
>
>
> ?
>
> Thanks,
>
> Dan
>
> -- 
> Dan Gohman, Cray Inc.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list