1 ; RUN: opt < %s -inline -S -inlinecold-threshold=75 | FileCheck %s 2 ; Test that functions with attribute Cold are not inlined while the 3 ; same function without attribute Cold will be inlined. 4 5 ; 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 13 @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 18 define i32 @simpleFunction(i32 %a) #0 { 19 entry: 20 %a1 = load volatile i32, i32* @a 21 %x1 = add i32 %a1, %a1 22 %a2 = load volatile i32, i32* @a 23 %x2 = add i32 %x1, %a2 24 %a3 = load volatile i32, i32* @a 25 %x3 = add i32 %x2, %a3 26 %a4 = load volatile i32, i32* @a 27 %x4 = add i32 %x3, %a4 28 %a5 = load volatile i32, i32* @a 29 %x5 = add i32 %x4, %a5 30 %a6 = load volatile i32, i32* @a 31 %x6 = add i32 %x5, %a6 32 %a7 = load volatile i32, i32* @a 33 %x7 = add i32 %x6, %a6 34 %a8 = load volatile i32, i32* @a 35 %x8 = add i32 %x7, %a8 36 %a9 = load volatile i32, i32* @a 37 %x9 = add i32 %x8, %a9 38 %a10 = load volatile i32, i32* @a 39 %x10 = add i32 %x9, %a10 40 %a11 = load volatile i32, i32* @a 41 %x11 = add i32 %x10, %a11 42 %a12 = load volatile i32, i32* @a 43 %x12 = add i32 %x11, %a12 44 %add = add i32 %x12, %a 45 ret i32 %add 46 } 47 48 ; Function Attrs: nounwind cold readnone uwtable 49 define i32 @ColdFunction(i32 %a) #1 { 50 ; CHECK-LABEL: @ColdFunction 51 ; CHECK: ret 52 ; OVERRIDE-LABEL: @ColdFunction 53 ; OVERRIDE: ret 54 ; DEFAULT-LABEL: @ColdFunction 55 ; DEFAULT: ret 56 entry: 57 %a1 = load volatile i32, i32* @a 58 %x1 = add i32 %a1, %a1 59 %a2 = load volatile i32, i32* @a 60 %x2 = add i32 %x1, %a2 61 %a3 = load volatile i32, i32* @a 62 %x3 = add i32 %x2, %a3 63 %a4 = load volatile i32, i32* @a 64 %x4 = add i32 %x3, %a4 65 %a5 = load volatile i32, i32* @a 66 %x5 = add i32 %x4, %a5 67 %a6 = load volatile i32, i32* @a 68 %x6 = add i32 %x5, %a6 69 %a7 = load volatile i32, i32* @a 70 %x7 = add i32 %x6, %a6 71 %a8 = load volatile i32, i32* @a 72 %x8 = add i32 %x7, %a8 73 %a9 = load volatile i32, i32* @a 74 %x9 = add i32 %x8, %a9 75 %a10 = load volatile i32, i32* @a 76 %x10 = add i32 %x9, %a10 77 %a11 = load volatile i32, i32* @a 78 %x11 = add i32 %x10, %a11 79 %a12 = load volatile i32, i32* @a 80 %x12 = add i32 %x11, %a12 81 %add = add i32 %x12, %a 82 ret i32 %add 83 } 84 85 ; This function should be larger than the default cold threshold (225). 86 define 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 93 entry: 94 %a1 = load volatile i32, i32* @a 95 %x1 = add i32 %a1, %a1 96 %a2 = load volatile i32, i32* @a 97 %x2 = add i32 %x1, %a2 98 %a3 = load volatile i32, i32* @a 99 %x3 = add i32 %x2, %a3 100 %a4 = load volatile i32, i32* @a 101 %x4 = add i32 %x3, %a4 102 %a5 = load volatile i32, i32* @a 103 %x5 = add i32 %x4, %a5 104 %a6 = load volatile i32, i32* @a 105 %x6 = add i32 %x5, %a6 106 %a7 = load volatile i32, i32* @a 107 %x7 = add i32 %x6, %a7 108 %a8 = load volatile i32, i32* @a 109 %x8 = add i32 %x7, %a8 110 %a9 = load volatile i32, i32* @a 111 %x9 = add i32 %x8, %a9 112 %a10 = load volatile i32, i32* @a 113 %x10 = add i32 %x9, %a10 114 %a11 = load volatile i32, i32* @a 115 %x11 = add i32 %x10, %a11 116 %a12 = load volatile i32, i32* @a 117 %x12 = add i32 %x11, %a12 118 119 %a21 = load volatile i32, i32* @a 120 %x21 = add i32 %x12, %a21 121 %a22 = load volatile i32, i32* @a 122 %x22 = add i32 %x21, %a22 123 %a23 = load volatile i32, i32* @a 124 %x23 = add i32 %x22, %a23 125 %a24 = load volatile i32, i32* @a 126 %x24 = add i32 %x23, %a24 127 %a25 = load volatile i32, i32* @a 128 %x25 = add i32 %x24, %a25 129 %a26 = load volatile i32, i32* @a 130 %x26 = add i32 %x25, %a26 131 %a27 = load volatile i32, i32* @a 132 %x27 = add i32 %x26, %a27 133 %a28 = load volatile i32, i32* @a 134 %x28 = add i32 %x27, %a28 135 %a29 = load volatile i32, i32* @a 136 %x29 = add i32 %x28, %a29 137 %a30 = load volatile i32, i32* @a 138 %x30 = add i32 %x29, %a30 139 %a31 = load volatile i32, i32* @a 140 %x31 = add i32 %x30, %a31 141 %a32 = load volatile i32, i32* @a 142 %x32 = add i32 %x31, %a32 143 144 %a41 = load volatile i32, i32* @a 145 %x41 = add i32 %x32, %a41 146 %a42 = load volatile i32, i32* @a 147 %x42 = add i32 %x41, %a42 148 %a43 = load volatile i32, i32* @a 149 %x43 = add i32 %x42, %a43 150 %a44 = load volatile i32, i32* @a 151 %x44 = add i32 %x43, %a44 152 %a45 = load volatile i32, i32* @a 153 %x45 = add i32 %x44, %a45 154 %a46 = load volatile i32, i32* @a 155 %x46 = add i32 %x45, %a46 156 %a47 = load volatile i32, i32* @a 157 %x47 = add i32 %x46, %a47 158 %a48 = load volatile i32, i32* @a 159 %x48 = add i32 %x47, %a48 160 %a49 = load volatile i32, i32* @a 161 %x49 = add i32 %x48, %a49 162 %a50 = load volatile i32, i32* @a 163 %x50 = add i32 %x49, %a50 164 %a51 = load volatile i32, i32* @a 165 %x51 = add i32 %x50, %a51 166 %a52 = load volatile i32, i32* @a 167 %x52 = add i32 %x51, %a52 168 169 %add = add i32 %x52, %a 170 ret i32 %add 171 } 172 173 ; Function Attrs: nounwind readnone uwtable 174 define i32 @bar(i32 %a) #0 { 175 ; CHECK-LABEL: @bar 176 ; CHECK: call i32 @ColdFunction(i32 5) 177 ; CHECK-NOT: call i32 @simpleFunction(i32 6) 178 ; CHECK: call i32 @ColdFunction2(i32 5) 179 ; CHECK: ret 180 ; 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 190 entry: 191 %0 = tail call i32 @ColdFunction(i32 5) 192 %1 = tail call i32 @simpleFunction(i32 6) 193 %2 = tail call i32 @ColdFunction2(i32 5) 194 %3 = add i32 %0, %1 195 %add = add i32 %2, %3 196 ret i32 %add 197 } 198 199 attributes #0 = { nounwind readnone uwtable } 200 attributes #1 = { nounwind cold readnone uwtable } 201