1; RUN: opt -partial-inliner -S < %s | FileCheck %s
2
3; Checks that valid costs are computed for intrinsic calls.
4; https://bugs.llvm.org/show_bug.cgi?id=45932
5
6
7@emit_notes = external global i8, align 2
8
9; CHECK: var_reg_delete
10; CHECK-NEXT: bb
11; CHECK-NEXT: tail call void @delete_variable_part()
12; CHECK-NEXT: ret void
13
14define void @var_reg_delete() {
15bb:
16  tail call void @delete_variable_part()
17  ret void
18}
19
20; CHECK: delete_variable_part
21; CHECK-NEXT: bb
22; CHECK-NEXT: %tmp1.i = tail call i32 @find_variable_location_part()
23; CHECK-NEXT: %tmp3.i = icmp sgt i32 %tmp1.i, -1
24; CHECK-NEXT: br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
25
26; CHECK: bb4.i
27; CHECK-NEXT: %tmp.i.i = load i8, i8* @emit_notes
28; CHECK-NEXT:   %tmp1.i.i = icmp ne i8 %tmp.i.i, 0
29; CHECK-NEXT:  tail call void @llvm.assume(i1 %tmp1.i.i)
30; CHECK-NEXT:  unreachable
31
32; CHECK: delete_slot_part.exit
33; CHECK-NEXT: ret void
34
35define void @delete_variable_part() {
36bb:
37  %tmp1.i = tail call i32 @find_variable_location_part()
38  %tmp3.i = icmp sgt i32 %tmp1.i, -1
39  br i1 %tmp3.i, label %bb4.i, label %delete_slot_part.exit
40
41bb4.i:
42  %tmp.i.i = load i8, i8* @emit_notes, align 2
43  %tmp1.i.i = icmp ne i8 %tmp.i.i, 0
44  tail call void @llvm.assume(i1 %tmp1.i.i)
45  unreachable
46
47delete_slot_part.exit:
48  ret void
49}
50
51; CHECK: declare i32 @find_variable_location_part
52declare i32 @find_variable_location_part()
53
54; CHECK: declare void @llvm.assume(i1 noundef)
55declare void @llvm.assume(i1 noundef)
56