1; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=0 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK0 < %t 2; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=2 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK2 < %t 3; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=4 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK4 < %t 4; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=8 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK8 < %t 5; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -aarch64-min-jump-table-entries=12 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK12 < %t 6; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -jump-table-density=40 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK-DEFAULT < %t 7 8declare void @ext(i32, i32) 9 10define i32 @jt2(i32 %a, i32 %b) { 11entry: 12 switch i32 %a, label %return [ 13 i32 1, label %bb1 14 i32 3, label %bb2 15 ] 16; CHECK-LABEL: function jt2: 17; CHECK0-NEXT: Jump Tables: 18; CHECK2-NEXT: Jump Tables: 19; CHECK4-NOT: {{^}}Jump Tables: 20; CHECK8-NOT: {{^}}Jump Tables: 21; CHECK12-NOT: {{^}}Jump Tables: 22; CHECK-DEFAULT-NOT: {{^}}Jump Tables: 23 24bb1: tail call void @ext(i32 1, i32 0) br label %return 25bb2: tail call void @ext(i32 2, i32 2) br label %return 26 27return: ret i32 %b 28} 29 30define i32 @jt4(i32 %a, i32 %b) { 31entry: 32 switch i32 %a, label %return [ 33 i32 1, label %bb1 34 i32 2, label %bb2 35 i32 3, label %bb3 36 i32 5, label %bb4 37 ] 38; CHECK-LABEL: function jt4: 39; CHECK0-NEXT: Jump Tables: 40; CHECK2-NEXT: Jump Tables: 41; CHECK4-NEXT: Jump Tables: 42; CHECK8-NOT: {{^}}Jump Tables: 43; CHECK12-NOT: {{^}}Jump Tables: 44; CHECK-DEFAULT-NOT: {{^}}Jump Tables: 45 46bb1: tail call void @ext(i32 1, i32 0) br label %return 47bb2: tail call void @ext(i32 3, i32 2) br label %return 48bb3: tail call void @ext(i32 4, i32 4) br label %return 49bb4: tail call void @ext(i32 5, i32 6) br label %return 50 51return: ret i32 %b 52} 53 54define i32 @jt8(i32 %a, i32 %b) { 55entry: 56 switch i32 %a, label %return [ 57 i32 1, label %bb1 58 i32 2, label %bb2 59 i32 3, label %bb3 60 i32 4, label %bb4 61 i32 5, label %bb5 62 i32 6, label %bb6 63 i32 7, label %bb7 64 i32 9, label %bb8 65 ] 66; CHECK-LABEL: function jt8: 67; CHECK0-NEXT: Jump Tables: 68; CHECK2-NEXT: Jump Tables: 69; CHECK4-NEXT: Jump Tables: 70; CHECK8-NEXT: Jump Tables: 71; CHECK12-NOT: Jump Tables: 72; CHECK-DEFAULT-NOT: {{^}}Jump Tables: 73 74bb1: tail call void @ext(i32 1, i32 0) br label %return 75bb2: tail call void @ext(i32 2, i32 2) br label %return 76bb3: tail call void @ext(i32 3, i32 4) br label %return 77bb4: tail call void @ext(i32 4, i32 6) br label %return 78bb5: tail call void @ext(i32 5, i32 8) br label %return 79bb6: tail call void @ext(i32 6, i32 10) br label %return 80bb7: tail call void @ext(i32 7, i32 12) br label %return 81bb8: tail call void @ext(i32 8, i32 14) br label %return 82 83return: ret i32 %b 84} 85 86define i32 @jt12(i32 %a, i32 %b) { 87entry: 88 switch i32 %a, label %return [ 89 i32 1, label %bb1 90 i32 2, label %bb2 91 i32 3, label %bb3 92 i32 4, label %bb4 93 i32 5, label %bb5 94 i32 6, label %bb6 95 i32 7, label %bb7 96 i32 8, label %bb8 97 i32 9, label %bb9 98 i32 10, label %bb10 99 i32 11, label %bb11 100 i32 12, label %bb12 101 ] 102; CHECK-LABEL: function jt12: 103; CHECK0-NEXT: Jump Tables: 104; CHECK2-NEXT: Jump Tables: 105; CHECK4-NEXT: Jump Tables: 106; CHECK8-NEXT: Jump Tables: 107; CHECK12-NEXT: Jump Tables: 108; CHECK-DEFAULT-NOT: {{^}}Jump Tables: 109 110bb1: tail call void @ext(i32 1, i32 0) br label %return 111bb2: tail call void @ext(i32 2, i32 2) br label %return 112bb3: tail call void @ext(i32 3, i32 4) br label %return 113bb4: tail call void @ext(i32 4, i32 6) br label %return 114bb5: tail call void @ext(i32 5, i32 8) br label %return 115bb6: tail call void @ext(i32 6, i32 10) br label %return 116bb7: tail call void @ext(i32 7, i32 12) br label %return 117bb8: tail call void @ext(i32 8, i32 14) br label %return 118bb9: tail call void @ext(i32 9, i32 16) br label %return 119bb10: tail call void @ext(i32 10, i32 18) br label %return 120bb11: tail call void @ext(i32 11, i32 20) br label %return 121bb12: tail call void @ext(i32 12, i32 22) br label %return 122 123return: ret i32 %b 124} 125 126define i32 @jt12_min_size(i32 %a, i32 %b) minsize { 127entry: 128 switch i32 %a, label %return [ 129 i32 1, label %bb1 130 i32 2, label %bb2 131 i32 3, label %bb3 132 i32 4, label %bb4 133 i32 5, label %bb5 134 i32 6, label %bb6 135 i32 7, label %bb7 136 i32 8, label %bb8 137 i32 9, label %bb9 138 i32 10, label %bb10 139 i32 11, label %bb11 140 i32 12, label %bb12 141 ] 142; CHECK-LABEL: function jt12_min_size: 143; CHECK0-NEXT: Jump Tables: 144; CHECK2-NEXT: Jump Tables: 145; CHECK4-NEXT: Jump Tables: 146; CHECK8-NEXT: Jump Tables: 147; CHECK12-NEXT: Jump Tables: 148; CHECK-DEFAULT: Jump Tables: 149 150bb1: tail call void @ext(i32 1, i32 0) br label %return 151bb2: tail call void @ext(i32 2, i32 2) br label %return 152bb3: tail call void @ext(i32 3, i32 4) br label %return 153bb4: tail call void @ext(i32 4, i32 6) br label %return 154bb5: tail call void @ext(i32 5, i32 8) br label %return 155bb6: tail call void @ext(i32 6, i32 10) br label %return 156bb7: tail call void @ext(i32 7, i32 12) br label %return 157bb8: tail call void @ext(i32 8, i32 14) br label %return 158bb9: tail call void @ext(i32 9, i32 16) br label %return 159bb10: tail call void @ext(i32 10, i32 18) br label %return 160bb11: tail call void @ext(i32 11, i32 20) br label %return 161bb12: tail call void @ext(i32 12, i32 22) br label %return 162 163return: ret i32 %b 164} 165 166define i32 @jt13(i32 %a, i32 %b) { 167entry: 168 switch i32 %a, label %return [ 169 i32 1, label %bb1 170 i32 2, label %bb2 171 i32 3, label %bb3 172 i32 4, label %bb4 173 i32 5, label %bb5 174 i32 6, label %bb6 175 i32 7, label %bb7 176 i32 8, label %bb8 177 i32 9, label %bb9 178 i32 10, label %bb10 179 i32 11, label %bb11 180 i32 12, label %bb12 181 i32 13, label %bb13 182 ] 183; CHECK-LABEL: function jt13: 184; CHECK-NEXT: Jump Tables: 185 186bb1: tail call void @ext(i32 1, i32 0) br label %return 187bb2: tail call void @ext(i32 2, i32 2) br label %return 188bb3: tail call void @ext(i32 3, i32 4) br label %return 189bb4: tail call void @ext(i32 4, i32 6) br label %return 190bb5: tail call void @ext(i32 5, i32 8) br label %return 191bb6: tail call void @ext(i32 6, i32 10) br label %return 192bb7: tail call void @ext(i32 7, i32 12) br label %return 193bb8: tail call void @ext(i32 8, i32 14) br label %return 194bb9: tail call void @ext(i32 9, i32 16) br label %return 195bb10: tail call void @ext(i32 10, i32 18) br label %return 196bb11: tail call void @ext(i32 11, i32 20) br label %return 197bb12: tail call void @ext(i32 12, i32 22) br label %return 198bb13: tail call void @ext(i32 13, i32 24) br label %return 199 200return: ret i32 %b 201} 202