<div dir="ltr">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:<div>C-Language source code:</div><div><div>int ga;</div></div><div><br></div><div><div>int main()</div><div>{</div><div><span class="" style="white-space:pre">  </span>int a = 10;</div><div><span class="" style="white-space:pre">        </span>int b = 100;</div><div><br></div><div><span class="" style="white-space:pre">      </span>if (a > 8) {</div><div><span class="" style="white-space:pre">            </span>int ma = ga;</div><div><span class="" style="white-space:pre">       </span>}</div><div><span class="" style="white-space:pre">  </span>return 0;</div><div>}</div></div><div><br></div><div>The llvm IR .ll file looks like this:</div><div><div>; Function Attrs: nounwind uwtable</div><div>define i32 @main() #0 {</div><div>entry:</div><div>  %retval = alloca i32, align 4</div><div>  %a = alloca i32, align 4</div><div>  %b = alloca i32, align 4</div><div>  %ma = alloca i32, align 4</div><div>  store i32 0, i32* %retval</div><div>  call void @llvm.dbg.declare(metadata !{i32* %a}, metadata !23), !dbg !24</div><div>  store i32 10, i32* %a, align 4, !dbg !24</div><div>  call void @llvm.dbg.declare(metadata !{i32* %b}, metadata !25), !dbg !26</div><div>  store i32 100, i32* %b, align 4, !dbg !26</div><div>  %tmp = load i32* %a, align 4, !dbg !27</div><div>  %cmp = icmp sgt i32 %tmp, 8, !dbg !27</div><div>  br i1 %cmp, label %if.then, label %if.end, !dbg !27</div><div><br></div><div>if.then:                                          ; preds = %entry</div><div>  call void @llvm.dbg.declare(metadata !{i32* %ma}, metadata !28), !dbg !30</div><div>  %tmp1 = load i32* @ga, align 4, !dbg !30</div><div>  store i32 %tmp1, i32* %ma, align 4, !dbg !30</div><div>  br label %if.end, !dbg !31</div><div><br></div><div>if.end:                                           ; preds = %if.then, %entry</div><div>  ret i32 0, !dbg !32</div><div>}</div></div><div><br></div><div>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. </div><div><br></div><div>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! </div></div>