[LLVMdev] TBAA fail on optimization, why?

Jun Koi junkoi2004 at gmail.com
Thu Sep 27 00:54:28 PDT 2012


On Thu, Sep 27, 2012 at 3:31 PM, Duncan Sands <baldrick at free.fr> wrote:
> Hi Jun,
>
>
> On 27/09/12 08:02, Jun Koi wrote:
>>
>> On Thu, Sep 20, 2012 at 5:18 PM, Duncan Sands <baldrick at free.fr> wrote:
>>>
>>> Hi Jun, did you tell "opt" to make use of TBAA?  Also, please give
>>> complete
>>> IR
>>> that people can use to reproduce, and instructions on how to reproduce
>>> (eg
>>> how
>>> to run opt).
>>>
>>
>> actually, i am still confused on which options should be given to
>> "opt" for it to use TBAA. any hint?
>
> -tbaa somewhere at the start.
>
>> of course, we can simply use -O3, but i want to pinpoint exactly which
>> passes are necessary for TBAA optimization to work.
>
> The various alias analyses assume that you've run a certain minimum number
> of
> optimizers on your bitcode, eg reg2mem.

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.

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

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