| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| ; RUN: llc -mtriple=loongarch32 %s -o - | FileCheck %s --check-prefix=LA32 |
| ; RUN: llc -mtriple=loongarch64 %s -o - | FileCheck %s --check-prefix=LA64 |
| |
| %Box = type { i32, i32, i32, i8, [3 x i8], i32, i8, [1 x i8], i16, i16, i8, [5 x i8], { i64, ptr }, { i64, ptr }, { i64, ptr } } |
| |
| define void @test(ptr byval(%Box) %0) nounwind { |
| ; LA32-LABEL: test: |
| ; LA32: # %bb.0: |
| ; LA32-NEXT: addi.w $sp, $sp, -112 |
| ; LA32-NEXT: st.w $ra, $sp, 108 # 4-byte Folded Spill |
| ; LA32-NEXT: st.w $fp, $sp, 104 # 4-byte Folded Spill |
| ; LA32-NEXT: addi.w $fp, $sp, 24 |
| ; LA32-NEXT: ori $a2, $zero, 80 |
| ; LA32-NEXT: move $a0, $fp |
| ; LA32-NEXT: move $a1, $zero |
| ; LA32-NEXT: bl memcpy |
| ; LA32-NEXT: st.w $zero, $sp, 8 |
| ; LA32-NEXT: st.w $zero, $sp, 4 |
| ; LA32-NEXT: st.w $zero, $sp, 0 |
| ; LA32-NEXT: move $a0, $zero |
| ; LA32-NEXT: move $a1, $zero |
| ; LA32-NEXT: move $a2, $zero |
| ; LA32-NEXT: move $a3, $fp |
| ; LA32-NEXT: move $a4, $zero |
| ; LA32-NEXT: move $a5, $zero |
| ; LA32-NEXT: move $a6, $zero |
| ; LA32-NEXT: move $a7, $zero |
| ; LA32-NEXT: jirl $ra, $zero, 0 |
| ; LA32-NEXT: ld.w $fp, $sp, 104 # 4-byte Folded Reload |
| ; LA32-NEXT: ld.w $ra, $sp, 108 # 4-byte Folded Reload |
| ; LA32-NEXT: addi.w $sp, $sp, 112 |
| ; LA32-NEXT: ret |
| ; |
| ; LA64-LABEL: test: |
| ; LA64: # %bb.0: |
| ; LA64-NEXT: movgr2fr.d $fa0, $zero |
| ; LA64-NEXT: move $a0, $zero |
| ; LA64-NEXT: move $a1, $zero |
| ; LA64-NEXT: move $a2, $zero |
| ; LA64-NEXT: move $a3, $zero |
| ; LA64-NEXT: move $a4, $zero |
| ; LA64-NEXT: move $a5, $zero |
| ; LA64-NEXT: move $a6, $zero |
| ; LA64-NEXT: jr $a0 |
| tail call void null(ptr null, double 0.000000e+00, ptr byval(%Box) null, { i64, ptr } zeroinitializer, i32 0, i64 0, i1 false) |
| ret void |
| } |