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