blob: 3fefa1c56ceab3eee2cbe05b742cd7ba15da3c91 [file] [log] [blame]
Dehao Chene5930492017-03-20 16:40:44 +00001; RUN: opt < %s -inline -S | FileCheck %s
2; Checks if inliner updates branch_weights annotation for call instructions.
3
4declare void @ext();
5declare void @ext1();
Dehao Chena75d0da2017-05-05 00:47:34 +00006@func = global void ()* null
Dehao Chene5930492017-03-20 16:40:44 +00007
8; CHECK: define void @callee(i32 %n) !prof ![[ENTRY_COUNT:[0-9]*]]
9define void @callee(i32 %n) !prof !1 {
10 %cond = icmp sle i32 %n, 10
11 br i1 %cond, label %cond_true, label %cond_false
12cond_true:
13; ext1 is optimized away, thus not updated.
14; CHECK: call void @ext1(), !prof ![[COUNT_CALLEE1:[0-9]*]]
15 call void @ext1(), !prof !2
16 ret void
17cond_false:
18; ext is cloned and updated.
19; CHECK: call void @ext(), !prof ![[COUNT_CALLEE:[0-9]*]]
20 call void @ext(), !prof !2
Dehao Chena75d0da2017-05-05 00:47:34 +000021 %f = load void ()*, void ()** @func
22; CHECK: call void %f(), !prof ![[COUNT_IND_CALLEE:[0-9]*]]
23 call void %f(), !prof !4
Dehao Chene5930492017-03-20 16:40:44 +000024 ret void
25}
26
27; CHECK: define void @caller()
28define void @caller() {
29; CHECK: call void @ext(), !prof ![[COUNT_CALLER:[0-9]*]]
Dehao Chena75d0da2017-05-05 00:47:34 +000030; CHECK: call void %f.i(), !prof ![[COUNT_IND_CALLER:[0-9]*]]
Dehao Chene5930492017-03-20 16:40:44 +000031 call void @callee(i32 15), !prof !3
32 ret void
33}
34
35!llvm.module.flags = !{!0}
36!0 = !{i32 1, !"MaxFunctionCount", i32 2000}
37!1 = !{!"function_entry_count", i64 1000}
38!2 = !{!"branch_weights", i64 2000}
39!3 = !{!"branch_weights", i64 400}
Dehao Chena75d0da2017-05-05 00:47:34 +000040!4 = !{!"VP", i32 0, i64 140, i64 111, i64 80, i64 222, i64 40, i64 333, i64 20}
Dehao Chene5930492017-03-20 16:40:44 +000041attributes #0 = { alwaysinline }
42; CHECK: ![[ENTRY_COUNT]] = !{!"function_entry_count", i64 600}
43; CHECK: ![[COUNT_CALLEE1]] = !{!"branch_weights", i64 2000}
Dehao Chena75d0da2017-05-05 00:47:34 +000044; CHECK: ![[COUNT_CALLEE]] = !{!"branch_weights", i64 1200}
45; CHECK: ![[COUNT_IND_CALLEE]] = !{!"VP", i32 0, i64 84, i64 111, i64 48, i64 222, i64 24, i64 333, i64 12}
46; CHECK: ![[COUNT_CALLER]] = !{!"branch_weights", i64 800}
47; CHECK: ![[COUNT_IND_CALLER]] = !{!"VP", i32 0, i64 56, i64 111, i64 32, i64 222, i64 16, i64 333, i64 8}