1*9880d681SAndroid Build Coastguard Worker; Like frame-03.ll, but for z13. In this case we have 16 more registers 2*9880d681SAndroid Build Coastguard Worker; available. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; This function should require all FPRs, but no other spill slots. 7*9880d681SAndroid Build Coastguard Worker; We need to save and restore 8 of the 16 FPRs, so the frame size 8*9880d681SAndroid Build Coastguard Worker; should be exactly 160 + 8 * 8 = 224. The CFA offset is 160 9*9880d681SAndroid Build Coastguard Worker; (the caller-allocated part of the frame) + 224. 10*9880d681SAndroid Build Coastguard Workerdefine void @f1(double *%ptr) { 11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 12*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -224 13*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 384 14*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 216(%r15) 15*9880d681SAndroid Build Coastguard Worker; CHECK: std %f9, 208(%r15) 16*9880d681SAndroid Build Coastguard Worker; CHECK: std %f10, 200(%r15) 17*9880d681SAndroid Build Coastguard Worker; CHECK: std %f11, 192(%r15) 18*9880d681SAndroid Build Coastguard Worker; CHECK: std %f12, 184(%r15) 19*9880d681SAndroid Build Coastguard Worker; CHECK: std %f13, 176(%r15) 20*9880d681SAndroid Build Coastguard Worker; CHECK: std %f14, 168(%r15) 21*9880d681SAndroid Build Coastguard Worker; CHECK: std %f15, 160(%r15) 22*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168 23*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f9, -176 24*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f10, -184 25*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f11, -192 26*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f12, -200 27*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f13, -208 28*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f14, -216 29*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f15, -224 30*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f0, 0(%r2) 31*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f7, 0(%r2) 32*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f8, 0(%r2) 33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: ld %f15, 0(%r2) 34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v16, 0(%r2) 35*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v23, 0(%r2) 36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v24, 0(%r2) 37*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlrepg %v31, 0(%r2) 38*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 216(%r15) 39*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f9, 208(%r15) 40*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f10, 200(%r15) 41*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f11, 192(%r15) 42*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f12, 184(%r15) 43*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f13, 176(%r15) 44*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f14, 168(%r15) 45*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f15, 160(%r15) 46*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 224 47*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 48*9880d681SAndroid Build Coastguard Worker %l0 = load volatile double, double *%ptr 49*9880d681SAndroid Build Coastguard Worker %l1 = load volatile double, double *%ptr 50*9880d681SAndroid Build Coastguard Worker %l2 = load volatile double, double *%ptr 51*9880d681SAndroid Build Coastguard Worker %l3 = load volatile double, double *%ptr 52*9880d681SAndroid Build Coastguard Worker %l4 = load volatile double, double *%ptr 53*9880d681SAndroid Build Coastguard Worker %l5 = load volatile double, double *%ptr 54*9880d681SAndroid Build Coastguard Worker %l6 = load volatile double, double *%ptr 55*9880d681SAndroid Build Coastguard Worker %l7 = load volatile double, double *%ptr 56*9880d681SAndroid Build Coastguard Worker %l8 = load volatile double, double *%ptr 57*9880d681SAndroid Build Coastguard Worker %l9 = load volatile double, double *%ptr 58*9880d681SAndroid Build Coastguard Worker %l10 = load volatile double, double *%ptr 59*9880d681SAndroid Build Coastguard Worker %l11 = load volatile double, double *%ptr 60*9880d681SAndroid Build Coastguard Worker %l12 = load volatile double, double *%ptr 61*9880d681SAndroid Build Coastguard Worker %l13 = load volatile double, double *%ptr 62*9880d681SAndroid Build Coastguard Worker %l14 = load volatile double, double *%ptr 63*9880d681SAndroid Build Coastguard Worker %l15 = load volatile double, double *%ptr 64*9880d681SAndroid Build Coastguard Worker %l16 = load volatile double, double *%ptr 65*9880d681SAndroid Build Coastguard Worker %l17 = load volatile double, double *%ptr 66*9880d681SAndroid Build Coastguard Worker %l18 = load volatile double, double *%ptr 67*9880d681SAndroid Build Coastguard Worker %l19 = load volatile double, double *%ptr 68*9880d681SAndroid Build Coastguard Worker %l20 = load volatile double, double *%ptr 69*9880d681SAndroid Build Coastguard Worker %l21 = load volatile double, double *%ptr 70*9880d681SAndroid Build Coastguard Worker %l22 = load volatile double, double *%ptr 71*9880d681SAndroid Build Coastguard Worker %l23 = load volatile double, double *%ptr 72*9880d681SAndroid Build Coastguard Worker %l24 = load volatile double, double *%ptr 73*9880d681SAndroid Build Coastguard Worker %l25 = load volatile double, double *%ptr 74*9880d681SAndroid Build Coastguard Worker %l26 = load volatile double, double *%ptr 75*9880d681SAndroid Build Coastguard Worker %l27 = load volatile double, double *%ptr 76*9880d681SAndroid Build Coastguard Worker %l28 = load volatile double, double *%ptr 77*9880d681SAndroid Build Coastguard Worker %l29 = load volatile double, double *%ptr 78*9880d681SAndroid Build Coastguard Worker %l30 = load volatile double, double *%ptr 79*9880d681SAndroid Build Coastguard Worker %l31 = load volatile double, double *%ptr 80*9880d681SAndroid Build Coastguard Worker %acc0 = fsub double %l0, %l0 81*9880d681SAndroid Build Coastguard Worker %acc1 = fsub double %l1, %acc0 82*9880d681SAndroid Build Coastguard Worker %acc2 = fsub double %l2, %acc1 83*9880d681SAndroid Build Coastguard Worker %acc3 = fsub double %l3, %acc2 84*9880d681SAndroid Build Coastguard Worker %acc4 = fsub double %l4, %acc3 85*9880d681SAndroid Build Coastguard Worker %acc5 = fsub double %l5, %acc4 86*9880d681SAndroid Build Coastguard Worker %acc6 = fsub double %l6, %acc5 87*9880d681SAndroid Build Coastguard Worker %acc7 = fsub double %l7, %acc6 88*9880d681SAndroid Build Coastguard Worker %acc8 = fsub double %l8, %acc7 89*9880d681SAndroid Build Coastguard Worker %acc9 = fsub double %l9, %acc8 90*9880d681SAndroid Build Coastguard Worker %acc10 = fsub double %l10, %acc9 91*9880d681SAndroid Build Coastguard Worker %acc11 = fsub double %l11, %acc10 92*9880d681SAndroid Build Coastguard Worker %acc12 = fsub double %l12, %acc11 93*9880d681SAndroid Build Coastguard Worker %acc13 = fsub double %l13, %acc12 94*9880d681SAndroid Build Coastguard Worker %acc14 = fsub double %l14, %acc13 95*9880d681SAndroid Build Coastguard Worker %acc15 = fsub double %l15, %acc14 96*9880d681SAndroid Build Coastguard Worker %acc16 = fsub double %l16, %acc15 97*9880d681SAndroid Build Coastguard Worker %acc17 = fsub double %l17, %acc16 98*9880d681SAndroid Build Coastguard Worker %acc18 = fsub double %l18, %acc17 99*9880d681SAndroid Build Coastguard Worker %acc19 = fsub double %l19, %acc18 100*9880d681SAndroid Build Coastguard Worker %acc20 = fsub double %l20, %acc19 101*9880d681SAndroid Build Coastguard Worker %acc21 = fsub double %l21, %acc20 102*9880d681SAndroid Build Coastguard Worker %acc22 = fsub double %l22, %acc21 103*9880d681SAndroid Build Coastguard Worker %acc23 = fsub double %l23, %acc22 104*9880d681SAndroid Build Coastguard Worker %acc24 = fsub double %l24, %acc23 105*9880d681SAndroid Build Coastguard Worker %acc25 = fsub double %l25, %acc24 106*9880d681SAndroid Build Coastguard Worker %acc26 = fsub double %l26, %acc25 107*9880d681SAndroid Build Coastguard Worker %acc27 = fsub double %l27, %acc26 108*9880d681SAndroid Build Coastguard Worker %acc28 = fsub double %l28, %acc27 109*9880d681SAndroid Build Coastguard Worker %acc29 = fsub double %l29, %acc28 110*9880d681SAndroid Build Coastguard Worker %acc30 = fsub double %l30, %acc29 111*9880d681SAndroid Build Coastguard Worker %acc31 = fsub double %l31, %acc30 112*9880d681SAndroid Build Coastguard Worker store volatile double %acc0, double *%ptr 113*9880d681SAndroid Build Coastguard Worker store volatile double %acc1, double *%ptr 114*9880d681SAndroid Build Coastguard Worker store volatile double %acc2, double *%ptr 115*9880d681SAndroid Build Coastguard Worker store volatile double %acc3, double *%ptr 116*9880d681SAndroid Build Coastguard Worker store volatile double %acc4, double *%ptr 117*9880d681SAndroid Build Coastguard Worker store volatile double %acc5, double *%ptr 118*9880d681SAndroid Build Coastguard Worker store volatile double %acc6, double *%ptr 119*9880d681SAndroid Build Coastguard Worker store volatile double %acc7, double *%ptr 120*9880d681SAndroid Build Coastguard Worker store volatile double %acc8, double *%ptr 121*9880d681SAndroid Build Coastguard Worker store volatile double %acc9, double *%ptr 122*9880d681SAndroid Build Coastguard Worker store volatile double %acc10, double *%ptr 123*9880d681SAndroid Build Coastguard Worker store volatile double %acc11, double *%ptr 124*9880d681SAndroid Build Coastguard Worker store volatile double %acc12, double *%ptr 125*9880d681SAndroid Build Coastguard Worker store volatile double %acc13, double *%ptr 126*9880d681SAndroid Build Coastguard Worker store volatile double %acc14, double *%ptr 127*9880d681SAndroid Build Coastguard Worker store volatile double %acc15, double *%ptr 128*9880d681SAndroid Build Coastguard Worker store volatile double %acc16, double *%ptr 129*9880d681SAndroid Build Coastguard Worker store volatile double %acc17, double *%ptr 130*9880d681SAndroid Build Coastguard Worker store volatile double %acc18, double *%ptr 131*9880d681SAndroid Build Coastguard Worker store volatile double %acc19, double *%ptr 132*9880d681SAndroid Build Coastguard Worker store volatile double %acc20, double *%ptr 133*9880d681SAndroid Build Coastguard Worker store volatile double %acc21, double *%ptr 134*9880d681SAndroid Build Coastguard Worker store volatile double %acc22, double *%ptr 135*9880d681SAndroid Build Coastguard Worker store volatile double %acc23, double *%ptr 136*9880d681SAndroid Build Coastguard Worker store volatile double %acc24, double *%ptr 137*9880d681SAndroid Build Coastguard Worker store volatile double %acc25, double *%ptr 138*9880d681SAndroid Build Coastguard Worker store volatile double %acc26, double *%ptr 139*9880d681SAndroid Build Coastguard Worker store volatile double %acc27, double *%ptr 140*9880d681SAndroid Build Coastguard Worker store volatile double %acc28, double *%ptr 141*9880d681SAndroid Build Coastguard Worker store volatile double %acc29, double *%ptr 142*9880d681SAndroid Build Coastguard Worker store volatile double %acc30, double *%ptr 143*9880d681SAndroid Build Coastguard Worker store volatile double %acc31, double *%ptr 144*9880d681SAndroid Build Coastguard Worker ret void 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; Like f1, but requires one fewer FPR. We allocate in numerical order, 148*9880d681SAndroid Build Coastguard Worker; so %f15 is the one that gets dropped. 149*9880d681SAndroid Build Coastguard Workerdefine void @f2(double *%ptr) { 150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 151*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -216 152*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 376 153*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 208(%r15) 154*9880d681SAndroid Build Coastguard Worker; CHECK: std %f9, 200(%r15) 155*9880d681SAndroid Build Coastguard Worker; CHECK: std %f10, 192(%r15) 156*9880d681SAndroid Build Coastguard Worker; CHECK: std %f11, 184(%r15) 157*9880d681SAndroid Build Coastguard Worker; CHECK: std %f12, 176(%r15) 158*9880d681SAndroid Build Coastguard Worker; CHECK: std %f13, 168(%r15) 159*9880d681SAndroid Build Coastguard Worker; CHECK: std %f14, 160(%r15) 160*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168 161*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f9, -176 162*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f10, -184 163*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f11, -192 164*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f12, -200 165*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f13, -208 166*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f14, -216 167*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %v15 168*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %f15 169*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 208(%r15) 170*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f9, 200(%r15) 171*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f10, 192(%r15) 172*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f11, 184(%r15) 173*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f12, 176(%r15) 174*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f13, 168(%r15) 175*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f14, 160(%r15) 176*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 216 177*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 178*9880d681SAndroid Build Coastguard Worker %l0 = load volatile double, double *%ptr 179*9880d681SAndroid Build Coastguard Worker %l1 = load volatile double, double *%ptr 180*9880d681SAndroid Build Coastguard Worker %l2 = load volatile double, double *%ptr 181*9880d681SAndroid Build Coastguard Worker %l3 = load volatile double, double *%ptr 182*9880d681SAndroid Build Coastguard Worker %l4 = load volatile double, double *%ptr 183*9880d681SAndroid Build Coastguard Worker %l5 = load volatile double, double *%ptr 184*9880d681SAndroid Build Coastguard Worker %l6 = load volatile double, double *%ptr 185*9880d681SAndroid Build Coastguard Worker %l7 = load volatile double, double *%ptr 186*9880d681SAndroid Build Coastguard Worker %l8 = load volatile double, double *%ptr 187*9880d681SAndroid Build Coastguard Worker %l9 = load volatile double, double *%ptr 188*9880d681SAndroid Build Coastguard Worker %l10 = load volatile double, double *%ptr 189*9880d681SAndroid Build Coastguard Worker %l11 = load volatile double, double *%ptr 190*9880d681SAndroid Build Coastguard Worker %l12 = load volatile double, double *%ptr 191*9880d681SAndroid Build Coastguard Worker %l13 = load volatile double, double *%ptr 192*9880d681SAndroid Build Coastguard Worker %l14 = load volatile double, double *%ptr 193*9880d681SAndroid Build Coastguard Worker %l16 = load volatile double, double *%ptr 194*9880d681SAndroid Build Coastguard Worker %l17 = load volatile double, double *%ptr 195*9880d681SAndroid Build Coastguard Worker %l18 = load volatile double, double *%ptr 196*9880d681SAndroid Build Coastguard Worker %l19 = load volatile double, double *%ptr 197*9880d681SAndroid Build Coastguard Worker %l20 = load volatile double, double *%ptr 198*9880d681SAndroid Build Coastguard Worker %l21 = load volatile double, double *%ptr 199*9880d681SAndroid Build Coastguard Worker %l22 = load volatile double, double *%ptr 200*9880d681SAndroid Build Coastguard Worker %l23 = load volatile double, double *%ptr 201*9880d681SAndroid Build Coastguard Worker %l24 = load volatile double, double *%ptr 202*9880d681SAndroid Build Coastguard Worker %l25 = load volatile double, double *%ptr 203*9880d681SAndroid Build Coastguard Worker %l26 = load volatile double, double *%ptr 204*9880d681SAndroid Build Coastguard Worker %l27 = load volatile double, double *%ptr 205*9880d681SAndroid Build Coastguard Worker %l28 = load volatile double, double *%ptr 206*9880d681SAndroid Build Coastguard Worker %l29 = load volatile double, double *%ptr 207*9880d681SAndroid Build Coastguard Worker %l30 = load volatile double, double *%ptr 208*9880d681SAndroid Build Coastguard Worker %l31 = load volatile double, double *%ptr 209*9880d681SAndroid Build Coastguard Worker %acc0 = fsub double %l0, %l0 210*9880d681SAndroid Build Coastguard Worker %acc1 = fsub double %l1, %acc0 211*9880d681SAndroid Build Coastguard Worker %acc2 = fsub double %l2, %acc1 212*9880d681SAndroid Build Coastguard Worker %acc3 = fsub double %l3, %acc2 213*9880d681SAndroid Build Coastguard Worker %acc4 = fsub double %l4, %acc3 214*9880d681SAndroid Build Coastguard Worker %acc5 = fsub double %l5, %acc4 215*9880d681SAndroid Build Coastguard Worker %acc6 = fsub double %l6, %acc5 216*9880d681SAndroid Build Coastguard Worker %acc7 = fsub double %l7, %acc6 217*9880d681SAndroid Build Coastguard Worker %acc8 = fsub double %l8, %acc7 218*9880d681SAndroid Build Coastguard Worker %acc9 = fsub double %l9, %acc8 219*9880d681SAndroid Build Coastguard Worker %acc10 = fsub double %l10, %acc9 220*9880d681SAndroid Build Coastguard Worker %acc11 = fsub double %l11, %acc10 221*9880d681SAndroid Build Coastguard Worker %acc12 = fsub double %l12, %acc11 222*9880d681SAndroid Build Coastguard Worker %acc13 = fsub double %l13, %acc12 223*9880d681SAndroid Build Coastguard Worker %acc14 = fsub double %l14, %acc13 224*9880d681SAndroid Build Coastguard Worker %acc16 = fsub double %l16, %acc14 225*9880d681SAndroid Build Coastguard Worker %acc17 = fsub double %l17, %acc16 226*9880d681SAndroid Build Coastguard Worker %acc18 = fsub double %l18, %acc17 227*9880d681SAndroid Build Coastguard Worker %acc19 = fsub double %l19, %acc18 228*9880d681SAndroid Build Coastguard Worker %acc20 = fsub double %l20, %acc19 229*9880d681SAndroid Build Coastguard Worker %acc21 = fsub double %l21, %acc20 230*9880d681SAndroid Build Coastguard Worker %acc22 = fsub double %l22, %acc21 231*9880d681SAndroid Build Coastguard Worker %acc23 = fsub double %l23, %acc22 232*9880d681SAndroid Build Coastguard Worker %acc24 = fsub double %l24, %acc23 233*9880d681SAndroid Build Coastguard Worker %acc25 = fsub double %l25, %acc24 234*9880d681SAndroid Build Coastguard Worker %acc26 = fsub double %l26, %acc25 235*9880d681SAndroid Build Coastguard Worker %acc27 = fsub double %l27, %acc26 236*9880d681SAndroid Build Coastguard Worker %acc28 = fsub double %l28, %acc27 237*9880d681SAndroid Build Coastguard Worker %acc29 = fsub double %l29, %acc28 238*9880d681SAndroid Build Coastguard Worker %acc30 = fsub double %l30, %acc29 239*9880d681SAndroid Build Coastguard Worker %acc31 = fsub double %l31, %acc30 240*9880d681SAndroid Build Coastguard Worker store volatile double %acc0, double *%ptr 241*9880d681SAndroid Build Coastguard Worker store volatile double %acc1, double *%ptr 242*9880d681SAndroid Build Coastguard Worker store volatile double %acc2, double *%ptr 243*9880d681SAndroid Build Coastguard Worker store volatile double %acc3, double *%ptr 244*9880d681SAndroid Build Coastguard Worker store volatile double %acc4, double *%ptr 245*9880d681SAndroid Build Coastguard Worker store volatile double %acc5, double *%ptr 246*9880d681SAndroid Build Coastguard Worker store volatile double %acc6, double *%ptr 247*9880d681SAndroid Build Coastguard Worker store volatile double %acc7, double *%ptr 248*9880d681SAndroid Build Coastguard Worker store volatile double %acc8, double *%ptr 249*9880d681SAndroid Build Coastguard Worker store volatile double %acc9, double *%ptr 250*9880d681SAndroid Build Coastguard Worker store volatile double %acc10, double *%ptr 251*9880d681SAndroid Build Coastguard Worker store volatile double %acc11, double *%ptr 252*9880d681SAndroid Build Coastguard Worker store volatile double %acc12, double *%ptr 253*9880d681SAndroid Build Coastguard Worker store volatile double %acc13, double *%ptr 254*9880d681SAndroid Build Coastguard Worker store volatile double %acc14, double *%ptr 255*9880d681SAndroid Build Coastguard Worker store volatile double %acc16, double *%ptr 256*9880d681SAndroid Build Coastguard Worker store volatile double %acc17, double *%ptr 257*9880d681SAndroid Build Coastguard Worker store volatile double %acc18, double *%ptr 258*9880d681SAndroid Build Coastguard Worker store volatile double %acc19, double *%ptr 259*9880d681SAndroid Build Coastguard Worker store volatile double %acc20, double *%ptr 260*9880d681SAndroid Build Coastguard Worker store volatile double %acc21, double *%ptr 261*9880d681SAndroid Build Coastguard Worker store volatile double %acc22, double *%ptr 262*9880d681SAndroid Build Coastguard Worker store volatile double %acc23, double *%ptr 263*9880d681SAndroid Build Coastguard Worker store volatile double %acc24, double *%ptr 264*9880d681SAndroid Build Coastguard Worker store volatile double %acc25, double *%ptr 265*9880d681SAndroid Build Coastguard Worker store volatile double %acc26, double *%ptr 266*9880d681SAndroid Build Coastguard Worker store volatile double %acc27, double *%ptr 267*9880d681SAndroid Build Coastguard Worker store volatile double %acc28, double *%ptr 268*9880d681SAndroid Build Coastguard Worker store volatile double %acc29, double *%ptr 269*9880d681SAndroid Build Coastguard Worker store volatile double %acc30, double *%ptr 270*9880d681SAndroid Build Coastguard Worker store volatile double %acc31, double *%ptr 271*9880d681SAndroid Build Coastguard Worker ret void 272*9880d681SAndroid Build Coastguard Worker} 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Worker; Like f1, but should require only one call-saved FPR. 275*9880d681SAndroid Build Coastguard Workerdefine void @f3(double *%ptr) { 276*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 277*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168 278*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_def_cfa_offset 328 279*9880d681SAndroid Build Coastguard Worker; CHECK: std %f8, 160(%r15) 280*9880d681SAndroid Build Coastguard Worker; CHECK: .cfi_offset %f8, -168 281*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]9}} 282*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]1[0-5]}} 283*9880d681SAndroid Build Coastguard Worker; CHECK: ld %f8, 160(%r15) 284*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 168 285*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 286*9880d681SAndroid Build Coastguard Worker %l0 = load volatile double, double *%ptr 287*9880d681SAndroid Build Coastguard Worker %l1 = load volatile double, double *%ptr 288*9880d681SAndroid Build Coastguard Worker %l2 = load volatile double, double *%ptr 289*9880d681SAndroid Build Coastguard Worker %l3 = load volatile double, double *%ptr 290*9880d681SAndroid Build Coastguard Worker %l4 = load volatile double, double *%ptr 291*9880d681SAndroid Build Coastguard Worker %l5 = load volatile double, double *%ptr 292*9880d681SAndroid Build Coastguard Worker %l6 = load volatile double, double *%ptr 293*9880d681SAndroid Build Coastguard Worker %l7 = load volatile double, double *%ptr 294*9880d681SAndroid Build Coastguard Worker %l8 = load volatile double, double *%ptr 295*9880d681SAndroid Build Coastguard Worker %l16 = load volatile double, double *%ptr 296*9880d681SAndroid Build Coastguard Worker %l17 = load volatile double, double *%ptr 297*9880d681SAndroid Build Coastguard Worker %l18 = load volatile double, double *%ptr 298*9880d681SAndroid Build Coastguard Worker %l19 = load volatile double, double *%ptr 299*9880d681SAndroid Build Coastguard Worker %l20 = load volatile double, double *%ptr 300*9880d681SAndroid Build Coastguard Worker %l21 = load volatile double, double *%ptr 301*9880d681SAndroid Build Coastguard Worker %l22 = load volatile double, double *%ptr 302*9880d681SAndroid Build Coastguard Worker %l23 = load volatile double, double *%ptr 303*9880d681SAndroid Build Coastguard Worker %l24 = load volatile double, double *%ptr 304*9880d681SAndroid Build Coastguard Worker %l25 = load volatile double, double *%ptr 305*9880d681SAndroid Build Coastguard Worker %l26 = load volatile double, double *%ptr 306*9880d681SAndroid Build Coastguard Worker %l27 = load volatile double, double *%ptr 307*9880d681SAndroid Build Coastguard Worker %l28 = load volatile double, double *%ptr 308*9880d681SAndroid Build Coastguard Worker %l29 = load volatile double, double *%ptr 309*9880d681SAndroid Build Coastguard Worker %l30 = load volatile double, double *%ptr 310*9880d681SAndroid Build Coastguard Worker %l31 = load volatile double, double *%ptr 311*9880d681SAndroid Build Coastguard Worker %acc0 = fsub double %l0, %l0 312*9880d681SAndroid Build Coastguard Worker %acc1 = fsub double %l1, %acc0 313*9880d681SAndroid Build Coastguard Worker %acc2 = fsub double %l2, %acc1 314*9880d681SAndroid Build Coastguard Worker %acc3 = fsub double %l3, %acc2 315*9880d681SAndroid Build Coastguard Worker %acc4 = fsub double %l4, %acc3 316*9880d681SAndroid Build Coastguard Worker %acc5 = fsub double %l5, %acc4 317*9880d681SAndroid Build Coastguard Worker %acc6 = fsub double %l6, %acc5 318*9880d681SAndroid Build Coastguard Worker %acc7 = fsub double %l7, %acc6 319*9880d681SAndroid Build Coastguard Worker %acc8 = fsub double %l8, %acc7 320*9880d681SAndroid Build Coastguard Worker %acc16 = fsub double %l16, %acc8 321*9880d681SAndroid Build Coastguard Worker %acc17 = fsub double %l17, %acc16 322*9880d681SAndroid Build Coastguard Worker %acc18 = fsub double %l18, %acc17 323*9880d681SAndroid Build Coastguard Worker %acc19 = fsub double %l19, %acc18 324*9880d681SAndroid Build Coastguard Worker %acc20 = fsub double %l20, %acc19 325*9880d681SAndroid Build Coastguard Worker %acc21 = fsub double %l21, %acc20 326*9880d681SAndroid Build Coastguard Worker %acc22 = fsub double %l22, %acc21 327*9880d681SAndroid Build Coastguard Worker %acc23 = fsub double %l23, %acc22 328*9880d681SAndroid Build Coastguard Worker %acc24 = fsub double %l24, %acc23 329*9880d681SAndroid Build Coastguard Worker %acc25 = fsub double %l25, %acc24 330*9880d681SAndroid Build Coastguard Worker %acc26 = fsub double %l26, %acc25 331*9880d681SAndroid Build Coastguard Worker %acc27 = fsub double %l27, %acc26 332*9880d681SAndroid Build Coastguard Worker %acc28 = fsub double %l28, %acc27 333*9880d681SAndroid Build Coastguard Worker %acc29 = fsub double %l29, %acc28 334*9880d681SAndroid Build Coastguard Worker %acc30 = fsub double %l30, %acc29 335*9880d681SAndroid Build Coastguard Worker %acc31 = fsub double %l31, %acc30 336*9880d681SAndroid Build Coastguard Worker store volatile double %acc0, double *%ptr 337*9880d681SAndroid Build Coastguard Worker store volatile double %acc1, double *%ptr 338*9880d681SAndroid Build Coastguard Worker store volatile double %acc2, double *%ptr 339*9880d681SAndroid Build Coastguard Worker store volatile double %acc3, double *%ptr 340*9880d681SAndroid Build Coastguard Worker store volatile double %acc4, double *%ptr 341*9880d681SAndroid Build Coastguard Worker store volatile double %acc5, double *%ptr 342*9880d681SAndroid Build Coastguard Worker store volatile double %acc6, double *%ptr 343*9880d681SAndroid Build Coastguard Worker store volatile double %acc7, double *%ptr 344*9880d681SAndroid Build Coastguard Worker store volatile double %acc8, double *%ptr 345*9880d681SAndroid Build Coastguard Worker store volatile double %acc16, double *%ptr 346*9880d681SAndroid Build Coastguard Worker store volatile double %acc17, double *%ptr 347*9880d681SAndroid Build Coastguard Worker store volatile double %acc18, double *%ptr 348*9880d681SAndroid Build Coastguard Worker store volatile double %acc19, double *%ptr 349*9880d681SAndroid Build Coastguard Worker store volatile double %acc20, double *%ptr 350*9880d681SAndroid Build Coastguard Worker store volatile double %acc21, double *%ptr 351*9880d681SAndroid Build Coastguard Worker store volatile double %acc22, double *%ptr 352*9880d681SAndroid Build Coastguard Worker store volatile double %acc23, double *%ptr 353*9880d681SAndroid Build Coastguard Worker store volatile double %acc24, double *%ptr 354*9880d681SAndroid Build Coastguard Worker store volatile double %acc25, double *%ptr 355*9880d681SAndroid Build Coastguard Worker store volatile double %acc26, double *%ptr 356*9880d681SAndroid Build Coastguard Worker store volatile double %acc27, double *%ptr 357*9880d681SAndroid Build Coastguard Worker store volatile double %acc28, double *%ptr 358*9880d681SAndroid Build Coastguard Worker store volatile double %acc29, double *%ptr 359*9880d681SAndroid Build Coastguard Worker store volatile double %acc30, double *%ptr 360*9880d681SAndroid Build Coastguard Worker store volatile double %acc31, double *%ptr 361*9880d681SAndroid Build Coastguard Worker ret void 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Worker; This function should use all call-clobbered FPRs and vector registers 365*9880d681SAndroid Build Coastguard Worker; but no call-saved ones. It shouldn't need to create a frame. 366*9880d681SAndroid Build Coastguard Workerdefine void @f4(double *%ptr) { 367*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 368*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: %r15 369*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv][89]}} 370*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: {{%[fv]1[0-5]}} 371*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 372*9880d681SAndroid Build Coastguard Worker %l0 = load volatile double, double *%ptr 373*9880d681SAndroid Build Coastguard Worker %l1 = load volatile double, double *%ptr 374*9880d681SAndroid Build Coastguard Worker %l2 = load volatile double, double *%ptr 375*9880d681SAndroid Build Coastguard Worker %l3 = load volatile double, double *%ptr 376*9880d681SAndroid Build Coastguard Worker %l4 = load volatile double, double *%ptr 377*9880d681SAndroid Build Coastguard Worker %l5 = load volatile double, double *%ptr 378*9880d681SAndroid Build Coastguard Worker %l6 = load volatile double, double *%ptr 379*9880d681SAndroid Build Coastguard Worker %l7 = load volatile double, double *%ptr 380*9880d681SAndroid Build Coastguard Worker %l16 = load volatile double, double *%ptr 381*9880d681SAndroid Build Coastguard Worker %l17 = load volatile double, double *%ptr 382*9880d681SAndroid Build Coastguard Worker %l18 = load volatile double, double *%ptr 383*9880d681SAndroid Build Coastguard Worker %l19 = load volatile double, double *%ptr 384*9880d681SAndroid Build Coastguard Worker %l20 = load volatile double, double *%ptr 385*9880d681SAndroid Build Coastguard Worker %l21 = load volatile double, double *%ptr 386*9880d681SAndroid Build Coastguard Worker %l22 = load volatile double, double *%ptr 387*9880d681SAndroid Build Coastguard Worker %l23 = load volatile double, double *%ptr 388*9880d681SAndroid Build Coastguard Worker %l24 = load volatile double, double *%ptr 389*9880d681SAndroid Build Coastguard Worker %l25 = load volatile double, double *%ptr 390*9880d681SAndroid Build Coastguard Worker %l26 = load volatile double, double *%ptr 391*9880d681SAndroid Build Coastguard Worker %l27 = load volatile double, double *%ptr 392*9880d681SAndroid Build Coastguard Worker %l28 = load volatile double, double *%ptr 393*9880d681SAndroid Build Coastguard Worker %l29 = load volatile double, double *%ptr 394*9880d681SAndroid Build Coastguard Worker %l30 = load volatile double, double *%ptr 395*9880d681SAndroid Build Coastguard Worker %l31 = load volatile double, double *%ptr 396*9880d681SAndroid Build Coastguard Worker %acc0 = fsub double %l0, %l0 397*9880d681SAndroid Build Coastguard Worker %acc1 = fsub double %l1, %acc0 398*9880d681SAndroid Build Coastguard Worker %acc2 = fsub double %l2, %acc1 399*9880d681SAndroid Build Coastguard Worker %acc3 = fsub double %l3, %acc2 400*9880d681SAndroid Build Coastguard Worker %acc4 = fsub double %l4, %acc3 401*9880d681SAndroid Build Coastguard Worker %acc5 = fsub double %l5, %acc4 402*9880d681SAndroid Build Coastguard Worker %acc6 = fsub double %l6, %acc5 403*9880d681SAndroid Build Coastguard Worker %acc7 = fsub double %l7, %acc6 404*9880d681SAndroid Build Coastguard Worker %acc16 = fsub double %l16, %acc7 405*9880d681SAndroid Build Coastguard Worker %acc17 = fsub double %l17, %acc16 406*9880d681SAndroid Build Coastguard Worker %acc18 = fsub double %l18, %acc17 407*9880d681SAndroid Build Coastguard Worker %acc19 = fsub double %l19, %acc18 408*9880d681SAndroid Build Coastguard Worker %acc20 = fsub double %l20, %acc19 409*9880d681SAndroid Build Coastguard Worker %acc21 = fsub double %l21, %acc20 410*9880d681SAndroid Build Coastguard Worker %acc22 = fsub double %l22, %acc21 411*9880d681SAndroid Build Coastguard Worker %acc23 = fsub double %l23, %acc22 412*9880d681SAndroid Build Coastguard Worker %acc24 = fsub double %l24, %acc23 413*9880d681SAndroid Build Coastguard Worker %acc25 = fsub double %l25, %acc24 414*9880d681SAndroid Build Coastguard Worker %acc26 = fsub double %l26, %acc25 415*9880d681SAndroid Build Coastguard Worker %acc27 = fsub double %l27, %acc26 416*9880d681SAndroid Build Coastguard Worker %acc28 = fsub double %l28, %acc27 417*9880d681SAndroid Build Coastguard Worker %acc29 = fsub double %l29, %acc28 418*9880d681SAndroid Build Coastguard Worker %acc30 = fsub double %l30, %acc29 419*9880d681SAndroid Build Coastguard Worker %acc31 = fsub double %l31, %acc30 420*9880d681SAndroid Build Coastguard Worker store volatile double %acc0, double *%ptr 421*9880d681SAndroid Build Coastguard Worker store volatile double %acc1, double *%ptr 422*9880d681SAndroid Build Coastguard Worker store volatile double %acc2, double *%ptr 423*9880d681SAndroid Build Coastguard Worker store volatile double %acc3, double *%ptr 424*9880d681SAndroid Build Coastguard Worker store volatile double %acc4, double *%ptr 425*9880d681SAndroid Build Coastguard Worker store volatile double %acc5, double *%ptr 426*9880d681SAndroid Build Coastguard Worker store volatile double %acc6, double *%ptr 427*9880d681SAndroid Build Coastguard Worker store volatile double %acc7, double *%ptr 428*9880d681SAndroid Build Coastguard Worker store volatile double %acc16, double *%ptr 429*9880d681SAndroid Build Coastguard Worker store volatile double %acc17, double *%ptr 430*9880d681SAndroid Build Coastguard Worker store volatile double %acc18, double *%ptr 431*9880d681SAndroid Build Coastguard Worker store volatile double %acc19, double *%ptr 432*9880d681SAndroid Build Coastguard Worker store volatile double %acc20, double *%ptr 433*9880d681SAndroid Build Coastguard Worker store volatile double %acc21, double *%ptr 434*9880d681SAndroid Build Coastguard Worker store volatile double %acc22, double *%ptr 435*9880d681SAndroid Build Coastguard Worker store volatile double %acc23, double *%ptr 436*9880d681SAndroid Build Coastguard Worker store volatile double %acc24, double *%ptr 437*9880d681SAndroid Build Coastguard Worker store volatile double %acc25, double *%ptr 438*9880d681SAndroid Build Coastguard Worker store volatile double %acc26, double *%ptr 439*9880d681SAndroid Build Coastguard Worker store volatile double %acc27, double *%ptr 440*9880d681SAndroid Build Coastguard Worker store volatile double %acc28, double *%ptr 441*9880d681SAndroid Build Coastguard Worker store volatile double %acc29, double *%ptr 442*9880d681SAndroid Build Coastguard Worker store volatile double %acc30, double *%ptr 443*9880d681SAndroid Build Coastguard Worker store volatile double %acc31, double *%ptr 444*9880d681SAndroid Build Coastguard Worker ret void 445*9880d681SAndroid Build Coastguard Worker} 446