[LLVMdev] writing an alias analysis pass?

Matthew O'Connor thegreendragon at gmail.com
Thu Apr 24 16:38:27 PDT 2014


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 {
  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)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140424/e840ea66/attachment.html>


More information about the llvm-dev mailing list