[llvm-commits] [llvm] r115205 - in /llvm/trunk: lib/Transforms/Scalar/GVN.cpp test/Transforms/GVN/load-pre-licm.ll
Bob Wilson
bob.wilson at apple.com
Thu Sep 30 14:52:53 PDT 2010
In the case when EnableFullLoadPre is true, we should still exclude the case where LI is the only definition. I think you should keep this loop and just change the condition to "(e == 1)".
On Sep 30, 2010, at 1:53 PM, Owen Anderson wrote:
> Author: resistor
> Date: Thu Sep 30 15:53:04 2010
> New Revision: 115205
>
> URL: http://llvm.org/viewvc/llvm-project?rev=115205&view=rev
> Log:
> We do want to allow LoadPRE to perform LICM-like transformations: we already consider PHI nodes to be negligible for
> code size (making this transform code size neutral), and it allows us to hoist values out of loops, which is always
> a good thing.
>
> Added:
> llvm/trunk/test/Transforms/GVN/load-pre-licm.ll
> Modified:
> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=115205&r1=115204&r2=115205&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Thu Sep 30 15:53:04 2010
> @@ -1545,19 +1545,6 @@
> assert(TmpBB);
> LoadBB = TmpBB;
>
> - // If we have a repl set with LI itself in it, this means we have a loop where
> - // at least one of the values is LI. Since this means that we won't be able
> - // to eliminate LI even if we insert uses in the other predecessors, we will
> - // end up increasing code size. Reject this by scanning for LI.
> - for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i) {
> - if (ValuesPerBlock[i].isSimpleValue() &&
> - ValuesPerBlock[i].getSimpleValue() == LI) {
> - // Skip cases where LI is the only definition, even for EnableFullLoadPRE.
> - if (!EnableFullLoadPRE || e == 1)
> - return false;
> - }
> - }
> -
> // FIXME: It is extremely unclear what this loop is doing, other than
> // artificially restricting loadpre.
> if (isSinglePred) {
>
> Added: llvm/trunk/test/Transforms/GVN/load-pre-licm.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/load-pre-licm.ll?rev=115205&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/GVN/load-pre-licm.ll (added)
> +++ llvm/trunk/test/Transforms/GVN/load-pre-licm.ll Thu Sep 30 15:53:04 2010
> @@ -0,0 +1,39 @@
> +; RUN: opt -S -gvn < %s | FileCheck %s
> +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128-n8:16:32"
> +target triple = "i386-apple-darwin11.0.0"
> +
> + at sortlist = external global [5001 x i32], align 4
> +
> +define void @Bubble() nounwind noinline {
> +; CHECK: entry:
> +; CHECK-NEXT: %tmp7.pre = load i32
> +entry:
> + br label %while.body5
> +
> +; CHECK: while.body5:
> +; CHECK: %tmp7 = phi i32
> +; CHECK-NOT: %tmp7 = load i32
> +while.body5:
> + %indvar = phi i32 [ 0, %entry ], [ %tmp6, %if.end ]
> + %tmp5 = add i32 %indvar, 2
> + %arrayidx9 = getelementptr [5001 x i32]* @sortlist, i32 0, i32 %tmp5
> + %tmp6 = add i32 %indvar, 1
> + %arrayidx = getelementptr [5001 x i32]* @sortlist, i32 0, i32 %tmp6
> + %tmp7 = load i32* %arrayidx, align 4
> + %tmp10 = load i32* %arrayidx9, align 4
> + %cmp11 = icmp sgt i32 %tmp7, %tmp10
> + br i1 %cmp11, label %if.then, label %if.end
> +
> +; CHECK: if.then:
> +if.then:
> + store i32 %tmp10, i32* %arrayidx, align 4
> + store i32 %tmp7, i32* %arrayidx9, align 4
> + br label %if.end
> +
> +if.end:
> + %exitcond = icmp eq i32 %tmp6, 100
> + br i1 %exitcond, label %while.end.loopexit, label %while.body5
> +
> +while.end.loopexit:
> + ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list