xref: /llvm-project/llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
13ac9fe69SWang Pengcheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
23ac9fe69SWang Pengcheng; RUN: llc -mtriple=riscv32 -target-abi ilp32e -verify-machineinstrs < %s \
33ac9fe69SWang Pengcheng; RUN:   | FileCheck -check-prefix=ILP32E-FPELIM %s
43ac9fe69SWang Pengcheng; RUN: llc -mtriple=riscv32 -target-abi ilp32e -frame-pointer=all \
53ac9fe69SWang Pengcheng; RUN:   -verify-machineinstrs < %s \
63ac9fe69SWang Pengcheng; RUN:   | FileCheck -check-prefix=ILP32E-WITHFP %s
73ac9fe69SWang Pengcheng; RUN: llc -mtriple=riscv32 -target-abi ilp32e -mattr=+save-restore -verify-machineinstrs < %s \
83ac9fe69SWang Pengcheng; RUN:   | FileCheck -check-prefix=ILP32E-FPELIM-SAVE-RESTORE %s
93ac9fe69SWang Pengcheng; RUN: llc -mtriple=riscv32 -target-abi ilp32e -mattr=+save-restore -frame-pointer=all \
103ac9fe69SWang Pengcheng; RUN:   -verify-machineinstrs < %s \
113ac9fe69SWang Pengcheng; RUN:   | FileCheck -check-prefix=ILP32E-WITHFP-SAVE-RESTORE %s
123ac9fe69SWang Pengcheng
133ac9fe69SWang Pengcheng; This file contains tests that will have differing output for the ilp32e ABIs.
143ac9fe69SWang Pengcheng
153ac9fe69SWang Pengchengdefine i32 @callee_float_in_regs(i32 %a, float %b) {
163ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_float_in_regs:
173ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
183ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -8
193ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 8
203ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
213ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
223ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
233ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv s0, a0
253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, a1
263ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call __fixsfsi
273ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, s0, a0
283ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
293ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
3097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
3197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
323ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 8
3397982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
353ac9fe69SWang Pengcheng;
363ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_float_in_regs:
373ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
383ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -12
393ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 12
403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 8(sp) # 4-byte Folded Spill
413ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 4(sp) # 4-byte Folded Spill
423ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s1, 0(sp) # 4-byte Folded Spill
433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
443ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
453ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s1, -12
463ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 12
473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv s1, a0
493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a0, a1
503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call __fixsfsi
513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, s1, a0
5297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 12
533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 8(sp) # 4-byte Folded Reload
543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 4(sp) # 4-byte Folded Reload
553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s1, 0(sp) # 4-byte Folded Reload
5697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
5797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
5897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s1
593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 12
6097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
623ac9fe69SWang Pengcheng;
633ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_float_in_regs:
643ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
653ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
663ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
673ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
683ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
693ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv s0, a0
703ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, a1
713ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call __fixsfsi
723ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, s0, a0
733ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
743ac9fe69SWang Pengcheng;
753ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_float_in_regs:
763ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_2
783ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 12
793ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
803ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
813ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s1, -12
823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 12
833ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
843ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv s1, a0
853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a0, a1
863ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call __fixsfsi
873ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, s1, a0
8897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 12
893ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_2
903ac9fe69SWang Pengcheng  %b_fptosi = fptosi float %b to i32
913ac9fe69SWang Pengcheng  %1 = add i32 %a, %b_fptosi
923ac9fe69SWang Pengcheng  ret i32 %1
933ac9fe69SWang Pengcheng}
943ac9fe69SWang Pengcheng
953ac9fe69SWang Pengchengdefine i32 @caller_float_in_regs() {
963ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_float_in_regs:
973ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
1003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
1013ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
1023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
1033ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lui a1, 262144
1043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_float_in_regs
1053ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
10697982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
1073ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
10897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
1093ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
1103ac9fe69SWang Pengcheng;
1113ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_float_in_regs:
1123ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
1133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
1143ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
1153ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
1163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
1173ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
1183ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
1193ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
1203ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
1213ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
1223ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lui a1, 262144
1233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_float_in_regs
12497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
1253ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
1263ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
12797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
12897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
1293ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
13097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
1313ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
1323ac9fe69SWang Pengcheng;
1333ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_float_in_regs:
1343ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
1353ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
1363ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
1373ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
1383ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
1393ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a1, 262144
1403ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_float_in_regs
1413ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
1423ac9fe69SWang Pengcheng;
1433ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_float_in_regs:
1443ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
1453ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
1463ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
1473ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
1483ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
1493ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
1503ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
1513ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
1523ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a1, 262144
1533ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_float_in_regs
15497982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
1553ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
1563ac9fe69SWang Pengcheng  %1 = call i32 @callee_float_in_regs(i32 1, float 2.0)
1573ac9fe69SWang Pengcheng  ret i32 %1
1583ac9fe69SWang Pengcheng}
1593ac9fe69SWang Pengcheng
1603ac9fe69SWang Pengchengdefine i32 @callee_float_on_stack(i64 %a, i64 %b, i64 %c, i64 %d, float %e) {
1613ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_float_on_stack:
1623ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
1633ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a0, 8(sp)
1643ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a1, 0(sp)
1653ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a1, a0
1663ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
1673ac9fe69SWang Pengcheng;
1683ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_float_on_stack:
1693ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
170c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
171c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
172c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
173c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
1743ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
1753ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
176c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
1773ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
1783ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a0, 8(s0)
1793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a1, 0(s0)
1803ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a1, a0
18197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
182c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
183c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
18497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
18597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
186c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
18797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
1883ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
1893ac9fe69SWang Pengcheng;
1903ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_float_on_stack:
1913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
1923ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 8(sp)
1933ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 0(sp)
1943ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a1, a0
1953ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
1963ac9fe69SWang Pengcheng;
1973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_float_on_stack:
1983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
1993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
2003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
2013ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
2023ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
2033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
2043ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
2053ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 8(s0)
2063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 0(s0)
2073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a1, a0
20897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
2093ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
2103ac9fe69SWang Pengcheng  %1 = trunc i64 %d to i32
2113ac9fe69SWang Pengcheng  %2 = bitcast float %e to i32
2123ac9fe69SWang Pengcheng  %3 = add i32 %1, %2
2133ac9fe69SWang Pengcheng  ret i32 %3
2143ac9fe69SWang Pengcheng}
2153ac9fe69SWang Pengcheng
2163ac9fe69SWang Pengchengdefine i32 @caller_float_on_stack() {
2173ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_float_on_stack:
2183ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
2193ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -16
2203ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 16
2213ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
2223ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
2232967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    lui a1, 264704
2242967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a3, 4
2253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
2263ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a2, 2
2273ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a4, 3
2282967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a3, 0(sp)
2292967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 4(sp)
2302967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a1, 8(sp)
2313ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 0
2323ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a3, 0
2333ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a5, 0
2343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_float_on_stack
2353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23697982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
2373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 16
23897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
2393ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
2403ac9fe69SWang Pengcheng;
2413ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_float_on_stack:
2423ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -20
2443ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 20
2453ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 16(sp) # 4-byte Folded Spill
2463ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
2473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
2483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 20
2503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
2512967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    lui a1, 264704
2522967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a3, 4
2533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
2543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a2, 2
2553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a4, 3
2562967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a3, 0(sp)
2572967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 4(sp)
2582967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a1, 8(sp)
2593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 0
2603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a3, 0
2613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a5, 0
2623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_float_on_stack
26397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 20
2643ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 16(sp) # 4-byte Folded Reload
2653ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
26697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
26797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2683ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 20
26997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
2703ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
2713ac9fe69SWang Pengcheng;
2723ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_float_on_stack:
2733ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
2743ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
27597982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
27697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
2773ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -12
2783ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 16
2792967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a1, 264704
2802967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 4
2813ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
2823ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 2
2833ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 3
2842967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a3, 0(sp)
2852967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 4(sp)
2862967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 8(sp)
2873ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 0
2883ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 0
2893ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a5, 0
2903ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_float_on_stack
2913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 12
29297982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
2933ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
2943ac9fe69SWang Pengcheng;
2953ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_float_on_stack:
2963ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
2973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
29897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
2993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
3003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
30197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -12
30297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 20
3033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 20
3043ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
3052967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a1, 264704
3062967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 4
3073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
3083ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 2
3093ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 3
3102967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a3, 0(sp)
3112967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 4(sp)
3122967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, 8(sp)
3133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 0
3143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 0
3153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a5, 0
3163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_float_on_stack
31797982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 20
3183ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 12
31997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
3203ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
3213ac9fe69SWang Pengcheng  %1 = call i32 @callee_float_on_stack(i64 1, i64 2, i64 3, i64 4, float 5.0)
3223ac9fe69SWang Pengcheng  ret i32 %1
3233ac9fe69SWang Pengcheng}
3243ac9fe69SWang Pengcheng
3253ac9fe69SWang Pengchengdefine float @callee_tiny_scalar_ret() {
3263ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_tiny_scalar_ret:
3273ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
3283ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lui a0, 260096
3293ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
3303ac9fe69SWang Pengcheng;
3313ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_tiny_scalar_ret:
3323ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
333c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
334c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
335c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
336c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
3373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
3383ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
339c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
3403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
3413ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lui a0, 260096
34297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
343c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
344c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
34597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
34697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
347c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
34897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
3493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
3503ac9fe69SWang Pengcheng;
3513ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_tiny_scalar_ret:
3523ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
3533ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a0, 260096
3543ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
3553ac9fe69SWang Pengcheng;
3563ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_tiny_scalar_ret:
3573ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
3583ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
3593ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
3603ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
3613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
3623ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
3633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
3643ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a0, 260096
36597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
3663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
3673ac9fe69SWang Pengcheng  ret float 1.0
3683ac9fe69SWang Pengcheng}
3693ac9fe69SWang Pengcheng
3703ac9fe69SWang Pengchengdefine i32 @caller_tiny_scalar_ret() {
3713ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_tiny_scalar_ret:
3723ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
3733ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
3743ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
3753ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
3763ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
3773ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_tiny_scalar_ret
3783ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
37997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
3803ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
38197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
3823ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
3833ac9fe69SWang Pengcheng;
3843ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_tiny_scalar_ret:
3853ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
3863ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
3873ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
3883ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
3893ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
3903ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
3913ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
3923ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
3933ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
3943ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_tiny_scalar_ret
39597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
3963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
3973ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
39897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
39997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
4003ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
40197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
4023ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
4033ac9fe69SWang Pengcheng;
4043ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_tiny_scalar_ret:
4053ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
4063ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
4073ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
4083ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
4093ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_tiny_scalar_ret
4103ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
4113ac9fe69SWang Pengcheng;
4123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_tiny_scalar_ret:
4133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
4143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
4153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
4163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
4173ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
4183ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
4193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
4203ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_tiny_scalar_ret
42197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
4223ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
4233ac9fe69SWang Pengcheng  %1 = call float @callee_tiny_scalar_ret()
4243ac9fe69SWang Pengcheng  %2 = bitcast float %1 to i32
4253ac9fe69SWang Pengcheng  ret i32 %2
4263ac9fe69SWang Pengcheng}
4273ac9fe69SWang Pengcheng
4283ac9fe69SWang Pengcheng; Check that on RV32 ilp32e, double is passed in a pair of registers. Unlike
4293ac9fe69SWang Pengcheng; the convention for varargs, this need not be an aligned pair.
4303ac9fe69SWang Pengcheng
4313ac9fe69SWang Pengchengdefine i32 @callee_double_in_regs(i32 %a, double %b) {
4323ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_double_in_regs:
4333ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
4343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -8
4353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 8
4363ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
4373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
4383ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
4393ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
4403ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv s0, a0
4413ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, a1
4423ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a1, a2
4433ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call __fixdfsi
4443ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, s0, a0
4453ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
4463ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
44797982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
44897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
4493ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 8
45097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
4513ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
4523ac9fe69SWang Pengcheng;
4533ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_double_in_regs:
4543ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
4553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -12
4563ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 12
4573ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 8(sp) # 4-byte Folded Spill
4583ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 4(sp) # 4-byte Folded Spill
4593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s1, 0(sp) # 4-byte Folded Spill
4603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
4613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
4623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s1, -12
4633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 12
4643ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
4653ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv s1, a0
4663ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a0, a1
4673ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a1, a2
4683ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call __fixdfsi
4693ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, s1, a0
47097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 12
4713ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 8(sp) # 4-byte Folded Reload
4723ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 4(sp) # 4-byte Folded Reload
4733ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s1, 0(sp) # 4-byte Folded Reload
47497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
47597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
47697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s1
4773ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 12
47897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
4793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
4803ac9fe69SWang Pengcheng;
4813ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_double_in_regs:
4823ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
4833ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
4843ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
4853ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
4863ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
4873ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv s0, a0
4883ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, a1
4893ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a1, a2
4903ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call __fixdfsi
4913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, s0, a0
4923ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
4933ac9fe69SWang Pengcheng;
4943ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_double_in_regs:
4953ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
4963ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_2
4973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 12
4983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
4993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
5003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s1, -12
5013ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 12
5023ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
5033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv s1, a0
5043ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a0, a1
5053ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a1, a2
5063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call __fixdfsi
5073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, s1, a0
50897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 12
5093ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_2
5103ac9fe69SWang Pengcheng  %b_fptosi = fptosi double %b to i32
5113ac9fe69SWang Pengcheng  %1 = add i32 %a, %b_fptosi
5123ac9fe69SWang Pengcheng  ret i32 %1
5133ac9fe69SWang Pengcheng}
5143ac9fe69SWang Pengcheng
5153ac9fe69SWang Pengchengdefine i32 @caller_double_in_regs() {
5163ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_double_in_regs:
5173ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
5183ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
5193ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
5203ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
5213ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
5223ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
5233ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lui a2, 262144
5243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 0
5253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_double_in_regs
5263ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
52797982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
5283ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
52997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
5303ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
5313ac9fe69SWang Pengcheng;
5323ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_double_in_regs:
5333ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
5343ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
5353ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
5363ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
5373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
5383ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
5393ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
5403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
5413ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
5423ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
5433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lui a2, 262144
5443ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 0
5453ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_double_in_regs
54697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
5473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
5483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
54997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
55097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
5513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
55297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
5533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
5543ac9fe69SWang Pengcheng;
5553ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_double_in_regs:
5563ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
5573ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
5583ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
5593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
5603ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
5613ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a2, 262144
5623ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 0
5633ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_double_in_regs
5643ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
5653ac9fe69SWang Pengcheng;
5663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_double_in_regs:
5673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
5683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
5693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
5703ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
5713ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
5723ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
5733ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
5743ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
5753ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a2, 262144
5763ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 0
5773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_double_in_regs
57897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
5793ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
5803ac9fe69SWang Pengcheng  %1 = call i32 @callee_double_in_regs(i32 1, double 2.0)
5813ac9fe69SWang Pengcheng  ret i32 %1
5823ac9fe69SWang Pengcheng}
5833ac9fe69SWang Pengcheng
5843ac9fe69SWang Pengcheng; Check 2x*xlen values are aligned appropriately when passed on the stack
5853ac9fe69SWang Pengcheng; Must keep define on a single line due to an update_llc_test_checks.py limitation
5863ac9fe69SWang Pengchengdefine i32 @callee_aligned_stack(i32 %a, i32 %b, fp128 %c, i32 %d, i32 %e, i64 %f, i32 %g, i32 %h, double %i, i32 %j, [2 x i32] %k) {
5873ac9fe69SWang Pengcheng; The double should be 8-byte aligned on the stack, but the two-element array
5883ac9fe69SWang Pengcheng; should only be 4-byte aligned
5893ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_aligned_stack:
5903ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
5913ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a0, 0(a2)
5923ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a1, 12(sp)
5933ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a2, 4(sp)
5943ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a3, 8(sp)
5953ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a4, 24(sp)
5963ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a5, 20(sp)
5973ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a2
5983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a1, a3, a1
5993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a1
6003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a4, a5, a4
6013ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a4
6023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
6033ac9fe69SWang Pengcheng;
6043ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_aligned_stack:
6053ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
606c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
607c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
608c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
609c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
6103ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
6113ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
612c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
6133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
6143ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a0, 0(a2)
6153ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a1, 12(s0)
6163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a2, 4(s0)
6173ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a3, 8(s0)
6183ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a4, 24(s0)
6193ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a5, 20(s0)
6203ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a2
6213ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a1, a3, a1
6223ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a1
6233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a4, a5, a4
6243ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a4
62597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
626c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
627c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
62897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
62997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
630c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
63197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
6323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
6333ac9fe69SWang Pengcheng;
6343ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_aligned_stack:
6353ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
6363ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 0(a2)
6373ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 12(sp)
6383ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a2, 4(sp)
6393ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a3, 8(sp)
6403ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a4, 24(sp)
6413ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a5, 20(sp)
6423ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a2
6433ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a1, a3, a1
6443ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a1
6453ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a4, a5, a4
6463ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a4
6473ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
6483ac9fe69SWang Pengcheng;
6493ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_aligned_stack:
6503ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
6513ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
6523ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
6533ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
6543ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
6553ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
6563ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
6573ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 0(a2)
6583ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 12(s0)
6593ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a2, 4(s0)
6603ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a3, 8(s0)
6613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a4, 24(s0)
6623ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a5, 20(s0)
6633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a2
6643ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a1, a3, a1
6653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a1
6663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a4, a5, a4
6673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a4
66897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
6693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
6703ac9fe69SWang Pengcheng  %1 = bitcast fp128 %c to i128
6713ac9fe69SWang Pengcheng  %2 = trunc i128 %1 to i32
6723ac9fe69SWang Pengcheng  %3 = add i32 %2, %g
6733ac9fe69SWang Pengcheng  %4 = add i32 %3, %h
6743ac9fe69SWang Pengcheng  %5 = bitcast double %i to i64
6753ac9fe69SWang Pengcheng  %6 = trunc i64 %5 to i32
6763ac9fe69SWang Pengcheng  %7 = add i32 %4, %6
6773ac9fe69SWang Pengcheng  %8 = add i32 %7, %j
6783ac9fe69SWang Pengcheng  %9 = extractvalue [2 x i32] %k, 0
6793ac9fe69SWang Pengcheng  %10 = add i32 %8, %9
6803ac9fe69SWang Pengcheng  ret i32 %10
6813ac9fe69SWang Pengcheng}
6823ac9fe69SWang Pengcheng
6833ac9fe69SWang Pengchengdefine void @caller_aligned_stack() {
6843ac9fe69SWang Pengcheng; The double should be 8-byte aligned on the stack, but the two-element array
6853ac9fe69SWang Pengcheng; should only be 4-byte aligned
6863ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_aligned_stack:
6873ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
6883ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -64
6893ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 64
6903ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
6913ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
6923ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
6933ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
6943ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 64
6953ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
6963ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -16
697*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a3, 18
698*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a4, 17
699*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a5, 16
700*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui a6, 262236
701*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui a7, 377487
702*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li t0, 15
703*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li t1, 14
704*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li t2, 4
705*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui t3, 262153
706*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui t4, 545260
707*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui t5, 964690
708*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui t6, 335544
709*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui s2, 688509
7103ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
7113ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 11
7123ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi a2, sp, 32
713*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a6, a6, 655
714*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a6, 16(sp)
715*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a5, 20(sp)
716*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a4, 24(sp)
717*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a3, 28(sp)
7183ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a3, 12
719*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a4, a7, 1475
720*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw t2, 0(sp)
721*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw t1, 4(sp)
722*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw t0, 8(sp)
723*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a4, 12(sp)
7243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a4, 13
725*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a6, t3, 491
726*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a7, t4, -1967
727*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi t0, t5, -328
728*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi t1, t6, 1311
729*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a5, s2, -2048
7302967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw t1, 32(sp)
7312967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw t0, 36(sp)
7322967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a7, 40(sp)
7332967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a6, 44(sp)
7343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_aligned_stack
7353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -64
73697982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 64
7373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
7383ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
73997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
74097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
7413ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 64
74297982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
7433ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
7443ac9fe69SWang Pengcheng;
7453ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_aligned_stack:
7463ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
7473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -64
7483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 64
7493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
7503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
7513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
7523ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
7533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 64
7543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
7553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -16
756*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a3, 18
757*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a4, 17
758*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a5, 16
759*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui a6, 262236
760*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui a7, 377487
761*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li t0, 15
762*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li t1, 14
763*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li t2, 4
764*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui t3, 262153
765*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui t4, 545260
766*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui t5, 964690
767*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui t6, 335544
768*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui s2, 688509
7693ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
7703ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 11
7713ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi a2, sp, 32
772*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a6, a6, 655
773*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a6, 16(sp)
774*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a5, 20(sp)
775*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a4, 24(sp)
776*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a3, 28(sp)
7773ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a3, 12
778*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a4, a7, 1475
779*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw t2, 0(sp)
780*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw t1, 4(sp)
781*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw t0, 8(sp)
782*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a4, 12(sp)
7833ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a4, 13
784*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a6, t3, 491
785*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a7, t4, -1967
786*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi t0, t5, -328
787*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi t1, t6, 1311
788*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a5, s2, -2048
7892967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw t1, 32(sp)
7902967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw t0, 36(sp)
7912967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a7, 40(sp)
7922967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a6, 44(sp)
7933ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_aligned_stack
7943ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -64
79597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 64
7963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
7973ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
79897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
79997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
8003ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 64
80197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
8023ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
8033ac9fe69SWang Pengcheng;
8043ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_aligned_stack:
8053ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
8063ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
80797982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
8083ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
8093ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
81097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -56
81197982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 64
8120de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 64
8133ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
8143ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -16
815*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 18
816*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 17
817*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a5, 16
818*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a6, 262236
819*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a7, 377487
820*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li t0, 15
821*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li t1, 14
822*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li t2, 4
823*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui t3, 262153
824*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui t4, 545260
825*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui t5, 964690
826*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui t6, 335544
827*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui s2, 688509
8283ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
8293ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 11
8303ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a2, sp, 32
831*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a6, a6, 655
832*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a6, 16(sp)
833*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a5, 20(sp)
834*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a4, 24(sp)
835*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a3, 28(sp)
8363ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 12
837*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a4, a7, 1475
838*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t2, 0(sp)
839*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t1, 4(sp)
840*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t0, 8(sp)
841*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
8423ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 13
843*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a6, t3, 491
844*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a7, t4, -1967
845*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi t0, t5, -328
846*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi t1, t6, 1311
847*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a5, s2, -2048
8482967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t1, 32(sp)
8492967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t0, 36(sp)
8502967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a7, 40(sp)
8512967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a6, 44(sp)
8523ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_aligned_stack
8530de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -64
85497982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 64
8550de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 56
85697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
8573ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
8583ac9fe69SWang Pengcheng;
8593ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_aligned_stack:
8603ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
8613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
86297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
8633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
8643ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
86597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -56
86697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 64
8670de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 64
8683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
8693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -16
870*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 18
871*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 17
872*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a5, 16
873*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a6, 262236
874*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a7, 377487
875*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li t0, 15
876*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li t1, 14
877*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li t2, 4
878*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui t3, 262153
879*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui t4, 545260
880*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui t5, 964690
881*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui t6, 335544
882*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui s2, 688509
8833ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
8843ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 11
8853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a2, sp, 32
886*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a6, a6, 655
887*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a6, 16(sp)
888*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a5, 20(sp)
889*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a4, 24(sp)
890*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a3, 28(sp)
8913ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 12
892*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a4, a7, 1475
893*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t2, 0(sp)
894*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t1, 4(sp)
895*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t0, 8(sp)
896*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
8973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 13
898*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a6, t3, 491
899*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a7, t4, -1967
900*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi t0, t5, -328
901*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi t1, t6, 1311
902*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a5, s2, -2048
9032967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t1, 32(sp)
9042967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t0, 36(sp)
9052967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a7, 40(sp)
9062967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a6, 44(sp)
9073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_aligned_stack
9080de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -64
90997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 64
9100de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 56
91197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
9123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
9133ac9fe69SWang Pengcheng  %1 = call i32 @callee_aligned_stack(i32 1, i32 11,
9143ac9fe69SWang Pengcheng    fp128 0xLEB851EB851EB851F400091EB851EB851, i32 12, i32 13,
9153ac9fe69SWang Pengcheng    i64 20000000000, i32 14, i32 15, double 2.720000e+00, i32 16,
9163ac9fe69SWang Pengcheng    [2 x i32] [i32 17, i32 18])
9173ac9fe69SWang Pengcheng  ret void
9183ac9fe69SWang Pengcheng}
9193ac9fe69SWang Pengcheng
9203ac9fe69SWang Pengchengdefine double @callee_small_scalar_ret() {
9213ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_small_scalar_ret:
9223ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
9233ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lui a1, 261888
9243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 0
9253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
9263ac9fe69SWang Pengcheng;
9273ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_small_scalar_ret:
9283ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
929c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
930c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
931c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
932c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
9333ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
9343ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
935c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
9363ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
9373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lui a1, 261888
9383ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 0
93997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
940c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
941c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
94297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
94397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
944c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
94597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
9463ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
9473ac9fe69SWang Pengcheng;
9483ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_small_scalar_ret:
9493ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
9503ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a1, 261888
9513ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 0
9523ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
9533ac9fe69SWang Pengcheng;
9543ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_scalar_ret:
9553ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
9563ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
9573ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
9583ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
9593ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
9603ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
9613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
9623ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a1, 261888
9633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 0
96497982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
9653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
9663ac9fe69SWang Pengcheng  ret double 1.0
9673ac9fe69SWang Pengcheng}
9683ac9fe69SWang Pengcheng
9693ac9fe69SWang Pengchengdefine i64 @caller_small_scalar_ret() {
9703ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_small_scalar_ret:
9713ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
9723ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
9733ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
9743ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
9753ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
9763ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_small_scalar_ret
9773ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
97897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
9793ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
98097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
9813ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
9823ac9fe69SWang Pengcheng;
9833ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_small_scalar_ret:
9843ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
9853ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
9863ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
9873ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
9883ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
9893ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
9903ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
9913ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
9923ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
9933ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_small_scalar_ret
99497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
9953ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
9963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
99797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
99897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
9993ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
100097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
10013ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
10023ac9fe69SWang Pengcheng;
10033ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_scalar_ret:
10043ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
10053ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
10063ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
10073ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
10083ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_small_scalar_ret
10093ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
10103ac9fe69SWang Pengcheng;
10113ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_scalar_ret:
10123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
10133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
10143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
10153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
10163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
10173ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
10183ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
10193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_small_scalar_ret
102097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
10213ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
10223ac9fe69SWang Pengcheng  %1 = call double @callee_small_scalar_ret()
10233ac9fe69SWang Pengcheng  %2 = bitcast double %1 to i64
10243ac9fe69SWang Pengcheng  ret i64 %2
10253ac9fe69SWang Pengcheng}
10263ac9fe69SWang Pengcheng
10273ac9fe69SWang Pengcheng; Check that on RV32, i64 is passed in a pair of registers. Unlike
10283ac9fe69SWang Pengcheng; the convention for varargs, this need not be an aligned pair.
10293ac9fe69SWang Pengcheng
10303ac9fe69SWang Pengchengdefine i32 @callee_i64_in_regs(i32 %a, i64 %b) {
10313ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_i64_in_regs:
10323ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
10333ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a1
10343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
10353ac9fe69SWang Pengcheng;
10363ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_i64_in_regs:
10373ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
1038c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
1039c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
1040c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
1041c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
10423ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
10433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
1044c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
10453ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
10463ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a1
104797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
1048c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
1049c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
105097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
105197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
1052c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
105397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
10543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
10553ac9fe69SWang Pengcheng;
10563ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_i64_in_regs:
10573ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
10583ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a1
10593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
10603ac9fe69SWang Pengcheng;
10613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_i64_in_regs:
10623ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
10633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
10643ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
10653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
10663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
10673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
10683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
10693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a1
107097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
10713ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
10723ac9fe69SWang Pengcheng  %b_trunc = trunc i64 %b to i32
10733ac9fe69SWang Pengcheng  %1 = add i32 %a, %b_trunc
10743ac9fe69SWang Pengcheng  ret i32 %1
10753ac9fe69SWang Pengcheng}
10763ac9fe69SWang Pengcheng
10773ac9fe69SWang Pengchengdefine i32 @caller_i64_in_regs() {
10783ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_i64_in_regs:
10793ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
10803ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
10813ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
10823ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
10833ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
10843ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
10853ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 2
10863ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a2, 0
10873ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_i64_in_regs
10883ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
108997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
10903ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
109197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
10923ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
10933ac9fe69SWang Pengcheng;
10943ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_i64_in_regs:
10953ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
10963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
10973ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
10983ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
10993ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
11003ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
11013ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
11023ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
11033ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
11043ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
11053ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 2
11063ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a2, 0
11073ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_i64_in_regs
110897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
11093ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
11103ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
111197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
111297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
11133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
111497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
11153ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
11163ac9fe69SWang Pengcheng;
11173ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_i64_in_regs:
11183ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
11193ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
11203ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
11213ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
11223ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
11233ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 2
11243ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 0
11253ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_i64_in_regs
11263ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
11273ac9fe69SWang Pengcheng;
11283ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_i64_in_regs:
11293ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
11303ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
11313ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
11323ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
11333ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
11343ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
11353ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
11363ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
11373ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 2
11383ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 0
11393ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_i64_in_regs
114097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
11413ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
11423ac9fe69SWang Pengcheng  %1 = call i32 @callee_i64_in_regs(i32 1, i64 2)
11433ac9fe69SWang Pengcheng  ret i32 %1
11443ac9fe69SWang Pengcheng}
11453ac9fe69SWang Pengcheng
11463ac9fe69SWang Pengcheng; Check that the stack is used once the GPRs are exhausted
11473ac9fe69SWang Pengcheng
11483ac9fe69SWang Pengchengdefine i32 @callee_many_scalars(i8 %a, i16 %b, i32 %c, i64 %d, i32 %e, i32 %f, i64 %g, i32 %h) {
11493ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_many_scalars:
11503ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
11513ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a6, 12(sp)
11523ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a7, 0(sp)
11533ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw t0, 4(sp)
11543ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw t1, 8(sp)
11553ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi a0, a0, 255
11563ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    slli a1, a1, 16
11573ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    srli a1, a1, 16
11583ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a2
11593ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a1
1160*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    add a0, a0, a5
11613ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    xor a1, a4, t1
11623ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    xor a2, a3, t0
1163*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    add a0, a0, a7
11643ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    or a1, a2, a1
11653ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    seqz a1, a1
11663ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a6
11673ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a1, a0
11683ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
11693ac9fe69SWang Pengcheng;
11703ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_many_scalars:
11713ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
1172c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
1173c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
1174c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
1175c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
11763ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
11773ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
1178c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
11793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
11803ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a6, 12(s0)
11813ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a7, 0(s0)
11823ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw t0, 4(s0)
11833ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw t1, 8(s0)
11843ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi a0, a0, 255
11853ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    slli a1, a1, 16
11863ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    srli a1, a1, 16
11873ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a2
11883ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a1
1189*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    add a0, a0, a5
11903ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    xor a1, a4, t1
11913ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    xor a2, a3, t0
1192*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    add a0, a0, a7
11933ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    or a1, a2, a1
11943ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    seqz a1, a1
11953ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a6
11963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a1, a0
119797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
1198c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
1199c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
120097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
120197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
1202c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
120397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
12043ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
12053ac9fe69SWang Pengcheng;
12063ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_many_scalars:
12073ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
12083ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a6, 12(sp)
12093ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a7, 0(sp)
12103ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw t0, 4(sp)
12113ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw t1, 8(sp)
12123ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi a0, a0, 255
12133ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    slli a1, a1, 16
12143ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    srli a1, a1, 16
12153ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a2
12163ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a1
1217*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a5
12183ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a1, a4, t1
12193ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a2, a3, t0
1220*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a7
12213ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a1, a2, a1
12223ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    seqz a1, a1
12233ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a6
12243ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a1, a0
12253ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
12263ac9fe69SWang Pengcheng;
12273ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_many_scalars:
12283ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
12293ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
12303ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
12313ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
12323ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
12333ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
12343ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
12353ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a6, 12(s0)
12363ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a7, 0(s0)
12373ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw t0, 4(s0)
12383ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw t1, 8(s0)
12393ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi a0, a0, 255
12403ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    slli a1, a1, 16
12413ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    srli a1, a1, 16
12423ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a2
12433ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a1
1244*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a5
12453ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a1, a4, t1
12463ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a2, a3, t0
1247*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a7
12483ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a1, a2, a1
12493ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    seqz a1, a1
12503ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a6
12513ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a1, a0
125297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
12533ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
12543ac9fe69SWang Pengcheng  %a_ext = zext i8 %a to i32
12553ac9fe69SWang Pengcheng  %b_ext = zext i16 %b to i32
12563ac9fe69SWang Pengcheng  %1 = add i32 %a_ext, %b_ext
12573ac9fe69SWang Pengcheng  %2 = add i32 %1, %c
12583ac9fe69SWang Pengcheng  %3 = icmp eq i64 %d, %g
12593ac9fe69SWang Pengcheng  %4 = zext i1 %3 to i32
12603ac9fe69SWang Pengcheng  %5 = add i32 %4, %2
12613ac9fe69SWang Pengcheng  %6 = add i32 %5, %e
12623ac9fe69SWang Pengcheng  %7 = add i32 %6, %f
12633ac9fe69SWang Pengcheng  %8 = add i32 %7, %h
12643ac9fe69SWang Pengcheng  ret i32 %8
12653ac9fe69SWang Pengcheng}
12663ac9fe69SWang Pengcheng
12673ac9fe69SWang Pengchengdefine i32 @caller_many_scalars() {
12683ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_many_scalars:
12693ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
12703ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -20
12713ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 20
12723ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 16(sp) # 4-byte Folded Spill
12733ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
12742967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a4, 8
12752967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a6, 7
12762967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a7, 6
12773ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
12783ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 2
12793ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a2, 3
12803ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a3, 4
12813ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a5, 5
12822967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a7, 0(sp)
12832967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a6, 4(sp)
12842967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 8(sp)
12852967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a4, 12(sp)
12863ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a4, 0
12873ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_many_scalars
12883ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 16(sp) # 4-byte Folded Reload
128997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
12903ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 20
129197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
12923ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
12933ac9fe69SWang Pengcheng;
12943ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_many_scalars:
12953ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
12963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -24
12973ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 24
12983ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 20(sp) # 4-byte Folded Spill
12993ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 16(sp) # 4-byte Folded Spill
13003ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
13013ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
13023ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 24
13033ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
13042967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a4, 8
13052967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a6, 7
13062967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a7, 6
13073ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
13083ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 2
13093ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a2, 3
13103ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a3, 4
13113ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a5, 5
13122967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a7, 0(sp)
13132967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a6, 4(sp)
13142967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 8(sp)
13152967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a4, 12(sp)
13163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a4, 0
13173ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_many_scalars
131897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 24
13193ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 20(sp) # 4-byte Folded Reload
13203ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 16(sp) # 4-byte Folded Reload
132197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
132297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
13233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 24
132497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
13253ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
13263ac9fe69SWang Pengcheng;
13273ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_many_scalars:
13283ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
13293ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
133097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
133197982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
13323ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -16
13333ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 20
13342967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 8
13352967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a6, 7
13362967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a7, 6
13373ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
13383ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 2
13393ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 3
13403ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 4
13413ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a5, 5
13422967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a7, 0(sp)
13432967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a6, 4(sp)
13442967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 8(sp)
13452967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
13463ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 0
13473ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_many_scalars
13483ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 16
134997982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
13503ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
13513ac9fe69SWang Pengcheng;
13523ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_many_scalars:
13533ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
13543ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
135597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
13563ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
13573ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
135897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -16
135997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 24
13603ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 24
13613ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
13622967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 8
13632967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a6, 7
13642967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a7, 6
13653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
13663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 2
13673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 3
13683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 4
13693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a5, 5
13702967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a7, 0(sp)
13712967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a6, 4(sp)
13722967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 8(sp)
13732967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
13743ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 0
13753ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_many_scalars
137697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 24
13773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 16
137897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
13793ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
13803ac9fe69SWang Pengcheng  %1 = call i32 @callee_many_scalars(i8 1, i16 2, i32 3, i64 4, i32 5, i32 6, i64 7, i32 8)
13813ac9fe69SWang Pengcheng  ret i32 %1
13823ac9fe69SWang Pengcheng}
13833ac9fe69SWang Pengcheng
13843ac9fe69SWang Pengcheng; Check that i128 and fp128 are passed indirectly
13853ac9fe69SWang Pengcheng
13863ac9fe69SWang Pengchengdefine i32 @callee_large_scalars(i128 %a, fp128 %b) {
13873ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_large_scalars:
13883ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
1389*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a2, 0(a1)
1390*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a3, 4(a1)
1391*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a4, 8(a1)
1392*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a1, 12(a1)
139314c4f28eSAlex Bradbury; ILP32E-FPELIM-NEXT:    lw a5, 12(a0)
1394*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a6, 4(a0)
1395*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a7, 8(a0)
1396*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a0, 0(a0)
1397*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a1, a5, a1
1398*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a3, a6, a3
1399*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a4, a7, a4
1400*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a0, a0, a2
1401*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    or a1, a3, a1
1402*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    or a0, a0, a4
1403*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    or a0, a0, a1
14043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    seqz a0, a0
14053ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
14063ac9fe69SWang Pengcheng;
14073ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_large_scalars:
14083ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
1409c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
1410c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
1411c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
1412c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
14133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
14143ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
1415c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
14163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
1417*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a2, 0(a1)
1418*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a3, 4(a1)
1419*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a4, 8(a1)
1420*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a1, 12(a1)
142114c4f28eSAlex Bradbury; ILP32E-WITHFP-NEXT:    lw a5, 12(a0)
1422*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a6, 4(a0)
1423*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a7, 8(a0)
1424*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a0, 0(a0)
1425*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a1, a5, a1
1426*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a3, a6, a3
1427*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a4, a7, a4
1428*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a0, a0, a2
1429*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    or a1, a3, a1
1430*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    or a0, a0, a4
1431*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    or a0, a0, a1
14323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    seqz a0, a0
143397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
1434c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
1435c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
143697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
143797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
1438c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
143997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
14403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
14413ac9fe69SWang Pengcheng;
14423ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_large_scalars:
14433ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
1444*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a2, 0(a1)
1445*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a3, 4(a1)
1446*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a4, 8(a1)
1447*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 12(a1)
144814c4f28eSAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a5, 12(a0)
1449*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a6, 4(a0)
1450*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a7, 8(a0)
1451*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 0(a0)
1452*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a1, a5, a1
1453*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a3, a6, a3
1454*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a4, a7, a4
1455*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a0, a0, a2
1456*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a1, a3, a1
1457*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a0, a0, a4
1458*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a0, a0, a1
14593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    seqz a0, a0
14603ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
14613ac9fe69SWang Pengcheng;
14623ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalars:
14633ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
14643ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
14653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
14663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
14673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
14683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
14693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
1470*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a2, 0(a1)
1471*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a3, 4(a1)
1472*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a4, 8(a1)
1473*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 12(a1)
147414c4f28eSAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a5, 12(a0)
1475*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a6, 4(a0)
1476*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a7, 8(a0)
1477*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 0(a0)
1478*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a1, a5, a1
1479*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a3, a6, a3
1480*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a4, a7, a4
1481*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a0, a0, a2
1482*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a1, a3, a1
1483*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a0, a0, a4
1484*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a0, a0, a1
14853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    seqz a0, a0
148697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
14873ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
14883ac9fe69SWang Pengcheng  %b_bitcast = bitcast fp128 %b to i128
14893ac9fe69SWang Pengcheng  %1 = icmp eq i128 %a, %b_bitcast
14903ac9fe69SWang Pengcheng  %2 = zext i1 %1 to i32
14913ac9fe69SWang Pengcheng  ret i32 %2
14923ac9fe69SWang Pengcheng}
14933ac9fe69SWang Pengcheng
14943ac9fe69SWang Pengchengdefine i32 @caller_large_scalars() {
14953ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_large_scalars:
14963ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
14973ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -48
14983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 48
14993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
15003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
15013ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
15023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
15033ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 48
15043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
15053ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -16
1506*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui a1, 524272
1507*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a2, 1
1508*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a0, sp, 24
15093ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw zero, 0(sp)
15102967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 4(sp)
15112967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 8(sp)
1512*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a1, 12(sp)
15133ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a1, sp
15143ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a2, 24(sp)
15152967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 28(sp)
15162967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 32(sp)
15172967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 36(sp)
15183ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_large_scalars
15193ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -48
152097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 48
15213ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
15223ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
152397982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
152497982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
15253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 48
152697982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
15273ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
15283ac9fe69SWang Pengcheng;
15293ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_large_scalars:
15303ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
15313ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -48
15323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 48
15333ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
15343ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
15353ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
15363ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
15373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 48
15383ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
15393ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -16
1540*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui a1, 524272
1541*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a2, 1
1542*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a0, sp, 24
15433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw zero, 0(sp)
15442967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 4(sp)
15452967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 8(sp)
1546*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a1, 12(sp)
15473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a1, sp
15483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a2, 24(sp)
15492967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 28(sp)
15502967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 32(sp)
15512967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 36(sp)
15523ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_large_scalars
15533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -48
155497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 48
15553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
15563ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
155797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
155897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
15593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 48
156097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
15613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
15623ac9fe69SWang Pengcheng;
15633ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars:
15643ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
15653ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
156697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
15673ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
15683ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
156997982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -40
157097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 48
15710de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 48
15723ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
15733ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -16
1574*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a1, 524272
1575*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 1
1576*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a0, sp, 24
15773ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 0(sp)
15782967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 4(sp)
15792967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 8(sp)
1580*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 12(sp)
15813ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a1, sp
15820de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a2, 24(sp)
15832967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 28(sp)
15842967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 32(sp)
15852967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 36(sp)
15863ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_large_scalars
15870de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -48
158897982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 48
15890de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 40
159097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
15913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
15923ac9fe69SWang Pengcheng;
15933ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars:
15943ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
15953ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
159697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
15973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
15983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
159997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -40
160097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 48
16010de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 48
16023ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
16033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -16
1604*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a1, 524272
1605*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 1
1606*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a0, sp, 24
16073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 0(sp)
16082967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 4(sp)
16092967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 8(sp)
1610*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, 12(sp)
16113ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a1, sp
16120de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a2, 24(sp)
16132967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 28(sp)
16142967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 32(sp)
16152967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 36(sp)
16163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_large_scalars
16170de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -48
161897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 48
16190de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 40
162097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
16213ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
16223ac9fe69SWang Pengcheng  %1 = call i32 @callee_large_scalars(i128 1, fp128 0xL00000000000000007FFF000000000000)
16233ac9fe69SWang Pengcheng  ret i32 %1
16243ac9fe69SWang Pengcheng}
16253ac9fe69SWang Pengcheng
16263ac9fe69SWang Pengcheng; Check that arguments larger than 2*xlen are handled correctly when their
16273ac9fe69SWang Pengcheng; address is passed on the stack rather than in memory
16283ac9fe69SWang Pengcheng
16293ac9fe69SWang Pengcheng; Must keep define on a single line due to an update_llc_test_checks.py limitation
16303ac9fe69SWang Pengchengdefine i32 @callee_large_scalars_exhausted_regs(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i128 %h, i32 %i, fp128 %j) {
16313ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_large_scalars_exhausted_regs:
16323ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
1633*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a0, 12(sp)
1634*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a1, 4(sp)
16353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a2, 0(a0)
163614c4f28eSAlex Bradbury; ILP32E-FPELIM-NEXT:    lw a3, 4(a0)
1637*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a4, 8(a0)
1638*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a0, 12(a0)
1639*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a5, 12(a1)
1640*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a6, 4(a1)
1641*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a7, 8(a1)
1642*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lw a1, 0(a1)
1643*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a0, a5, a0
1644*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a3, a6, a3
1645*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a4, a7, a4
1646*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    xor a1, a1, a2
1647*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    or a0, a3, a0
1648*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    or a1, a1, a4
164914c4f28eSAlex Bradbury; ILP32E-FPELIM-NEXT:    or a0, a1, a0
16503ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    seqz a0, a0
16513ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
16523ac9fe69SWang Pengcheng;
16533ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_large_scalars_exhausted_regs:
16543ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
1655c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
1656c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
1657c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
1658c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
16593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
16603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
1661c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
16623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
1663*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a0, 12(s0)
1664*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a1, 4(s0)
16653ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a2, 0(a0)
166614c4f28eSAlex Bradbury; ILP32E-WITHFP-NEXT:    lw a3, 4(a0)
1667*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a4, 8(a0)
1668*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a0, 12(a0)
1669*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a5, 12(a1)
1670*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a6, 4(a1)
1671*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a7, 8(a1)
1672*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lw a1, 0(a1)
1673*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a0, a5, a0
1674*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a3, a6, a3
1675*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a4, a7, a4
1676*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    xor a1, a1, a2
1677*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    or a0, a3, a0
1678*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    or a1, a1, a4
167914c4f28eSAlex Bradbury; ILP32E-WITHFP-NEXT:    or a0, a1, a0
16803ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    seqz a0, a0
168197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
1682c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
1683c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
168497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
168597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
1686c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
168797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
16883ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
16893ac9fe69SWang Pengcheng;
16903ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_large_scalars_exhausted_regs:
16913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
1692*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 12(sp)
1693*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 4(sp)
16943ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a2, 0(a0)
169514c4f28eSAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a3, 4(a0)
1696*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a4, 8(a0)
1697*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 12(a0)
1698*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a5, 12(a1)
1699*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a6, 4(a1)
1700*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a7, 8(a1)
1701*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 0(a1)
1702*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a0, a5, a0
1703*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a3, a6, a3
1704*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a4, a7, a4
1705*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a1, a1, a2
1706*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a0, a3, a0
1707*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a1, a1, a4
170814c4f28eSAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    or a0, a1, a0
17093ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    seqz a0, a0
17103ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
17113ac9fe69SWang Pengcheng;
17123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalars_exhausted_regs:
17133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
17143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
17153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
17163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
17173ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
17183ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
17193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
1720*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 12(s0)
1721*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 4(s0)
17223ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a2, 0(a0)
172314c4f28eSAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a3, 4(a0)
1724*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a4, 8(a0)
1725*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 12(a0)
1726*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a5, 12(a1)
1727*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a6, 4(a1)
1728*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a7, 8(a1)
1729*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 0(a1)
1730*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a0, a5, a0
1731*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a3, a6, a3
1732*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a4, a7, a4
1733*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a1, a1, a2
1734*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a0, a3, a0
1735*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a1, a1, a4
173614c4f28eSAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    or a0, a1, a0
17373ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    seqz a0, a0
173897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
17393ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
17403ac9fe69SWang Pengcheng  %j_bitcast = bitcast fp128 %j to i128
17413ac9fe69SWang Pengcheng  %1 = icmp eq i128 %h, %j_bitcast
17423ac9fe69SWang Pengcheng  %2 = zext i1 %1 to i32
17433ac9fe69SWang Pengcheng  ret i32 %2
17443ac9fe69SWang Pengcheng}
17453ac9fe69SWang Pengcheng
17463ac9fe69SWang Pengchengdefine i32 @caller_large_scalars_exhausted_regs() {
17473ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_large_scalars_exhausted_regs:
17483ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
17493ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -64
17503ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 64
17513ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
17523ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
17533ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
17543ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
17553ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 64
17563ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
17573ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -16
1758*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a4, sp, 16
1759*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a5, 9
1760*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    addi a6, sp, 40
1761*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li a7, 7
1762*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    lui t0, 524272
1763*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    li t1, 8
17643ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
17653ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 2
17663ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a2, 3
17673ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a3, 4
1768*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a7, 0(sp)
1769*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a6, 4(sp)
1770*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a5, 8(sp)
1771*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw a4, 12(sp)
17723ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a4, 5
1773*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw zero, 16(sp)
1774*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw zero, 20(sp)
1775*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw zero, 24(sp)
1776*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw t0, 28(sp)
17773ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a5, 6
1778*9122c523SPengcheng Wang; ILP32E-FPELIM-NEXT:    sw t1, 40(sp)
17793ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw zero, 44(sp)
17802967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 48(sp)
17812967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 52(sp)
17823ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_large_scalars_exhausted_regs
17833ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -64
178497982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 64
17853ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
17863ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
178797982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
178897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
17893ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 64
179097982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
17913ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
17923ac9fe69SWang Pengcheng;
17933ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_large_scalars_exhausted_regs:
17943ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
17953ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -64
17963ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 64
17973ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
17983ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
17993ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
18003ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
18013ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 64
18023ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
18033ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -16
1804*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a4, sp, 16
1805*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a5, 9
1806*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    addi a6, sp, 40
1807*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li a7, 7
1808*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    lui t0, 524272
1809*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    li t1, 8
18103ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
18113ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 2
18123ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a2, 3
18133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a3, 4
1814*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a7, 0(sp)
1815*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a6, 4(sp)
1816*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a5, 8(sp)
1817*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw a4, 12(sp)
18183ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a4, 5
1819*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw zero, 16(sp)
1820*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw zero, 20(sp)
1821*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw zero, 24(sp)
1822*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw t0, 28(sp)
18233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a5, 6
1824*9122c523SPengcheng Wang; ILP32E-WITHFP-NEXT:    sw t1, 40(sp)
18253ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw zero, 44(sp)
18262967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 48(sp)
18272967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 52(sp)
18283ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_large_scalars_exhausted_regs
18293ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -64
183097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 64
18313ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
18323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
183397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
183497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
18353ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 64
183697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
18373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
18383ac9fe69SWang Pengcheng;
18393ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs:
18403ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
18413ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
184297982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
18433ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
18443ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
184597982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -56
184697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 64
18470de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 64
18483ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
18493ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -16
1850*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a4, sp, 16
1851*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a5, 9
1852*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi a6, sp, 40
1853*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a7, 7
1854*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui t0, 524272
1855*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li t1, 8
18563ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
18573ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 2
18583ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 3
18593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 4
1860*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a7, 0(sp)
1861*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a6, 4(sp)
1862*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a5, 8(sp)
1863*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
18643ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 5
1865*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 16(sp)
1866*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 20(sp)
1867*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 24(sp)
1868*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t0, 28(sp)
18693ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a5, 6
1870*9122c523SPengcheng Wang; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw t1, 40(sp)
18710de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 44(sp)
18722967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 48(sp)
18732967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 52(sp)
18743ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_large_scalars_exhausted_regs
18750de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -64
187697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 64
18770de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 56
187897982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
18793ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
18803ac9fe69SWang Pengcheng;
18813ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs:
18823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
18833ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
188497982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
18853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
18863ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
188797982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -56
188897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 64
18890de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 64
18903ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
18913ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -16
1892*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a4, sp, 16
1893*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a5, 9
1894*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a6, sp, 40
1895*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a7, 7
1896*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui t0, 524272
1897*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li t1, 8
18983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
18993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 2
19003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 3
19013ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 4
1902*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a7, 0(sp)
1903*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a6, 4(sp)
1904*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a5, 8(sp)
1905*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a4, 12(sp)
19063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 5
1907*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 16(sp)
1908*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 20(sp)
1909*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 24(sp)
1910*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t0, 28(sp)
19113ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a5, 6
1912*9122c523SPengcheng Wang; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw t1, 40(sp)
19130de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 44(sp)
19142967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 48(sp)
19152967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 52(sp)
19163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_large_scalars_exhausted_regs
19170de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -64
191897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 64
19190de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 56
192097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
19213ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
19223ac9fe69SWang Pengcheng  %1 = call i32 @callee_large_scalars_exhausted_regs(
19233ac9fe69SWang Pengcheng      i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i128 8, i32 9,
19243ac9fe69SWang Pengcheng      fp128 0xL00000000000000007FFF000000000000)
19253ac9fe69SWang Pengcheng  ret i32 %1
19263ac9fe69SWang Pengcheng}
19273ac9fe69SWang Pengcheng
19283ac9fe69SWang Pengcheng; Ensure that libcalls generated in the middle-end obey the calling convention
19293ac9fe69SWang Pengcheng
19303ac9fe69SWang Pengchengdefine i32 @caller_mixed_scalar_libcalls(i64 %a) {
19313ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_mixed_scalar_libcalls:
19323ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
19333ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -24
19343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 24
19353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 20(sp) # 4-byte Folded Spill
19363ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 16(sp) # 4-byte Folded Spill
19373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
19383ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
19393ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 24
19403ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
19413ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -8
19423ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a2, a1
19433ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a1, a0
19443ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, sp
19453ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call __floatditf
19463ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a0, 0(sp)
19473ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -24
194897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 24
19493ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 20(sp) # 4-byte Folded Reload
19503ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 16(sp) # 4-byte Folded Reload
195197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
195297982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
19533ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 24
195497982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
19553ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
19563ac9fe69SWang Pengcheng;
19573ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_mixed_scalar_libcalls:
19583ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
19593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -24
19603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 24
19613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 20(sp) # 4-byte Folded Spill
19623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 16(sp) # 4-byte Folded Spill
19633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
19643ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
19653ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 24
19663ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
19673ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -8
19683ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a2, a1
19693ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a1, a0
19703ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a0, sp
19713ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call __floatditf
19723ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a0, 0(sp)
19733ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -24
197497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 24
19753ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 20(sp) # 4-byte Folded Reload
19763ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 16(sp) # 4-byte Folded Reload
197797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
197897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
19793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 24
198097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
19813ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
19823ac9fe69SWang Pengcheng;
19833ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls:
19843ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
19853ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
198697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
19873ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
19883ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
198997982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -16
199097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 24
19913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 24
19923ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
19933ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -8
19943ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a2, a1
19953ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a1, a0
19963ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, sp
19973ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call __floatditf
19983ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 0(sp)
19993ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -24
200097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 24
20013ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 16
200297982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
20033ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
20043ac9fe69SWang Pengcheng;
20053ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls:
20063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
20073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
200897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
20093ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
20103ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
201197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -16
201297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 24
20133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 24
20143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
20153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -8
20163ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a2, a1
20173ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a1, a0
20183ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a0, sp
20193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call __floatditf
20203ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 0(sp)
20213ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -24
202297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 24
20233ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 16
202497982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
20253ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
20263ac9fe69SWang Pengcheng  %1 = sitofp i64 %a to fp128
20273ac9fe69SWang Pengcheng  %2 = bitcast fp128 %1 to i128
20283ac9fe69SWang Pengcheng  %3 = trunc i128 %2 to i32
20293ac9fe69SWang Pengcheng  ret i32 %3
20303ac9fe69SWang Pengcheng}
20313ac9fe69SWang Pengcheng
20323ac9fe69SWang Pengcheng
20333ac9fe69SWang Pengcheng; Check passing of coerced integer arrays
20343ac9fe69SWang Pengcheng
2035ff9af4c4SNikita Popov%struct.small = type { i32, ptr }
20363ac9fe69SWang Pengcheng
20373ac9fe69SWang Pengchengdefine i32 @callee_small_coerced_struct([2 x i32] %a.coerce) {
20383ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_small_coerced_struct:
20393ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
20403ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    xor a0, a0, a1
20413ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    seqz a0, a0
20423ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
20433ac9fe69SWang Pengcheng;
20443ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_small_coerced_struct:
20453ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2046c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
2047c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
2048c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
2049c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
20503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
20513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2052c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
20533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
20543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    xor a0, a0, a1
20553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    seqz a0, a0
205697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
2057c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
2058c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
205997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
206097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2061c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
206297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
20633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
20643ac9fe69SWang Pengcheng;
20653ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_small_coerced_struct:
20663ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
20673ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    xor a0, a0, a1
20683ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    seqz a0, a0
20693ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
20703ac9fe69SWang Pengcheng;
20713ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_coerced_struct:
20723ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
20733ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
20743ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
20753ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
20763ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
20773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
20783ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
20793ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    xor a0, a0, a1
20803ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    seqz a0, a0
208197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
20823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
20833ac9fe69SWang Pengcheng  %1 = extractvalue [2 x i32] %a.coerce, 0
20843ac9fe69SWang Pengcheng  %2 = extractvalue [2 x i32] %a.coerce, 1
20853ac9fe69SWang Pengcheng  %3 = icmp eq i32 %1, %2
20863ac9fe69SWang Pengcheng  %4 = zext i1 %3 to i32
20873ac9fe69SWang Pengcheng  ret i32 %4
20883ac9fe69SWang Pengcheng}
20893ac9fe69SWang Pengcheng
20903ac9fe69SWang Pengchengdefine i32 @caller_small_coerced_struct() {
20913ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_small_coerced_struct:
20923ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
20933ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
20943ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
20953ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
20963ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
20973ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
20983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 2
20993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_small_coerced_struct
21003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
210197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
21023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
210397982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
21043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
21053ac9fe69SWang Pengcheng;
21063ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_small_coerced_struct:
21073ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
21083ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
21093ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
21103ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
21113ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
21123ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
21133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
21143ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
21153ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
21163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
21173ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 2
21183ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_small_coerced_struct
211997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
21203ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
21213ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
212297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
212397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
21243ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
212597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
21263ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
21273ac9fe69SWang Pengcheng;
21283ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_coerced_struct:
21293ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
21303ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
21313ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
21323ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
21333ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
21343ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 2
21353ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_small_coerced_struct
21363ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
21373ac9fe69SWang Pengcheng;
21383ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_coerced_struct:
21393ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
21403ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
21413ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
21423ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
21433ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
21443ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
21453ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
21463ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
21473ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 2
21483ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_small_coerced_struct
214997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
21503ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
21513ac9fe69SWang Pengcheng  %1 = call i32 @callee_small_coerced_struct([2 x i32] [i32 1, i32 2])
21523ac9fe69SWang Pengcheng  ret i32 %1
21533ac9fe69SWang Pengcheng}
21543ac9fe69SWang Pengcheng
21553ac9fe69SWang Pengcheng; Check large struct arguments, which are passed byval
21563ac9fe69SWang Pengcheng
21573ac9fe69SWang Pengcheng%struct.large = type { i32, i32, i32, i32 }
21583ac9fe69SWang Pengcheng
2159ff9af4c4SNikita Popovdefine i32 @callee_large_struct(ptr byval(%struct.large) align 4 %a) {
21603ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_large_struct:
21613ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
21623ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a1, 0(a0)
21633ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a0, 12(a0)
21643ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a1, a0
21653ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
21663ac9fe69SWang Pengcheng;
21673ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_large_struct:
21683ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2169c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
2170c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
2171c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
2172c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
21733ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
21743ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2175c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
21763ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
21773ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a1, 0(a0)
21783ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a0, 12(a0)
21793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a1, a0
218097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
2181c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
2182c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
218397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
218497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2185c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
218697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
21873ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
21883ac9fe69SWang Pengcheng;
21893ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_large_struct:
21903ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
21913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 0(a0)
21923ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 12(a0)
21933ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a1, a0
21943ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
21953ac9fe69SWang Pengcheng;
21963ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_struct:
21973ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
21983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
21993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
22003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
22013ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
22023ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
22033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
22043ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 0(a0)
22053ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 12(a0)
22063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a1, a0
220797982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
22083ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
2209ff9af4c4SNikita Popov  %1 = getelementptr inbounds %struct.large, ptr %a, i32 0, i32 0
2210ff9af4c4SNikita Popov  %2 = getelementptr inbounds %struct.large, ptr %a, i32 0, i32 3
2211ff9af4c4SNikita Popov  %3 = load i32, ptr %1
2212ff9af4c4SNikita Popov  %4 = load i32, ptr %2
22133ac9fe69SWang Pengcheng  %5 = add i32 %3, %4
22143ac9fe69SWang Pengcheng  ret i32 %5
22153ac9fe69SWang Pengcheng}
22163ac9fe69SWang Pengcheng
22173ac9fe69SWang Pengchengdefine i32 @caller_large_struct() {
22183ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_large_struct:
22193ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
22203ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -36
22213ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 36
22223ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 32(sp) # 4-byte Folded Spill
22233ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
22243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
22253ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 2
22263ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a2, 3
22273ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a3, 4
22282967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a0, 16(sp)
22292967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a1, 20(sp)
22302967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a2, 24(sp)
22313ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a3, 28(sp)
22323ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a0, 0(sp)
22333ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a1, 4(sp)
22343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a2, 8(sp)
22353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a3, 12(sp)
22363ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, sp
22373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_large_struct
22383ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 32(sp) # 4-byte Folded Reload
223997982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
22403ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 36
224197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
22423ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
22433ac9fe69SWang Pengcheng;
22443ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_large_struct:
22453ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
22463ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -40
22473ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 40
22483ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 36(sp) # 4-byte Folded Spill
22493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 32(sp) # 4-byte Folded Spill
22503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
22513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
22523ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 40
22533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
22543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
22553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 2
22563ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a2, 3
22573ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a3, 4
22582967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a0, -24(s0)
22592967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a1, -20(s0)
22602967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a2, -16(s0)
22613ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a3, -12(s0)
22623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a0, -40(s0)
22633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a1, -36(s0)
22643ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a2, -32(s0)
22653ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a3, -28(s0)
22663ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi a0, s0, -40
22673ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_large_struct
226897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 40
22693ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 36(sp) # 4-byte Folded Reload
22703ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 32(sp) # 4-byte Folded Reload
227197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
227297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
22733ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 40
227497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
22753ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
22763ac9fe69SWang Pengcheng;
22773ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct:
22783ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
22793ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
228097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
228197982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
22823ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -32
22833ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 36
22843ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
22853ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 2
22863ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 3
22873ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 4
22882967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a0, 16(sp)
22892967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 20(sp)
22902967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a2, 24(sp)
22913ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a3, 28(sp)
22923ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a0, 0(sp)
22933ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 4(sp)
22943ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a2, 8(sp)
22953ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a3, 12(sp)
22963ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, sp
22973ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_large_struct
22983ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 32
229997982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
23003ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
23013ac9fe69SWang Pengcheng;
23023ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct:
23033ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
23043ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
230597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
23063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
23073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
230897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -32
230997982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 40
23103ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 40
23113ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
23123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
23133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 2
23143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 3
23153ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 4
23162967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a0, -24(s0)
23172967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, -20(s0)
23182967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a2, -16(s0)
23193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a3, -12(s0)
23203ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a0, -40(s0)
23213ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, -36(s0)
23223ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a2, -32(s0)
23233ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a3, -28(s0)
23243ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi a0, s0, -40
23253ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_large_struct
232697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 40
23273ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 32
232897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
23293ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
23303ac9fe69SWang Pengcheng  %ls = alloca %struct.large, align 4
2331ff9af4c4SNikita Popov  %1 = bitcast ptr %ls to ptr
2332ff9af4c4SNikita Popov  %a = getelementptr inbounds %struct.large, ptr %ls, i32 0, i32 0
2333ff9af4c4SNikita Popov  store i32 1, ptr %a
2334ff9af4c4SNikita Popov  %b = getelementptr inbounds %struct.large, ptr %ls, i32 0, i32 1
2335ff9af4c4SNikita Popov  store i32 2, ptr %b
2336ff9af4c4SNikita Popov  %c = getelementptr inbounds %struct.large, ptr %ls, i32 0, i32 2
2337ff9af4c4SNikita Popov  store i32 3, ptr %c
2338ff9af4c4SNikita Popov  %d = getelementptr inbounds %struct.large, ptr %ls, i32 0, i32 3
2339ff9af4c4SNikita Popov  store i32 4, ptr %d
2340ff9af4c4SNikita Popov  %2 = call i32 @callee_large_struct(ptr byval(%struct.large) align 4 %ls)
23413ac9fe69SWang Pengcheng  ret i32 %2
23423ac9fe69SWang Pengcheng}
23433ac9fe69SWang Pengcheng
23443ac9fe69SWang Pengcheng; Check return of 2x xlen structs
23453ac9fe69SWang Pengcheng
23463ac9fe69SWang Pengchengdefine %struct.small @callee_small_struct_ret() {
23473ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_small_struct_ret:
23483ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
23493ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a0, 1
23503ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 0
23513ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
23523ac9fe69SWang Pengcheng;
23533ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_small_struct_ret:
23543ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2355c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
2356c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
2357c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
2358c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
23593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
23603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2361c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
23623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
23633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a0, 1
23643ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 0
236597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
2366c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
2367c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
236897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
236997982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2370c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
237197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
23723ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
23733ac9fe69SWang Pengcheng;
23743ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_small_struct_ret:
23753ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
23763ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a0, 1
23773ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 0
23783ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
23793ac9fe69SWang Pengcheng;
23803ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_small_struct_ret:
23813ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
23823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
23833ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
23843ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
23853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
23863ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
23873ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
23883ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a0, 1
23893ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 0
239097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
23913ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
2392ff9af4c4SNikita Popov  ret %struct.small { i32 1, ptr null }
23933ac9fe69SWang Pengcheng}
23943ac9fe69SWang Pengcheng
23953ac9fe69SWang Pengchengdefine i32 @caller_small_struct_ret() {
23963ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_small_struct_ret:
23973ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
23983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -4
23993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 4
24003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 0(sp) # 4-byte Folded Spill
24013ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
24023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_small_struct_ret
24033ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a1
24043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 0(sp) # 4-byte Folded Reload
240597982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
24063ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 4
240797982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
24083ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
24093ac9fe69SWang Pengcheng;
24103ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_small_struct_ret:
24113ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
24123ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
24133ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
24143ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
24153ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
24163ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
24173ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
24183ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
24193ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
24203ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_small_struct_ret
24213ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a1
242297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
24233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
24243ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
242597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
242697982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
24273ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
242897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
24293ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
24303ac9fe69SWang Pengcheng;
24313ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_small_struct_ret:
24323ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
24333ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_0
24343ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 4
24353ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
24363ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_small_struct_ret
24373ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a1
24383ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_0
24393ac9fe69SWang Pengcheng;
24403ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_small_struct_ret:
24413ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
24423ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
24433ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
24443ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
24453ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
24463ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
24473ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
24483ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_small_struct_ret
24493ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a1
245097982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
24513ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
24523ac9fe69SWang Pengcheng  %1 = call %struct.small @callee_small_struct_ret()
24533ac9fe69SWang Pengcheng  %2 = extractvalue %struct.small %1, 0
24543ac9fe69SWang Pengcheng  %3 = extractvalue %struct.small %1, 1
2455ff9af4c4SNikita Popov  %4 = ptrtoint ptr %3 to i32
24563ac9fe69SWang Pengcheng  %5 = add i32 %2, %4
24573ac9fe69SWang Pengcheng  ret i32 %5
24583ac9fe69SWang Pengcheng}
24593ac9fe69SWang Pengcheng
24603ac9fe69SWang Pengcheng; Check return of >2x xlen scalars
24613ac9fe69SWang Pengcheng
24623ac9fe69SWang Pengchengdefine fp128 @callee_large_scalar_ret() {
24633ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_large_scalar_ret:
24643ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
24653ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lui a1, 524272
24663ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw zero, 0(a0)
24672967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 4(a0)
24682967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw zero, 8(a0)
24692967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a1, 12(a0)
24703ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
24713ac9fe69SWang Pengcheng;
24723ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_large_scalar_ret:
24733ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2474c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
2475c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
2476c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
2477c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
24783ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
24793ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2480c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
24813ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
24823ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lui a1, 524272
24833ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw zero, 0(a0)
24842967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 4(a0)
24852967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw zero, 8(a0)
24862967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a1, 12(a0)
248797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
2488c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
2489c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
249097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
249197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2492c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
249397982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
24943ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
24953ac9fe69SWang Pengcheng;
24963ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_large_scalar_ret:
24973ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
24983ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lui a1, 524272
24993ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 0(a0)
25002967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 4(a0)
25012967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw zero, 8(a0)
25022967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 12(a0)
25033ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
25043ac9fe69SWang Pengcheng;
25053ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_scalar_ret:
25063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
25073ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
25083ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
25093ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
25103ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
25113ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
25123ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
25133ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lui a1, 524272
25143ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 0(a0)
25152967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 4(a0)
25162967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw zero, 8(a0)
25172967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, 12(a0)
251897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
25193ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
25203ac9fe69SWang Pengcheng  ret fp128 0xL00000000000000007FFF000000000000
25213ac9fe69SWang Pengcheng}
25223ac9fe69SWang Pengcheng
25233ac9fe69SWang Pengchengdefine void @caller_large_scalar_ret() {
25243ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_large_scalar_ret:
25253ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
25263ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -32
25273ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 32
25283ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
25293ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
25303ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
25313ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
25323ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 32
25333ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
25343ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -16
25353ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, sp
25363ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_large_scalar_ret
25373ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -32
253897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 32
25393ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
25403ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
254197982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
254297982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
25433ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 32
254497982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
25453ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
25463ac9fe69SWang Pengcheng;
25473ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_large_scalar_ret:
25483ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
25493ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -32
25503ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 32
25513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
25523ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
25533ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
25543ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
25553ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 32
25563ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
25573ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -16
25583ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a0, sp
25593ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_large_scalar_ret
25603ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -32
256197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 32
25623ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
25633ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
256497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
256597982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
25663ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 32
256797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
25683ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
25693ac9fe69SWang Pengcheng;
25703ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalar_ret:
25713ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
25723ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
257397982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
25743ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
25753ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
257697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -24
257797982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 32
25780de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 32
25793ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
25803ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -16
25813ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, sp
25823ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_large_scalar_ret
25830de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -32
258497982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 32
25850de2b269SCraig Topper; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 24
258697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
25873ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
25883ac9fe69SWang Pengcheng;
25893ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalar_ret:
25903ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
25913ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
259297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
25933ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
25943ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
259597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -24
259697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 32
25970de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 32
25983ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
25993ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -16
26003ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a0, sp
26013ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_large_scalar_ret
26020de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -32
260397982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 32
26040de2b269SCraig Topper; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 24
260597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
26063ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
26073ac9fe69SWang Pengcheng  %1 = call fp128 @callee_large_scalar_ret()
26083ac9fe69SWang Pengcheng  ret void
26093ac9fe69SWang Pengcheng}
26103ac9fe69SWang Pengcheng
26113ac9fe69SWang Pengcheng; Check return of >2x xlen structs
26123ac9fe69SWang Pengcheng
2613ff9af4c4SNikita Popovdefine void @callee_large_struct_ret(ptr noalias sret(%struct.large) %agg.result) {
26143ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: callee_large_struct_ret:
26153ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
26163ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    li a1, 1
26172967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a2, 2
26182967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a3, 3
26192967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    li a4, 4
26203ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw a1, 0(a0)
26212967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a2, 4(a0)
26222967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a3, 8(a0)
26232967e5f8SAlex Bradbury; ILP32E-FPELIM-NEXT:    sw a4, 12(a0)
26243ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
26253ac9fe69SWang Pengcheng;
26263ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: callee_large_struct_ret:
26273ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
2628c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, -8
2629c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 8
2630c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw ra, 4(sp) # 4-byte Folded Spill
2631c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    sw s0, 0(sp) # 4-byte Folded Spill
26323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
26333ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
2634c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi s0, sp, 8
26353ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
26363ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    li a1, 1
26372967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a2, 2
26382967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a3, 3
26392967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    li a4, 4
26403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw a1, 0(a0)
26412967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a2, 4(a0)
26422967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a3, 8(a0)
26432967e5f8SAlex Bradbury; ILP32E-WITHFP-NEXT:    sw a4, 12(a0)
264497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 8
2645c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw ra, 4(sp) # 4-byte Folded Reload
2646c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    lw s0, 0(sp) # 4-byte Folded Reload
264797982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
264897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
2649c08b90c5SCraig Topper; ILP32E-WITHFP-NEXT:    addi sp, sp, 8
265097982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
26513ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
26523ac9fe69SWang Pengcheng;
26533ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: callee_large_struct_ret:
26543ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
26553ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a1, 1
26562967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a2, 2
26572967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a3, 3
26582967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    li a4, 4
26593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a1, 0(a0)
26602967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a2, 4(a0)
26612967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a3, 8(a0)
26622967e5f8SAlex Bradbury; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    sw a4, 12(a0)
26633ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    ret
26643ac9fe69SWang Pengcheng;
26653ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: callee_large_struct_ret:
26663ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
26673ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
26683ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
26693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
26703ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
26713ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 8
26723ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
26733ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a1, 1
26742967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a2, 2
26752967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a3, 3
26762967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    li a4, 4
26773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a1, 0(a0)
26782967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a2, 4(a0)
26792967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a3, 8(a0)
26802967e5f8SAlex Bradbury; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    sw a4, 12(a0)
268197982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 8
26823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
2683ff9af4c4SNikita Popov  %a = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 0
2684ff9af4c4SNikita Popov  store i32 1, ptr %a, align 4
2685ff9af4c4SNikita Popov  %b = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 1
2686ff9af4c4SNikita Popov  store i32 2, ptr %b, align 4
2687ff9af4c4SNikita Popov  %c = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 2
2688ff9af4c4SNikita Popov  store i32 3, ptr %c, align 4
2689ff9af4c4SNikita Popov  %d = getelementptr inbounds %struct.large, ptr %agg.result, i32 0, i32 3
2690ff9af4c4SNikita Popov  store i32 4, ptr %d, align 4
26913ac9fe69SWang Pengcheng  ret void
26923ac9fe69SWang Pengcheng}
26933ac9fe69SWang Pengcheng
26943ac9fe69SWang Pengchengdefine i32 @caller_large_struct_ret() {
26953ac9fe69SWang Pengcheng; ILP32E-FPELIM-LABEL: caller_large_struct_ret:
26963ac9fe69SWang Pengcheng; ILP32E-FPELIM:       # %bb.0:
26973ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, -24
26983ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 24
26993ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw ra, 20(sp) # 4-byte Folded Spill
27003ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    sw s0, 16(sp) # 4-byte Folded Spill
27013ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset ra, -4
27023ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_offset s0, -8
27033ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi s0, sp, 24
27043ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    .cfi_def_cfa s0, 0
27053ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    andi sp, sp, -8
27063ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    mv a0, sp
27073ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    call callee_large_struct_ret
27083ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a0, 0(sp)
27093ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw a1, 12(sp)
27103ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    add a0, a0, a1
27113ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, s0, -24
271297982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa sp, 24
27133ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw ra, 20(sp) # 4-byte Folded Reload
27143ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    lw s0, 16(sp) # 4-byte Folded Reload
271597982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore ra
271697982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_restore s0
27173ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    addi sp, sp, 24
271897982a8cSdlav-sc; ILP32E-FPELIM-NEXT:    .cfi_def_cfa_offset 0
27193ac9fe69SWang Pengcheng; ILP32E-FPELIM-NEXT:    ret
27203ac9fe69SWang Pengcheng;
27213ac9fe69SWang Pengcheng; ILP32E-WITHFP-LABEL: caller_large_struct_ret:
27223ac9fe69SWang Pengcheng; ILP32E-WITHFP:       # %bb.0:
27233ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, -24
27243ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 24
27253ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw ra, 20(sp) # 4-byte Folded Spill
27263ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    sw s0, 16(sp) # 4-byte Folded Spill
27273ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset ra, -4
27283ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_offset s0, -8
27293ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi s0, sp, 24
27303ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    .cfi_def_cfa s0, 0
27313ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    andi sp, sp, -8
27323ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    mv a0, sp
27333ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    call callee_large_struct_ret
27343ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a0, 0(sp)
27353ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw a1, 12(sp)
27363ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    add a0, a0, a1
27373ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, s0, -24
273897982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa sp, 24
27393ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw ra, 20(sp) # 4-byte Folded Reload
27403ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    lw s0, 16(sp) # 4-byte Folded Reload
274197982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore ra
274297982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_restore s0
27433ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    addi sp, sp, 24
274497982a8cSdlav-sc; ILP32E-WITHFP-NEXT:    .cfi_def_cfa_offset 0
27453ac9fe69SWang Pengcheng; ILP32E-WITHFP-NEXT:    ret
27463ac9fe69SWang Pengcheng;
27473ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct_ret:
27483ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE:       # %bb.0:
27493ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
275097982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
27513ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
27523ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
275397982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, -16
275497982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 24
27553ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi s0, sp, 24
27563ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
27573ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    andi sp, sp, -8
27583ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    mv a0, sp
27593ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    call callee_large_struct_ret
27603ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a0, 0(sp)
27613ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    lw a1, 12(sp)
27623ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    add a0, a0, a1
27633ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, s0, -24
276497982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 24
27653ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    addi sp, sp, 16
276697982a8cSdlav-sc; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
27673ac9fe69SWang Pengcheng; ILP32E-FPELIM-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
27683ac9fe69SWang Pengcheng;
27693ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct_ret:
27703ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE:       # %bb.0:
27713ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call t0, __riscv_save_1
277297982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
27733ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset ra, -4
27743ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_offset s0, -8
277597982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, -16
277697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 24
27773ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi s0, sp, 24
27783ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa s0, 0
27793ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    andi sp, sp, -8
27803ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    mv a0, sp
27813ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    call callee_large_struct_ret
27823ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a0, 0(sp)
27833ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    lw a1, 12(sp)
27843ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    add a0, a0, a1
27853ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, s0, -24
278697982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa sp, 24
27873ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    addi sp, sp, 16
278897982a8cSdlav-sc; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    .cfi_def_cfa_offset 8
27893ac9fe69SWang Pengcheng; ILP32E-WITHFP-SAVE-RESTORE-NEXT:    tail __riscv_restore_1
27903ac9fe69SWang Pengcheng  %1 = alloca %struct.large
2791ff9af4c4SNikita Popov  call void @callee_large_struct_ret(ptr sret(%struct.large) %1)
2792ff9af4c4SNikita Popov  %2 = getelementptr inbounds %struct.large, ptr %1, i32 0, i32 0
2793ff9af4c4SNikita Popov  %3 = load i32, ptr %2
2794ff9af4c4SNikita Popov  %4 = getelementptr inbounds %struct.large, ptr %1, i32 0, i32 3
2795ff9af4c4SNikita Popov  %5 = load i32, ptr %4
27963ac9fe69SWang Pengcheng  %6 = add i32 %3, %5
27973ac9fe69SWang Pengcheng  ret i32 %6
27983ac9fe69SWang Pengcheng}
2799