xref: /aosp_15_r20/external/llvm/test/CodeGen/SystemZ/frameaddr-01.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; The current function's frame address is the address of
4*9880d681SAndroid Build Coastguard Worker; the optional back chain slot.
5*9880d681SAndroid Build Coastguard Workerdefine i8* @fp0() nounwind {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fp0:
8*9880d681SAndroid Build Coastguard Worker; CHECK: la   %r2, 0(%r15)
9*9880d681SAndroid Build Coastguard Worker; CHECK: br   %r14
10*9880d681SAndroid Build Coastguard Worker  %0 = tail call i8* @llvm.frameaddress(i32 0)
11*9880d681SAndroid Build Coastguard Worker  ret i8* %0
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Worker; Check that the frame address is correct in a presence
15*9880d681SAndroid Build Coastguard Worker; of a stack frame.
16*9880d681SAndroid Build Coastguard Workerdefine i8* @fp0f() nounwind {
17*9880d681SAndroid Build Coastguard Workerentry:
18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fp0f:
19*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, -168
20*9880d681SAndroid Build Coastguard Worker; CHECK: la   %r2, 168(%r15)
21*9880d681SAndroid Build Coastguard Worker; CHECK: aghi %r15, 168
22*9880d681SAndroid Build Coastguard Worker; CHECK: br   %r14
23*9880d681SAndroid Build Coastguard Worker  %0 = alloca i64, align 8
24*9880d681SAndroid Build Coastguard Worker  %1 = tail call i8* @llvm.frameaddress(i32 0)
25*9880d681SAndroid Build Coastguard Worker  ret i8* %1
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.frameaddress(i32) nounwind readnone
29