questions about AliasAnalysis(Basic Alias Analysis) in llvm3.3

Hi, My name is Pei Liu, I am using llvm-3.3 do some developing. I want to confirm that basic blocks operate global variables or not. For example:
C-Language source code:

int ga;

int main()
int a = 10;
int b = 100;

if (a > 8) {
int ma = ga;
return 0;

The llvm IR .ll file looks like this:

; Function Attrs: nounwind uwtable
define i32 @main() #0 {
%retval = alloca i32, align 4
%a = alloca i32, align 4
%b = alloca i32, align 4
%ma = alloca i32, align 4
store i32 0, i32* %retval
call void @llvm.dbg.declare(metadata !{i32* %a}, metadata !23), !dbg !24
store i32 10, i32* %a, align 4, !dbg !24
call void @llvm.dbg.declare(metadata !{i32* %b}, metadata !25), !dbg !26
store i32 100, i32* %b, align 4, !dbg !26
%tmp = load i32* %a, align 4, !dbg !27
%cmp = icmp sgt i32 %tmp, 8, !dbg !27
br i1 %cmp, label %if.then, label %if.end, !dbg !27

if.then: ; preds = %entry
call void @llvm.dbg.declare(metadata !{i32* %ma}, metadata !28), !dbg !30
%tmp1 = load i32* @ga, align 4, !dbg !30
store i32 %tmp1, i32* %ma, align 4, !dbg !30
br label %if.end, !dbg !31

if.end: ; preds = %if.then, %entry
ret i32 0, !dbg !32

I want to use AliasAnalysis to confirm that the if.then block operate the global variable. I use the function canBasicBlockModify(const BasicBlock &BB, const Value *P, uint64_t Size) which belong to the class of AliasAnalysis. However, I use every block to test then it always return true of the function canBasicBlockModify.

Does this property which basic block operates global variable can be confirmed? If it can be confirm, then how? Thanks for your help. Best wishes!


ISTM that you want:

  canInstructionRangeModRef(BB.begin(), BB.end(), MemoryLocation(P, Size), MRI_Ref)

You could also walk the uses of the GV in question and check if their parent BB's are the BB of interest.