[LLVMdev] about MemoryDependenceAnalysis usage

Daniel Berlin dberlin at dberlin.org
Mon May 11 07:50:59 PDT 2015


add -basicaa to your command line :)

On Mon, May 11, 2015 at 7:15 AM, Willy WOLFF <willy.mh.wolff at gmail.com> wrote:
> I play a bit more with MemoryDependenceAnalysis by wrapping my pass, and
> call explicitely BasicAliasAnalysis. Its still using No Alias Analysis.
>
> How can I let MemoryDependenceAnalysis use BasicAliasAnalysis?
>
> Please, find attached my pass.
>
> I call my pass like this: "opt -o /dev/null -S test.ll -load libPlaydep.so
> -O3 -playdep --debug-pass=Structure"
> And the output:
>
> opt -o /dev/null test.ll -S -load ./libPlaydep.so -O3 -playdep
> --debug-pass=Structure
> Pass Arguments:  -targetlibinfo -datalayout -notti -basictti -x86tti -no-aa
> -tbaa -scoped-noalias -assumption-cache-tracker -basicaa -verify-di -ipsccp
> -globalopt -deadargelim -domtree -instcombine -simplifycfg -basiccg
> -prune-eh -inline-cost -inline -functionattrs -argpromotion -sroa -domtree
> -early-cse -lazy-value-info -jump-threading -correlated-propagation
> -simplifycfg -domtree -instcombine -tailcallelim -simplifycfg -reassociate
> -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -loop-unswitch
> -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom
> -loop-deletion -function_tti -loop-unroll -memdep -mldst-motion -domtree
> -memdep -gvn -memdep -memcpyopt -sccp -domtree -instcombine -lazy-value-info
> -jump-threading -correlated-propagation -domtree -memdep -dse -adce
> -simplifycfg -domtree -instcombine -barrier -domtree -loops -loop-simplify
> -lcssa -branch-prob -block-freq -scalar-evolution -loop-vectorize
> -instcombine -scalar-evolution -slp-vectorizer -simplifycfg -domtree
> -instcombine -loops -loop-simplify -lcssa -scalar-evolution -function_tti
> -loop-unroll -alignment-from-assumptions -strip-dead-prototypes -globaldce
> -constmerge -playdep -verify -verify-di -print-module
> Target Library Information
> Data Layout
> No target information
> Target independent code generator's TTI
> X86 Target Transform Info
> No Alias Analysis (always returns 'may' alias)
> Type-Based Alias Analysis
> Scoped NoAlias Alias Analysis
> Assumption Cache Tracker
> Basic Alias Analysis (stateless AA impl)
>   ModulePass Manager
>     Debug Info Verifier
>     Interprocedural Sparse Conditional Constant Propagation
>     Global Variable Optimizer
> .....
>     FunctionPass Manager
>       Module Verifier
>     Debug Info Verifier
>     Print module to stderr
> Pass Arguments:  -no-aa -assumption-cache-tracker -targetlibinfo -basicaa
> No Alias Analysis (always returns 'may' alias)
> Assumption Cache Tracker
> Target Library Information
> Basic Alias Analysis (stateless AA impl)
>   ModulePass Manager
>     Unnamed pass: implement Pass::getPassName()
>       Unnamed pass: implement Pass::getPassName()
> Pass Arguments:  -assumption-cache-tracker -no-aa -memdep
> Assumption Cache Tracker
> No Alias Analysis (always returns 'may' alias)
>   FunctionPass Manager
>     Memory Dependence Analysis
> function fct
> for this instruction:   store i32 2, i32* %6, align 4, !tbaa !5
> deps are:
>   %5 = load i32** %4, align 8, !tbaa !1
>   store i32 1, i32* %3, align 4, !tbaa !5
>   %2 = load i32** %1, align 8, !tbaa !1
>
>
> Cheers,
> Willy
>
>
> On 09/05/2015 16:06, Willy WOLFF wrote:
>>
>> Hi,
>>
>> I try to use MemoryDependenceAnalysis in a pass to analyse a simple
>> function:
>>
>> void fct (int *restrict*restrict M, int *restrict*restrict L) {
>> S1:    M[1][1] = 1;
>> S2:    L[2][2] = 2;
>> }
>>
>> When I iterate over MemoryDependenceAnalysis on the S2 statement, I get
>> the load instruction for the first depth of the array, that’s ok. But I get
>> also the load and store for the S1 statement.
>> I assume the restrict keywoard help the alias analysis to found that
>> pointers don’t alias.
>> The prototype of this function in llvm-ir is:
>> define void @fct(i32** noalias %M, i32** noalias %L) #0 { ….
>>
>> Did this noalias attribute say that both pointer of i32** didn’t alias?
>>
>> Also, when I check wich AliasAnalysis pass is called with
>> —debug-pass=Structure, I see that Memory Dependence Analysis use No Alias
>> Analysis, even if I use -O3 before calling my pass. Can we specify which
>> AlisAnalysis we want to use inside the pass (in getAnalysisUsage method, or
>> somewhere else)?
>>
>> Regards,
>> Willy
>>
>
> _______________________________________________
> 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