32 changes: 8 additions & 24 deletions llvm/test/CodeGen/RISCV/callee-saved-gprs.ll
Original file line number Diff line number Diff line change
Expand Up @@ -432,8 +432,7 @@ define void @callee() nounwind {
; RV32IZCMP-NEXT: sw a0, %lo(var+4)(t0)
; RV32IZCMP-NEXT: lw a0, 28(sp) # 4-byte Folded Reload
; RV32IZCMP-NEXT: sw a0, %lo(var)(t0)
; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 96
; RV32IZCMP-NEXT: ret
; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 96
;
; RV32IZCMP-WITH-FP-LABEL: callee:
; RV32IZCMP-WITH-FP: # %bb.0:
Expand Down Expand Up @@ -942,8 +941,7 @@ define void @callee() nounwind {
; RV64IZCMP-NEXT: sw a0, %lo(var+4)(t0)
; RV64IZCMP-NEXT: ld a0, 40(sp) # 8-byte Folded Reload
; RV64IZCMP-NEXT: sw a0, %lo(var)(t0)
; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 160
; RV64IZCMP-NEXT: ret
; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 160
;
; RV64IZCMP-WITH-FP-LABEL: callee:
; RV64IZCMP-WITH-FP: # %bb.0:
Expand Down Expand Up @@ -1613,8 +1611,7 @@ define void @caller() nounwind {
; RV32IZCMP-NEXT: lw a0, 92(sp) # 4-byte Folded Reload
; RV32IZCMP-NEXT: sw a0, %lo(var)(s0)
; RV32IZCMP-NEXT: addi sp, sp, 48
; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 112
; RV32IZCMP-NEXT: ret
; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 112
;
; RV32IZCMP-WITH-FP-LABEL: caller:
; RV32IZCMP-WITH-FP: # %bb.0:
Expand Down Expand Up @@ -2309,8 +2306,7 @@ define void @caller() nounwind {
; RV64IZCMP-NEXT: ld a0, 168(sp) # 8-byte Folded Reload
; RV64IZCMP-NEXT: sw a0, %lo(var)(s0)
; RV64IZCMP-NEXT: addi sp, sp, 128
; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 160
; RV64IZCMP-NEXT: ret
; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 160
;
; RV64IZCMP-WITH-FP-LABEL: caller:
; RV64IZCMP-WITH-FP: # %bb.0:
Expand Down Expand Up @@ -2522,10 +2518,7 @@ define void @foo() {
; RV32IZCMP-NEXT: #APP
; RV32IZCMP-NEXT: li s4, 0
; RV32IZCMP-NEXT: #NO_APP
; RV32IZCMP-NEXT: cm.pop {ra, s0-s4}, 32
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV32IZCMP-NEXT: .cfi_restore s4
; RV32IZCMP-NEXT: ret
; RV32IZCMP-NEXT: cm.popret {ra, s0-s4}, 32
;
; RV32IZCMP-WITH-FP-LABEL: foo:
; RV32IZCMP-WITH-FP: # %bb.0: # %entry
Expand Down Expand Up @@ -2609,10 +2602,7 @@ define void @foo() {
; RV64IZCMP-NEXT: #APP
; RV64IZCMP-NEXT: li s4, 0
; RV64IZCMP-NEXT: #NO_APP
; RV64IZCMP-NEXT: cm.pop {ra, s0-s4}, 48
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV64IZCMP-NEXT: .cfi_restore s4
; RV64IZCMP-NEXT: ret
; RV64IZCMP-NEXT: cm.popret {ra, s0-s4}, 48
;
; RV64IZCMP-WITH-FP-LABEL: foo:
; RV64IZCMP-WITH-FP: # %bb.0: # %entry
Expand Down Expand Up @@ -2702,10 +2692,7 @@ define void @bar() {
; RV32IZCMP-NEXT: #APP
; RV32IZCMP-NEXT: li s11, 0
; RV32IZCMP-NEXT: #NO_APP
; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 64
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV32IZCMP-NEXT: .cfi_restore s11
; RV32IZCMP-NEXT: ret
; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 64
;
; RV32IZCMP-WITH-FP-LABEL: bar:
; RV32IZCMP-WITH-FP: # %bb.0: # %entry
Expand Down Expand Up @@ -2789,10 +2776,7 @@ define void @bar() {
; RV64IZCMP-NEXT: #APP
; RV64IZCMP-NEXT: li s11, 0
; RV64IZCMP-NEXT: #NO_APP
; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 112
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV64IZCMP-NEXT: .cfi_restore s11
; RV64IZCMP-NEXT: ret
; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 112
;
; RV64IZCMP-WITH-FP-LABEL: bar:
; RV64IZCMP-WITH-FP: # %bb.0: # %entry
Expand Down
84 changes: 51 additions & 33 deletions llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll
Original file line number Diff line number Diff line change
Expand Up @@ -272,9 +272,10 @@ define i32 @caller_float_on_stack() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_float_on_stack:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -12
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: lui a1, 264704
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a3, 4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1
Expand All @@ -294,10 +295,11 @@ define i32 @caller_float_on_stack() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_float_on_stack:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -12
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 20
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -12
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 20
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 20
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: lui a1, 264704
Expand Down Expand Up @@ -802,10 +804,11 @@ define void @caller_aligned_stack() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_aligned_stack:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -856,10 +859,11 @@ define void @caller_aligned_stack() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_aligned_stack:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -1323,9 +1327,10 @@ define i32 @caller_many_scalars() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_many_scalars:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 20
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a4, 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a6, 7
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a7, 6
Expand All @@ -1347,10 +1352,11 @@ define i32 @caller_many_scalars() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_many_scalars:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a4, 8
Expand Down Expand Up @@ -1557,10 +1563,11 @@ define i32 @caller_large_scalars() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -40
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -40
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 48
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand All @@ -1586,10 +1593,11 @@ define i32 @caller_large_scalars() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -40
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -40
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 48
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 48
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -1831,10 +1839,11 @@ define i32 @caller_large_scalars_exhausted_regs() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 64
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -1872,10 +1881,11 @@ define i32 @caller_large_scalars_exhausted_regs() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalars_exhausted_regs:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -56
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 64
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -1973,10 +1983,11 @@ define i32 @caller_mixed_scalar_libcalls(i64 %a) {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -8
Expand All @@ -1994,10 +2005,11 @@ define i32 @caller_mixed_scalar_libcalls(i64 %a) {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_mixed_scalar_libcalls:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -8
Expand Down Expand Up @@ -2265,9 +2277,10 @@ define i32 @caller_large_struct() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -32
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 36
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a0, 1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a1, 2
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: li a2, 3
Expand All @@ -2289,10 +2302,11 @@ define i32 @caller_large_struct() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -32
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 40
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -32
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 40
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 40
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: li a0, 1
Expand Down Expand Up @@ -2556,10 +2570,11 @@ define void @caller_large_scalar_ret() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_scalar_ret:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 32
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand All @@ -2574,10 +2589,11 @@ define void @caller_large_scalar_ret() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_scalar_ret:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 32
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 32
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -16
Expand Down Expand Up @@ -2731,10 +2747,11 @@ define i32 @caller_large_struct_ret() {
; ILP32E-FPELIM-SAVE-RESTORE-LABEL: caller_large_struct_ret:
; ILP32E-FPELIM-SAVE-RESTORE: # %bb.0:
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: addi s0, sp, 24
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-FPELIM-SAVE-RESTORE-NEXT: andi sp, sp, -8
Expand All @@ -2752,10 +2769,11 @@ define i32 @caller_large_struct_ret() {
; ILP32E-WITHFP-SAVE-RESTORE-LABEL: caller_large_struct_ret:
; ILP32E-WITHFP-SAVE-RESTORE: # %bb.0:
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: call t0, __riscv_save_1
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset ra, -4
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_offset s0, -8
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi sp, sp, -16
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa_offset 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: addi s0, sp, 24
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: .cfi_def_cfa s0, 0
; ILP32E-WITHFP-SAVE-RESTORE-NEXT: andi sp, sp, -8
Expand Down
12 changes: 4 additions & 8 deletions llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,7 @@ define i32 @zcmp_mv(i32 %num, i32 %f) nounwind {
; CHECK32ZCMP-NEXT: cm.mva01s s1, s0
; CHECK32ZCMP-NEXT: call func
; CHECK32ZCMP-NEXT: add a0, s2, s0
; CHECK32ZCMP-NEXT: cm.pop {ra, s0-s2}, 16
; CHECK32ZCMP-NEXT: ret
; CHECK32ZCMP-NEXT: cm.popret {ra, s0-s2}, 16
;
; CHECK64I-LABEL: zcmp_mv:
; CHECK64I: # %bb.0:
Expand Down Expand Up @@ -77,8 +76,7 @@ define i32 @zcmp_mv(i32 %num, i32 %f) nounwind {
; CHECK64ZCMP-NEXT: cm.mva01s s1, s0
; CHECK64ZCMP-NEXT: call func
; CHECK64ZCMP-NEXT: addw a0, s2, s0
; CHECK64ZCMP-NEXT: cm.pop {ra, s0-s2}, 32
; CHECK64ZCMP-NEXT: ret
; CHECK64ZCMP-NEXT: cm.popret {ra, s0-s2}, 32
%call = call i32 @func(i32 %num, i32 %f)
%call1 = call i32 @func(i32 %num, i32 %f)
%res = add i32 %call, %f
Expand Down Expand Up @@ -121,8 +119,7 @@ define i32 @not_zcmp_mv(i32 %num, i32 %f) nounwind {
; CHECK32ZCMP-NEXT: li a0, 1
; CHECK32ZCMP-NEXT: mv a1, s0
; CHECK32ZCMP-NEXT: call func
; CHECK32ZCMP-NEXT: cm.pop {ra, s0-s1}, 16
; CHECK32ZCMP-NEXT: ret
; CHECK32ZCMP-NEXT: cm.popret {ra, s0-s1}, 16
;
; CHECK64I-LABEL: not_zcmp_mv:
; CHECK64I: # %bb.0:
Expand Down Expand Up @@ -159,8 +156,7 @@ define i32 @not_zcmp_mv(i32 %num, i32 %f) nounwind {
; CHECK64ZCMP-NEXT: li a0, 1
; CHECK64ZCMP-NEXT: mv a1, s0
; CHECK64ZCMP-NEXT: call func
; CHECK64ZCMP-NEXT: cm.pop {ra, s0-s1}, 32
; CHECK64ZCMP-NEXT: ret
; CHECK64ZCMP-NEXT: cm.popret {ra, s0-s1}, 32
%call = call i32 @foo(i32 %num)
%call1 = call i32 @foo(i32 %f)
%tmp = call i32 @foo(i32 %call)
Expand Down
2 changes: 0 additions & 2 deletions llvm/test/CodeGen/RISCV/inline-asm-d-constraint-f.ll
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,13 @@ define double @constraint_f_double_abi_name(double %a) nounwind {
define double @constraint_gpr(double %x) {
; RV32F-LABEL: constraint_gpr:
; RV32F: # %bb.0:
; RV32F-NEXT: .cfi_def_cfa_offset 0
; RV32F-NEXT: #APP
; RV32F-NEXT: mv a0, a0
; RV32F-NEXT: #NO_APP
; RV32F-NEXT: ret
;
; RV64F-LABEL: constraint_gpr:
; RV64F: # %bb.0:
; RV64F-NEXT: .cfi_def_cfa_offset 0
; RV64F-NEXT: #APP
; RV64F-NEXT: mv a0, a0
; RV64F-NEXT: #NO_APP
Expand Down
2 changes: 0 additions & 2 deletions llvm/test/CodeGen/RISCV/inline-asm-f-constraint-f.ll
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,13 @@ define float @constraint_f_float_abi_name(float %a) nounwind {
define float @constraint_gpr(float %x) {
; RV32F-LABEL: constraint_gpr:
; RV32F: # %bb.0:
; RV32F-NEXT: .cfi_def_cfa_offset 0
; RV32F-NEXT: #APP
; RV32F-NEXT: mv a0, a0
; RV32F-NEXT: #NO_APP
; RV32F-NEXT: ret
;
; RV64F-LABEL: constraint_gpr:
; RV64F: # %bb.0:
; RV64F-NEXT: .cfi_def_cfa_offset 0
; RV64F-NEXT: #APP
; RV64F-NEXT: mv a0, a0
; RV64F-NEXT: #NO_APP
Expand Down
5 changes: 0 additions & 5 deletions llvm/test/CodeGen/RISCV/inline-asm-mem-constraint.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3365,7 +3365,6 @@ label:
define void @should_not_fold() {
; RV32I-LABEL: should_not_fold:
; RV32I: # %bb.0: # %start
; RV32I-NEXT: .cfi_def_cfa_offset 0
; RV32I-NEXT: lui a0, %hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV32I-NEXT: addi a0, a0, %lo(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV32I-NEXT: #APP
Expand All @@ -3375,7 +3374,6 @@ define void @should_not_fold() {
;
; RV64I-LABEL: should_not_fold:
; RV64I: # %bb.0: # %start
; RV64I-NEXT: .cfi_def_cfa_offset 0
; RV64I-NEXT: lui a0, %hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV64I-NEXT: addi a0, a0, %lo(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV64I-NEXT: #APP
Expand All @@ -3385,7 +3383,6 @@ define void @should_not_fold() {
;
; RV32I-MEDIUM-LABEL: should_not_fold:
; RV32I-MEDIUM: # %bb.0: # %start
; RV32I-MEDIUM-NEXT: .cfi_def_cfa_offset 0
; RV32I-MEDIUM-NEXT: .Lpcrel_hi37:
; RV32I-MEDIUM-NEXT: auipc a0, %pcrel_hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV32I-MEDIUM-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi37)
Expand All @@ -3396,7 +3393,6 @@ define void @should_not_fold() {
;
; RV64I-MEDIUM-LABEL: should_not_fold:
; RV64I-MEDIUM: # %bb.0: # %start
; RV64I-MEDIUM-NEXT: .cfi_def_cfa_offset 0
; RV64I-MEDIUM-NEXT: .Lpcrel_hi37:
; RV64I-MEDIUM-NEXT: auipc a0, %pcrel_hi(_ZN5repro9MY_BUFFER17hb0f674501d5980a6E)
; RV64I-MEDIUM-NEXT: addi a0, a0, %pcrel_lo(.Lpcrel_hi37)
Expand All @@ -3407,7 +3403,6 @@ define void @should_not_fold() {
;
; RV64I-LARGE-LABEL: should_not_fold:
; RV64I-LARGE: # %bb.0: # %start
; RV64I-LARGE-NEXT: .cfi_def_cfa_offset 0
; RV64I-LARGE-NEXT: .Lpcrel_hi37:
; RV64I-LARGE-NEXT: auipc a0, %pcrel_hi(.LCPI45_0)
; RV64I-LARGE-NEXT: ld a0, %pcrel_lo(.Lpcrel_hi37)(a0)
Expand Down
4 changes: 0 additions & 4 deletions llvm/test/CodeGen/RISCV/inline-asm-zfh-constraint-f.ll
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ define half @constraint_f_half_abi_name(half %a) nounwind {
define half @constraint_gpr(half %x) {
; RV32ZFH-LABEL: constraint_gpr:
; RV32ZFH: # %bb.0:
; RV32ZFH-NEXT: .cfi_def_cfa_offset 0
; RV32ZFH-NEXT: fmv.x.h a0, fa0
; RV32ZFH-NEXT: #APP
; RV32ZFH-NEXT: mv a0, a0
Expand All @@ -125,7 +124,6 @@ define half @constraint_gpr(half %x) {
;
; RV64ZFH-LABEL: constraint_gpr:
; RV64ZFH: # %bb.0:
; RV64ZFH-NEXT: .cfi_def_cfa_offset 0
; RV64ZFH-NEXT: fmv.x.h a0, fa0
; RV64ZFH-NEXT: #APP
; RV64ZFH-NEXT: mv a0, a0
Expand All @@ -135,7 +133,6 @@ define half @constraint_gpr(half %x) {
;
; RV32DZFH-LABEL: constraint_gpr:
; RV32DZFH: # %bb.0:
; RV32DZFH-NEXT: .cfi_def_cfa_offset 0
; RV32DZFH-NEXT: fmv.x.h a0, fa0
; RV32DZFH-NEXT: #APP
; RV32DZFH-NEXT: mv a0, a0
Expand All @@ -145,7 +142,6 @@ define half @constraint_gpr(half %x) {
;
; RV64DZFH-LABEL: constraint_gpr:
; RV64DZFH: # %bb.0:
; RV64DZFH-NEXT: .cfi_def_cfa_offset 0
; RV64DZFH-NEXT: fmv.x.h a0, fa0
; RV64DZFH-NEXT: #APP
; RV64DZFH-NEXT: mv a0, a0
Expand Down
52 changes: 23 additions & 29 deletions llvm/test/CodeGen/RISCV/push-pop-opt-crash.ll
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc -mattr=+zcmp -verify-machineinstrs \
; RUN: -mtriple=riscv32 -target-abi=ilp32 < %s \
; RUN: | FileCheck %s -check-prefixes=RV32IZCMP
Expand All @@ -13,36 +14,29 @@ declare dso_local void @f1() local_unnamed_addr
declare dso_local void @f2() local_unnamed_addr
define dso_local void @f0() local_unnamed_addr {
; RV32IZCMP-LABEL: f0:
; RV32IZCMP: .cfi_startproc
; RV32IZCMP-NEXT: # %bb.0: # %entry
; RV32IZCMP-NEXT: bnez zero, .LBB0_2
; RV32IZCMP-NEXT: # %bb.1: # %if.T
; RV32IZCMP-NEXT: cm.push {ra}, -16
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV32IZCMP-NEXT: .cfi_offset ra, -4
; RV32IZCMP-NEXT: call f1
; RV32IZCMP-NEXT: cm.pop {ra}, 16
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV32IZCMP-NEXT: .cfi_restore ra
; RV32IZCMP-NEXT: .LBB0_2: # %if.F
; RV32IZCMP-NEXT: tail f2
; RV32IZCMP-NEXT: .Lfunc_end0:

; RV32IZCMP: # %bb.0: # %entry
; RV32IZCMP-NEXT: bnez zero, .LBB0_2
; RV32IZCMP-NEXT: # %bb.1: # %if.T
; RV32IZCMP-NEXT: cm.push {ra}, -16
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV32IZCMP-NEXT: .cfi_offset ra, -4
; RV32IZCMP-NEXT: call f1
; RV32IZCMP-NEXT: cm.pop {ra}, 16
; RV32IZCMP-NEXT: .LBB0_2: # %if.F
; RV32IZCMP-NEXT: tail f2
;
; RV64IZCMP-LABEL: f0:
; RV64IZCMP: .cfi_startproc
; RV64IZCMP-NEXT: # %bb.0: # %entry
; RV64IZCMP-NEXT: bnez zero, .LBB0_2
; RV64IZCMP-NEXT: # %bb.1: # %if.T
; RV64IZCMP-NEXT: cm.push {ra}, -16
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV64IZCMP-NEXT: .cfi_offset ra, -8
; RV64IZCMP-NEXT: call f1
; RV64IZCMP-NEXT: cm.pop {ra}, 16
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV64IZCMP-NEXT: .cfi_restore ra
; RV64IZCMP-NEXT: .LBB0_2: # %if.F
; RV64IZCMP-NEXT: tail f2
; RV64IZCMP-NEXT: .Lfunc_end0:
; RV64IZCMP: # %bb.0: # %entry
; RV64IZCMP-NEXT: bnez zero, .LBB0_2
; RV64IZCMP-NEXT: # %bb.1: # %if.T
; RV64IZCMP-NEXT: cm.push {ra}, -16
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV64IZCMP-NEXT: .cfi_offset ra, -8
; RV64IZCMP-NEXT: call f1
; RV64IZCMP-NEXT: cm.pop {ra}, 16
; RV64IZCMP-NEXT: .LBB0_2: # %if.F
; RV64IZCMP-NEXT: tail f2

entry:
br i1 poison, label %if.T, label %if.F

Expand Down
252 changes: 60 additions & 192 deletions llvm/test/CodeGen/RISCV/push-pop-popret.ll

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion llvm/test/CodeGen/RISCV/rv64-patchpoint.ll
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ entry:
define void @small_patchpoint_codegen(i64 %p1, i64 %p2, i64 %p3, i64 %p4) {
; CHECK-LABEL: small_patchpoint_codegen:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: .cfi_def_cfa_offset 0
; CHECK-NEXT: .Ltmp2:
; CHECK-NEXT: nop
; CHECK-NEXT: nop
Expand Down
1 change: 0 additions & 1 deletion llvm/test/CodeGen/RISCV/rv64-stackmap-nops.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
define void @test_shadow_optimization() {
; CHECK-LABEL: test_shadow_optimization:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: .cfi_def_cfa_offset 0
; CHECK-NEXT: .Ltmp0:
; CHECK-NEXT: nop
; CHECK-NEXT: nop
Expand Down
14 changes: 8 additions & 6 deletions llvm/test/CodeGen/RISCV/rvv-cfi-info.ll
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,11 @@ define riscv_vector_cc <vscale x 1 x i32> @test_vector_callee_cfi(<vscale x 1 x
; OMIT-FP-NEXT: .cfi_def_cfa sp, 16
; OMIT-FP-NEXT: .cfi_restore v1
; OMIT-FP-NEXT: .cfi_restore v2
; OMIT-FP-NEXT: .cfi_restore v3
; OMIT-FP-NEXT: .cfi_restore v4
; OMIT-FP-NEXT: .cfi_restore v1
; OMIT-FP-NEXT: .cfi_restore v2
; OMIT-FP-NEXT: .cfi_restore v4
; OMIT-FP-NEXT: .cfi_restore v5
; OMIT-FP-NEXT: .cfi_restore v6
; OMIT-FP-NEXT: .cfi_restore v7
; OMIT-FP-NEXT: addi sp, sp, 16
; OMIT-FP-NEXT: .cfi_def_cfa_offset 0
; OMIT-FP-NEXT: ret
Expand Down Expand Up @@ -121,16 +122,17 @@ define riscv_vector_cc <vscale x 1 x i32> @test_vector_callee_cfi(<vscale x 1 x
; NO-OMIT-FP-NEXT: vl4r.v v4, (a0) # Unknown-size Folded Reload
; NO-OMIT-FP-NEXT: .cfi_restore v1
; NO-OMIT-FP-NEXT: .cfi_restore v2
; NO-OMIT-FP-NEXT: .cfi_restore v3
; NO-OMIT-FP-NEXT: .cfi_restore v4
; NO-OMIT-FP-NEXT: .cfi_restore v5
; NO-OMIT-FP-NEXT: .cfi_restore v6
; NO-OMIT-FP-NEXT: .cfi_restore v7
; NO-OMIT-FP-NEXT: addi sp, s0, -32
; NO-OMIT-FP-NEXT: .cfi_def_cfa sp, 32
; NO-OMIT-FP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
; NO-OMIT-FP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
; NO-OMIT-FP-NEXT: .cfi_restore ra
; NO-OMIT-FP-NEXT: .cfi_restore s0
; NO-OMIT-FP-NEXT: .cfi_restore v1
; NO-OMIT-FP-NEXT: .cfi_restore v2
; NO-OMIT-FP-NEXT: .cfi_restore v4
; NO-OMIT-FP-NEXT: addi sp, sp, 32
; NO-OMIT-FP-NEXT: .cfi_def_cfa_offset 0
; NO-OMIT-FP-NEXT: ret
Expand Down
1 change: 0 additions & 1 deletion llvm/test/CodeGen/RISCV/rvv/get-vlen-debugloc.mir
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ body: |
; CHECK: bb.0:
; CHECK-NEXT: successors: %bb.1(0x80000000)
; CHECK-NEXT: {{ $}}
; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 0
; CHECK-NEXT: $x10 = frame-setup PseudoReadVLENB
; CHECK-NEXT: $x10 = frame-setup SLLI killed $x10, 1
; CHECK-NEXT: $x2 = frame-setup SUB $x2, killed $x10
Expand Down
12 changes: 4 additions & 8 deletions llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ define ptr @func(ptr %s, i32 %_c, ptr %incdec.ptr, i1 %0, i8 %conv14) #0 {
; RV32-LABEL: func:
; RV32: # %bb.0: # %entry
; RV32-NEXT: cm.push {ra, s0-s1}, -16
; RV32-NEXT: addi sp, sp, -8
; RV32-NEXT: .cfi_def_cfa_offset 24
; RV32-NEXT: .cfi_def_cfa_offset 16
; RV32-NEXT: .cfi_offset ra, -12
; RV32-NEXT: .cfi_offset s0, -8
; RV32-NEXT: .cfi_offset s1, -4
; RV32-NEXT: addi sp, sp, -8
; RV32-NEXT: .cfi_def_cfa_offset 24
; RV32-NEXT: sw a4, 4(sp) # 4-byte Folded Spill
; RV32-NEXT: sw a2, 0(sp) # 4-byte Folded Spill
; RV32-NEXT: mv a2, a1
Expand All @@ -34,12 +35,7 @@ define ptr @func(ptr %s, i32 %_c, ptr %incdec.ptr, i1 %0, i8 %conv14) #0 {
; RV32-NEXT: mv a0, s1
; RV32-NEXT: addi sp, sp, 8
; RV32-NEXT: .cfi_def_cfa_offset 16
; RV32-NEXT: cm.pop {ra, s0-s1}, 16
; RV32-NEXT: .cfi_def_cfa_offset 0
; RV32-NEXT: .cfi_restore ra
; RV32-NEXT: .cfi_restore s0
; RV32-NEXT: .cfi_restore s1
; RV32-NEXT: ret
; RV32-NEXT: cm.popret {ra, s0-s1}, 16
entry:
br label %while.body

Expand Down
26 changes: 4 additions & 22 deletions llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,7 @@ body: |
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -4
; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP32-NEXT: PseudoRET
; CHECK-ZCMP32-NEXT: CM_POPRET 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
;
; CHECK-LIBCALL32-LABEL: name: popret_rvlist5
; CHECK-LIBCALL32: liveins: $x1, $x8
Expand All @@ -51,11 +47,7 @@ body: |
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP64-NEXT: PseudoRET
; CHECK-ZCMP64-NEXT: CM_POPRET 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
;
; CHECK-LIBCALL64-LABEL: name: popret_rvlist5
; CHECK-LIBCALL64: liveins: $x1, $x8
Expand Down Expand Up @@ -123,12 +115,7 @@ body: |
; CHECK-ZCMP32-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -4
; CHECK-ZCMP32-NEXT: $x1 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: $x8 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: $x10 = ADDI $x0, 0
; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP32-NEXT: PseudoRET implicit $x10
; CHECK-ZCMP32-NEXT: CM_POPRETZ 5, 0, implicit-def $x2, implicit-def $x10, implicit $x2, implicit-def $x1, implicit-def $x8
;
; CHECK-LIBCALL32-LABEL: name: popretz_rvlist5
; CHECK-LIBCALL32: liveins: $x1, $x8
Expand All @@ -151,12 +138,7 @@ body: |
; CHECK-ZCMP64-NEXT: frame-setup CFI_INSTRUCTION offset $x8, -8
; CHECK-ZCMP64-NEXT: $x1 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: $x8 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: $x10 = ADDI $x0, 0
; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 5, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP64-NEXT: PseudoRET implicit $x10
; CHECK-ZCMP64-NEXT: CM_POPRETZ 5, 0, implicit-def $x2, implicit-def $x10, implicit $x2, implicit-def $x1, implicit-def $x8
;
; CHECK-LIBCALL64-LABEL: name: popretz_rvlist5
; CHECK-LIBCALL64: liveins: $x1, $x8
Expand Down
28 changes: 0 additions & 28 deletions llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,6 @@ body: |
; CHECK-ZCMP32-NEXT: $x26 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: $x27 = IMPLICIT_DEF
; CHECK-ZCMP32-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x9
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x18
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x19
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x20
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x21
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x22
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x23
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x24
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x25
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x26
; CHECK-ZCMP32-NEXT: frame-destroy CFI_INSTRUCTION restore $x27
; CHECK-ZCMP32-NEXT: PseudoRET
;
; CHECK-LIBCALL32-LABEL: name: push_rvlist15
Expand Down Expand Up @@ -129,20 +115,6 @@ body: |
; CHECK-ZCMP64-NEXT: $x26 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: $x27 = IMPLICIT_DEF
; CHECK-ZCMP64-NEXT: frame-destroy CM_POP 15, 0, implicit-def $x2, implicit $x2, implicit-def $x1, implicit-def $x8, implicit-def $x9, implicit-def $x18, implicit-def $x19, implicit-def $x20, implicit-def $x21, implicit-def $x22, implicit-def $x23, implicit-def $x24, implicit-def $x25, implicit-def $x26, implicit-def $x27
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x1
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x8
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x9
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x18
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x19
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x20
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x21
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x22
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x23
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x24
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x25
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x26
; CHECK-ZCMP64-NEXT: frame-destroy CFI_INSTRUCTION restore $x27
; CHECK-ZCMP64-NEXT: PseudoRET
;
; CHECK-LIBCALL64-LABEL: name: push_rvlist15
Expand Down
26 changes: 10 additions & 16 deletions llvm/test/CodeGen/RISCV/zcmp-with-float.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,35 +10,29 @@ define float @foo(float %arg) {
; RV32: # %bb.0: # %entry
; RV32-NEXT: cm.push {ra}, -32
; RV32-NEXT: .cfi_def_cfa_offset 32
; RV32-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV32-NEXT: .cfi_offset ra, -4
; RV32-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV32-NEXT: .cfi_offset fs0, -20
; RV32-NEXT: fmv.s fs0, fa0
; RV32-NEXT: call callee
; RV32-NEXT: fmv.s fa0, fs0
; RV32-NEXT: flw fs0, 12(sp) # 4-byte Folded Reload
; RV32-NEXT: cm.pop {ra}, 32
; RV32-NEXT: .cfi_def_cfa_offset 0
; RV32-NEXT: .cfi_restore ra
; RV32-NEXT: .cfi_restore fs0
; RV32-NEXT: ret
; RV32-NEXT: cm.popret {ra}, 32
;
; RV64-LABEL: foo:
; RV64: # %bb.0: # %entry
; RV64-NEXT: cm.push {ra}, -32
; RV64-NEXT: .cfi_def_cfa_offset 32
; RV64-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV64-NEXT: .cfi_offset ra, -8
; RV64-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV64-NEXT: .cfi_offset fs0, -20
; RV64-NEXT: fmv.s fs0, fa0
; RV64-NEXT: call callee
; RV64-NEXT: fmv.s fa0, fs0
; RV64-NEXT: flw fs0, 12(sp) # 4-byte Folded Reload
; RV64-NEXT: cm.pop {ra}, 32
; RV64-NEXT: .cfi_def_cfa_offset 0
; RV64-NEXT: .cfi_restore ra
; RV64-NEXT: .cfi_restore fs0
; RV64-NEXT: ret
; RV64-NEXT: cm.popret {ra}, 32
entry:
call void @callee()
ret float %arg
Expand All @@ -49,42 +43,42 @@ define void @foo2(i32 %x, float %y) {
; RV32: # %bb.0: # %entry
; RV32-NEXT: cm.push {ra, s0}, -32
; RV32-NEXT: .cfi_def_cfa_offset 32
; RV32-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV32-NEXT: .cfi_offset ra, -8
; RV32-NEXT: .cfi_offset s0, -4
; RV32-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV32-NEXT: .cfi_offset fs0, -20
; RV32-NEXT: fmv.s fs0, fa0
; RV32-NEXT: mv s0, a0
; RV32-NEXT: call bar
; RV32-NEXT: mv a0, s0
; RV32-NEXT: fmv.s fa0, fs0
; RV32-NEXT: flw fs0, 12(sp) # 4-byte Folded Reload
; RV32-NEXT: .cfi_restore fs0
; RV32-NEXT: cm.pop {ra, s0}, 32
; RV32-NEXT: .cfi_def_cfa_offset 0
; RV32-NEXT: .cfi_restore ra
; RV32-NEXT: .cfi_restore s0
; RV32-NEXT: .cfi_restore fs0
; RV32-NEXT: .cfi_def_cfa_offset 0
; RV32-NEXT: tail func
;
; RV64-LABEL: foo2:
; RV64: # %bb.0: # %entry
; RV64-NEXT: cm.push {ra, s0}, -32
; RV64-NEXT: .cfi_def_cfa_offset 32
; RV64-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV64-NEXT: .cfi_offset ra, -16
; RV64-NEXT: .cfi_offset s0, -8
; RV64-NEXT: fsw fs0, 12(sp) # 4-byte Folded Spill
; RV64-NEXT: .cfi_offset fs0, -20
; RV64-NEXT: fmv.s fs0, fa0
; RV64-NEXT: mv s0, a0
; RV64-NEXT: call bar
; RV64-NEXT: mv a0, s0
; RV64-NEXT: fmv.s fa0, fs0
; RV64-NEXT: flw fs0, 12(sp) # 4-byte Folded Reload
; RV64-NEXT: .cfi_restore fs0
; RV64-NEXT: cm.pop {ra, s0}, 32
; RV64-NEXT: .cfi_def_cfa_offset 0
; RV64-NEXT: .cfi_restore ra
; RV64-NEXT: .cfi_restore s0
; RV64-NEXT: .cfi_restore fs0
; RV64-NEXT: .cfi_def_cfa_offset 0
; RV64-NEXT: tail func
entry:
tail call void @bar()
Expand Down