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