xref: /llvm-project/llvm/test/CodeGen/LoongArch/frameaddr-returnaddr.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
13be05937Sgonglingqin; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32
3*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64
43be05937Sgonglingqin
53be05937Sgonglingqindeclare ptr @llvm.frameaddress(i32)
63be05937Sgonglingqindeclare ptr @llvm.returnaddress(i32)
73be05937Sgonglingqin
83be05937Sgonglingqindefine ptr @test_frameaddress_0() nounwind {
93be05937Sgonglingqin; LA32-LABEL: test_frameaddress_0:
103be05937Sgonglingqin; LA32:       # %bb.0:
113be05937Sgonglingqin; LA32-NEXT:    addi.w $sp, $sp, -16
123be05937Sgonglingqin; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
133be05937Sgonglingqin; LA32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
143be05937Sgonglingqin; LA32-NEXT:    addi.w $fp, $sp, 16
153be05937Sgonglingqin; LA32-NEXT:    move $a0, $fp
163be05937Sgonglingqin; LA32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
173be05937Sgonglingqin; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
183be05937Sgonglingqin; LA32-NEXT:    addi.w $sp, $sp, 16
193be05937Sgonglingqin; LA32-NEXT:    ret
203be05937Sgonglingqin;
213be05937Sgonglingqin; LA64-LABEL: test_frameaddress_0:
223be05937Sgonglingqin; LA64:       # %bb.0:
233be05937Sgonglingqin; LA64-NEXT:    addi.d $sp, $sp, -16
243be05937Sgonglingqin; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
253be05937Sgonglingqin; LA64-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill
263be05937Sgonglingqin; LA64-NEXT:    addi.d $fp, $sp, 16
273be05937Sgonglingqin; LA64-NEXT:    move $a0, $fp
283be05937Sgonglingqin; LA64-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload
293be05937Sgonglingqin; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
303be05937Sgonglingqin; LA64-NEXT:    addi.d $sp, $sp, 16
313be05937Sgonglingqin; LA64-NEXT:    ret
323be05937Sgonglingqin  %1 = call ptr @llvm.frameaddress(i32 0)
333be05937Sgonglingqin  ret ptr %1
343be05937Sgonglingqin}
353be05937Sgonglingqin
36801c77bbSgonglingqindefine ptr @test_frameaddress_2() nounwind {
37801c77bbSgonglingqin; LA32-LABEL: test_frameaddress_2:
38801c77bbSgonglingqin; LA32:       # %bb.0:
39801c77bbSgonglingqin; LA32-NEXT:    addi.w $sp, $sp, -16
40801c77bbSgonglingqin; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
41801c77bbSgonglingqin; LA32-NEXT:    st.w $fp, $sp, 8 # 4-byte Folded Spill
42801c77bbSgonglingqin; LA32-NEXT:    addi.w $fp, $sp, 16
43801c77bbSgonglingqin; LA32-NEXT:    ld.w $a0, $fp, -8
44801c77bbSgonglingqin; LA32-NEXT:    ld.w $a0, $a0, -8
45801c77bbSgonglingqin; LA32-NEXT:    ld.w $fp, $sp, 8 # 4-byte Folded Reload
46801c77bbSgonglingqin; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
47801c77bbSgonglingqin; LA32-NEXT:    addi.w $sp, $sp, 16
48801c77bbSgonglingqin; LA32-NEXT:    ret
49801c77bbSgonglingqin;
50801c77bbSgonglingqin; LA64-LABEL: test_frameaddress_2:
51801c77bbSgonglingqin; LA64:       # %bb.0:
52801c77bbSgonglingqin; LA64-NEXT:    addi.d $sp, $sp, -16
53801c77bbSgonglingqin; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
54801c77bbSgonglingqin; LA64-NEXT:    st.d $fp, $sp, 0 # 8-byte Folded Spill
55801c77bbSgonglingqin; LA64-NEXT:    addi.d $fp, $sp, 16
56801c77bbSgonglingqin; LA64-NEXT:    ld.d $a0, $fp, -16
57801c77bbSgonglingqin; LA64-NEXT:    ld.d $a0, $a0, -16
58801c77bbSgonglingqin; LA64-NEXT:    ld.d $fp, $sp, 0 # 8-byte Folded Reload
59801c77bbSgonglingqin; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
60801c77bbSgonglingqin; LA64-NEXT:    addi.d $sp, $sp, 16
61801c77bbSgonglingqin; LA64-NEXT:    ret
62801c77bbSgonglingqin  %1 = call ptr @llvm.frameaddress(i32 2)
63801c77bbSgonglingqin  ret ptr %1
64801c77bbSgonglingqin}
65801c77bbSgonglingqin
663be05937Sgonglingqindefine ptr @test_returnaddress_0() nounwind {
673be05937Sgonglingqin; LA32-LABEL: test_returnaddress_0:
683be05937Sgonglingqin; LA32:       # %bb.0:
693be05937Sgonglingqin; LA32-NEXT:    move $a0, $ra
703be05937Sgonglingqin; LA32-NEXT:    ret
713be05937Sgonglingqin;
723be05937Sgonglingqin; LA64-LABEL: test_returnaddress_0:
733be05937Sgonglingqin; LA64:       # %bb.0:
743be05937Sgonglingqin; LA64-NEXT:    move $a0, $ra
753be05937Sgonglingqin; LA64-NEXT:    ret
763be05937Sgonglingqin  %1 = call ptr @llvm.returnaddress(i32 0)
773be05937Sgonglingqin  ret ptr %1
783be05937Sgonglingqin}
79