Files
clang-p2996/llvm/test/CodeGen/SystemZ/frame-18.ll
Kai Nacke a1710eb3cd [SystemZ][NFC] Opaque pointer migration.
The LIT test cases were migrated with the script provided by
Nikita Popov.

No manual changes were made. Committed without review since
no functional changes, after consultation with uweigand.
2022-10-11 21:09:43 +00:00

93 lines
3.0 KiB
LLVM

; Test spilling of GPRs. The tests here assume z10 register pressure,
; without the high words being available.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
; We need to allocate a 4-byte spill slot, rounded to 8 bytes. The frame
; size should be exactly 160 + 8 = 168.
define void @f1(ptr %ptr) {
; CHECK-LABEL: f1:
; CHECK: stmg %r6, %r15, 48(%r15)
; CHECK: aghi %r15, -168
; CHECK-NOT: 160(%r15)
; CHECK: st [[REGISTER:%r[0-9]+]], 164(%r15)
; CHECK-NOT: 160(%r15)
; CHECK: l [[REGISTER]], 164(%r15)
; CHECK-NOT: 160(%r15)
; CHECK: lmg %r6, %r15, 216(%r15)
; CHECK: br %r14
%l0 = load volatile i32, ptr %ptr
%l1 = load volatile i32, ptr %ptr
%l3 = load volatile i32, ptr %ptr
%l4 = load volatile i32, ptr %ptr
%l5 = load volatile i32, ptr %ptr
%l6 = load volatile i32, ptr %ptr
%l7 = load volatile i32, ptr %ptr
%l8 = load volatile i32, ptr %ptr
%l9 = load volatile i32, ptr %ptr
%l10 = load volatile i32, ptr %ptr
%l11 = load volatile i32, ptr %ptr
%l12 = load volatile i32, ptr %ptr
%l13 = load volatile i32, ptr %ptr
%l14 = load volatile i32, ptr %ptr
%lx = load volatile i32, ptr %ptr
store volatile i32 %lx, ptr %ptr
store volatile i32 %l14, ptr %ptr
store volatile i32 %l13, ptr %ptr
store volatile i32 %l12, ptr %ptr
store volatile i32 %l11, ptr %ptr
store volatile i32 %l10, ptr %ptr
store volatile i32 %l9, ptr %ptr
store volatile i32 %l8, ptr %ptr
store volatile i32 %l7, ptr %ptr
store volatile i32 %l6, ptr %ptr
store volatile i32 %l5, ptr %ptr
store volatile i32 %l4, ptr %ptr
store volatile i32 %l3, ptr %ptr
store volatile i32 %l1, ptr %ptr
store volatile i32 %l0, ptr %ptr
ret void
}
; Same for i64, except that the full spill slot is used.
define void @f2(ptr %ptr) {
; CHECK-LABEL: f2:
; CHECK: stmg %r6, %r15, 48(%r15)
; CHECK: aghi %r15, -168
; CHECK: stg [[REGISTER:%r[0-9]+]], 160(%r15)
; CHECK: lg [[REGISTER]], 160(%r15)
; CHECK: lmg %r6, %r15, 216(%r15)
; CHECK: br %r14
%l0 = load volatile i64, ptr %ptr
%l1 = load volatile i64, ptr %ptr
%l3 = load volatile i64, ptr %ptr
%l4 = load volatile i64, ptr %ptr
%l5 = load volatile i64, ptr %ptr
%l6 = load volatile i64, ptr %ptr
%l7 = load volatile i64, ptr %ptr
%l8 = load volatile i64, ptr %ptr
%l9 = load volatile i64, ptr %ptr
%l10 = load volatile i64, ptr %ptr
%l11 = load volatile i64, ptr %ptr
%l12 = load volatile i64, ptr %ptr
%l13 = load volatile i64, ptr %ptr
%l14 = load volatile i64, ptr %ptr
%lx = load volatile i64, ptr %ptr
store volatile i64 %lx, ptr %ptr
store volatile i64 %l14, ptr %ptr
store volatile i64 %l13, ptr %ptr
store volatile i64 %l12, ptr %ptr
store volatile i64 %l11, ptr %ptr
store volatile i64 %l10, ptr %ptr
store volatile i64 %l9, ptr %ptr
store volatile i64 %l8, ptr %ptr
store volatile i64 %l7, ptr %ptr
store volatile i64 %l6, ptr %ptr
store volatile i64 %l5, ptr %ptr
store volatile i64 %l4, ptr %ptr
store volatile i64 %l3, ptr %ptr
store volatile i64 %l1, ptr %ptr
store volatile i64 %l0, ptr %ptr
ret void
}