bb8c008262f1b06488f47558f49935e5e77c4993
[oota-llvm.git] / test / Transforms / Inline / inline-cold.ll
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
11 define i32 @simpleFunction(i32 %a) #0 {
12 entry:
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
42 define i32 @ColdFunction(i32 %a) #1 {
43 ; CHECK-LABEL: @ColdFunction
44 ; CHECK: ret
45 entry:
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
75 define 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
80 entry:
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
87 attributes #0 = { nounwind readnone uwtable }
88 attributes #1 = { nounwind cold readnone uwtable }