1*9880d681SAndroid Build Coastguard Worker; Test spilling of GPRs. The tests here assume z10 register pressure, 2*9880d681SAndroid Build Coastguard Worker; without the high words being available. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; We need to allocate a 4-byte spill slot, rounded to 8 bytes. The frame 7*9880d681SAndroid Build Coastguard Worker; size should be exactly 160 + 8 = 168. 8*9880d681SAndroid Build Coastguard Workerdefine void @f1(i32 *%ptr) { 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 10*9880d681SAndroid Build Coastguard Worker; CHECK: stmg %r6, %r15, 48(%r15) 11*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168 12*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: 160(%r15) 13*9880d681SAndroid Build Coastguard Worker; CHECK: st [[REGISTER:%r[0-9]+]], 164(%r15) 14*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: 160(%r15) 15*9880d681SAndroid Build Coastguard Worker; CHECK: l [[REGISTER]], 164(%r15) 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: 160(%r15) 17*9880d681SAndroid Build Coastguard Worker; CHECK: lmg %r6, %r15, 216(%r15) 18*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 19*9880d681SAndroid Build Coastguard Worker %l0 = load volatile i32 , i32 *%ptr 20*9880d681SAndroid Build Coastguard Worker %l1 = load volatile i32 , i32 *%ptr 21*9880d681SAndroid Build Coastguard Worker %l3 = load volatile i32 , i32 *%ptr 22*9880d681SAndroid Build Coastguard Worker %l4 = load volatile i32 , i32 *%ptr 23*9880d681SAndroid Build Coastguard Worker %l5 = load volatile i32 , i32 *%ptr 24*9880d681SAndroid Build Coastguard Worker %l6 = load volatile i32 , i32 *%ptr 25*9880d681SAndroid Build Coastguard Worker %l7 = load volatile i32 , i32 *%ptr 26*9880d681SAndroid Build Coastguard Worker %l8 = load volatile i32 , i32 *%ptr 27*9880d681SAndroid Build Coastguard Worker %l9 = load volatile i32 , i32 *%ptr 28*9880d681SAndroid Build Coastguard Worker %l10 = load volatile i32 , i32 *%ptr 29*9880d681SAndroid Build Coastguard Worker %l11 = load volatile i32 , i32 *%ptr 30*9880d681SAndroid Build Coastguard Worker %l12 = load volatile i32 , i32 *%ptr 31*9880d681SAndroid Build Coastguard Worker %l13 = load volatile i32 , i32 *%ptr 32*9880d681SAndroid Build Coastguard Worker %l14 = load volatile i32 , i32 *%ptr 33*9880d681SAndroid Build Coastguard Worker %lx = load volatile i32 , i32 *%ptr 34*9880d681SAndroid Build Coastguard Worker store volatile i32 %lx, i32 *%ptr 35*9880d681SAndroid Build Coastguard Worker store volatile i32 %l14, i32 *%ptr 36*9880d681SAndroid Build Coastguard Worker store volatile i32 %l13, i32 *%ptr 37*9880d681SAndroid Build Coastguard Worker store volatile i32 %l12, i32 *%ptr 38*9880d681SAndroid Build Coastguard Worker store volatile i32 %l11, i32 *%ptr 39*9880d681SAndroid Build Coastguard Worker store volatile i32 %l10, i32 *%ptr 40*9880d681SAndroid Build Coastguard Worker store volatile i32 %l9, i32 *%ptr 41*9880d681SAndroid Build Coastguard Worker store volatile i32 %l8, i32 *%ptr 42*9880d681SAndroid Build Coastguard Worker store volatile i32 %l7, i32 *%ptr 43*9880d681SAndroid Build Coastguard Worker store volatile i32 %l6, i32 *%ptr 44*9880d681SAndroid Build Coastguard Worker store volatile i32 %l5, i32 *%ptr 45*9880d681SAndroid Build Coastguard Worker store volatile i32 %l4, i32 *%ptr 46*9880d681SAndroid Build Coastguard Worker store volatile i32 %l3, i32 *%ptr 47*9880d681SAndroid Build Coastguard Worker store volatile i32 %l1, i32 *%ptr 48*9880d681SAndroid Build Coastguard Worker store volatile i32 %l0, i32 *%ptr 49*9880d681SAndroid Build Coastguard Worker ret void 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; Same for i64, except that the full spill slot is used. 53*9880d681SAndroid Build Coastguard Workerdefine void @f2(i64 *%ptr) { 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 55*9880d681SAndroid Build Coastguard Worker; CHECK: stmg %r6, %r15, 48(%r15) 56*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168 57*9880d681SAndroid Build Coastguard Worker; CHECK: stg [[REGISTER:%r[0-9]+]], 160(%r15) 58*9880d681SAndroid Build Coastguard Worker; CHECK: lg [[REGISTER]], 160(%r15) 59*9880d681SAndroid Build Coastguard Worker; CHECK: lmg %r6, %r15, 216(%r15) 60*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 61*9880d681SAndroid Build Coastguard Worker %l0 = load volatile i64 , i64 *%ptr 62*9880d681SAndroid Build Coastguard Worker %l1 = load volatile i64 , i64 *%ptr 63*9880d681SAndroid Build Coastguard Worker %l3 = load volatile i64 , i64 *%ptr 64*9880d681SAndroid Build Coastguard Worker %l4 = load volatile i64 , i64 *%ptr 65*9880d681SAndroid Build Coastguard Worker %l5 = load volatile i64 , i64 *%ptr 66*9880d681SAndroid Build Coastguard Worker %l6 = load volatile i64 , i64 *%ptr 67*9880d681SAndroid Build Coastguard Worker %l7 = load volatile i64 , i64 *%ptr 68*9880d681SAndroid Build Coastguard Worker %l8 = load volatile i64 , i64 *%ptr 69*9880d681SAndroid Build Coastguard Worker %l9 = load volatile i64 , i64 *%ptr 70*9880d681SAndroid Build Coastguard Worker %l10 = load volatile i64 , i64 *%ptr 71*9880d681SAndroid Build Coastguard Worker %l11 = load volatile i64 , i64 *%ptr 72*9880d681SAndroid Build Coastguard Worker %l12 = load volatile i64 , i64 *%ptr 73*9880d681SAndroid Build Coastguard Worker %l13 = load volatile i64 , i64 *%ptr 74*9880d681SAndroid Build Coastguard Worker %l14 = load volatile i64 , i64 *%ptr 75*9880d681SAndroid Build Coastguard Worker %lx = load volatile i64 , i64 *%ptr 76*9880d681SAndroid Build Coastguard Worker store volatile i64 %lx, i64 *%ptr 77*9880d681SAndroid Build Coastguard Worker store volatile i64 %l14, i64 *%ptr 78*9880d681SAndroid Build Coastguard Worker store volatile i64 %l13, i64 *%ptr 79*9880d681SAndroid Build Coastguard Worker store volatile i64 %l12, i64 *%ptr 80*9880d681SAndroid Build Coastguard Worker store volatile i64 %l11, i64 *%ptr 81*9880d681SAndroid Build Coastguard Worker store volatile i64 %l10, i64 *%ptr 82*9880d681SAndroid Build Coastguard Worker store volatile i64 %l9, i64 *%ptr 83*9880d681SAndroid Build Coastguard Worker store volatile i64 %l8, i64 *%ptr 84*9880d681SAndroid Build Coastguard Worker store volatile i64 %l7, i64 *%ptr 85*9880d681SAndroid Build Coastguard Worker store volatile i64 %l6, i64 *%ptr 86*9880d681SAndroid Build Coastguard Worker store volatile i64 %l5, i64 *%ptr 87*9880d681SAndroid Build Coastguard Worker store volatile i64 %l4, i64 *%ptr 88*9880d681SAndroid Build Coastguard Worker store volatile i64 %l3, i64 *%ptr 89*9880d681SAndroid Build Coastguard Worker store volatile i64 %l1, i64 *%ptr 90*9880d681SAndroid Build Coastguard Worker store volatile i64 %l0, i64 *%ptr 91*9880d681SAndroid Build Coastguard Worker ret void 92*9880d681SAndroid Build Coastguard Worker} 93