[LLVMdev] writing an alias analysis pass?

Nick Lewycky nicholas at mxc.ca
Sat Apr 26 15:59:54 PDT 2014


Matthew O'Connor wrote:
> Hi,
>
> I'm attempting to do some alias analysis & other memory inspection. I've
> written a pointless AliasAnalysis pass (that says everything must alias)
> to attempt to verify that my pass is getting picked up & run by opt.
>
> I run opt with: opt -load ~/Applications/llvm/lib/MustAA.so -must-aa
> -aa-eval -debug < trace0.ll
>
> I see my pass being initialized, but never being called (I see only may
> alias results).
>
> Any ideas as to what to do to debug this? Or what I'm missing? I've read
> through http://llvm.org/docs/AliasAnalysis.html and don't see anything
> that I'm missing.
>
> Thanks,
> Matthew
>
> P.S. Here's the full source code of my pass:
>
> #define DEBUG_TYPE "must-aa"
> #include "llvm/Pass.h"
> #include "llvm/Analysis/AliasAnalysis.h"
> #include "llvm/Support/raw_ostream.h"
> #include "llvm/Support/Debug.h"
> using namespace llvm;
>
> namespace {
> struct EverythingMustAlias : public ImmutablePass, public AliasAnalysis {

Because you have multiple inheritance on a Pass, you'll need this:

     /// getAdjustedAnalysisPointer - This method is used when a pass 
implements
     /// an analysis interface through multiple inheritance.  If needed, it
     /// should override this to adjust the this pointer as needed for the
     /// specified pass info.
     void *getAdjustedAnalysisPointer(const void *ID) override {
       if (ID == &AliasAnalysis::ID)
         return (AliasAnalysis*)this;
       return this;
     }

There may be another issue beyond that, I haven't tried it.

Nick

>    static char ID;
>    EverythingMustAlias() : ImmutablePass(ID) {}
>
>    virtual void initializePass() {
>      DEBUG(dbgs() << "Initializing everything-must-alias\n");
>      InitializeAliasAnalysis(this);
>    }
>
>    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
>      AliasAnalysis::getAnalysisUsage(AU);
>      AU.setPreservesAll();
>    }
>
>    virtual AliasResult alias(const Location &LocA, const Location &LocB) {
>      DEBUG(dbgs() << "Everything must alias!\n");
>      return AliasAnalysis::MustAlias;
>    }
> };
> }
>
> namespace llvm {
> void initializeEverythingMustAliasPass(PassRegistry &Registry);
> }
>
> char EverythingMustAlias::ID = 0;
> static RegisterPass<EverythingMustAlias> A("must-aa", "Everything must
> alias");
> INITIALIZE_AG_PASS(EverythingMustAlias, AliasAnalysis, "must-aa",
> "Everything must alias", false, true, false)
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list