llvm/test/Transforms/Inline/inline-hot-callee.ll
Easwaran Raman 6db6cfa92b Determine callee's hotness and adjust threshold based on that. NFC.
This uses the same criteria used in CFE's CodeGenPGO to identify hot and cold
callees and uses values of inlinehint-threshold and inlinecold-threshold
respectively as the thresholds for such callees.

Differential Revision: http://reviews.llvm.org/D15245


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256222 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-22 00:32:35 +00:00

40 lines
1016 B
LLVM

; RUN: opt < %s -inline -inline-threshold=0 -inlinehint-threshold=100 -S | FileCheck %s
; This tests that a hot callee gets the (higher) inlinehint-threshold even without
; inline hints and gets inlined because the cost is less than inlinehint-threshold.
; A cold callee with identical body does not get inlined because cost exceeds the
; inline-threshold
define i32 @callee1(i32 %x) !prof !1 {
%x1 = add i32 %x, 1
%x2 = add i32 %x1, 1
%x3 = add i32 %x2, 1
ret i32 %x3
}
define i32 @callee2(i32 %x) !prof !2 {
; CHECK-LABEL: @callee2(
%x1 = add i32 %x, 1
%x2 = add i32 %x1, 1
%x3 = add i32 %x2, 1
ret i32 %x3
}
define i32 @caller2(i32 %y1) !prof !2 {
; CHECK-LABEL: @caller2(
; CHECK: call i32 @callee2
; CHECK-NOT: call i32 @callee1
; CHECK: ret i32 %x3.i
%y2 = call i32 @callee2(i32 %y1)
%y3 = call i32 @callee1(i32 %y2)
ret i32 %y3
}
!llvm.module.flags = !{!0}
!0 = !{i32 1, !"MaxFunctionCount", i32 10}
!1 = !{!"function_entry_count", i64 10}
!2 = !{!"function_entry_count", i64 1}