[llvm-branch-commits] [llvm] c937662 - [RISC-V] Fix assert after 255162a (#212791)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Sep 25 01:24:03 PDT 2026
Author: Nemanja Ivanovic
Date: 2026-09-25T10:23:32+02:00
New Revision: c9376624635f07153a643be1178a66d6c25ca8e7
URL: https://github.com/llvm/llvm-project/commit/c9376624635f07153a643be1178a66d6c25ca8e7
DIFF: https://github.com/llvm/llvm-project/commit/c9376624635f07153a643be1178a66d6c25ca8e7.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.
(cherry picked from commit f24da9d03ba5d25c523e050da2ca3c4060ca23d5)
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 516cb557feaba..8eb20927fb8a0 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-branch-commits
mailing list