[llvm] f24da9d - [RISC-V] Fix assert after 255162a (#212791)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 29 08:53:41 PDT 2026


Author: Nemanja Ivanovic
Date: 2026-07-29T15:53:36Z
New Revision: f24da9d03ba5d25c523e050da2ca3c4060ca23d5

URL: https://github.com/llvm/llvm-project/commit/f24da9d03ba5d25c523e050da2ca3c4060ca23d5
DIFF: https://github.com/llvm/llvm-project/commit/f24da9d03ba5d25c523e050da2ca3c4060ca23d5.diff

LOG: [RISC-V] Fix assert after 255162a (#212791)

The iterator passed-in may point to the end of the block which causes an
assertion failure when attempting to inspect the MI it points to. Guard
against this.

Added: 
    llvm/test/CodeGen/RISCV/epilog-crash.ll

Modified: 
    llvm/lib/Target/RISCV/RISCVFrameLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
index 701e6fccfecb2..6549bd74ad98b 100644
--- a/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVFrameLowering.cpp
@@ -195,7 +195,8 @@ static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB,
     return;
 
   // The shadow call stack popchk needs to happen after cm.pop that loads ra.
-  if (MI->getOpcode() == RISCV::CM_POP || MI->getOpcode() == RISCV::QC_CM_POP)
+  if (MI != MBB.end() &&
+      (MI->getOpcode() == RISCV::CM_POP || MI->getOpcode() == RISCV::QC_CM_POP))
     ++MI;
   const RISCVInstrInfo *TII = STI.getInstrInfo();
   if (HasHWShadowStack) {

diff  --git a/llvm/test/CodeGen/RISCV/epilog-crash.ll b/llvm/test/CodeGen/RISCV/epilog-crash.ll
new file mode 100644
index 0000000000000..ad5c8a7068b9f
--- /dev/null
+++ b/llvm/test/CodeGen/RISCV/epilog-crash.ll
@@ -0,0 +1,37 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=riscv64 < %s | FileCheck %s
+
+define double @test() #0 {
+; CHECK-LABEL: test:
+; CHECK:       # %bb.0: # %entry
+; CHECK-NEXT:    addi gp, gp, 8
+; CHECK-NEXT:    sd ra, -8(gp)
+; CHECK-NEXT:    .cfi_escape 0x16, 0x03, 0x02, 0x73, 0x78 #
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
+; CHECK-NEXT:    .cfi_offset ra, -8
+; CHECK-NEXT:    li a0, 0
+; CHECK-NEXT:    li a1, 0
+; CHECK-NEXT:    jalr a0
+; CHECK-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
+; CHECK-NEXT:    .cfi_restore ra
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
+; CHECK-NEXT:    ld ra, -8(gp)
+; CHECK-NEXT:    addi gp, gp, -8
+; CHECK-NEXT:    .cfi_restore gp
+; CHECK-NEXT:    li a0, 0
+; CHECK-NEXT:    ret
+entry:
+  br label %if.end.i
+
+if.end.i:                                         ; preds = %entry
+  %call.i.i = tail call i32 null(i128 0)
+  br label %exit
+
+exit:                               ; preds = %if.end.i
+  ret double 0.000000e+00
+}
+
+attributes #0 = { shadowcallstack }


        


More information about the llvm-commits mailing list