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