[llvm-commits] [llvm] r152368 - in /llvm/trunk: lib/Analysis/InlineCost.cpp test/Transforms/Inline/alloca-bonus.ll
Nick Lewycky
nlewycky at google.com
Thu Mar 8 20:05:59 PST 2012
On 8 March 2012 18:49, Chandler Carruth <chandlerc at gmail.com> wrote:
> Author: chandlerc
> Date: Thu Mar 8 20:49:36 2012
> New Revision: 152368
>
> URL: http://llvm.org/viewvc/llvm-project?rev=152368&view=rev
> Log:
> Undo a previous restriction on the inline cost calculation which Nick
> introduced. Specifically, there are cost reductions for all
> constant-operand icmp instructions against an alloca, regardless of
> whether the alloca will in fact be elligible for SROA. That means we
> don't want to abort the icmp reduction computation when we abort the
> SROA reduction computation. That in turn frees us from the need to keep
> a separate worklist and defer the ICmp calculations.
>
> Use this new-found freedom and some judicious function boundaries to
> factor the innards of computing the cost factor of any given instruction
> out of the loop over the instructions and into static helper functions.
> This greatly simplifies the code, and hopefully makes it more clear what
> is happening here.
>
> Reviewed by Eric Christopher. There is some concern that we'd like to
> ensure this doesn't get out of hand, and I plan to benchmark the effects
> of this change over the next few days along with some further fixes to
> the inline cost.
>
Modified: llvm/trunk/test/Transforms/Inline/alloca-bonus.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/Inline/alloca-bonus.ll?rev=152368&r1=152367&r2=152368&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/Inline/alloca-bonus.ll (original)
> +++ llvm/trunk/test/Transforms/Inline/alloca-bonus.ll Thu Mar 8 20:49:36
> 2012
> @@ -81,3 +81,44 @@
> bb.false:
> ret void
> }
> +
> +define void @outer4(i32 %A) {
> +; CHECK: @outer4
> +; CHECK-NOT: call void @inner4
> + %ptr = alloca i32
> + call void @inner4(i32* %ptr, i32 %A)
> + ret void
> +}
> +
> +; %D poisons this call, scalar-repl can't handle that instruction.
> However, we
> +; still want to detect that the icmp and branch *can* be handled.
>
Huh? There is no %D in the following function. %E?
> +define void @inner4(i32 *%ptr, i32 %A) {
> + %B = getelementptr i32* %ptr, i32 %A
> + %E = icmp eq i32* %ptr, null
> + br i1 %E, label %bb.true, label %bb.false
> +bb.true:
> + ; This block musn't be counted in the inline cost.
> + %t1 = load i32* %ptr
> + %t2 = add i32 %t1, 1
> + %t3 = add i32 %t2, 1
> + %t4 = add i32 %t3, 1
> + %t5 = add i32 %t4, 1
> + %t6 = add i32 %t5, 1
> + %t7 = add i32 %t6, 1
> + %t8 = add i32 %t7, 1
> + %t9 = add i32 %t8, 1
> + %t10 = add i32 %t9, 1
> + %t11 = add i32 %t10, 1
> + %t12 = add i32 %t11, 1
> + %t13 = add i32 %t12, 1
> + %t14 = add i32 %t13, 1
> + %t15 = add i32 %t14, 1
> + %t16 = add i32 %t15, 1
> + %t17 = add i32 %t16, 1
> + %t18 = add i32 %t17, 1
> + %t19 = add i32 %t18, 1
> + %t20 = add i32 %t19, 1
> + ret void
> +bb.false:
> + ret void
> +}
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120308/9d9069bf/attachment.html>
More information about the llvm-commits
mailing list