Xiangyang Guo
2015-Apr-19 03:32 UTC
[LLVMdev] remove redundant load by GVN() does not work
Hi, Assume I have the following code. The first four instructions in each BB does the same thing. So I think GVN() can remove the redundant code. However, after I apply GVN to my module by "Passes.add(createGVNPass())" and "Passes.run(*myModule)". It seems GVN does not remove the redundant instructions. Can anyone give me a hint what's going on here? Any hint is appreciable. ********************************************************************* cond_3: ; preds = %cond_1_else %a1 = load i32** @a %v41 = load i32* %v4 %6 = getelementptr i32* %a1, i32 %v41 %7 = load i32* %6 %8 = icmp slt i32 %7, 1 br i1 %8, label %cond_4, label %cond_4_else cond_4_else: ; preds = %cond_3 %a2 = load i32** @a %v42 = load i32* %v4 %9 = getelementptr i32* %a2, i32 %v42 %10 = load i32* %9 %11 = icmp sgt i32 %10, %v6_int_34 br i1 %11, label %cond_4, label %cond_4_else1 cond_4_else1: ; preds = %cond_4_else %a3 = load i32** @a %v43 = load i32* %v4 %12 = getelementptr i32* %a3, i32 %v43 %13 = load i32* %12 %v5_int_42 = srem i32 %v2_int_.0, %13 %14 = icmp eq i32 %v5_int_42, 0 br i1 %14, label %cond_4_else2, label %cond_4 ************************************************************************ (I change the variable's name a little bit for the first four instructions in each BB because the name of variables in my original IR has a long.) Regards Xiangyang -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150418/d20fd22c/attachment.html>
Daniel Berlin
2015-Apr-19 05:56 UTC
[LLVMdev] remove redundant load by GVN() does not work
Add basicaa. Without aa, it won't touch these On Sat, Apr 18, 2015, 8:33 PM Xiangyang Guo <xguo6 at ncsu.edu> wrote:> Hi, > > Assume I have the following code. The first four instructions in each BB > does the same thing. So I think GVN() can remove the redundant code. > However, after I apply GVN to my module by "Passes.add(createGVNPass())" > and "Passes.run(*myModule)". It seems GVN does not remove the redundant > instructions. Can anyone give me a hint what's going on here? Any hint is > appreciable. > > ********************************************************************* > cond_3: ; preds = %cond_1_else > %a1 = load i32** @a > %v41 = load i32* %v4 > %6 = getelementptr i32* %a1, i32 %v41 > %7 = load i32* %6 > %8 = icmp slt i32 %7, 1 > br i1 %8, label %cond_4, label %cond_4_else > > cond_4_else: ; preds = %cond_3 > %a2 = load i32** @a > %v42 = load i32* %v4 > %9 = getelementptr i32* %a2, i32 %v42 > %10 = load i32* %9 > %11 = icmp sgt i32 %10, %v6_int_34 > br i1 %11, label %cond_4, label %cond_4_else1 > > cond_4_else1: ; preds = %cond_4_else > %a3 = load i32** @a > %v43 = load i32* %v4 > %12 = getelementptr i32* %a3, i32 %v43 > %13 = load i32* %12 > %v5_int_42 = srem i32 %v2_int_.0, %13 > %14 = icmp eq i32 %v5_int_42, 0 > br i1 %14, label %cond_4_else2, label %cond_4 > > ************************************************************************ > (I change the variable's name a little bit for the first four instructions > in each BB because the name of variables in my original IR has a long.) > > Regards > > Xiangyang > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150419/c566b8e7/attachment.html>
Xiangyang Guo
2015-Apr-19 14:34 UTC
[LLVMdev] remove redundant load by GVN() does not work
Thanks, Daniel. basicaa works. Regards Xiangyang On Sun, Apr 19, 2015 at 1:56 AM, Daniel Berlin <dberlin at dberlin.org> wrote:> Add basicaa. Without aa, it won't touch these > > On Sat, Apr 18, 2015, 8:33 PM Xiangyang Guo <xguo6 at ncsu.edu> wrote: > >> Hi, >> >> Assume I have the following code. The first four instructions in each BB >> does the same thing. So I think GVN() can remove the redundant code. >> However, after I apply GVN to my module by "Passes.add(createGVNPass())" >> and "Passes.run(*myModule)". It seems GVN does not remove the redundant >> instructions. Can anyone give me a hint what's going on here? Any hint is >> appreciable. >> >> ********************************************************************* >> cond_3: ; preds = %cond_1_else >> %a1 = load i32** @a >> %v41 = load i32* %v4 >> %6 = getelementptr i32* %a1, i32 %v41 >> %7 = load i32* %6 >> %8 = icmp slt i32 %7, 1 >> br i1 %8, label %cond_4, label %cond_4_else >> >> cond_4_else: ; preds = %cond_3 >> %a2 = load i32** @a >> %v42 = load i32* %v4 >> %9 = getelementptr i32* %a2, i32 %v42 >> %10 = load i32* %9 >> %11 = icmp sgt i32 %10, %v6_int_34 >> br i1 %11, label %cond_4, label %cond_4_else1 >> >> cond_4_else1: ; preds = %cond_4_else >> %a3 = load i32** @a >> %v43 = load i32* %v4 >> %12 = getelementptr i32* %a3, i32 %v43 >> %13 = load i32* %12 >> %v5_int_42 = srem i32 %v2_int_.0, %13 >> %14 = icmp eq i32 %v5_int_42, 0 >> br i1 %14, label %cond_4_else2, label %cond_4 >> >> ************************************************************************ >> (I change the variable's name a little bit for the first four >> instructions in each BB because the name of variables in my original IR has >> a long.) >> >> Regards >> >> Xiangyang >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150419/bce2fccd/attachment.html>