56 lines
1.4 KiB
LLVM
56 lines
1.4 KiB
LLVM
; RUN: opt -partial-inliner -S < %s | FileCheck %s
|
|
|
|
; Checks that valid costs are computed for intrinsic calls.
|
|
; https://bugs.llvm.org/show_bug.cgi?id=45932
|
|
|
|
|
|
@emit_notes = external global i8, align 2
|
|
|
|
; CHECK: var_reg_delete
|
|
; CHECK-NEXT: bb
|
|
; CHECK-NEXT: tail call void @delete_variable_part()
|
|
; CHECK-NEXT: ret void
|
|
|
|
define void @var_reg_delete() {
|
|
bb:
|
|
tail call void @delete_variable_part()
|
|
ret void
|
|
}
|
|
|
|
; CHECK: delete_variable_part
|
|
; CHECK-NEXT: bb
|
|
; CHECK-NEXT: %tmp1.i = tail call i32 @find_variable_location_part()
|
|
; CHECK-NEXT: %tmp3.i = icmp sgt i32 %tmp1.i, -1
|
|
; CHECK-NEXT: br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
|
|
|
|
; CHECK: bb4.i
|
|
; CHECK-NEXT: %tmp.i.i = load i8, i8* @emit_notes
|
|
; CHECK-NEXT: %tmp1.i.i = icmp ne i8 %tmp.i.i, 0
|
|
; CHECK-NEXT: tail call void @llvm.assume(i1 %tmp1.i.i)
|
|
; CHECK-NEXT: unreachable
|
|
|
|
; CHECK: delete_slot_part.exit
|
|
; CHECK-NEXT: ret void
|
|
|
|
define void @delete_variable_part() {
|
|
bb:
|
|
%tmp1.i = tail call i32 @find_variable_location_part()
|
|
%tmp3.i = icmp sgt i32 %tmp1.i, -1
|
|
br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
|
|
|
|
bb4.i:
|
|
%tmp.i.i = load i8, i8* @emit_notes, align 2
|
|
%tmp1.i.i = icmp ne i8 %tmp.i.i, 0
|
|
tail call void @llvm.assume(i1 %tmp1.i.i)
|
|
unreachable
|
|
|
|
delete_slot_part.exit:
|
|
ret void
|
|
}
|
|
|
|
; CHECK: declare i32 @find_variable_location_part
|
|
declare i32 @find_variable_location_part()
|
|
|
|
; CHECK: declare void @llvm.assume(i1 noundef)
|
|
declare void @llvm.assume(i1 noundef)
|