[llvm-dev] TBAA falsely reporting may alias? (original) (raw)
Sanjoy Das via llvm-dev llvm-dev at lists.llvm.org
Thu Apr 13 20:45:21 PDT 2017
- Previous message: [llvm-dev] TBAA falsely reporting may alias?
- Next message: [llvm-dev] TBAA falsely reporting may alias?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Kavon,
On April 13, 2017 at 11:31:17 AM, Kavon Farvardin via llvm-dev (llvm-dev at lists.llvm.org) wrote:
I'm trying to work with Type Based Alias Analysis (TBAA). Here's the example program I'm working with:
;;;;;;;;;;;;;;;;;;;;;; define void @foo(i64* %a, i64* %b, i64 %x, i64 %y) { store i64 %x, i64* %a, !tbaa !2 ; write to stack store i64 %y, i64* %b, !tbaa !3 ; write to heap ret void } !1 = !{!"root"} !2 = !{!"stack", !1} !3 = !{!"heap", !1} ;;;;;;;;;;;;;;;;;;;;;; When I run: opt -disable-output -disable-basicaa -tbaa -aa-eval -print-alias-sets simpletbaa.ll I get something unusual, as the two pointers %a and %b are in disjoint alias sets, but aa-eval reports that they may alias:
Given the IR you have, what you know is that the two store operations do not alias, not that %a does not alias %b. In the specific case above, you can use the information about the stores to say something about the aliasing between %a and %b, but that's not true in general of TBAA.
To make -aa-eval also report the aliasing between loads and stores, you can pass in -evaluate-aa-metadata to opt (along with -aa-eval), in which case you'll get 1 NoAlias (between the two stores) and one MayAlias (between the two pointers %a and %b) on the above IR.
-- Sanjoy
- Previous message: [llvm-dev] TBAA falsely reporting may alias?
- Next message: [llvm-dev] TBAA falsely reporting may alias?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]