131 lines · plain
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-lines2; 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-lines3; REQUIRES: x86_64-linux, asserts4 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 %b14}15 16; SWITCH-LABEL: Analyzing call of small_switch_default{{.*}}17; SWITCH: Cost: 018define i64 @small_switch_default(i64 %a) {19 switch i64 %a, label %default_branch [20 i64 -1, label %branch_021 i64 8, label %branch_122 i64 52, label %branch_223 ]24 25branch_0:26 br label %exit27 28branch_1:29 br label %exit30 31branch_2:32 br label %exit33 34default_branch:35 br label %exit36 37exit:38 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 3, %default_branch ]39 ret i64 %b40}41 42; SWITCH-LABEL: Analyzing call of small_switch_no_default{{.*}}43; SWITCH: Cost: -1044define i64 @small_switch_no_default(i64 %a) {45 switch i64 %a, label %unreachabledefault [46 i64 -1, label %branch_047 i64 8, label %branch_148 i64 52, label %branch_249 ]50 51branch_0:52 br label %exit53 54branch_1:55 br label %exit56 57branch_2:58 br label %exit59 60unreachabledefault:61 unreachable62 63exit:64 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ]65 ret i64 %b66}67 68; LOOKUPTABLE-LABEL: Analyzing call of lookup_table_default{{.*}}69; LOOKUPTABLE: Cost: 1070; SWITCH-LABEL: Analyzing call of lookup_table_default{{.*}}71; SWITCH: Cost: 2072define i64 @lookup_table_default(i64 %a) {73 switch i64 %a, label %default_branch [74 i64 0, label %branch_075 i64 1, label %branch_176 i64 2, label %branch_277 i64 3, label %branch_378 ]79 80branch_0:81 br label %exit82 83branch_1:84 br label %exit85 86branch_2:87 br label %exit88 89branch_3:90 br label %exit91 92default_branch:93 br label %exit94 95exit:96 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 7, %branch_3 ], [ 3, %default_branch ]97 ret i64 %b98}99 100; LOOKUPTABLE-LABEL: Analyzing call of lookup_table_no_default{{.*}}101; LOOKUPTABLE: Cost: 0102; SWITCH-LABEL: Analyzing call of lookup_table_no_default{{.*}}103; SWITCH: Cost: 20104define i64 @lookup_table_no_default(i64 %a) {105 switch i64 %a, label %unreachabledefault [106 i64 0, label %branch_0107 i64 1, label %branch_1108 i64 2, label %branch_2109 i64 3, label %branch_3110 ]111 112branch_0:113 br label %exit114 115branch_1:116 br label %exit117 118branch_2:119 br label %exit120 121branch_3:122 br label %exit123 124unreachabledefault:125 unreachable126 127exit:128 %b = phi i64 [ 5, %branch_0 ], [ 9, %branch_1 ], [ 2, %branch_2 ], [ 7, %branch_3 ]129 ret i64 %b130}131