[lldb] Make sure Blocks always have a parent (#117683)
[llvm-project.git] / llvm / test / CodeGen / SystemZ / frameaddr-01.ll
blobe8521883f08873c0a334471e52cc6f90333b5e3a
1 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
3 ; The current function's frame address is the address of
4 ; the optional back chain slot.
5 define ptr @fp0() nounwind {
6 entry:
7 ; CHECK-LABEL: fp0:
8 ; CHECK: la   %r2, 0(%r15)
9 ; CHECK: br   %r14
10   %0 = tail call ptr @llvm.frameaddress(i32 0)
11   ret ptr %0
14 ; Check that the frame address is correct in a presence
15 ; of a stack frame.
16 define ptr @fp0f() nounwind {
17 entry:
18 ; CHECK-LABEL: fp0f:
19 ; CHECK: aghi %r15, -168
20 ; CHECK: la   %r2, 168(%r15)
21 ; CHECK: aghi %r15, 168
22 ; CHECK: br   %r14
23   %0 = alloca i64, align 8
24   %1 = tail call ptr @llvm.frameaddress(i32 0)
25   ret ptr %1
28 ; Check the caller's frame address.
29 define ptr @fpcaller() nounwind "backchain" {
30 entry:
31 ; CHECK-LABEL: fpcaller:
32 ; CHECK: lg   %r2, 0(%r15)
33 ; CHECK: br   %r14
34   %0 = tail call ptr @llvm.frameaddress(i32 1)
35   ret ptr %0
38 ; Check the caller's frame address.
39 define ptr @fpcallercaller() nounwind "backchain" {
40 entry:
41 ; CHECK-LABEL: fpcallercaller:
42 ; CHECK: lg   %r1, 0(%r15)
43 ; CHECK: lg   %r2, 0(%r1)
44 ; CHECK: br   %r14
45   %0 = tail call ptr @llvm.frameaddress(i32 2)
46   ret ptr %0
49 declare ptr @llvm.frameaddress(i32) nounwind readnone