mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 13:33:37 +02:00
54aace04c1
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
53 lines
1.4 KiB
LLVM
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()
|