llvm-project/llvm/test/CodeGen/RISCV/push-pop-opt-crash.ll
Michael Maitland 15c96d6874 [RISCV] Update unrelated bad code from test case
In #131684, we found that the code generated a bnez zero, which is always
false. Since this is unrelated to the regression the test case was added for,
we change the IR here to avoid this test case from having this silly branching
pattern. This will help this test case avoid any changes as we do work to
optimize branches in the RISC-V backend.
2025-03-19 11:09:49 -07:00

57 lines
1.8 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
; RUN: llc -mattr=+zcmp -verify-machineinstrs \
; RUN: -mtriple=riscv32 -target-abi=ilp32 < %s \
; RUN: | FileCheck %s -check-prefixes=RV32IZCMP
; RUN: llc -mattr=+zcmp -verify-machineinstrs \
; RUN: -mtriple=riscv64 -target-abi=lp64 < %s \
; RUN: | FileCheck %s -check-prefixes=RV64IZCMP
; This source code exposed a crash in the RISC-V Zcmp Push/Pop optimization
; pass. The root cause was: Not doing a bounds check before using a returned
; iterator.
declare dso_local void @f1() local_unnamed_addr
declare dso_local void @f2() local_unnamed_addr
define dso_local void @f0(i1 %c) local_unnamed_addr {
; RV32IZCMP-LABEL: f0:
; RV32IZCMP: # %bb.0: # %entry
; RV32IZCMP-NEXT: andi a0, a0, 1
; RV32IZCMP-NEXT: beqz a0, .LBB0_2
; RV32IZCMP-NEXT: # %bb.1: # %if.T
; RV32IZCMP-NEXT: cm.push {ra}, -16
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV32IZCMP-NEXT: .cfi_offset ra, -4
; RV32IZCMP-NEXT: call f1
; RV32IZCMP-NEXT: cm.pop {ra}, 16
; RV32IZCMP-NEXT: .cfi_restore ra
; RV32IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV32IZCMP-NEXT: .LBB0_2: # %if.F
; RV32IZCMP-NEXT: tail f2
;
; RV64IZCMP-LABEL: f0:
; RV64IZCMP: # %bb.0: # %entry
; RV64IZCMP-NEXT: andi a0, a0, 1
; RV64IZCMP-NEXT: beqz a0, .LBB0_2
; RV64IZCMP-NEXT: # %bb.1: # %if.T
; RV64IZCMP-NEXT: cm.push {ra}, -16
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 16
; RV64IZCMP-NEXT: .cfi_offset ra, -8
; RV64IZCMP-NEXT: call f1
; RV64IZCMP-NEXT: cm.pop {ra}, 16
; RV64IZCMP-NEXT: .cfi_restore ra
; RV64IZCMP-NEXT: .cfi_def_cfa_offset 0
; RV64IZCMP-NEXT: .LBB0_2: # %if.F
; RV64IZCMP-NEXT: tail f2
entry:
br i1 %c, label %if.T, label %if.F
if.T:
tail call void @f1()
br label %if.F
if.F:
tail call void @f2()
ret void
}