[LLVMdev] Wrong AliasAnalysis::getModRefInfo result

Welson Sun welson.sun at gmail.com
Tue Feb 14 17:12:54 PST 2012

Just want to test out the LLVM's AliasAnalysis::getModRefInfo API. The
input C code is very simple:

void foo(int *a, int *b)
  for(int i=0; i<10; i++)
    b[i] = a[i]*a[i];

int main()
  int a[10];
  int b[10];

  for(int i=0; i<10; i++)
    a[i] = i;


  return 0;

Obviously, for "foo", it only reads from array "a" and only writes to array

The LLVM pass:
    virtual bool runOnFunction(Function &F) {
      errs() << "Hello: ";
      errs().write_escaped(F.getName()) << '\n';

      AliasAnalysis &AA = getAnalysis<AliasAnalysis>();
      for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I) {
        Instruction *Inst = &*I;
        if ( CallInst *ci = dyn_cast<CallInst>(Inst) ){
          for(int i = 0; i < ci->getNumArgOperands(); i++){
            Value *v = ci->getArgOperand(i);
            if (GetElementPtrInst *vi = dyn_cast<GetElementPtrInst>(v)){
              Value *vPtr = vi->getPointerOperand();
              if ( AllocaInst *allo = dyn_cast<AllocaInst>(vPtr) ) {
                const Type *t = allo->getAllocatedType();
                if ( const ArrayType *at = dyn_cast<ArrayType>(t) ) {
                  int64_t size = at->getNumElements() *
at->getElementType()->getPrimitiveSizeInBits() / 8;
                  ImmutableCallSite cs(ci);
                  AliasAnalysis::Location loc(v, size);
                  errs() << AA.getModRefInfo(ci, loc) << "\n";

      return false;

However, the result is "3" for both a and b, which is both read and write.
What's the problem? I am not quite sure if I get the
AliasAnalysis::Location right, what is exactly "address-units" for the size
of the location? And did I get the starting address of the Location right?
I tried v, vi and vPtr, same result.

Any insight helps,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120214/fab3ba30/attachment.html>

More information about the llvm-dev mailing list