blob: 2f51014c367428e7597e5f3332d6141e77085b56 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=riscv64 -mattr=+save-restore,+reserve-x5 -verify-machineinstrs < %s \
; RUN: | FileCheck %s
; This test verifies that the shrink-wrap pass does not crash when the save
; point reaches the entry block (which has no predecessors) while trying to find
; a cheaper save point via FindIDom.
@a = global i32 0, align 4
define signext i32 @shrinkwrap_entry_no_preds() {
; CHECK-LABEL: shrinkwrap_entry_no_preds:
; CHECK: # %bb.0: # %entry
; CHECK-NEXT: call t0, __riscv_save_0
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: .cfi_offset ra, -8
; CHECK-NEXT: lui a0, %hi(a)
; CHECK-NEXT: lw a0, %lo(a)(a0)
; CHECK-NEXT: beqz a0, .LBB0_2
; CHECK-NEXT: # %bb.1: # %if.then
; CHECK-NEXT: call b
; CHECK-NEXT: .LBB0_2: # %if.end
; CHECK-NEXT: li a0, 0
; CHECK-NEXT: tail __riscv_restore_0
entry:
%0 = load i32, ptr @a, align 4
%tobool.not = icmp eq i32 %0, 0
br i1 %tobool.not, label %if.end, label %if.then
if.then:
tail call void @b()
br label %if.end
if.end:
ret i32 0
}
declare void @b()