Files
clang-p2996/llvm/test/CodeGen/SystemZ/frameaddr-02.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

74 lines
1.8 KiB
LLVM

; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
; Test lowering of @llvm.frameaddress with packed-stack.
; With back chain
attributes #0 = { nounwind "packed-stack" "backchain" "use-soft-float"="true" }
define ptr @fp0() #0 {
entry:
; CHECK-LABEL: fp0:
; CHECK: la %r2, 152(%r15)
; CHECK-NEXT: br %r14
%0 = tail call ptr @llvm.frameaddress(i32 0)
ret ptr %0
}
define ptr @fp0f() #0 {
entry:
; CHECK-LABEL: fp0f:
; CHECK: lgr %r1, %r15
; CHECK-NEXT: aghi %r15, -16
; CHECK-NEXT: stg %r1, 152(%r15)
; CHECK-NEXT: la %r2, 168(%r15)
; CHECK-NEXT: aghi %r15, 16
; CHECK-NEXT: br %r14
%0 = alloca i64, align 8
%1 = tail call ptr @llvm.frameaddress(i32 0)
ret ptr %1
}
; Without back chain
attributes #1 = { nounwind "packed-stack" }
define ptr @fp1() #1 {
entry:
; CHECK-LABEL: fp1:
; CHECK: la %r2, 152(%r15)
; CHECK-NEXT: br %r14
%0 = tail call ptr @llvm.frameaddress(i32 0)
ret ptr %0
}
; No saved registers: returning address of unused slot where backcahin would
; have been located.
define ptr @fp1f() #1 {
entry:
; CHECK-LABEL: fp1f:
; CHECK: aghi %r15, -16
; CHECK-NEXT: la %r2, 168(%r15)
; CHECK-NEXT: aghi %r15, 16
; CHECK-NEXT: br %r14
%0 = alloca i64, align 8
%1 = tail call ptr @llvm.frameaddress(i32 0)
ret ptr %1
}
; Saved registers: returning address for first saved GPR.
declare void @foo(ptr %Arg)
define ptr @fp2() #1 {
entry:
; CHECK-LABEL: fp2:
; CHECK: stmg %r14, %r15, 144(%r15)
; CHECK-NEXT: aghi %r15, -16
; CHECK-NEXT: la %r2, 168(%r15)
; CHECK-NEXT: brasl %r14, foo@PLT
; CHECK-NEXT: la %r2, 168(%r15)
; CHECK-NEXT: lmg %r14, %r15, 160(%r15)
; CHECK-NEXT: br %r14
%0 = tail call ptr @llvm.frameaddress(i32 0)
call void @foo(ptr %0);
ret ptr %0
}
declare ptr @llvm.frameaddress(i32) nounwind readnone