[llvm-branch-commits] [llvm] [RISCV][CFI] add function epilogue cfi information (PR #110810)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Wed Oct 2 02:38:08 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-risc-v

Author: None (dlav-sc)

<details>
<summary>Changes</summary>

This patch adds CFI instructions in a function epilogue, that allows lldb to obtain a valid backtrace at the end of functions.

---

Patch is 1004.05 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/110810.diff


296 Files Affected:

- (modified) llvm/lib/Target/RISCV/RISCVFrameLowering.cpp (+72) 
- (modified) llvm/lib/Target/RISCV/RISCVFrameLowering.h (+2) 
- (modified) llvm/test/CodeGen/RISCV/GlobalISel/stacksave-stackrestore.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/GlobalISel/vararg.ll (+36) 
- (modified) llvm/test/CodeGen/RISCV/addrspacecast.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/atomicrmw-cond-sub-clamp.ll (+85) 
- (modified) llvm/test/CodeGen/RISCV/atomicrmw-uinc-udec-wrap.ll (+85) 
- (modified) llvm/test/CodeGen/RISCV/branch-relaxation.ll (+144) 
- (modified) llvm/test/CodeGen/RISCV/callee-saved-gprs.ll (+88-8) 
- (modified) llvm/test/CodeGen/RISCV/calling-conv-ilp32e.ll (+271) 
- (modified) llvm/test/CodeGen/RISCV/cm_mvas_mvsa.ll (+8-4) 
- (modified) llvm/test/CodeGen/RISCV/double-intrinsics.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/double-round-conv.ll (+50) 
- (modified) llvm/test/CodeGen/RISCV/early-clobber-tied-def-subreg-liveness.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/eh-dwarf-cfa.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/exception-pointer-register.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/float-intrinsics.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/float-round-conv.ll (+40) 
- (modified) llvm/test/CodeGen/RISCV/fpclamptosat.ll (+176) 
- (modified) llvm/test/CodeGen/RISCV/frame-info.ll (+32) 
- (modified) llvm/test/CodeGen/RISCV/half-convert-strict.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/half-intrinsics.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/half-round-conv.ll (+80) 
- (modified) llvm/test/CodeGen/RISCV/hwasan-check-memaccess.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/intrinsic-cttz-elts-vscale.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/kcfi-mir.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/large-stack.ll (+15) 
- (modified) llvm/test/CodeGen/RISCV/live-sp.mir (+2-1) 
- (modified) llvm/test/CodeGen/RISCV/llvm.exp10.ll (+120) 
- (modified) llvm/test/CodeGen/RISCV/local-stack-slot-allocation.ll (+14) 
- (modified) llvm/test/CodeGen/RISCV/lpad.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/miss-sp-restore-eh.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/nontemporal.ll (+60) 
- (modified) llvm/test/CodeGen/RISCV/overflow-intrinsics.ll (+23) 
- (modified) llvm/test/CodeGen/RISCV/pr58025.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/pr58286.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/pr63365.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/pr69586.ll (+29) 
- (modified) llvm/test/CodeGen/RISCV/pr88365.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/prolog-epilogue.ll (+80) 
- (modified) llvm/test/CodeGen/RISCV/push-pop-opt-crash.ll (+27-25) 
- (modified) llvm/test/CodeGen/RISCV/push-pop-popret.ll (+344-44) 
- (modified) llvm/test/CodeGen/RISCV/regalloc-last-chance-recoloring-failure.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rv64-patchpoint.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/rv64-statepoint-call-lowering.ll (+21) 
- (modified) llvm/test/CodeGen/RISCV/rvv-cfi-info.ll (+18) 
- (modified) llvm/test/CodeGen/RISCV/rvv/abs-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/access-fixed-objects-by-rvv.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/rvv/addi-scalable-offset.mir (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/alloca-load-store-scalable-array.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/alloca-load-store-scalable-struct.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/alloca-load-store-vector-tuple.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/binop-splats.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/rvv/bitreverse-sdnode.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/rvv/bitreverse-vp.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/rvv/bswap-sdnode.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/rvv/bswap-vp.ll (+21) 
- (modified) llvm/test/CodeGen/RISCV/rvv/callee-saved-regs.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/calling-conv-fastcc.ll (+40) 
- (modified) llvm/test/CodeGen/RISCV/rvv/calling-conv.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/ceil-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/compressstore.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/ctpop-vp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/cttz-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/emergency-slot.mir (+14) 
- (modified) llvm/test/CodeGen/RISCV/rvv/extractelt-fp.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/extractelt-int-rv32.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/extractelt-int-rv64.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vector-i8-index-cornercase.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-binop-splats.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bitcast.ll (+9) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bitreverse-vp.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bitreverse.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bswap-vp.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-bswap.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv-fastcc.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv.ll (+14) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ceil-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctlz-vp.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-ctpop-vp.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-cttz-vp.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-expandload-int.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-floor-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fmaximum-vp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fminimum-vp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec-bf16.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll (+100) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-interleave.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fshr-fshl-vp.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-buildvec.ll (+14) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-explodevector.ll (+29) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-interleave.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int-splat.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-int.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleaved-access.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-llrint.ll (+43) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-lrint.ll (+28) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll (+65) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll (+59) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-reduction-fp.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-reduction-int-vp.ll (+44) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-reduction-int.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-rint-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-round-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-roundeven-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-roundtozero-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-setcc-fp-vp.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-setcc-int-vp.ll (+22) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shuffle-vslide1down.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-shuffle-vslide1up.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-trunc-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vaaddu.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vadd-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vand-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vcopysign-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vdiv-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vdivu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfma-vp.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmax-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmuladd-vp.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwadd.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmaccbf16.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwmul.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfwsub.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vitofp-constrained-sdnode.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmacc-vp.ll (+9) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmax-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmaxu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmin-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vminu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vmul-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vnmsac-vp.ll (+9) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vor-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vp-splat.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpmerge.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vrem-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vremu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vrsub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsadd-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsadd.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsaddu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsaddu.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vscale-range.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vselect-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vssub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vssub.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vssubu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vssubu.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vsub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vwmul.ll (+7) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vwmulsu.ll (+9) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vwmulu.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vxor-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/floor-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fmaximum-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fmaximum-vp.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fminimum-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fminimum-vp.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fnearbyint-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fpclamptosat_vec.ll (+432) 
- (modified) llvm/test/CodeGen/RISCV/rvv/fshr-fshl-vp.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/get-vlen-debugloc.mir (+1) 
- (modified) llvm/test/CodeGen/RISCV/rvv/known-never-zero.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/large-rvv-stack-size.mir (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/localvar.ll (+27) 
- (modified) llvm/test/CodeGen/RISCV/rvv/memory-args.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/mgather-sdnode.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/mscatter-sdnode.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/named-vector-shuffle-reverse.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/nearbyint-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/no-reserved-frame.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/rvv/pr104480.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/pr88576.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/pr93587.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/rvv/pr95865.ll (+14) 
- (modified) llvm/test/CodeGen/RISCV/rvv/reg-alloc-reserve-bp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/remat.ll (+18) 
- (modified) llvm/test/CodeGen/RISCV/rvv/rint-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/round-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/roundeven-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/roundtozero-vp.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/rvv/rvv-args-by-mem.ll (+5) 
- (modified) llvm/test/CodeGen/RISCV/rvv/setcc-fp-vp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/setcc-int-vp.ll (+40) 
- (modified) llvm/test/CodeGen/RISCV/rvv/setcc-integer.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/rvv/splat-vector-split-i64-vl-sdnode.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/rvv/stack-folding.ll (+24) 
- (modified) llvm/test/CodeGen/RISCV/rvv/stepvector.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/strided-vpstore.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/undef-earlyclobber-chain.ll (+1) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vaaddu-sdnode.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vadd-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vadd-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vand-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vand-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vandn-sdnode.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vandn-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vdiv-sdnode.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vdiv-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vdivu-sdnode.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vdivu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-load.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vector-interleave-store.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfadd-vp.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfdiv-vp.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfma-vp.ll (+124) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmadd-constrained-sdnode.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmadd-sdnode.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmax-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmin-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmsub-constrained-sdnode.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmul-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfmuladd-vp.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfnmadd-constrained-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfnmsub-constrained-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfptosi-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfptoui-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfptrunc-vp.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfsub-vp.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfwmacc-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfwnmacc-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vfwnmsac-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmacc-vp.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmadd-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmadd-vp.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmax-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmax-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmaxu-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmaxu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmin-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmin-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vminu-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vminu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmul-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vmul-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vnmsac-vp.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vnmsub-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vor-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vor-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vp-reverse-int.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vp-splat.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vpmerge-sdnode.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vpstore.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vreductions-int-vp.ll (+30) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vrem-sdnode.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vrem-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vremu-sdnode.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vremu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vrsub-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vrsub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsadd-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsadd-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsaddu-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsaddu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vselect-int.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vselect-vp.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsitofp-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsplats-i64.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vssub-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vssub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vssubu-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vssubu-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsub-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vsub-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vtrunc-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vuitofp-vp.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vwadd-sdnode.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vxor-sdnode.ll (+4) 
- (modified) llvm/test/CodeGen/RISCV/rvv/vxor-vp.ll (+8) 
- (modified) llvm/test/CodeGen/RISCV/rvv/zvlsseg-spill.mir (+2) 
- (modified) llvm/test/CodeGen/RISCV/shadowcallstack.ll (+28) 
- (modified) llvm/test/CodeGen/RISCV/shl-cttz.ll (+16) 
- (modified) llvm/test/CodeGen/RISCV/shrinkwrap-jump-table.ll (+2) 
- (modified) llvm/test/CodeGen/RISCV/stack-inst-compress.mir (+36) 
- (modified) llvm/test/CodeGen/RISCV/stack-offset.ll (+48) 
- (modified) llvm/test/CodeGen/RISCV/stack-realignment-with-variable-sized-objects.ll (+20) 
- (modified) llvm/test/CodeGen/RISCV/stack-realignment.ll (+212) 
- (modified) llvm/test/CodeGen/RISCV/vararg-ilp32e.ll (+12) 
- (modified) llvm/test/CodeGen/RISCV/vararg.ll (+38) 
- (modified) llvm/test/CodeGen/RISCV/vlenb.ll (+3) 
- (modified) llvm/test/CodeGen/RISCV/xaluo.ll (+27) 
- (modified) llvm/test/CodeGen/RISCV/xcvbi.ll (+6) 
- (modified) llvm/test/CodeGen/RISCV/zbb-cmp-combine.ll (+10) 
- (modified) llvm/test/CodeGen/RISCV/zcmp-additional-stack.ll (+7-1) 
- (modified) llvm/test/CodeGen/RISCV/zcmp-cm-popretz.mir (+42-4) 
- (modified) llvm/test/CodeGen/RISCV/zcmp-cm-push-pop.mir (+82) 
- (modified) llvm/test/CodeGen/RISCV/zcmp-with-float.ll (+18-2) 
- (modified) llvm/test/CodeGen/RISCV/zdinx-large-spill.mir (+1) 
- (modified) llvm/test/DebugInfo/RISCV/relax-debug-frame.ll (+15-7) 


``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
index 7cbd1a35b25839..78d3dafaf9c8e2 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
@@ -761,11 +761,18 @@ void RISCVFrameLowering::deallocateStack(MachineFunction &MF,
                                          const DebugLoc &DL, uint64_t StackSize,
                                          int64_t CFAOffset) const {
   const RISCVRegisterInfo *RI = STI.getRegisterInfo();
+  const RISCVInstrInfo *TII = STI.getInstrInfo();
 
   Register SPReg = getSPReg(STI);
 
   RI->adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackOffset::getFixed(StackSize),
                 MachineInstr::FrameDestroy, getStackAlign());
+
+  unsigned CFIIndex =
+      MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset(nullptr, CFAOffset));
+  BuildMI(MBB, MBBI, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
+      .addCFIIndex(CFIIndex)
+      .setMIFlag(MachineInstr::FrameDestroy);
 }
 
 void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
@@ -773,6 +780,7 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
   const RISCVRegisterInfo *RI = STI.getRegisterInfo();
   MachineFrameInfo &MFI = MF.getFrameInfo();
   auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>();
+  const RISCVInstrInfo *TII = STI.getInstrInfo();
   Register FPReg = getFPReg(STI);
   Register SPReg = getSPReg(STI);
 
@@ -826,7 +834,16 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
     if (!RestoreFP) {
       adjustStackForRVV(MF, MBB, LastFrameDestroy, DL, RVVStackSize,
                         MachineInstr::FrameDestroy);
+
+      unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
+          nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
+      BuildMI(MBB, LastFrameDestroy, DL,
+              TII->get(TargetOpcode::CFI_INSTRUCTION))
+          .addCFIIndex(CFIIndex)
+          .setMIFlag(MachineInstr::FrameDestroy);
     }
+
+    emitCalleeSavedRVVEpilogCFI(MBB, LastFrameDestroy);
   }
 
   if (FirstSPAdjustAmount) {
@@ -841,6 +858,13 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
       RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, SPReg,
                     StackOffset::getFixed(SecondSPAdjustAmount),
                     MachineInstr::FrameDestroy, getStackAlign());
+
+      unsigned CFIIndex = MF.addFrameInst(
+          MCCFIInstruction::cfiDefCfaOffset(nullptr, FirstSPAdjustAmount));
+      BuildMI(MBB, LastFrameDestroy, DL,
+              TII->get(TargetOpcode::CFI_INSTRUCTION))
+          .addCFIIndex(CFIIndex)
+          .setMIFlag(MachineInstr::FrameDestroy);
     }
   }
 
@@ -858,6 +882,12 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
     RI->adjustReg(MBB, LastFrameDestroy, DL, SPReg, FPReg,
                   StackOffset::getFixed(-FPOffset), MachineInstr::FrameDestroy,
                   getStackAlign());
+
+    unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa(
+        nullptr, RI->getDwarfRegNum(SPReg, true), RealStackSize));
+    BuildMI(MBB, LastFrameDestroy, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
+        .addCFIIndex(CFIIndex)
+        .setMIFlag(MachineInstr::FrameDestroy);
   }
 
   bool ApplyPop = RVFI->isPushable(MF) && MBBI != MBB.end() &&
@@ -875,7 +905,24 @@ void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
       deallocateStack(MF, MBB, MBBI, DL, StackSize,
                       /*stack_adj of cm.pop instr*/ RealStackSize - StackSize);
 
+    // Update CFA offset. After CM_POP SP should be equal to CFA, so CFA offset
+    // is zero.
     MBBI = std::next(MBBI);
+    unsigned CFIIndex =
+        MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset(nullptr, 0));
+    BuildMI(MBB, MBBI, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
+        .addCFIIndex(CFIIndex)
+        .setMIFlag(MachineInstr::FrameDestroy);
+  }
+
+  // Recover callee-saved registers.
+  for (const auto &Entry : CSI) {
+    Register Reg = Entry.getReg();
+    unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestore(
+        nullptr, RI->getDwarfRegNum(Reg, true)));
+    BuildMI(MBB, MBBI, DL, TII->get(TargetOpcode::CFI_INSTRUCTION))
+        .addCFIIndex(CFIIndex)
+        .setMIFlag(MachineInstr::FrameDestroy);
   }
 
   // Deallocate stack if StackSize isn't a zero and if we didn't already do it
@@ -1615,6 +1662,31 @@ void RISCVFrameLowering::emitCalleeSavedRVVPrologCFI(
   }
 }
 
+void RISCVFrameLowering::emitCalleeSavedRVVEpilogCFI(
+    MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const {
+  MachineFunction *MF = MBB.getParent();
+  const MachineFrameInfo &MFI = MF->getFrameInfo();
+  const RISCVRegisterInfo *RI = STI.getRegisterInfo();
+  const TargetInstrInfo &TII = *STI.getInstrInfo();
+  DebugLoc DL = MBB.findDebugLoc(MI);
+
+  const auto &RVVCSI = getRVVCalleeSavedInfo(*MF, MFI.getCalleeSavedInfo());
+  if (RVVCSI.empty())
+    return;
+
+  for (auto &CS : RVVCSI) {
+    int FI = CS.getFrameIdx();
+    if (FI >= 0 && MFI.getStackID(FI) == TargetStackID::ScalableVector) {
+      Register Reg = CS.getReg();
+      unsigned CFIIndex = MF->addFrameInst(MCCFIInstruction::createRestore(
+          nullptr, RI->getDwarfRegNum(Reg, true)));
+      BuildMI(MBB, MI, DL, TII.get(TargetOpcode::CFI_INSTRUCTION))
+          .addCFIIndex(CFIIndex)
+          .setMIFlag(MachineInstr::FrameDestroy);
+    }
+  }
+}
+
 bool RISCVFrameLowering::restoreCalleeSavedRegisters(
     MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
     MutableArrayRef<CalleeSavedInfo> CSI, const TargetRegisterInfo *TRI) const {
diff --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.h b/llvm/lib/Target/RISCV/RISCVFrameLowering.h
index 89f95f2aa04aa6..68402bf9d81478 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.h
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.h
@@ -92,6 +92,8 @@ class RISCVFrameLowering : public TargetFrameLowering {
   void emitCalleeSavedRVVPrologCFI(MachineBasicBlock &MBB,
                                    MachineBasicBlock::iterator MI,
                                    bool HasFP) const;
+  void emitCalleeSavedRVVEpilogCFI(MachineBasicBlock &MBB,
+                                   MachineBasicBlock::iterator MI) const;
 
   void deallocateStack(MachineFunction &MF, MachineBasicBlock &MBB,
                        MachineBasicBlock::iterator MBBI, const DebugLoc &DL,
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/stacksave-stackrestore.ll b/llvm/test/CodeGen/RISCV/GlobalISel/stacksave-stackrestore.ll
index 014283cf38b26b..caa749729ce198 100644
--- a/llvm/test/CodeGen/RISCV/GlobalISel/stacksave-stackrestore.ll
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/stacksave-stackrestore.ll
@@ -25,10 +25,15 @@ define void @test_scoped_alloca(i64 %n) {
 ; RV32-NEXT:    call use_addr
 ; RV32-NEXT:    mv sp, s1
 ; RV32-NEXT:    addi sp, s0, -16
+; RV32-NEXT:    .cfi_def_cfa sp, 16
 ; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
+; RV32-NEXT:    .cfi_restore s0
+; RV32-NEXT:    .cfi_restore s1
 ; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: test_scoped_alloca:
@@ -51,10 +56,15 @@ define void @test_scoped_alloca(i64 %n) {
 ; RV64-NEXT:    call use_addr
 ; RV64-NEXT:    mv sp, s1
 ; RV64-NEXT:    addi sp, s0, -32
+; RV64-NEXT:    .cfi_def_cfa sp, 32
 ; RV64-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
+; RV64-NEXT:    .cfi_restore s0
+; RV64-NEXT:    .cfi_restore s1
 ; RV64-NEXT:    addi sp, sp, 32
+; RV64-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-NEXT:    ret
   %sp = call ptr @llvm.stacksave.p0()
   %addr = alloca i8, i64 %n
diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/vararg.ll b/llvm/test/CodeGen/RISCV/GlobalISel/vararg.ll
index 01cab0d0e157bd..5ea87499d2c855 100644
--- a/llvm/test/CodeGen/RISCV/GlobalISel/vararg.ll
+++ b/llvm/test/CodeGen/RISCV/GlobalISel/vararg.ll
@@ -59,6 +59,7 @@ define i32 @va1(ptr %fmt, ...) {
 ; RV32-NEXT:    sw a1, 12(sp)
 ; RV32-NEXT:    lw a0, 0(a0)
 ; RV32-NEXT:    addi sp, sp, 48
+; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: va1:
@@ -84,6 +85,7 @@ define i32 @va1(ptr %fmt, ...) {
 ; RV64-NEXT:    sw a2, 12(sp)
 ; RV64-NEXT:    lw a0, 0(a0)
 ; RV64-NEXT:    addi sp, sp, 80
+; RV64-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-NEXT:    ret
 ;
 ; RV32-WITHFP-LABEL: va1:
@@ -111,7 +113,10 @@ define i32 @va1(ptr %fmt, ...) {
 ; RV32-WITHFP-NEXT:    lw a0, 0(a0)
 ; RV32-WITHFP-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-WITHFP-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
+; RV32-WITHFP-NEXT:    .cfi_restore ra
+; RV32-WITHFP-NEXT:    .cfi_restore s0
 ; RV32-WITHFP-NEXT:    addi sp, sp, 48
+; RV32-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-WITHFP-NEXT:    ret
 ;
 ; RV64-WITHFP-LABEL: va1:
@@ -144,7 +149,10 @@ define i32 @va1(ptr %fmt, ...) {
 ; RV64-WITHFP-NEXT:    lw a0, 0(a0)
 ; RV64-WITHFP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64-WITHFP-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; RV64-WITHFP-NEXT:    .cfi_restore ra
+; RV64-WITHFP-NEXT:    .cfi_restore s0
 ; RV64-WITHFP-NEXT:    addi sp, sp, 96
+; RV64-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-WITHFP-NEXT:    ret
   %va = alloca ptr
   call void @llvm.va_start(ptr %va)
@@ -1588,6 +1596,7 @@ define i32 @va_large_stack(ptr %fmt, ...) {
 ; RV32-NEXT:    lui a1, 24414
 ; RV32-NEXT:    addi a1, a1, 304
 ; RV32-NEXT:    add sp, sp, a1
+; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: va_large_stack:
@@ -1633,6 +1642,7 @@ define i32 @va_large_stack(ptr %fmt, ...) {
 ; RV64-NEXT:    lui a1, 24414
 ; RV64-NEXT:    addiw a1, a1, 336
 ; RV64-NEXT:    add sp, sp, a1
+; RV64-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-NEXT:    ret
 ;
 ; RV32-WITHFP-LABEL: va_large_stack:
@@ -1667,9 +1677,13 @@ define i32 @va_large_stack(ptr %fmt, ...) {
 ; RV32-WITHFP-NEXT:    lui a1, 24414
 ; RV32-WITHFP-NEXT:    addi a1, a1, -1728
 ; RV32-WITHFP-NEXT:    add sp, sp, a1
+; RV32-WITHFP-NEXT:    .cfi_def_cfa_offset 2032
 ; RV32-WITHFP-NEXT:    lw ra, 1996(sp) # 4-byte Folded Reload
 ; RV32-WITHFP-NEXT:    lw s0, 1992(sp) # 4-byte Folded Reload
+; RV32-WITHFP-NEXT:    .cfi_restore ra
+; RV32-WITHFP-NEXT:    .cfi_restore s0
 ; RV32-WITHFP-NEXT:    addi sp, sp, 2032
+; RV32-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-WITHFP-NEXT:    ret
 ;
 ; RV64-WITHFP-LABEL: va_large_stack:
@@ -1709,9 +1723,13 @@ define i32 @va_large_stack(ptr %fmt, ...) {
 ; RV64-WITHFP-NEXT:    lui a1, 24414
 ; RV64-WITHFP-NEXT:    addiw a1, a1, -1680
 ; RV64-WITHFP-NEXT:    add sp, sp, a1
+; RV64-WITHFP-NEXT:    .cfi_def_cfa_offset 2032
 ; RV64-WITHFP-NEXT:    ld ra, 1960(sp) # 8-byte Folded Reload
 ; RV64-WITHFP-NEXT:    ld s0, 1952(sp) # 8-byte Folded Reload
+; RV64-WITHFP-NEXT:    .cfi_restore ra
+; RV64-WITHFP-NEXT:    .cfi_restore s0
 ; RV64-WITHFP-NEXT:    addi sp, sp, 2032
+; RV64-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-WITHFP-NEXT:    ret
   %large = alloca [ 100000000 x i8 ]
   %va = alloca ptr
@@ -1739,6 +1757,7 @@ define iXLen @va_vprintf(ptr %fmt, ptr %arg_start) {
 ; RV32-NEXT:    sw a1, 8(sp)
 ; RV32-NEXT:    lw a0, 0(a0)
 ; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: va_vprintf:
@@ -1755,6 +1774,7 @@ define iXLen @va_vprintf(ptr %fmt, ptr %arg_start) {
 ; RV64-NEXT:    sd a1, 0(sp)
 ; RV64-NEXT:    ld a0, 0(a0)
 ; RV64-NEXT:    addi sp, sp, 16
+; RV64-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-NEXT:    ret
 ;
 ; RV32-WITHFP-LABEL: va_vprintf:
@@ -1778,7 +1798,10 @@ define iXLen @va_vprintf(ptr %fmt, ptr %arg_start) {
 ; RV32-WITHFP-NEXT:    lw a0, 0(a0)
 ; RV32-WITHFP-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-WITHFP-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
+; RV32-WITHFP-NEXT:    .cfi_restore ra
+; RV32-WITHFP-NEXT:    .cfi_restore s0
 ; RV32-WITHFP-NEXT:    addi sp, sp, 16
+; RV32-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-WITHFP-NEXT:    ret
 ;
 ; RV64-WITHFP-LABEL: va_vprintf:
@@ -1802,7 +1825,10 @@ define iXLen @va_vprintf(ptr %fmt, ptr %arg_start) {
 ; RV64-WITHFP-NEXT:    ld a0, 0(a0)
 ; RV64-WITHFP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64-WITHFP-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; RV64-WITHFP-NEXT:    .cfi_restore ra
+; RV64-WITHFP-NEXT:    .cfi_restore s0
 ; RV64-WITHFP-NEXT:    addi sp, sp, 32
+; RV64-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-WITHFP-NEXT:    ret
   %args = alloca ptr
   %args_cp = alloca ptr
@@ -1832,7 +1858,9 @@ define i32 @va_printf(ptr %fmt, ...) {
 ; RV32-NEXT:    sw a7, 44(sp)
 ; RV32-NEXT:    call va_vprintf
 ; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
 ; RV32-NEXT:    addi sp, sp, 48
+; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: va_printf:
@@ -1853,7 +1881,9 @@ define i32 @va_printf(ptr %fmt, ...) {
 ; RV64-NEXT:    sd a7, 72(sp)
 ; RV64-NEXT:    call va_vprintf
 ; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
 ; RV64-NEXT:    addi sp, sp, 80
+; RV64-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-NEXT:    ret
 ;
 ; RV32-WITHFP-LABEL: va_printf:
@@ -1879,7 +1909,10 @@ define i32 @va_printf(ptr %fmt, ...) {
 ; RV32-WITHFP-NEXT:    call va_vprintf
 ; RV32-WITHFP-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32-WITHFP-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
+; RV32-WITHFP-NEXT:    .cfi_restore ra
+; RV32-WITHFP-NEXT:    .cfi_restore s0
 ; RV32-WITHFP-NEXT:    addi sp, sp, 48
+; RV32-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-WITHFP-NEXT:    ret
 ;
 ; RV64-WITHFP-LABEL: va_printf:
@@ -1905,7 +1938,10 @@ define i32 @va_printf(ptr %fmt, ...) {
 ; RV64-WITHFP-NEXT:    call va_vprintf
 ; RV64-WITHFP-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64-WITHFP-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
+; RV64-WITHFP-NEXT:    .cfi_restore ra
+; RV64-WITHFP-NEXT:    .cfi_restore s0
 ; RV64-WITHFP-NEXT:    addi sp, sp, 96
+; RV64-WITHFP-NEXT:    .cfi_def_cfa_offset 0
 ; RV64-WITHFP-NEXT:    ret
   %args = alloca ptr
   call void @llvm.va_start(ptr %args)
diff --git a/llvm/test/CodeGen/RISCV/addrspacecast.ll b/llvm/test/CodeGen/RISCV/addrspacecast.ll
index e55a57a5167822..80a0efb043ebdf 100644
--- a/llvm/test/CodeGen/RISCV/addrspacecast.ll
+++ b/llvm/test/CodeGen/RISCV/addrspacecast.ll
@@ -28,7 +28,9 @@ define void @cast1(ptr %ptr) {
 ; RV32I-NEXT:    .cfi_offset ra, -4
 ; RV32I-NEXT:    call foo
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    .cfi_restore ra
 ; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    .cfi_def_cfa_offset 0
 ; RV32I-NEXT:    ret
 ;
 ; RV64I-LABEL: cast1:
@@ -39,7 +41,9 @@ define void @cast1(ptr %ptr) {
 ; RV64I-NEXT:    .cfi_offset ra, -8
 ; RV64I-NEXT:    call foo
 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    .cfi_restore ra
 ; RV64I-NEXT:    addi sp, sp, 16
+; RV64I-NEXT:    .cfi_def_cfa_offset 0
 ; RV64I-NEXT:    ret
   %castptr = addrspacecast ptr %ptr to ptr addrspace(10)
   call void @foo(ptr addrspace(10) %castptr)
diff --git a/llvm/test/CodeGen/RISCV/atomicrmw-cond-sub-clamp.ll b/llvm/test/CodeGen/RISCV/atomicrmw-cond-sub-clamp.ll
index 0d6ae3a51e2469..f22115130117a8 100644
--- a/llvm/test/CodeGen/RISCV/atomicrmw-cond-sub-clamp.ll
+++ b/llvm/test/CodeGen/RISCV/atomicrmw-cond-sub-clamp.ll
@@ -51,7 +51,12 @@ define i8 @atomicrmw_usub_cond_i8(ptr %ptr, i8 %val) {
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    .cfi_restore ra
+; RV32I-NEXT:    .cfi_restore s0
+; RV32I-NEXT:    .cfi_restore s1
+; RV32I-NEXT:    .cfi_restore s2
 ; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    .cfi_def_cfa_offset 0
 ; RV32I-NEXT:    ret
 ;
 ; RV32IA-LABEL: atomicrmw_usub_cond_i8:
@@ -129,7 +134,12 @@ define i8 @atomicrmw_usub_cond_i8(ptr %ptr, i8 %val) {
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    .cfi_restore ra
+; RV64I-NEXT:    .cfi_restore s0
+; RV64I-NEXT:    .cfi_restore s1
+; RV64I-NEXT:    .cfi_restore s2
 ; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    .cfi_def_cfa_offset 0
 ; RV64I-NEXT:    ret
 ;
 ; RV64IA-LABEL: atomicrmw_usub_cond_i8:
@@ -216,7 +226,13 @@ define i16 @atomicrmw_usub_cond_i16(ptr %ptr, i16 %val) {
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    .cfi_restore ra
+; RV32I-NEXT:    .cfi_restore s0
+; RV32I-NEXT:    .cfi_restore s1
+; RV32I-NEXT:    .cfi_restore s2
+; RV32I-NEXT:    .cfi_restore s3
 ; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    .cfi_def_cfa_offset 0
 ; RV32I-NEXT:    ret
 ;
 ; RV32IA-LABEL: atomicrmw_usub_cond_i16:
@@ -300,7 +316,13 @@ define i16 @atomicrmw_usub_cond_i16(ptr %ptr, i16 %val) {
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s3, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    .cfi_restore ra
+; RV64I-NEXT:    .cfi_restore s0
+; RV64I-NEXT:    .cfi_restore s1
+; RV64I-NEXT:    .cfi_restore s2
+; RV64I-NEXT:    .cfi_restore s3
 ; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    .cfi_def_cfa_offset 0
 ; RV64I-NEXT:    ret
 ;
 ; RV64IA-LABEL: atomicrmw_usub_cond_i16:
@@ -378,7 +400,11 @@ define i32 @atomicrmw_usub_cond_i32(ptr %ptr, i32 %val) {
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    .cfi_restore ra
+; RV32I-NEXT:    .cfi_restore s0
+; RV32I-NEXT:    .cfi_restore s1
 ; RV32I-NEXT:    addi sp, sp, 16
+; RV32I-NEXT:    .cfi_def_cfa_offset 0
 ; RV32I-NEXT:    ret
 ;
 ; RV32IA-LABEL: atomicrmw_usub_cond_i32:
@@ -442,7 +468,12 @@ define i32 @atomicrmw_usub_cond_i32(ptr %ptr, i32 %val) {
 ; RV64I-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    .cfi_restore ra
+; RV64I-NEXT:    .cfi_restore s0
+; RV64I-NEXT:    .cfi_restore s1
+; RV64I-NEXT:    .cfi_restore s2
 ; RV64I-NEXT:    addi sp, sp, 48
+; RV64I-NEXT:    .cfi_def_cfa_offset 0
 ; RV64I-NEXT:    ret
 ;
 ; RV64IA-LABEL: atomicrmw_usub_cond_i32:
@@ -529,7 +560,12 @@ define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {
 ; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; RV32I-NEXT:    .cfi_restore ra
+; RV32I-NEXT:    .cfi_restore s0
+; RV32I-NEXT:    .cfi_restore s1
+; RV32I-NEXT:    .cfi_restore s2
 ; RV32I-NEXT:    addi sp, sp, 32
+; RV32I-NEXT:    .cfi_def_cfa_offset 0
 ; RV32I-NEXT:    ret
 ;
 ; RV32IA-LABEL: atomicrmw_usub_cond_i64:
@@ -586,7 +622,12 @@ define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {
 ; RV32IA-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
 ; RV32IA-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
 ; RV32IA-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; RV32IA-NEXT:    .cfi_restore ra
+; RV32IA-NEXT:    .cfi_restore s0
+; RV32IA-NEXT:    .cfi_restore s1
+; RV32IA-NEXT:    .cfi_restore s2
 ; RV32IA-NEXT:    addi sp, sp, 32
+; RV32IA-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IA-NEXT:    ret
 ;
 ; RV64I-LABEL: atomicrmw_usub_cond_i64:
@@ -621,7 +662,11 @@ define i64 @atomicrmw_usub_cond_i64(ptr %ptr, i64 %val) {
 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
 ; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload
+; RV64I-NEXT:    .cfi_restore ra
+; RV64I-NEXT:    .cfi_restore s0
+; RV64I-NEXT:    .cfi_restore s1
 ; RV64I-NEXT:    addi sp, sp, 32
+; RV64I-NEXT:    .cfi_def_cfa_offset 0
 ; RV64I-NEXT:    ret
 ;
 ; RV64IA-LABEL: atomicrmw_usub_cond_i64:
@@ -686,7 +731,11 @@ define i8 @atomicrmw_usub_sat_i8(ptr %ptr, i8 %val) {
 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
 ; RV32I-NEXT:    ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/110810


More information about the llvm-branch-commits mailing list