diff options
author | Daniil Avdeev <daniil.avdeev@syntacore.com> | 2024-10-02 12:55:05 +0300 |
---|---|---|
committer | Daniil Avdeev <daniil.avdeev@syntacore.com> | 2024-10-15 13:27:45 +0300 |
commit | eae87e2180773f9523c8b786849701a712d86420 (patch) | |
tree | b0fcfaad36203572675d1a7e1765a528663e27f9 | |
parent | e9072edbc872337a53cb46becb2117826955e9a4 (diff) | |
download | llvm-users/dlav-sc/riscv-push-pop-fix.zip llvm-users/dlav-sc/riscv-push-pop-fix.tar.gz llvm-users/dlav-sc/riscv-push-pop-fix.tar.bz2 |
[RISCV] update testsusers/dlav-sc/riscv-push-pop-fix
-rw-r--r-- | llvm/test/CodeGen/RISCV/callee-saved-gprs.ll | 32 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll | 12 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/push-pop-popret.ll | 224 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll | 7 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir | 26 | ||||
-rw-r--r-- | llvm/test/CodeGen/RISCV/zcmp-with-float.ll | 12 |
6 files changed, 63 insertions, 250 deletions
diff --git a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll index 2a26602..528e52b 100644 --- a/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll +++ b/llvm/test/CodeGen/RISCV/callee-saved-gprs.ll @@ -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: @@ -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: @@ -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: @@ -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: @@ -2521,10 +2517,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 @@ -2606,10 +2599,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 @@ -2697,10 +2687,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 @@ -2782,10 +2769,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 diff --git a/llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll b/llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll index 647c277..2103c3e 100644 --- a/llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll +++ b/llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll @@ -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: @@ -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 @@ -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: @@ -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) diff --git a/llvm/test/CodeGen/RISCV/push-pop-popret.ll b/llvm/test/CodeGen/RISCV/push-pop-popret.ll index c856d9e..7827d26 100644 --- a/llvm/test/CodeGen/RISCV/push-pop-popret.ll +++ b/llvm/test/CodeGen/RISCV/push-pop-popret.ll @@ -25,13 +25,9 @@ define i32 @foo() { ; RV32IZCMP-NEXT: .cfi_offset ra, -4 ; RV32IZCMP-NEXT: mv a0, sp ; RV32IZCMP-NEXT: call test -; RV32IZCMP-NEXT: li a0, 0 ; RV32IZCMP-NEXT: addi sp, sp, 464 ; RV32IZCMP-NEXT: .cfi_def_cfa_offset 64 -; RV32IZCMP-NEXT: cm.pop {ra}, 64 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popretz {ra}, 64 ; ; RV64IZCMP-LABEL: foo: ; RV64IZCMP: # %bb.0: @@ -41,13 +37,9 @@ define i32 @foo() { ; RV64IZCMP-NEXT: .cfi_offset ra, -8 ; RV64IZCMP-NEXT: mv a0, sp ; RV64IZCMP-NEXT: call test -; RV64IZCMP-NEXT: li a0, 0 ; RV64IZCMP-NEXT: addi sp, sp, 464 ; RV64IZCMP-NEXT: .cfi_def_cfa_offset 64 -; RV64IZCMP-NEXT: cm.pop {ra}, 64 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popretz {ra}, 64 ; ; RV32IZCMP-SR-LABEL: foo: ; RV32IZCMP-SR: # %bb.0: @@ -57,13 +49,9 @@ define i32 @foo() { ; RV32IZCMP-SR-NEXT: .cfi_offset ra, -4 ; RV32IZCMP-SR-NEXT: mv a0, sp ; RV32IZCMP-SR-NEXT: call test -; RV32IZCMP-SR-NEXT: li a0, 0 ; RV32IZCMP-SR-NEXT: addi sp, sp, 464 ; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 -; RV32IZCMP-SR-NEXT: cm.pop {ra}, 64 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popretz {ra}, 64 ; ; RV64IZCMP-SR-LABEL: foo: ; RV64IZCMP-SR: # %bb.0: @@ -73,13 +61,9 @@ define i32 @foo() { ; RV64IZCMP-SR-NEXT: .cfi_offset ra, -8 ; RV64IZCMP-SR-NEXT: mv a0, sp ; RV64IZCMP-SR-NEXT: call test -; RV64IZCMP-SR-NEXT: li a0, 0 ; RV64IZCMP-SR-NEXT: addi sp, sp, 464 ; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 64 -; RV64IZCMP-SR-NEXT: cm.pop {ra}, 64 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popretz {ra}, 64 ; ; RV32I-LABEL: foo: ; RV32I: # %bb.0: @@ -130,14 +114,9 @@ define i32 @pushpopret0(i32 signext %size){ ; RV32IZCMP-NEXT: sub a0, sp, a0 ; RV32IZCMP-NEXT: mv sp, a0 ; RV32IZCMP-NEXT: call callee_void -; RV32IZCMP-NEXT: li a0, 0 ; RV32IZCMP-NEXT: addi sp, s0, -16 ; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: .cfi_restore s0 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popretz {ra, s0}, 16 ; ; RV64IZCMP-LABEL: pushpopret0: ; RV64IZCMP: # %bb.0: # %entry @@ -154,14 +133,9 @@ define i32 @pushpopret0(i32 signext %size){ ; RV64IZCMP-NEXT: sub a0, sp, a0 ; RV64IZCMP-NEXT: mv sp, a0 ; RV64IZCMP-NEXT: call callee_void -; RV64IZCMP-NEXT: li a0, 0 ; RV64IZCMP-NEXT: addi sp, s0, -16 ; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: .cfi_restore s0 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popretz {ra, s0}, 16 ; ; RV32IZCMP-SR-LABEL: pushpopret0: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -176,14 +150,9 @@ define i32 @pushpopret0(i32 signext %size){ ; RV32IZCMP-SR-NEXT: sub a0, sp, a0 ; RV32IZCMP-SR-NEXT: mv sp, a0 ; RV32IZCMP-SR-NEXT: call callee_void -; RV32IZCMP-SR-NEXT: li a0, 0 ; RV32IZCMP-SR-NEXT: addi sp, s0, -16 ; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: .cfi_restore s0 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popretz {ra, s0}, 16 ; ; RV64IZCMP-SR-LABEL: pushpopret0: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -200,14 +169,9 @@ define i32 @pushpopret0(i32 signext %size){ ; RV64IZCMP-SR-NEXT: sub a0, sp, a0 ; RV64IZCMP-SR-NEXT: mv sp, a0 ; RV64IZCMP-SR-NEXT: call callee_void -; RV64IZCMP-SR-NEXT: li a0, 0 ; RV64IZCMP-SR-NEXT: addi sp, s0, -16 ; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: .cfi_restore s0 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popretz {ra, s0}, 16 ; ; RV32I-LABEL: pushpopret0: ; RV32I: # %bb.0: # %entry @@ -285,11 +249,7 @@ define i32 @pushpopret1(i32 signext %size) { ; RV32IZCMP-NEXT: li a0, 1 ; RV32IZCMP-NEXT: addi sp, s0, -16 ; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: .cfi_restore s0 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-LABEL: pushpopret1: ; RV64IZCMP: # %bb.0: # %entry @@ -309,11 +269,7 @@ define i32 @pushpopret1(i32 signext %size) { ; RV64IZCMP-NEXT: li a0, 1 ; RV64IZCMP-NEXT: addi sp, s0, -16 ; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: .cfi_restore s0 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV32IZCMP-SR-LABEL: pushpopret1: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -331,11 +287,7 @@ define i32 @pushpopret1(i32 signext %size) { ; RV32IZCMP-SR-NEXT: li a0, 1 ; RV32IZCMP-SR-NEXT: addi sp, s0, -16 ; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: .cfi_restore s0 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-SR-LABEL: pushpopret1: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -355,11 +307,7 @@ define i32 @pushpopret1(i32 signext %size) { ; RV64IZCMP-SR-NEXT: li a0, 1 ; RV64IZCMP-SR-NEXT: addi sp, s0, -16 ; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: .cfi_restore s0 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV32I-LABEL: pushpopret1: ; RV32I: # %bb.0: # %entry @@ -437,11 +385,7 @@ define i32 @pushpopretneg1(i32 signext %size) { ; RV32IZCMP-NEXT: li a0, -1 ; RV32IZCMP-NEXT: addi sp, s0, -16 ; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: .cfi_restore s0 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-LABEL: pushpopretneg1: ; RV64IZCMP: # %bb.0: # %entry @@ -461,11 +405,7 @@ define i32 @pushpopretneg1(i32 signext %size) { ; RV64IZCMP-NEXT: li a0, -1 ; RV64IZCMP-NEXT: addi sp, s0, -16 ; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: .cfi_restore s0 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV32IZCMP-SR-LABEL: pushpopretneg1: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -483,11 +423,7 @@ define i32 @pushpopretneg1(i32 signext %size) { ; RV32IZCMP-SR-NEXT: li a0, -1 ; RV32IZCMP-SR-NEXT: addi sp, s0, -16 ; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: .cfi_restore s0 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-SR-LABEL: pushpopretneg1: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -507,11 +443,7 @@ define i32 @pushpopretneg1(i32 signext %size) { ; RV64IZCMP-SR-NEXT: li a0, -1 ; RV64IZCMP-SR-NEXT: addi sp, s0, -16 ; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: .cfi_restore s0 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV32I-LABEL: pushpopretneg1: ; RV32I: # %bb.0: # %entry @@ -589,11 +521,7 @@ define i32 @pushpopret2(i32 signext %size) { ; RV32IZCMP-NEXT: li a0, 2 ; RV32IZCMP-NEXT: addi sp, s0, -16 ; RV32IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: .cfi_restore s0 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-LABEL: pushpopret2: ; RV64IZCMP: # %bb.0: # %entry @@ -613,11 +541,7 @@ define i32 @pushpopret2(i32 signext %size) { ; RV64IZCMP-NEXT: li a0, 2 ; RV64IZCMP-NEXT: addi sp, s0, -16 ; RV64IZCMP-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: .cfi_restore s0 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0}, 16 ; ; RV32IZCMP-SR-LABEL: pushpopret2: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -635,11 +559,7 @@ define i32 @pushpopret2(i32 signext %size) { ; RV32IZCMP-SR-NEXT: li a0, 2 ; RV32IZCMP-SR-NEXT: addi sp, s0, -16 ; RV32IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: .cfi_restore s0 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV64IZCMP-SR-LABEL: pushpopret2: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -659,11 +579,7 @@ define i32 @pushpopret2(i32 signext %size) { ; RV64IZCMP-SR-NEXT: li a0, 2 ; RV64IZCMP-SR-NEXT: addi sp, s0, -16 ; RV64IZCMP-SR-NEXT: .cfi_def_cfa sp, 16 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0}, 16 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: .cfi_restore s0 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0}, 16 ; ; RV32I-LABEL: pushpopret2: ; RV32I: # %bb.0: # %entry @@ -1381,8 +1297,7 @@ define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind { ; RV32IZCMP-NEXT: sw t0, %lo(var0+8)(a0) ; RV32IZCMP-NEXT: sw a7, %lo(var0+4)(a0) ; RV32IZCMP-NEXT: sw a6, %lo(var0)(a0) -; RV32IZCMP-NEXT: cm.pop {ra, s0-s4}, 32 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0-s4}, 32 ; ; RV64IZCMP-LABEL: many_args: ; RV64IZCMP: # %bb.0: # %entry @@ -1425,8 +1340,7 @@ define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind { ; RV64IZCMP-NEXT: sw t0, %lo(var0+8)(a0) ; RV64IZCMP-NEXT: sw a7, %lo(var0+4)(a0) ; RV64IZCMP-NEXT: sw a6, %lo(var0)(a0) -; RV64IZCMP-NEXT: cm.pop {ra, s0-s4}, 48 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0-s4}, 48 ; ; RV32IZCMP-SR-LABEL: many_args: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -1469,8 +1383,7 @@ define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind { ; RV32IZCMP-SR-NEXT: sw t0, %lo(var0+8)(a0) ; RV32IZCMP-SR-NEXT: sw a7, %lo(var0+4)(a0) ; RV32IZCMP-SR-NEXT: sw a6, %lo(var0)(a0) -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s4}, 32 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s4}, 32 ; ; RV64IZCMP-SR-LABEL: many_args: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -1513,8 +1426,7 @@ define void @many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32) nounwind { ; RV64IZCMP-SR-NEXT: sw t0, %lo(var0+8)(a0) ; RV64IZCMP-SR-NEXT: sw a7, %lo(var0+4)(a0) ; RV64IZCMP-SR-NEXT: sw a6, %lo(var0)(a0) -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s4}, 48 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s4}, 48 ; ; RV32I-LABEL: many_args: ; RV32I: # %bb.0: # %entry @@ -1648,8 +1560,7 @@ define void @alloca(i32 %n) nounwind { ; RV32IZCMP-NEXT: call notdead ; RV32IZCMP-NEXT: mv sp, s1 ; RV32IZCMP-NEXT: addi sp, s0, -16 -; RV32IZCMP-NEXT: cm.pop {ra, s0-s1}, 16 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0-s1}, 16 ; ; RV64IZCMP-LABEL: alloca: ; RV64IZCMP: # %bb.0: @@ -1665,8 +1576,7 @@ define void @alloca(i32 %n) nounwind { ; RV64IZCMP-NEXT: call notdead ; RV64IZCMP-NEXT: mv sp, s1 ; RV64IZCMP-NEXT: addi sp, s0, -32 -; RV64IZCMP-NEXT: cm.pop {ra, s0-s1}, 32 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0-s1}, 32 ; ; RV32IZCMP-SR-LABEL: alloca: ; RV32IZCMP-SR: # %bb.0: @@ -1680,8 +1590,7 @@ define void @alloca(i32 %n) nounwind { ; RV32IZCMP-SR-NEXT: call notdead ; RV32IZCMP-SR-NEXT: mv sp, s1 ; RV32IZCMP-SR-NEXT: addi sp, s0, -16 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s1}, 16 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 16 ; ; RV64IZCMP-SR-LABEL: alloca: ; RV64IZCMP-SR: # %bb.0: @@ -1697,8 +1606,7 @@ define void @alloca(i32 %n) nounwind { ; RV64IZCMP-SR-NEXT: call notdead ; RV64IZCMP-SR-NEXT: mv sp, s1 ; RV64IZCMP-SR-NEXT: addi sp, s0, -32 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s1}, 32 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 32 ; ; RV32I-LABEL: alloca: ; RV32I: # %bb.0: @@ -1996,29 +1904,25 @@ define void @foo_no_irq() nounwind{ ; RV32IZCMP: # %bb.0: ; RV32IZCMP-NEXT: cm.push {ra}, -16 ; RV32IZCMP-NEXT: call foo_test_irq -; RV32IZCMP-NEXT: cm.pop {ra}, 16 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra}, 16 ; ; RV64IZCMP-LABEL: foo_no_irq: ; RV64IZCMP: # %bb.0: ; RV64IZCMP-NEXT: cm.push {ra}, -16 ; RV64IZCMP-NEXT: call foo_test_irq -; RV64IZCMP-NEXT: cm.pop {ra}, 16 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra}, 16 ; ; RV32IZCMP-SR-LABEL: foo_no_irq: ; RV32IZCMP-SR: # %bb.0: ; RV32IZCMP-SR-NEXT: cm.push {ra}, -16 ; RV32IZCMP-SR-NEXT: call foo_test_irq -; RV32IZCMP-SR-NEXT: cm.pop {ra}, 16 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra}, 16 ; ; RV64IZCMP-SR-LABEL: foo_no_irq: ; RV64IZCMP-SR: # %bb.0: ; RV64IZCMP-SR-NEXT: cm.push {ra}, -16 ; RV64IZCMP-SR-NEXT: call foo_test_irq -; RV64IZCMP-SR-NEXT: cm.pop {ra}, 16 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra}, 16 ; ; RV32I-LABEL: foo_no_irq: ; RV32I: # %bb.0: @@ -2872,8 +2776,7 @@ define void @callee_no_irq() nounwind{ ; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) ; RV32IZCMP-NEXT: lw a0, 28(sp) # 4-byte Folded Reload ; RV32IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) -; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 96 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 96 ; ; RV64IZCMP-LABEL: callee_no_irq: ; RV64IZCMP: # %bb.0: @@ -2956,8 +2859,7 @@ define void @callee_no_irq() nounwind{ ; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq+4)(t0) ; RV64IZCMP-NEXT: ld a0, 40(sp) # 8-byte Folded Reload ; RV64IZCMP-NEXT: sw a0, %lo(var_test_irq)(t0) -; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 160 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 160 ; ; RV32IZCMP-SR-LABEL: callee_no_irq: ; RV32IZCMP-SR: # %bb.0: @@ -3040,8 +2942,7 @@ define void @callee_no_irq() nounwind{ ; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) ; RV32IZCMP-SR-NEXT: lw a0, 28(sp) # 4-byte Folded Reload ; RV32IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 96 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 96 ; ; RV64IZCMP-SR-LABEL: callee_no_irq: ; RV64IZCMP-SR: # %bb.0: @@ -3124,8 +3025,7 @@ define void @callee_no_irq() nounwind{ ; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq+4)(t0) ; RV64IZCMP-SR-NEXT: ld a0, 40(sp) # 8-byte Folded Reload ; RV64IZCMP-SR-NEXT: sw a0, %lo(var_test_irq)(t0) -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 160 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 160 ; ; RV32I-LABEL: callee_no_irq: ; RV32I: # %bb.0: @@ -3369,12 +3269,7 @@ define i32 @use_fp(i32 %x) { ; RV32IZCMP-NEXT: mv a0, s0 ; RV32IZCMP-NEXT: call bar ; RV32IZCMP-NEXT: mv a0, s1 -; RV32IZCMP-NEXT: cm.pop {ra, s0-s1}, 32 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore ra -; RV32IZCMP-NEXT: .cfi_restore s0 -; RV32IZCMP-NEXT: .cfi_restore s1 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0-s1}, 32 ; ; RV64IZCMP-LABEL: use_fp: ; RV64IZCMP: # %bb.0: # %entry @@ -3390,12 +3285,7 @@ define i32 @use_fp(i32 %x) { ; RV64IZCMP-NEXT: mv a0, s0 ; RV64IZCMP-NEXT: call bar ; RV64IZCMP-NEXT: mv a0, s1 -; RV64IZCMP-NEXT: cm.pop {ra, s0-s1}, 48 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore ra -; RV64IZCMP-NEXT: .cfi_restore s0 -; RV64IZCMP-NEXT: .cfi_restore s1 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0-s1}, 48 ; ; RV32IZCMP-SR-LABEL: use_fp: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -3411,12 +3301,7 @@ define i32 @use_fp(i32 %x) { ; RV32IZCMP-SR-NEXT: mv a0, s0 ; RV32IZCMP-SR-NEXT: call bar ; RV32IZCMP-SR-NEXT: mv a0, s1 -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s1}, 32 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore ra -; RV32IZCMP-SR-NEXT: .cfi_restore s0 -; RV32IZCMP-SR-NEXT: .cfi_restore s1 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 32 ; ; RV64IZCMP-SR-LABEL: use_fp: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -3432,12 +3317,7 @@ define i32 @use_fp(i32 %x) { ; RV64IZCMP-SR-NEXT: mv a0, s0 ; RV64IZCMP-SR-NEXT: call bar ; RV64IZCMP-SR-NEXT: mv a0, s1 -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s1}, 48 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore ra -; RV64IZCMP-SR-NEXT: .cfi_restore s0 -; RV64IZCMP-SR-NEXT: .cfi_restore s1 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s1}, 48 ; ; RV32I-LABEL: use_fp: ; RV32I: # %bb.0: # %entry @@ -3509,11 +3389,7 @@ define void @spill_x10() { ; RV32IZCMP-NEXT: #APP ; RV32IZCMP-NEXT: li s10, 0 ; RV32IZCMP-NEXT: #NO_APP -; RV32IZCMP-NEXT: cm.pop {ra, s0-s11}, 64 -; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-NEXT: .cfi_restore s10 -; RV32IZCMP-NEXT: .cfi_restore s11 -; RV32IZCMP-NEXT: ret +; RV32IZCMP-NEXT: cm.popret {ra, s0-s11}, 64 ; ; RV64IZCMP-LABEL: spill_x10: ; RV64IZCMP: # %bb.0: # %entry @@ -3524,11 +3400,7 @@ define void @spill_x10() { ; RV64IZCMP-NEXT: #APP ; RV64IZCMP-NEXT: li s10, 0 ; RV64IZCMP-NEXT: #NO_APP -; RV64IZCMP-NEXT: cm.pop {ra, s0-s11}, 112 -; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-NEXT: .cfi_restore s10 -; RV64IZCMP-NEXT: .cfi_restore s11 -; RV64IZCMP-NEXT: ret +; RV64IZCMP-NEXT: cm.popret {ra, s0-s11}, 112 ; ; RV32IZCMP-SR-LABEL: spill_x10: ; RV32IZCMP-SR: # %bb.0: # %entry @@ -3539,11 +3411,7 @@ define void @spill_x10() { ; RV32IZCMP-SR-NEXT: #APP ; RV32IZCMP-SR-NEXT: li s10, 0 ; RV32IZCMP-SR-NEXT: #NO_APP -; RV32IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 64 -; RV32IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV32IZCMP-SR-NEXT: .cfi_restore s10 -; RV32IZCMP-SR-NEXT: .cfi_restore s11 -; RV32IZCMP-SR-NEXT: ret +; RV32IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 64 ; ; RV64IZCMP-SR-LABEL: spill_x10: ; RV64IZCMP-SR: # %bb.0: # %entry @@ -3554,11 +3422,7 @@ define void @spill_x10() { ; RV64IZCMP-SR-NEXT: #APP ; RV64IZCMP-SR-NEXT: li s10, 0 ; RV64IZCMP-SR-NEXT: #NO_APP -; RV64IZCMP-SR-NEXT: cm.pop {ra, s0-s11}, 112 -; RV64IZCMP-SR-NEXT: .cfi_def_cfa_offset 0 -; RV64IZCMP-SR-NEXT: .cfi_restore s10 -; RV64IZCMP-SR-NEXT: .cfi_restore s11 -; RV64IZCMP-SR-NEXT: ret +; RV64IZCMP-SR-NEXT: cm.popret {ra, s0-s11}, 112 ; ; RV32I-LABEL: spill_x10: ; RV32I: # %bb.0: # %entry diff --git a/llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll b/llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll index ab72a99..1d3bb66 100644 --- a/llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll +++ b/llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll @@ -34,12 +34,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 diff --git a/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir b/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir index 907c95a..e737ee0 100644 --- a/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir +++ b/llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir @@ -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 @@ -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 @@ -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 @@ -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 diff --git a/llvm/test/CodeGen/RISCV/zcmp-with-float.ll b/llvm/test/CodeGen/RISCV/zcmp-with-float.ll index 712e49b..6bd1934 100644 --- a/llvm/test/CodeGen/RISCV/zcmp-with-float.ll +++ b/llvm/test/CodeGen/RISCV/zcmp-with-float.ll @@ -17,11 +17,7 @@ define float @foo(float %arg) { ; 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 @@ -34,11 +30,7 @@ define float @foo(float %arg) { ; 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 |