[LLVMdev] Inconsistent results of dependence analysis

Philip Reames listmail at philipreames.com
Fri Jan 16 11:59:49 PST 2015


Not sure if this is the root cause, but one difference between the two 
lines is the "-analyse" on the first one.  This will change behaviour 
between the two runs.


On 01/16/2015 11:28 AM, Hao Yu (Cody) wrote:
> Hello,
>
> I am trying to use Dependence analysis to figure out some information 
> form my benchmarks. However, I got different results by using LLVM 
> analysis and my own pass. For example I have this case:
>
> */int test(int a, int* out, int N)/*
> */{/*
> */    int sum = 0;/*
> */    for(i = 2; i < N; ++i)
>     {/*
> */        out[i] = a + i;/*
> */        sum += out[i - 2];
>     }/*
> */    return sum;/*
> */}/*
>
> I compiled this C code by using the following command:
>
> */clang -fno-unroll-loops -emit-llvm -O2 -c -o test.bc test.c/*
>
> Then I run DependenceAnalysis pass:
>
> */opt -basicaa -mem2reg -indvars -instcombine -instnamer 
> -loop-simplify -mergereturn -da -analyze test.bc > /dev/null/*
>
> and got this result:
>
> */Printing analysis 'Dependence Analysis' for function 'test':/*
> */da analyze - none!/*
> */da analyze - consistent flow [2]!/*
> */da analyze - none!/*
>
> Actually this what I expect to got. However if I write a pass like this:
>
> */TestPass.h/*
> */  virtual void getAnalysisUsage(AnalysisUsage &AU) const/*
> */  {/*
> */      AU.setPreservesAll();/*
> */      AU.addRequired<DependenceAnalysis>();/*
> */  }/*
>
> */TestPass.cpp/*
> */bool TestPass::runOnFunction(Function& F)/*
> */{/*
> */  llvmDependenceAnalysis = &(getAnalysis<DependenceAnalysis>(F));/*
> */
> /*
> */   // The following code is copied from 
> DependenceAnalysis.cpp:dumpExampleDependence (157 - 182)/*
> */   for (inst_iterator SrcI = inst_begin(F), SrcE = inst_end(F); SrcI 
> != SrcE; ++SrcI) {  ... SKIP... }/*
> *//*
> */   return true; /*
> */}/*
>
> And I executed this pass by using the following command:
>
> */opt -basicaa /**/-mem2reg -indvars -instcombine -instnamer 
> -loop-simplify -mergereturn/**/ -load ./TestPass.so -test-pass test.bc 
> > /dev/null/*
>
> at this time I got:
>
> */da analyze - confused!/*
> */da analyze - confused!
> /*
> */da analyze - confused!/*
>
> Am I doing a wrong usage about this analysis?
>
> Hao
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150116/40f46246/attachment.html>


More information about the llvm-dev mailing list