[LLVMdev] Cannot get Alias Analysis?

Zhenbo Xu zhenbo1987 at gmail.com
Mon Sep 23 01:23:30 PDT 2013


Hi,
I am trying to write my own command-line tool which would use alias
analysis in a CallGraphSCCPass.

Firstly, I inherit a class AnalysisDriver from CallGraphSCCPass.
Then, I implement my own runOnFunction method which tries to get alias
analysis from each function.

The code is shown as follows:

*class AnalysisDriver : public CallGraphSCCPass {*
*  static char Pid;*
*  PassManager &passMgr;*
*  *
*public:*
*  AnalysisDriver(PassManager &pmgr);*
*  ~AnalysisDriver();*
*
*
*  virtual void getAnalysisUsage(AnalysisUsage &AU) const {*
*    AU.addRequired<CallGraph>();*
*    AU.addRequired<AliasAnalysis>();*
*    AU.addPreserved<AliasAnalysis>();*
*  }*
*  *
*  bool run(Module &module);*
*  virtual bool runOnSCC(CallGraphSCC &scc);*
*  virtual bool runOnFunction(Function *f) = 0;*
*
*
*  virtual const char *getPassName() const {*
*    return "AnalysisDriver";*
*  }*
*  *
*private:*
*  void registerDriver();*
*};*

*char AnalysisDriver::Pid;*
*
*
*AnalysisDriver::AnalysisDriver(PassManager &pmgr)*
*  : CallGraphSCCPass(Pid), passMgr(pmgr) {*
*  registerDriver();*
*}*
*
*
*AnalysisDriver::~AnalysisDriver() {}*
*
*
*void AnalysisDriver::registerDriver() {*
*  PassRegistry &Registry = *PassRegistry::getPassRegistry();*
*  *
*  // Register AliasAnalysis and CallGraph pass*
*  INITIALIZE_AG_DEPENDENCY(AliasAnalysis);*
*  INITIALIZE_AG_DEPENDENCY(CallGraph);*
*
*
*  passMgr.add(this);*
*}*
*
*
*bool AnalysisDriver::run(Module &module) {*
*  passMgr.run(module);*
*}*
*
*
*bool AnalysisDriver::runOnSCC(CallGraphSCC &scc) {*
*  for (CallGraphSCC::iterator i = scc.begin(),*
*                              e = scc.end(); i != e; ++i) {*
*    CallGraphNode *cgnode = *i;*
*    Function *f = cgnode->getFunction();*
*    if (f == NULL || f->isDeclaration())*
*      continue;*
*
*
*    runOnFunction(f);*
*  }*
*  return false;*
*}*
*
*
*bool AnalysisDriver::runOnFunction(Function *f) {*
*  AliasAnalysis &aa = getAnalysis<AliasAnalysis>(*f);*
*  ...*
*}*
*
*
*int main(void) {*
*  ...*
*  PassManager passMgr;*
*  AnalysisDriver *d = new AnalysisDriver(passMgr);*
*  d->run(module);*
*  return 0;*
*}*

When I try to get alias analysis, it complains:
"Unable to find on the fly pass"
"UNREACHABLE executed at ./llvm/lib/IR/PassManager.cpp:1254!"

The debug pass details:
Pass Arguments:  -no-aa -basiccg
No Alias Analysis (always returns 'may' alias)
  ModulePass Manager
    Basic CallGraph Construction
    Call Graph SCC Pass Manager
      AnalysisDriver
0x1b15dd0   Executing Pass 'Basic CallGraph Construction' on Module
'alias.s'...
0x1b15dd0   Executing Pass 'CallGraph Pass Manager' on Module 'alias.s'...
0x1b154a0     Required Analyses: Basic CallGraph Construction
0x1b154c0     Executing Pass 'AnalysisDriver' on Call Graph Nodes 'Call
graph node for function: 'f'<<0x1b1b350>>  #uses=1

'...
0x1b106e0       Required Analyses: Basic CallGraph Construction, No Alias
Analysis (always returns 'may' alias)

Do I miss something?
By the way, how do I  use basicaa instead of no-aa?

Thank you!
-- 
Zhenbo Xu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130923/94a8b2a3/attachment.html>


More information about the llvm-dev mailing list