[LLVMdev] TBAA fail on optimization, why?

Duncan Sands baldrick at free.fr
Thu Sep 27 01:01:21 PDT 2012


Hi Jun,

> ok, below is my code. i run this through "opt" with option: "-basicaa
> -mem2reg -tbaa"
> however, the resulted bitcode file is still the same; no optimization is done.

that's because you didn't specify any optimization that uses alias analysis!
LLVM makes a distinction between analyses and transforms.  Analyses, like tbaa,
are passes which look at your IR but don't modify it: instead they deduce
things about it (eg which memory accesses alias each other) and provide
that information to other passes.  Transforms are passes that modify the IR,
i.e. these are the passes that do the actual optimizing.  Consider the -dse
(dead store elimination pass).  This is a transform pass, however it needs
to know which memory accesses alias each other.  It doesn't compute this itself,
instead it requests this information from the alias analysis subsystem, which
queries any alias analysis passes that may have run.  By specifying -tbaa you
have only done the analysis part, not the transform part.

>
> meanwhile, the last "store" instruction is easily eliminated with "-O3" option.

Try -tbaa -basicaa mem2reg -dse

Ciao, Duncan.

>
> so i am wondering which optimizations i should use to achieve the same
> result. any hint?
>
> thanks,
> Jun
>
> ;;;;;;;;;;
> @aaa = external global i32
> @bbb = external global i32
> @sss = external global i32
>
> define void @testing() nounwind {
>    %1 = load i32* @sss, align 4, !tbaa !2
>    %2 = inttoptr i32 %1 to i32*
>    %3 = load i32* @aaa, align 4, !tbaa !1
>    store i32 %3, i32* %2, align 4, !tbaa !4
>    store i32 %3, i32* @bbb, align 4, !tbaa !3
>    store i32 %1, i32* @sss, align 4, !tbaa !2 ; <== O3 can REMOVE this
>    ret void
> }
>
> !tbaa = !{!0, !1, !2, !3, !4}
> !0 = metadata !{metadata !"tbaa_root"}
> !1 = metadata !{metadata !"aaa", metadata !0, i32 0}
> !2 = metadata !{metadata !"sss", metadata !0, i32 0}
> !3 = metadata !{metadata !"bbb", metadata !0, i32 0}
> !4 = metadata !{metadata !"mem", metadata !0, i32 0}
>




More information about the llvm-dev mailing list