1; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s
2
3; Test that functions with attribute Cold are not inlined while the
4; same function without attribute Cold will be inlined.
5
6@a = global i32 4
7
8; This function should be larger than the cold threshold (75), but smaller
9; than the regular threshold.
10; Function Attrs: nounwind readnone uwtable
11define i32 @simpleFunction(i32 %a) #0 {
12entry:
13  %a1 = load volatile i32* @a
14  %x1 = add i32 %a1,  %a1
15  %a2 = load volatile i32* @a
16  %x2 = add i32 %x1, %a2
17  %a3 = load volatile i32* @a
18  %x3 = add i32 %x2, %a3
19  %a4 = load volatile i32* @a
20  %x4 = add i32 %x3, %a4
21  %a5 = load volatile i32* @a
22  %x5 = add i32 %x4, %a5
23  %a6 = load volatile i32* @a
24  %x6 = add i32 %x5, %a6
25  %a7 = load volatile i32* @a
26  %x7 = add i32 %x6, %a6
27  %a8 = load volatile i32* @a
28  %x8 = add i32 %x7, %a8
29  %a9 = load volatile i32* @a
30  %x9 = add i32 %x8, %a9
31  %a10 = load volatile i32* @a
32  %x10 = add i32 %x9, %a10
33  %a11 = load volatile i32* @a
34  %x11 = add i32 %x10, %a11
35  %a12 = load volatile i32* @a
36  %x12 = add i32 %x11, %a12
37  %add = add i32 %x12, %a
38  ret i32 %add
39}
40
41; Function Attrs: nounwind cold readnone uwtable
42define i32 @ColdFunction(i32 %a) #1 {
43; CHECK-LABEL: @ColdFunction
44; CHECK: ret
45entry:
46  %a1 = load volatile i32* @a
47  %x1 = add i32 %a1,  %a1
48  %a2 = load volatile i32* @a
49  %x2 = add i32 %x1, %a2
50  %a3 = load volatile i32* @a
51  %x3 = add i32 %x2, %a3
52  %a4 = load volatile i32* @a
53  %x4 = add i32 %x3, %a4
54  %a5 = load volatile i32* @a
55  %x5 = add i32 %x4, %a5
56  %a6 = load volatile i32* @a
57  %x6 = add i32 %x5, %a6
58  %a7 = load volatile i32* @a
59  %x7 = add i32 %x6, %a6
60  %a8 = load volatile i32* @a
61  %x8 = add i32 %x7, %a8
62  %a9 = load volatile i32* @a
63  %x9 = add i32 %x8, %a9
64  %a10 = load volatile i32* @a
65  %x10 = add i32 %x9, %a10
66  %a11 = load volatile i32* @a
67  %x11 = add i32 %x10, %a11
68  %a12 = load volatile i32* @a
69  %x12 = add i32 %x11, %a12
70  %add = add i32 %x12, %a
71  ret i32 %add
72}
73
74; Function Attrs: nounwind readnone uwtable
75define i32 @bar(i32 %a) #0 {
76; CHECK-LABEL: @bar
77; CHECK: call i32 @ColdFunction(i32 5)
78; CHECK-NOT: call i32 @simpleFunction(i32 6)
79; CHECK: ret
80entry:
81  %0 = tail call i32 @ColdFunction(i32 5)
82  %1 = tail call i32 @simpleFunction(i32 6)
83  %add = add i32 %0, %1
84  ret i32 %add
85}
86
87attributes #0 = { nounwind readnone uwtable }
88attributes #1 = { nounwind cold readnone uwtable }
89