202 lines · plain
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 < %t2; 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 < %t3; 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 < %t4; 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 < %t5; 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 < %t6; 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 < %t7 8declare void @ext(i32, i32)9 10define i32 @jt2(i32 %a, i32 %b) {11entry:12 switch i32 %a, label %return [13 i32 1, label %bb114 i32 3, label %bb215 ]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 %return25bb2: tail call void @ext(i32 2, i32 2) br label %return26 27return: ret i32 %b28}29 30define i32 @jt4(i32 %a, i32 %b) {31entry:32 switch i32 %a, label %return [33 i32 1, label %bb134 i32 2, label %bb235 i32 3, label %bb336 i32 5, label %bb437 ]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 %return47bb2: tail call void @ext(i32 3, i32 2) br label %return48bb3: tail call void @ext(i32 4, i32 4) br label %return49bb4: tail call void @ext(i32 5, i32 6) br label %return50 51return: ret i32 %b52}53 54define i32 @jt8(i32 %a, i32 %b) {55entry:56 switch i32 %a, label %return [57 i32 1, label %bb158 i32 2, label %bb259 i32 3, label %bb360 i32 4, label %bb461 i32 5, label %bb562 i32 6, label %bb663 i32 7, label %bb764 i32 9, label %bb865 ]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 %return75bb2: tail call void @ext(i32 2, i32 2) br label %return76bb3: tail call void @ext(i32 3, i32 4) br label %return77bb4: tail call void @ext(i32 4, i32 6) br label %return78bb5: tail call void @ext(i32 5, i32 8) br label %return79bb6: tail call void @ext(i32 6, i32 10) br label %return80bb7: tail call void @ext(i32 7, i32 12) br label %return81bb8: tail call void @ext(i32 8, i32 14) br label %return82 83return: ret i32 %b84}85 86define i32 @jt12(i32 %a, i32 %b) {87entry:88 switch i32 %a, label %return [89 i32 1, label %bb190 i32 2, label %bb291 i32 3, label %bb392 i32 4, label %bb493 i32 5, label %bb594 i32 6, label %bb695 i32 7, label %bb796 i32 8, label %bb897 i32 9, label %bb998 i32 10, label %bb1099 i32 11, label %bb11100 i32 12, label %bb12101 ]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: {{^}}Jump Tables:109 110bb1: tail call void @ext(i32 1, i32 0) br label %return111bb2: tail call void @ext(i32 2, i32 2) br label %return112bb3: tail call void @ext(i32 3, i32 4) br label %return113bb4: tail call void @ext(i32 4, i32 6) br label %return114bb5: tail call void @ext(i32 5, i32 8) br label %return115bb6: tail call void @ext(i32 6, i32 10) br label %return116bb7: tail call void @ext(i32 7, i32 12) br label %return117bb8: tail call void @ext(i32 8, i32 14) br label %return118bb9: tail call void @ext(i32 9, i32 16) br label %return119bb10: tail call void @ext(i32 10, i32 18) br label %return120bb11: tail call void @ext(i32 11, i32 20) br label %return121bb12: tail call void @ext(i32 12, i32 22) br label %return122 123return: ret i32 %b124}125 126define i32 @jt12_min_size(i32 %a, i32 %b) minsize {127entry:128 switch i32 %a, label %return [129 i32 1, label %bb1130 i32 2, label %bb2131 i32 3, label %bb3132 i32 4, label %bb4133 i32 5, label %bb5134 i32 6, label %bb6135 i32 7, label %bb7136 i32 8, label %bb8137 i32 9, label %bb9138 i32 10, label %bb10139 i32 11, label %bb11140 i32 12, label %bb12141 ]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 %return151bb2: tail call void @ext(i32 2, i32 2) br label %return152bb3: tail call void @ext(i32 3, i32 4) br label %return153bb4: tail call void @ext(i32 4, i32 6) br label %return154bb5: tail call void @ext(i32 5, i32 8) br label %return155bb6: tail call void @ext(i32 6, i32 10) br label %return156bb7: tail call void @ext(i32 7, i32 12) br label %return157bb8: tail call void @ext(i32 8, i32 14) br label %return158bb9: tail call void @ext(i32 9, i32 16) br label %return159bb10: tail call void @ext(i32 10, i32 18) br label %return160bb11: tail call void @ext(i32 11, i32 20) br label %return161bb12: tail call void @ext(i32 12, i32 22) br label %return162 163return: ret i32 %b164}165 166define i32 @jt13(i32 %a, i32 %b) {167entry:168 switch i32 %a, label %return [169 i32 1, label %bb1170 i32 2, label %bb2171 i32 3, label %bb3172 i32 4, label %bb4173 i32 5, label %bb5174 i32 6, label %bb6175 i32 7, label %bb7176 i32 8, label %bb8177 i32 9, label %bb9178 i32 10, label %bb10179 i32 11, label %bb11180 i32 12, label %bb12181 i32 13, label %bb13182 ]183; CHECK-LABEL: function jt13:184; CHECK-NEXT: Jump Tables:185 186bb1: tail call void @ext(i32 1, i32 0) br label %return187bb2: tail call void @ext(i32 2, i32 2) br label %return188bb3: tail call void @ext(i32 3, i32 4) br label %return189bb4: tail call void @ext(i32 4, i32 6) br label %return190bb5: tail call void @ext(i32 5, i32 8) br label %return191bb6: tail call void @ext(i32 6, i32 10) br label %return192bb7: tail call void @ext(i32 7, i32 12) br label %return193bb8: tail call void @ext(i32 8, i32 14) br label %return194bb9: tail call void @ext(i32 9, i32 16) br label %return195bb10: tail call void @ext(i32 10, i32 18) br label %return196bb11: tail call void @ext(i32 11, i32 20) br label %return197bb12: tail call void @ext(i32 12, i32 22) br label %return198bb13: tail call void @ext(i32 13, i32 24) br label %return199 200return: ret i32 %b201}202