Hi LLVMers,
I am fairly new to the LLVM pass framework. My goal is to extend the
CFGPrinter analysis pass to label the edges of the graph with their
edge-counts from profile data.
I can generate the CFGs using 'analyze', but I am having trouble
loading the profile data. I added the line
AU.addRequired<ProfileInfo>(); to the getAnalysisUsage. It is
returning zero for all the edge counts.
In llvm/Analysis/ProfileInfo.h, I noticed a prototype:
Pass *createProfileLoaderPass(const std::string &Filename);
The ProfileInfoLoaderPass does not appear in the list of analyses,
presumably because it is registered as an "Opt". Do I need to
explicitly request a LoaderPass in addition to ProfileInfo? What is
the right way to do this?
Thanks.
Run opt with something like this:
opt -profile-loader -profile-info-file=whatever.llvmprof -yourprofileusingpass ...
-Chris
Chris,
Thanks, that worked. For my own understanding, I wondered if using
the opt command-line is the only way to request a
ProfileInfoLoaderPass? What if I want to use this information in the
'analyze' utility instead of 'opt'?
Also, rather than requesting the pass interactively, can I somehow use
the constructor provided in ProfileInfo.h? Here is the prototype, but
I'm not sure how to use it:
Pass *createProfileLoaderPass(const std::string &Filename);
-Eric
Chris,
Thanks, that worked. For my own understanding, I wondered if using
the opt command-line is the only way to request a
ProfileInfoLoaderPass? What if I want to use this information in the
'analyze' utility instead of 'opt'?
Ah, very reasonable :). If you update CVS, it should be available in both opt and analyze now.
Also, rather than requesting the pass interactively, can I somehow use
the constructor provided in ProfileInfo.h? Here is the prototype, but
I'm not sure how to use it:
Pass *createProfileLoaderPass(const std::string &Filename);
That is only useful if you have a PassManager object. Given that, you could do something (roughly) like this:
PassManager PM;
PM.add(createProfileLoaderPass("foo.llvmprof"));
PM.add(createMyProfileUsingPass());
PM.run(MyModule);
-Chris
I should note that the pass is not the only way to load profile info. If you just want to load the info without dealing with the pass system, you can just use the llvm/Analysis/ProfileInfoLoader.h header directly, which is what llvm-prof does, for example.
-Chris