diff --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp --- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp @@ -561,15 +561,11 @@ MachineBasicBlock::iterator MBBI = MBB.end(); DebugLoc DL; if (!MBB.empty()) { + MBBI = MBB.getLastNonDebugInstr(); + if (MBBI != MBB.end()) + DL = MBBI->getDebugLoc(); + MBBI = MBB.getFirstTerminator(); - if (MBBI == MBB.end()) - MBBI = MBB.getLastNonDebugInstr(); - DL = MBBI->getDebugLoc(); - - // If this is not a terminator, the actual insert location should be after the - // last instruction. - if (!MBBI->isTerminator()) - MBBI = std::next(MBBI); // If callee-saved registers are saved via libcall, place stack adjustment // before this call. diff --git a/llvm/test/CodeGen/RISCV/pr53662.mir b/llvm/test/CodeGen/RISCV/pr53662.mir new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/RISCV/pr53662.mir @@ -0,0 +1,18 @@ +# RUN: llc -mtriple=riscv64 -run-pass=prologepilog -o - %s | FileCheck %s +... +name: b +frameInfo: + savePoint: '%bb.0' + restorePoint: '%bb.1' +body: | + bb.0 : + PseudoBR %bb.1 + + bb.1: + ; CHECK: DBG_VALUE $noreg + DBG_VALUE $noreg + + bb.2: + PseudoRET implicit killed $x10 + +...