1; RUN: opt -S -passes=inline %s -debug-only=inline-cost -min-jump-table-entries=4 --disable-output 2>&1 | FileCheck %s -check-prefix=LOOKUPTABLE -match-full-lines 2; RUN: opt -S -passes=inline %s -debug-only=inline-cost -min-jump-table-entries=5 --disable-output 2>&1 | FileCheck %s -check-prefix=SWITCH -match-full-lines 3; REQUIRES: x86_64-linux, asserts 4 5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" 6target triple = "x86_64-unknown-linux-gnu" 7 8define i64 @main(i64 %a) { 9 %b = call i64 @small_switch_default(i64 %a) 10 %c = call i64 @small_switch_no_default(i64 %a) 11 %d = call i64 @lookup_table_default(i64 %a) 12 %e = call i64 @lookup_table_no_default(i64 %a) 13 ret i64 %b 14} 15 16; SWITCH-LABEL: Analyzing call of small_switch_default{{.*}} 17; SWITCH: Cost: 0 18define i64 @small_switch_default(i64 %a) { 19 switch i64 %a, label %default_branch [ 20 i64 -1, label %branch_0 21 i64 8, label %branch_1 22 i64 52, label %branch_2 23 ] 24 25branch_0: 26 br label %exit 27 28branch_1: 29 br label %exit 30 31branch_2: 32 br label %exit 33 34default_branch: 35 br label %exit 36 37exit: 38 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 3, %default_branch ] 39 ret i64 %b 40} 41 42; SWITCH-LABEL: Analyzing call of small_switch_no_default{{.*}} 43; SWITCH: Cost: -10 44define i64 @small_switch_no_default(i64 %a) { 45 switch i64 %a, label %unreachabledefault [ 46 i64 -1, label %branch_0 47 i64 8, label %branch_1 48 i64 52, label %branch_2 49 ] 50 51branch_0: 52 br label %exit 53 54branch_1: 55 br label %exit 56 57branch_2: 58 br label %exit 59 60unreachabledefault: 61 unreachable 62 63exit: 64 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ] 65 ret i64 %b 66} 67 68; LOOKUPTABLE-LABEL: Analyzing call of lookup_table_default{{.*}} 69; LOOKUPTABLE: Cost: 10 70; SWITCH-LABEL: Analyzing call of lookup_table_default{{.*}} 71; SWITCH: Cost: 20 72define i64 @lookup_table_default(i64 %a) { 73 switch i64 %a, label %default_branch [ 74 i64 0, label %branch_0 75 i64 1, label %branch_1 76 i64 2, label %branch_2 77 i64 3, label %branch_3 78 ] 79 80branch_0: 81 br label %exit 82 83branch_1: 84 br label %exit 85 86branch_2: 87 br label %exit 88 89branch_3: 90 br label %exit 91 92default_branch: 93 br label %exit 94 95exit: 96 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 7, %branch_3 ], [ 3, %default_branch ] 97 ret i64 %b 98} 99 100; LOOKUPTABLE-LABEL: Analyzing call of lookup_table_no_default{{.*}} 101; LOOKUPTABLE: Cost: 0 102; SWITCH-LABEL: Analyzing call of lookup_table_no_default{{.*}} 103; SWITCH: Cost: 20 104define i64 @lookup_table_no_default(i64 %a) { 105 switch i64 %a, label %unreachabledefault [ 106 i64 0, label %branch_0 107 i64 1, label %branch_1 108 i64 2, label %branch_2 109 i64 3, label %branch_3 110 ] 111 112branch_0: 113 br label %exit 114 115branch_1: 116 br label %exit 117 118branch_2: 119 br label %exit 120 121branch_3: 122 br label %exit 123 124unreachabledefault: 125 unreachable 126 127exit: 128 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 7, %branch_3 ] 129 ret i64 %b 130} 131