1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32 3; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64 4 5declare ptr @llvm.frameaddress(i32) 6declare ptr @llvm.returnaddress(i32) 7 8define ptr @test_frameaddress_0() nounwind { 9; LA32-LABEL: test_frameaddress_0: 10; LA32: # %bb.0: 11; LA32-NEXT: addi.w $sp, $sp, -16 12; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 13; LA32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill 14; LA32-NEXT: addi.w $fp, $sp, 16 15; LA32-NEXT: move $a0, $fp 16; LA32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload 17; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 18; LA32-NEXT: addi.w $sp, $sp, 16 19; LA32-NEXT: ret 20; 21; LA64-LABEL: test_frameaddress_0: 22; LA64: # %bb.0: 23; LA64-NEXT: addi.d $sp, $sp, -16 24; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 25; LA64-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill 26; LA64-NEXT: addi.d $fp, $sp, 16 27; LA64-NEXT: move $a0, $fp 28; LA64-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload 29; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 30; LA64-NEXT: addi.d $sp, $sp, 16 31; LA64-NEXT: ret 32 %1 = call ptr @llvm.frameaddress(i32 0) 33 ret ptr %1 34} 35 36define ptr @test_frameaddress_2() nounwind { 37; LA32-LABEL: test_frameaddress_2: 38; LA32: # %bb.0: 39; LA32-NEXT: addi.w $sp, $sp, -16 40; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill 41; LA32-NEXT: st.w $fp, $sp, 8 # 4-byte Folded Spill 42; LA32-NEXT: addi.w $fp, $sp, 16 43; LA32-NEXT: ld.w $a0, $fp, -8 44; LA32-NEXT: ld.w $a0, $a0, -8 45; LA32-NEXT: ld.w $fp, $sp, 8 # 4-byte Folded Reload 46; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload 47; LA32-NEXT: addi.w $sp, $sp, 16 48; LA32-NEXT: ret 49; 50; LA64-LABEL: test_frameaddress_2: 51; LA64: # %bb.0: 52; LA64-NEXT: addi.d $sp, $sp, -16 53; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill 54; LA64-NEXT: st.d $fp, $sp, 0 # 8-byte Folded Spill 55; LA64-NEXT: addi.d $fp, $sp, 16 56; LA64-NEXT: ld.d $a0, $fp, -16 57; LA64-NEXT: ld.d $a0, $a0, -16 58; LA64-NEXT: ld.d $fp, $sp, 0 # 8-byte Folded Reload 59; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload 60; LA64-NEXT: addi.d $sp, $sp, 16 61; LA64-NEXT: ret 62 %1 = call ptr @llvm.frameaddress(i32 2) 63 ret ptr %1 64} 65 66define ptr @test_returnaddress_0() nounwind { 67; LA32-LABEL: test_returnaddress_0: 68; LA32: # %bb.0: 69; LA32-NEXT: move $a0, $ra 70; LA32-NEXT: ret 71; 72; LA64-LABEL: test_returnaddress_0: 73; LA64: # %bb.0: 74; LA64-NEXT: move $a0, $ra 75; LA64-NEXT: ret 76 %1 = call ptr @llvm.returnaddress(i32 0) 77 ret ptr %1 78} 79