[LLVMdev] why functionattrs doesn't add dependency of AliasAnalysis

Liu Xin navy.xliu at gmail.com
Wed Sep 4 23:01:27 PDT 2013


Hi, List,

As you may know, BCC of android makes use of LLVM's major components. Its
LTO actually selects some optimizations of LLVM.

I found it can not only use "-functionattrs". I must first use
-argpromotion first, or I end up this error:

Pass 'Deduce function attributes' is not initialized.
Verify if there is a pass dependency cycle.
Required Passes:
bcc: external/llvm/lib/VMCore/PassManager.cpp:616: void
llvm::PMTopLevelManager::schedulePass(llvm::Pass*): Assertion `PI &&
"Expected required passes to be initialized"' failed.

The strangest thing is the opt doesn't suffer from this issue. please note
that directly use -functionattrs, it can run without AliasAnalysis.  Could
you explain why?

liuxin at rd58:~/testbed$ opt  -functionattrs -debug-pass=Structure < pf.bc >
/dev/null
Pass Arguments:  -targetlibinfo -no-aa -basiccg -functionattrs -preverify
-domtree -verify
Target Library Information
No Alias Analysis (always returns 'may' alias)
  ModulePass Manager
    Basic CallGraph Construction
    Call Graph SCC Pass Manager
      Deduce function attributes
      FunctionPass Manager
        Preliminary module verification
        Dominator Tree Construction
        Module Verifier
    Bitcode Writer


I checked out the latest svn code of LLVM. Clearly, FunctionAttrs requires
AliasAnalysis of AU.

    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
      AU.setPreservesCFG();
      AU.addRequired<AliasAnalysis>();
      AU.addRequired<TargetLibraryInfo>();
      CallGraphSCCPass::getAnalysisUsage(AU);
    }

My changeset is almost like this. the issue has gone away.

--- a/lib/Transforms/IPO/FunctionAttrs.cpp
+++ b/lib/Transforms/IPO/FunctionAttrs.cpp
@@ -76,6 +76,7 @@ namespace {
 char FunctionAttrs::ID = 0;
 INITIALIZE_PASS_BEGIN(FunctionAttrs, "functionattrs",
                 "Deduce function attributes", false, false)
+INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
 INITIALIZE_AG_DEPENDENCY(CallGraph)
 INITIALIZE_PASS_END(FunctionAttrs, "functionattrs",
                 "Deduce function attributes", false, false)


Do you guys just miss the dependency for it?

thanks,
--lx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130905/9b5d6351/attachment.html>


More information about the llvm-dev mailing list