xref: /llvm-project/llvm/test/Transforms/CodeExtractor/PartialInlineOr.ll (revision 3528e63d89305907b3d6e0f59f7b03b94a12dacc)
1; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s
2; RUN: opt < %s -passes=partial-inliner -max-num-inline-blocks=2 -S | FileCheck  --check-prefix=LIMIT %s
3
4; Function Attrs: nounwind uwtable
5define i32 @bar(i32 %arg) local_unnamed_addr #0 {
6bb:
7  %tmp = icmp slt i32 %arg, 0
8  br i1 %tmp, label %bb4, label %bb1
9
10bb1:                                              ; preds = %bb
11  %tmp2 = tail call i32 (...) @channels() #1
12  %tmp3 = icmp slt i32 %tmp2, %arg
13  br i1 %tmp3, label %bb4, label %bb5
14
15bb4:                                              ; preds = %bb1, %bb
16  tail call void (...) @foo() #1
17  tail call void (...) @foo() #1
18  tail call void (...) @foo() #1
19  tail call void (...) @foo() #1
20  tail call void (...) @foo() #1
21  tail call void (...) @foo() #1
22  tail call void (...) @foo() #1
23  tail call void (...) @foo() #1
24  tail call void (...) @foo() #1
25  br label %bb5
26
27bb5:                                              ; preds = %bb4, %bb1
28  %.0 = phi i32 [ 0, %bb4 ], [ 1, %bb1 ]
29  ret i32 %.0
30}
31
32declare i32 @channels(...) local_unnamed_addr
33
34declare void @foo(...) local_unnamed_addr
35
36; Function Attrs: nounwind uwtable
37define i32 @dummy_caller(i32 %arg) local_unnamed_addr #0 {
38bb:
39; CHECK-LABEL: @dummy_caller
40; CHECK: br i1
41; CHECK: br i1
42; CHECK: call void @bar.2.
43; LIMIT-LABEL: @dummy_caller
44; LIMIT-NOT: br
45; LIMIT: call i32 @bar(
46  %tmp = tail call i32 @bar(i32 %arg)
47  ret i32 %tmp
48}
49
50define i32 @bar_multi_ret(i32 %arg) local_unnamed_addr #0 {
51bb:
52  %tmp = icmp slt i32 %arg, 0
53  br i1 %tmp, label %bb4, label %bb1
54
55bb1:                                              ; preds = %bb
56  %tmp2 = tail call i32 (...) @channels() #1
57  %tmp3 = icmp slt i32 %tmp2, %arg
58  br i1 %tmp3, label %bb4, label %bb5
59
60bb4:                                              ; preds = %bb1, %bb
61  tail call void (...) @foo() #1
62  tail call void (...) @foo() #1
63  tail call void (...) @foo() #1
64  tail call void (...) @foo() #1
65  %tmp4 = icmp slt i32 %arg, 10
66  br i1 %tmp4, label %bb6, label %bb5
67bb6:
68  tail call void (...) @foo() #1
69  %tmp5 = icmp slt i32 %arg, 3
70  br i1 %tmp5, label %bb7, label %bb5
71bb7:
72  tail call void (...) @foo() #1
73  br label %bb8
74bb8:
75  ret i32 0
76
77bb5:                                              ; preds = %bb4, %bb1
78  %.0 = phi i32 [ 0, %bb4 ], [ 1, %bb1 ], [0, %bb6]
79  ret i32 %.0
80}
81
82define i32 @dummy_caller2(i32 %arg) local_unnamed_addr #0 {
83; CHECK: br i1
84; CHECK: br i1
85; CHECK: call {{.*}} @bar_multi_ret.1.
86  %tmp = tail call i32 @bar_multi_ret(i32 %arg)
87  ret i32 %tmp
88}
89
90attributes #0 = { nounwind uwtable }
91attributes #1 = { nounwind }
92
93!llvm.ident = !{!0}
94
95!0 = !{!"clang version 5.0.0 (trunk 300576)"}
96