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