blob: 0a2510b417cc9219331dd2c3fd1ced21559d35e2 [file] [edit]
; RUN: opt -passes=inline -inline-threshold=0 -S < %s | FileCheck %s
; A linkonce_odr function marked likely_module_local gets the last-call-to-
; static bonus for its sole call, like a local function would.
; CHECK-LABEL: define i32 @caller(
; CHECK-NOT: call i32 @hint_once(
; CHECK-COUNT-2: call i32 @hint_twice(
; CHECK: call i32 @nohint_once(
; CHECK: call i32 @hint_external_once(
; CHECK: ret i32
define i32 @caller(i32 %x) {
%a = call i32 @hint_once(i32 %x)
%b1 = call i32 @hint_twice(i32 %a)
%b2 = call i32 @hint_twice(i32 %b1)
%c = call i32 @nohint_once(i32 %b2)
%d = call i32 @hint_external_once(i32 %c)
ret i32 %d
}
define linkonce_odr i32 @hint_once(i32 %x) likely_module_local {
%v1 = mul i32 %x, 3
%v2 = mul i32 %v1, 5
%v3 = mul i32 %v2, 7
%v4 = mul i32 %v3, 11
%v5 = mul i32 %v4, 13
%v6 = mul i32 %v5, 17
%v7 = mul i32 %v6, 19
%v8 = mul i32 %v7, 23
%v9 = mul i32 %v8, 29
%v10 = mul i32 %v9, 31
%v11 = mul i32 %v10, 37
%v12 = mul i32 %v11, 41
%v13 = mul i32 %v12, 43
%v14 = mul i32 %v13, 47
%v15 = mul i32 %v14, 53
ret i32 %v15
}
define linkonce_odr i32 @hint_twice(i32 %x) likely_module_local {
%v1 = mul i32 %x, 3
%v2 = mul i32 %v1, 5
%v3 = mul i32 %v2, 7
%v4 = mul i32 %v3, 11
%v5 = mul i32 %v4, 13
%v6 = mul i32 %v5, 17
%v7 = mul i32 %v6, 19
%v8 = mul i32 %v7, 23
%v9 = mul i32 %v8, 29
%v10 = mul i32 %v9, 31
%v11 = mul i32 %v10, 37
%v12 = mul i32 %v11, 41
%v13 = mul i32 %v12, 43
%v14 = mul i32 %v13, 47
%v15 = mul i32 %v14, 53
ret i32 %v15
}
define linkonce_odr i32 @nohint_once(i32 %x) {
%v1 = mul i32 %x, 3
%v2 = mul i32 %v1, 5
%v3 = mul i32 %v2, 7
%v4 = mul i32 %v3, 11
%v5 = mul i32 %v4, 13
%v6 = mul i32 %v5, 17
%v7 = mul i32 %v6, 19
%v8 = mul i32 %v7, 23
%v9 = mul i32 %v8, 29
%v10 = mul i32 %v9, 31
%v11 = mul i32 %v10, 37
%v12 = mul i32 %v11, 41
%v13 = mul i32 %v12, 43
%v14 = mul i32 %v13, 47
%v15 = mul i32 %v14, 53
ret i32 %v15
}
define i32 @hint_external_once(i32 %x) likely_module_local {
%v1 = mul i32 %x, 3
%v2 = mul i32 %v1, 5
%v3 = mul i32 %v2, 7
%v4 = mul i32 %v3, 11
%v5 = mul i32 %v4, 13
%v6 = mul i32 %v5, 17
%v7 = mul i32 %v6, 19
%v8 = mul i32 %v7, 23
%v9 = mul i32 %v8, 29
%v10 = mul i32 %v9, 31
%v11 = mul i32 %v10, 37
%v12 = mul i32 %v11, 41
%v13 = mul i32 %v12, 43
%v14 = mul i32 %v13, 47
%v15 = mul i32 %v14, 53
ret i32 %v15
}