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