112 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -mtriple=riscv32 < %s | FileCheck -check-prefixes=CHECK,RV32I %s3; RUN: llc -global-isel -mtriple=riscv64 < %s | FileCheck -check-prefix=RV64I %s4 5declare i32 @external_many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind6 7define i32 @test_call_external_many_args(i32 %a) nounwind {8; CHECK-LABEL: test_call_external_many_args:9; CHECK: # %bb.0:10; CHECK-NEXT: addi sp, sp, -1611; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill12; CHECK-NEXT: sw s0, 8(sp) # 4-byte Folded Spill13; CHECK-NEXT: mv s0, a014; CHECK-NEXT: sw a0, 0(sp)15; CHECK-NEXT: sw a0, 4(sp)16; CHECK-NEXT: mv a1, a017; CHECK-NEXT: mv a2, a018; CHECK-NEXT: mv a3, a019; CHECK-NEXT: mv a4, a020; CHECK-NEXT: mv a5, a021; CHECK-NEXT: mv a6, a022; CHECK-NEXT: mv a7, a023; CHECK-NEXT: call external_many_args24; CHECK-NEXT: mv a0, s025; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload26; CHECK-NEXT: lw s0, 8(sp) # 4-byte Folded Reload27; CHECK-NEXT: addi sp, sp, 1628; CHECK-NEXT: ret29;30; RV64I-LABEL: test_call_external_many_args:31; RV64I: # %bb.0:32; RV64I-NEXT: addi sp, sp, -3233; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill34; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill35; RV64I-NEXT: mv s0, a036; RV64I-NEXT: sd a0, 0(sp)37; RV64I-NEXT: sd a0, 8(sp)38; RV64I-NEXT: mv a1, a039; RV64I-NEXT: mv a2, a040; RV64I-NEXT: mv a3, a041; RV64I-NEXT: mv a4, a042; RV64I-NEXT: mv a5, a043; RV64I-NEXT: mv a6, a044; RV64I-NEXT: mv a7, a045; RV64I-NEXT: call external_many_args46; RV64I-NEXT: mv a0, s047; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload48; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload49; RV64I-NEXT: addi sp, sp, 3250; RV64I-NEXT: ret51 %1 = call i32 @external_many_args(i32 %a, i32 %a, i32 %a, i32 %a, i32 %a,52 i32 %a, i32 %a, i32 %a, i32 %a, i32 %a)53 ret i32 %a54}55 56define fastcc void @fastcc_call_nonfastcc(){57; CHECK-LABEL: fastcc_call_nonfastcc:58; CHECK: # %bb.0:59; CHECK-NEXT: addi sp, sp, -1660; CHECK-NEXT: .cfi_def_cfa_offset 1661; CHECK-NEXT: sw ra, 12(sp) # 4-byte Folded Spill62; CHECK-NEXT: .cfi_offset ra, -463; CHECK-NEXT: li t0, 964; CHECK-NEXT: li t1, 1065; CHECK-NEXT: li a0, 166; CHECK-NEXT: li a1, 267; CHECK-NEXT: li a2, 368; CHECK-NEXT: li a3, 469; CHECK-NEXT: li a4, 570; CHECK-NEXT: li a5, 671; CHECK-NEXT: li a6, 772; CHECK-NEXT: li a7, 873; CHECK-NEXT: sw t0, 0(sp)74; CHECK-NEXT: sw t1, 4(sp)75; CHECK-NEXT: call external_many_args76; CHECK-NEXT: lw ra, 12(sp) # 4-byte Folded Reload77; CHECK-NEXT: .cfi_restore ra78; CHECK-NEXT: addi sp, sp, 1679; CHECK-NEXT: .cfi_def_cfa_offset 080; CHECK-NEXT: ret81;82; RV64I-LABEL: fastcc_call_nonfastcc:83; RV64I: # %bb.0:84; RV64I-NEXT: addi sp, sp, -3285; RV64I-NEXT: .cfi_def_cfa_offset 3286; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill87; RV64I-NEXT: .cfi_offset ra, -888; RV64I-NEXT: li t0, 989; RV64I-NEXT: li t1, 1090; RV64I-NEXT: li a0, 191; RV64I-NEXT: li a1, 292; RV64I-NEXT: li a2, 393; RV64I-NEXT: li a3, 494; RV64I-NEXT: li a4, 595; RV64I-NEXT: li a5, 696; RV64I-NEXT: li a6, 797; RV64I-NEXT: li a7, 898; RV64I-NEXT: sd t0, 0(sp)99; RV64I-NEXT: sd t1, 8(sp)100; RV64I-NEXT: call external_many_args101; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload102; RV64I-NEXT: .cfi_restore ra103; RV64I-NEXT: addi sp, sp, 32104; RV64I-NEXT: .cfi_def_cfa_offset 0105; RV64I-NEXT: ret106 call void @external_many_args(i32 1, i32 2,i32 3,i32 4,i32 5,i32 6,i32 7,i32 8,i32 9,i32 10)107 ret void108}109 110;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:111; RV32I: {{.*}}112