blob: b3c134538a45cb766a2b83fd46f9d8f920dd58a0 [file] [log] [blame]
Manman Rend4612442014-02-06 01:59:22 +00001; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s
Manman Rene8781b12014-02-05 22:53:44 +00002; Test that functions with attribute Cold are not inlined while the
3; same function without attribute Cold will be inlined.
4
Manman Ren3c440672014-04-25 17:34:55 +00005; RUN: opt < %s -inline -S -inline-threshold=600 | FileCheck %s -check-prefix=OVERRIDE
6; The command line argument for inline-threshold should override
7; the default cold threshold, so a cold function with size bigger
8; than the default cold threshold (225) will be inlined.
9
10; RUN: opt < %s -inline -S | FileCheck %s -check-prefix=DEFAULT
11; The same cold function will not be inlined with the default behavior.
12
Manman Rene8781b12014-02-05 22:53:44 +000013@a = global i32 4
14
15; This function should be larger than the cold threshold (75), but smaller
16; than the regular threshold.
17; Function Attrs: nounwind readnone uwtable
18define i32 @simpleFunction(i32 %a) #0 {
19entry:
David Blaikiea79ac142015-02-27 21:17:42 +000020 %a1 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000021 %x1 = add i32 %a1, %a1
David Blaikiea79ac142015-02-27 21:17:42 +000022 %a2 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000023 %x2 = add i32 %x1, %a2
David Blaikiea79ac142015-02-27 21:17:42 +000024 %a3 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000025 %x3 = add i32 %x2, %a3
David Blaikiea79ac142015-02-27 21:17:42 +000026 %a4 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000027 %x4 = add i32 %x3, %a4
David Blaikiea79ac142015-02-27 21:17:42 +000028 %a5 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000029 %x5 = add i32 %x4, %a5
David Blaikiea79ac142015-02-27 21:17:42 +000030 %a6 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000031 %x6 = add i32 %x5, %a6
David Blaikiea79ac142015-02-27 21:17:42 +000032 %a7 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000033 %x7 = add i32 %x6, %a6
David Blaikiea79ac142015-02-27 21:17:42 +000034 %a8 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000035 %x8 = add i32 %x7, %a8
David Blaikiea79ac142015-02-27 21:17:42 +000036 %a9 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000037 %x9 = add i32 %x8, %a9
David Blaikiea79ac142015-02-27 21:17:42 +000038 %a10 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000039 %x10 = add i32 %x9, %a10
David Blaikiea79ac142015-02-27 21:17:42 +000040 %a11 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000041 %x11 = add i32 %x10, %a11
David Blaikiea79ac142015-02-27 21:17:42 +000042 %a12 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000043 %x12 = add i32 %x11, %a12
44 %add = add i32 %x12, %a
45 ret i32 %add
46}
47
48; Function Attrs: nounwind cold readnone uwtable
49define i32 @ColdFunction(i32 %a) #1 {
50; CHECK-LABEL: @ColdFunction
51; CHECK: ret
Manman Ren3c440672014-04-25 17:34:55 +000052; OVERRIDE-LABEL: @ColdFunction
53; OVERRIDE: ret
54; DEFAULT-LABEL: @ColdFunction
55; DEFAULT: ret
Manman Rene8781b12014-02-05 22:53:44 +000056entry:
David Blaikiea79ac142015-02-27 21:17:42 +000057 %a1 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000058 %x1 = add i32 %a1, %a1
David Blaikiea79ac142015-02-27 21:17:42 +000059 %a2 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000060 %x2 = add i32 %x1, %a2
David Blaikiea79ac142015-02-27 21:17:42 +000061 %a3 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000062 %x3 = add i32 %x2, %a3
David Blaikiea79ac142015-02-27 21:17:42 +000063 %a4 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000064 %x4 = add i32 %x3, %a4
David Blaikiea79ac142015-02-27 21:17:42 +000065 %a5 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000066 %x5 = add i32 %x4, %a5
David Blaikiea79ac142015-02-27 21:17:42 +000067 %a6 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000068 %x6 = add i32 %x5, %a6
David Blaikiea79ac142015-02-27 21:17:42 +000069 %a7 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000070 %x7 = add i32 %x6, %a6
David Blaikiea79ac142015-02-27 21:17:42 +000071 %a8 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000072 %x8 = add i32 %x7, %a8
David Blaikiea79ac142015-02-27 21:17:42 +000073 %a9 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000074 %x9 = add i32 %x8, %a9
David Blaikiea79ac142015-02-27 21:17:42 +000075 %a10 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000076 %x10 = add i32 %x9, %a10
David Blaikiea79ac142015-02-27 21:17:42 +000077 %a11 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000078 %x11 = add i32 %x10, %a11
David Blaikiea79ac142015-02-27 21:17:42 +000079 %a12 = load volatile i32, i32* @a
Manman Rene8781b12014-02-05 22:53:44 +000080 %x12 = add i32 %x11, %a12
81 %add = add i32 %x12, %a
82 ret i32 %add
83}
84
Manman Ren3c440672014-04-25 17:34:55 +000085; This function should be larger than the default cold threshold (225).
86define i32 @ColdFunction2(i32 %a) #1 {
87; CHECK-LABEL: @ColdFunction2
88; CHECK: ret
89; OVERRIDE-LABEL: @ColdFunction2
90; OVERRIDE: ret
91; DEFAULT-LABEL: @ColdFunction2
92; DEFAULT: ret
93entry:
David Blaikiea79ac142015-02-27 21:17:42 +000094 %a1 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +000095 %x1 = add i32 %a1, %a1
David Blaikiea79ac142015-02-27 21:17:42 +000096 %a2 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +000097 %x2 = add i32 %x1, %a2
David Blaikiea79ac142015-02-27 21:17:42 +000098 %a3 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +000099 %x3 = add i32 %x2, %a3
David Blaikiea79ac142015-02-27 21:17:42 +0000100 %a4 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000101 %x4 = add i32 %x3, %a4
David Blaikiea79ac142015-02-27 21:17:42 +0000102 %a5 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000103 %x5 = add i32 %x4, %a5
David Blaikiea79ac142015-02-27 21:17:42 +0000104 %a6 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000105 %x6 = add i32 %x5, %a6
David Blaikiea79ac142015-02-27 21:17:42 +0000106 %a7 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000107 %x7 = add i32 %x6, %a7
David Blaikiea79ac142015-02-27 21:17:42 +0000108 %a8 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000109 %x8 = add i32 %x7, %a8
David Blaikiea79ac142015-02-27 21:17:42 +0000110 %a9 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000111 %x9 = add i32 %x8, %a9
David Blaikiea79ac142015-02-27 21:17:42 +0000112 %a10 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000113 %x10 = add i32 %x9, %a10
David Blaikiea79ac142015-02-27 21:17:42 +0000114 %a11 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000115 %x11 = add i32 %x10, %a11
David Blaikiea79ac142015-02-27 21:17:42 +0000116 %a12 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000117 %x12 = add i32 %x11, %a12
118
David Blaikiea79ac142015-02-27 21:17:42 +0000119 %a21 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000120 %x21 = add i32 %x12, %a21
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %a22 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000122 %x22 = add i32 %x21, %a22
David Blaikiea79ac142015-02-27 21:17:42 +0000123 %a23 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000124 %x23 = add i32 %x22, %a23
David Blaikiea79ac142015-02-27 21:17:42 +0000125 %a24 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000126 %x24 = add i32 %x23, %a24
David Blaikiea79ac142015-02-27 21:17:42 +0000127 %a25 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000128 %x25 = add i32 %x24, %a25
David Blaikiea79ac142015-02-27 21:17:42 +0000129 %a26 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000130 %x26 = add i32 %x25, %a26
David Blaikiea79ac142015-02-27 21:17:42 +0000131 %a27 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000132 %x27 = add i32 %x26, %a27
David Blaikiea79ac142015-02-27 21:17:42 +0000133 %a28 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000134 %x28 = add i32 %x27, %a28
David Blaikiea79ac142015-02-27 21:17:42 +0000135 %a29 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000136 %x29 = add i32 %x28, %a29
David Blaikiea79ac142015-02-27 21:17:42 +0000137 %a30 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000138 %x30 = add i32 %x29, %a30
David Blaikiea79ac142015-02-27 21:17:42 +0000139 %a31 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000140 %x31 = add i32 %x30, %a31
David Blaikiea79ac142015-02-27 21:17:42 +0000141 %a32 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000142 %x32 = add i32 %x31, %a32
143
David Blaikiea79ac142015-02-27 21:17:42 +0000144 %a41 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000145 %x41 = add i32 %x32, %a41
David Blaikiea79ac142015-02-27 21:17:42 +0000146 %a42 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000147 %x42 = add i32 %x41, %a42
David Blaikiea79ac142015-02-27 21:17:42 +0000148 %a43 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000149 %x43 = add i32 %x42, %a43
David Blaikiea79ac142015-02-27 21:17:42 +0000150 %a44 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000151 %x44 = add i32 %x43, %a44
David Blaikiea79ac142015-02-27 21:17:42 +0000152 %a45 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000153 %x45 = add i32 %x44, %a45
David Blaikiea79ac142015-02-27 21:17:42 +0000154 %a46 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000155 %x46 = add i32 %x45, %a46
David Blaikiea79ac142015-02-27 21:17:42 +0000156 %a47 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000157 %x47 = add i32 %x46, %a47
David Blaikiea79ac142015-02-27 21:17:42 +0000158 %a48 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000159 %x48 = add i32 %x47, %a48
David Blaikiea79ac142015-02-27 21:17:42 +0000160 %a49 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000161 %x49 = add i32 %x48, %a49
David Blaikiea79ac142015-02-27 21:17:42 +0000162 %a50 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000163 %x50 = add i32 %x49, %a50
David Blaikiea79ac142015-02-27 21:17:42 +0000164 %a51 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000165 %x51 = add i32 %x50, %a51
David Blaikiea79ac142015-02-27 21:17:42 +0000166 %a52 = load volatile i32, i32* @a
Manman Ren3c440672014-04-25 17:34:55 +0000167 %x52 = add i32 %x51, %a52
168
169 %add = add i32 %x52, %a
170 ret i32 %add
171}
172
Manman Rene8781b12014-02-05 22:53:44 +0000173; Function Attrs: nounwind readnone uwtable
174define i32 @bar(i32 %a) #0 {
175; CHECK-LABEL: @bar
176; CHECK: call i32 @ColdFunction(i32 5)
177; CHECK-NOT: call i32 @simpleFunction(i32 6)
Manman Ren3c440672014-04-25 17:34:55 +0000178; CHECK: call i32 @ColdFunction2(i32 5)
Manman Rene8781b12014-02-05 22:53:44 +0000179; CHECK: ret
Manman Ren3c440672014-04-25 17:34:55 +0000180; OVERRIDE-LABEL: @bar
181; OVERRIDE-NOT: call i32 @ColdFunction(i32 5)
182; OVERRIDE-NOT: call i32 @simpleFunction(i32 6)
183; OVERRIDE-NOT: call i32 @ColdFunction2(i32 5)
184; OVERRIDE: ret
185; DEFAULT-LABEL: @bar
186; DEFAULT-NOT: call i32 @ColdFunction(i32 5)
187; DEFAULT-NOT: call i32 @simpleFunction(i32 6)
188; DEFAULT: call i32 @ColdFunction2(i32 5)
189; DEFAULT: ret
Manman Rene8781b12014-02-05 22:53:44 +0000190entry:
191 %0 = tail call i32 @ColdFunction(i32 5)
192 %1 = tail call i32 @simpleFunction(i32 6)
Manman Ren3c440672014-04-25 17:34:55 +0000193 %2 = tail call i32 @ColdFunction2(i32 5)
194 %3 = add i32 %0, %1
195 %add = add i32 %2, %3
Manman Rene8781b12014-02-05 22:53:44 +0000196 ret i32 %add
197}
198
199attributes #0 = { nounwind readnone uwtable }
200attributes #1 = { nounwind cold readnone uwtable }