88 lines · plain
1; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s2;3; Test the packed stack layout.4 5; Test spill/restore of an FPR and a GPR.6define void @f1() #0 {7; CHECK-LABEL: f1:8; CHECK: stmg %r12, %r15, 128(%r15)9; CHECK-NEXT: .cfi_offset %r12, -3210; CHECK-NEXT: .cfi_offset %r15, -811; CHECK-NEXT: std %f8, 120(%r15) # 8-byte Spill12; CHECK-NEXT: .cfi_offset %f8, -4013; CHECK-NEXT: #APP14; CHECK-NEXT: #NO_APP15; CHECK-NEXT: ld %f8, 120(%r15) # 8-byte Reload16; CHECK-NEXT: lmg %r12, %r15, 128(%r15)17; CHECK-NEXT: br %r1418 call void asm sideeffect "", "~{f8},~{r12}"() nounwind19 ret void20}21 22; Test spill/restore with anyregcc, including an FP argument register.23define anyregcc void @f2() #0 {24; CHECK-LABEL: f2:25; CHECK: stmg %r3, %r15, 56(%r15)26; CHECK-NEXT: .cfi_offset %r3, -10427; CHECK-NEXT: .cfi_offset %r15, -828; CHECK-NEXT: std %f0, 48(%r15) # 8-byte Spill29; CHECK-NEXT: std %f1, 40(%r15) # 8-byte Spill30; CHECK-NEXT: .cfi_offset %f0, -11231; CHECK-NEXT: .cfi_offset %f1, -12032; CHECK-NEXT: #APP33; CHECK-NEXT: #NO_APP34; CHECK-NEXT: ld %f0, 48(%r15) # 8-byte Reload35; CHECK-NEXT: ld %f1, 40(%r15) # 8-byte Reload36; CHECK-NEXT: lmg %r3, %r15, 56(%r15)37; CHECK-NEXT: br %r1438 call void asm sideeffect "", "~{f0},~{f1},~{r3}"() nounwind39 ret void40}41 42; Test spill/restore in local area with incoming stack arguments.43define i64 @f3(i64 %a, i64 %b, i64 %c, i64 %d, i64 %e, i64 %f,44 double %A, double %B, double %C, double %D, double %E) #0 {45; CHECK-LABEL: f3:46; CHECK: std %f8, 152(%r15) # 8-byte Spill47; CHECK-NEXT: .cfi_offset %f8, -848; CHECK-NEXT: ld %f0, 168(%r15)49; CHECK-NEXT: cgdbr %r2, 5, %f050; CHECK-NEXT: ag %r2, 160(%r15)51; CHECK-NEXT: #APP52; CHECK-NEXT: #NO_APP53; CHECK-NEXT: ld %f8, 152(%r15) # 8-byte Reload54; CHECK-NEXT: br %r1455 call void asm sideeffect "", "~{f8}"() nounwind56 %Ei = fptosi double %E to i6457 %S = add i64 %f, %Ei58 ret i64 %S59}60 61; Test spill/restore in local area with outgoing stack arguments.62define i64 @f4() #0 {63; CHECK-LABEL: f4:64; CHECK: stmg %r6, %r15, 80(%r15)65; CHECK-NEXT: .cfi_offset %r6, -8066; CHECK-NEXT: .cfi_offset %r14, -1667; CHECK-NEXT: .cfi_offset %r15, -868; CHECK-NEXT: aghi %r15, -10469; CHECK-NEXT: .cfi_def_cfa_offset 26470; CHECK-NEXT: std %f8, 176(%r15) # 8-byte Spill71; CHECK-NEXT: .cfi_offset %f8, -8872; CHECK-NEXT: #APP73; CHECK-NEXT: #NO_APP74; CHECK-NEXT: llihh %r0, 1640475; CHECK-NEXT: stg %r0, 168(%r15)76; CHECK: mvghi 160(%r15), 677; CHECK-NEXT: brasl %r14, f3@PLT78; CHECK-NEXT: ld %f8, 176(%r15) # 8-byte Reload79; CHECK-NEXT: lmg %r6, %r15, 184(%r15)80; CHECK-NEXT: br %r1481 call void asm sideeffect "", "~{f8}"() nounwind82 %C = call i64 @f3 (i64 1, i64 2, i64 3, i64 4, i64 5, i64 6,83 double 1.0, double 2.0, double 3.0, double 4.0, double 5.0)84 ret i64 %C85}86 87attributes #0 = { "packed-stack"="true" }88