125 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt %s -S -passes=inline -inline-threshold=11 | FileCheck %s3 4; Check for scenarios without TTI.5 6define i64 @foo1(i64 %a) {7; CHECK-LABEL: define i64 @foo1(8; CHECK-SAME: i64 [[A:%.*]]) {9; CHECK-NEXT: [[B:%.*]] = call i64 @bar1(i64 [[A]])10; CHECK-NEXT: ret i64 [[B]]11;12 %b = call i64 @bar1(i64 %a)13 ret i64 %b14}15 16define i64 @foo2(i64 %a) {17; CHECK-LABEL: define i64 @foo2(18; CHECK-SAME: i64 [[A:%.*]]) {19; CHECK-NEXT: [[B_I:%.*]] = call i64 @bar2(i64 [[A]])20; CHECK-NEXT: ret i64 [[B_I]]21;22 %b = call i64 @bar2(i64 %a)23 ret i64 %b24}25 26define i64 @bar1(i64 %a) {27; CHECK-LABEL: define i64 @bar1(28; CHECK-SAME: i64 [[A:%.*]]) {29; CHECK-NEXT: switch i64 [[A]], label [[DEFAULT_BRANCH:%.*]] [30; CHECK-NEXT: i64 0, label [[BRANCH_0:%.*]]31; CHECK-NEXT: i64 2, label [[BRANCH_2:%.*]]32; CHECK-NEXT: i64 4, label [[BRANCH_4:%.*]]33; CHECK-NEXT: i64 6, label [[BRANCH_6:%.*]]34; CHECK-NEXT: ]35; CHECK: branch_0:36; CHECK-NEXT: br label [[EXIT:%.*]]37; CHECK: branch_2:38; CHECK-NEXT: br label [[EXIT]]39; CHECK: branch_4:40; CHECK-NEXT: br label [[EXIT]]41; CHECK: branch_6:42; CHECK-NEXT: br label [[EXIT]]43; CHECK: default_branch:44; CHECK-NEXT: br label [[EXIT]]45; CHECK: exit:46; CHECK-NEXT: [[B:%.*]] = phi i64 [ 5, [[BRANCH_0]] ], [ 9, [[BRANCH_2]] ], [ 2, [[BRANCH_4]] ], [ 7, [[BRANCH_6]] ], [ 3, [[DEFAULT_BRANCH]] ]47; CHECK-NEXT: ret i64 [[B]]48;49 switch i64 %a, label %default_branch [50 i64 0, label %branch_051 i64 2, label %branch_252 i64 4, label %branch_453 i64 6, label %branch_654 ]55 56branch_0:57 br label %exit58 59branch_2:60 br label %exit61 62branch_4:63 br label %exit64 65branch_6:66 br label %exit67 68default_branch:69 br label %exit70 71exit:72 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_2 ], [ 2, %branch_4 ], [ 7, %branch_6 ], [ 3, %default_branch ]73 ret i64 %b74}75 76define i64 @bar2(i64 %a) {77; CHECK-LABEL: define i64 @bar2(78; CHECK-SAME: i64 [[A:%.*]]) {79; CHECK-NEXT: switch i64 [[A]], label [[UNREACHABLEDEFAULT:%.*]] [80; CHECK-NEXT: i64 0, label [[BRANCH_0:%.*]]81; CHECK-NEXT: i64 2, label [[BRANCH_2:%.*]]82; CHECK-NEXT: i64 4, label [[BRANCH_4:%.*]]83; CHECK-NEXT: i64 6, label [[BRANCH_6:%.*]]84; CHECK-NEXT: ]85; CHECK: branch_0:86; CHECK-NEXT: br label [[EXIT:%.*]]87; CHECK: branch_2:88; CHECK-NEXT: br label [[EXIT]]89; CHECK: branch_4:90; CHECK-NEXT: br label [[EXIT]]91; CHECK: branch_6:92; CHECK-NEXT: br label [[EXIT]]93; CHECK: unreachabledefault:94; CHECK-NEXT: unreachable95; CHECK: exit:96; CHECK-NEXT: [[B:%.*]] = phi i64 [ 5, [[BRANCH_0]] ], [ 9, [[BRANCH_2]] ], [ 2, [[BRANCH_4]] ], [ 7, [[BRANCH_6]] ]97; CHECK-NEXT: ret i64 [[B]]98;99 switch i64 %a, label %unreachabledefault [100 i64 0, label %branch_0101 i64 2, label %branch_2102 i64 4, label %branch_4103 i64 6, label %branch_6104 ]105 106branch_0:107 br label %exit108 109branch_2:110 br label %exit111 112branch_4:113 br label %exit114 115branch_6:116 br label %exit117 118unreachabledefault:119 unreachable120 121exit:122 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_2 ], [ 2, %branch_4 ], [ 7, %branch_6 ]123 ret i64 %b124}125