[LLVMdev] Using Profile Information

ambika ambika at cse.iitb.ac.in
Fri Feb 26 02:34:39 PST 2010

I have not made a separate pass. I have done it in single pass ie added 
ProfileLoaderPass , got information in PI and now I am planning to 
perform the analysis here itself.

I was trying to print information using ProfileInfoPrinter pass but was 
unable to do it.

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

   virtual void getAnalysisUsage(AnalysisUsage &AU) const {

   bool runOnModule(Module &M) {
     PassManager PassMgr = PassManager();
     cl::opt<std::string> ProfileDataFile(cl::Positional, 
cl::desc("<llvmprof.out file>"),
                 cl::Optional, cl::init("llvmprof.out"));
         PI = &getAnalysis<ProfileInfo>();


char MyAna::ID = 0;
static RegisterPass<MyAna> X("my-ana", "Testing prof info");

What I basically want is to use block profile information in this pass 
to perform my analysis. Here I created llvmprof.out separately and then  
i am using it. Is there a way so that it is generated itself for the 

Andreas Neustifter wrote:
> Ah BTW...
> On 25.02.2010, at 17:33, ambika wrote:
>>     ProfileInfo *PI;
>>     PI = &getAnalysis<ProfileInfo>();
> If this _in_ your pass, then you have to register the usage of this in 
> the getAnalysisUsage() method:
> void getAnalysisUsage(AnalysisUsage &AU) const {
>     AU.addRequired<ProfileInfo>();
> }
> Also you have to ensure that the pass you are using is executed right 
> after the ProfileInfoLoader, currently not all passes are preserving 
> the profile information.
> If you need intermediate passes I already have a patch that preserves 
> (most) of the information, I'm waiting for after 2.7 to put this in...
> Andi

More information about the llvm-dev mailing list