[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