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