1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-24 13:33:37 +02:00
llvm-mirror/test/Transforms/Inline/last-call-bonus.ll
Taewook Oh 54aace04c1 Do not apply redundant LastCallToStaticBonus
Summary:
As written in the comments above, LastCallToStaticBonus is already applied to
the cost if Caller has only one user, so it is redundant to reapply the bonus
here.

If the only user is not a caller, TotalSecondaryCost will not be adjusted
anyway because callerWillBeRemoved is false. If there's no caller at all, we
don't need to care about TotalSecondaryCost because
inliningPreventsSomeOuterInline is false.

Reviewers: chandlerc, eraman

Reviewed By: eraman

Subscribers: haicheng, davidxl, davide, llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D29169

llvm-svn: 295075
2017-02-14 17:30:05 +00:00

53 lines
1.4 KiB
LLVM

; The goal of this test is checking if LastCallToStaticBonus is applied
; correctly while deciding inline deferral. For the test code below, when
; inliner evaluates the callsite of bar->baz, it checks if inlining of bar->baz
; prevents ininling of foo->bar, even when foo->bar inlining is more beneficial
; than bar->baz inlining. As LastCallToStaticBonus has a massive value, and
; both baz and bar has only one caller, the cost of foo->bar inlining and
; bar->baz inlining should be non-trivial for inliner to compute that bar->baz
; inlining can actaully prevent foo->bar inlining. To make the cost of these
; callsites big enough, loop unrolling pass with very high threshold is used to
; preprocess the test.
; RUN: opt < %s -loop-unroll -inline -unroll-threshold=15000 -inline-threshold=250 -S | FileCheck %s
; CHECK-LABEL: define internal i32 @bar()
define internal i32 @baz() {
entry:
br label %bb1
bb1:
%ind = phi i32 [ 0, %entry ], [ %inc, %bb1 ]
call void @extern()
%inc = add nsw i32 %ind, 1
%cmp = icmp sgt i32 %inc, 510
br i1 %cmp, label %ret, label %bb1
ret:
ret i32 0
}
define internal i32 @bar() {
entry:
br label %bb1
bb1:
%ind = phi i32 [ 0, %entry ], [ %inc, %bb1 ]
call void @extern()
%inc = add nsw i32 %ind, 1
%cmp = icmp sgt i32 %inc, 510
br i1 %cmp, label %ret, label %bb1
ret:
call i32 @baz()
ret i32 0
}
define i32 @foo() {
entry:
call i32 @bar()
ret i32 0
}
declare void @extern()