[LLVMdev] Inconsistent results of dependence analysis

Hao Yu (Cody) hyu at CS.UCLA.EDU
Fri Jan 16 11:28:50 PST 2015


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150116/33a41603/attachment.html>


More information about the llvm-dev mailing list