When calculating the cost of a call instruction we were applying a heuristic penalty as well as the cost of the instruction itself.
However, when calculating the benefit from inlining we weren't discounting the equivalent penalty for the call instruction that would be removed! This caused skew in the calculation and meant we wouldn't inline in the following, trivial case:
int g() {
h();
}
int f() {
g();
}
llvm-svn: 286814
22 lines
443 B
LLVM
22 lines
443 B
LLVM
; RUN: opt < %s -inline -S | FileCheck %s
|
|
|
|
; CHECK-LABEL: caller
|
|
; CHECK: call void @callee
|
|
define void @caller(i32 %a, i1 %b) #0 {
|
|
call void @callee(i32 %a, i1 %b)
|
|
unreachable
|
|
}
|
|
|
|
define void @callee(i32 %a, i1 %b) {
|
|
call void @extern()
|
|
call void asm sideeffect "", ""()
|
|
br i1 %b, label %bb1, label %bb2
|
|
bb1:
|
|
call void asm sideeffect "", ""()
|
|
ret void
|
|
bb2:
|
|
call void asm sideeffect "", ""()
|
|
ret void
|
|
}
|
|
|
|
declare void @extern() |