PeiLIU via llvm-dev
2016-May-04 12:34 UTC
[llvm-dev] 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 { entry: %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! -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160504/95709350/attachment.html>
Vedant Kumar via llvm-dev
2016-May-04 20:59 UTC
[llvm-dev] questions about AliasAnalysis(Basic Alias Analysis) in llvm3.3
Hi, 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. vedant> On May 4, 2016, at 5:34 AM, PeiLIU via llvm-dev <llvm-dev at lists.llvm.org> wrote: > > 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 { > entry: > %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! > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev