[LLVMdev] Get Analysis from PassManager

Andreas Neustifter e0325716 at student.tuwien.ac.at
Thu Jun 4 08:18:45 PDT 2009


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Okay, found it:

Andreas Neustifter wrote:
> I try to write a tool that uses the PassManager to load profiling
> information for a module like this:
> 
> 	...
> 	ModulePass *LoaderPass = createProfileLoaderPass();
> 	PassMgr.add(LoaderPass);
> 	PassMgr.run(*M);
> 	...
> 
> I can verify that the pass was run, but how to I get to the ProfileInfo
> implemented by that pass?
> 
> I tried
> 
> 	...
> 	ProfileInfo PI = LoaderPass->getAnalysis<ProfileInfo>();
> 	...
> 
> but this does not seem to return the correct profiling information.

I have writen a small pass that just does what I need:

namespace {
  class LoaderInterface : public ModulePass {
    ProfileInfo *PI;
  public:
    static char ID; // Class identification, replacement for typeinfo
    explicit LoaderInterface() : ModulePass(&ID) {}

    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
      AU.setPreservesAll();
      AU.addRequired<ProfileInfo>();
    }

    ProfileInfo* getPI() {
      return PI;
    }

    bool runOnModule(Module &M) {
      PI = &getAnalysis<ProfileInfo>();
      return false;
    }
  };
}

char LoaderInterface::ID = 0;

So now I can just use the pass as expected:

    ....
    PassManager PassMgr = PassManager();
    PassMgr.add(createProfileLoaderPass());
    LoaderInterface *LI = new LoaderInterface();
    PassMgr.add(LI);
    PassMgr.run(*M);
    ProfileInfo *PI = LI->getPI();
    ....

Andi
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkon5dUACgkQPiYq0rq7s/BB/gCfQEaRL5ZrAralWrYFnnkO7heU
v6kAnR+HLruRNj/IGoTh8ud//U1xHBMc
=jC9S
-----END PGP SIGNATURE-----



More information about the llvm-dev mailing list