brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.7 KiB · 1268f5e Raw
339 lines · plain
1; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -aarch64-min-jump-table-entries=4 -jump-table-density=40                         -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK0  < %t2; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -aarch64-min-jump-table-entries=4 -jump-table-density=40 -max-jump-table-size=4  -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK4  < %t3; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -aarch64-min-jump-table-entries=4 -jump-table-density=40 -max-jump-table-size=8  -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK8  < %t4; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -aarch64-min-jump-table-entries=4 -jump-table-density=40 -max-jump-table-size=16 -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECK16 < %t5; RUN: llc %s -O2 -print-after-isel -mtriple=aarch64-linux-gnu -aarch64-min-jump-table-entries=4 -jump-table-density=40 -mcpu=exynos-m3         -o /dev/null 2> %t; FileCheck %s --check-prefixes=CHECK,CHECKM3 < %t6 7declare void @ext(i32, i32)8 9define i32 @jt1(i32 %a, i32 %b) {10entry:11  switch i32 %a, label %return [12    i32 1,  label %bb113    i32 2,  label %bb214    i32 3,  label %bb315    i32 4,  label %bb416    i32 5,  label %bb517    i32 6,  label %bb618    i32 7,  label %bb719    i32 8,  label %bb820    i32 9,  label %bb921    i32 10, label %bb1022    i32 11, label %bb1123    i32 12, label %bb1224    i32 13, label %bb1325    i32 14, label %bb1426    i32 15, label %bb1527    i32 16, label %bb1628    i32 17, label %bb1729  ]30; CHECK-LABEL: function jt1:31; CHECK-NEXT: Jump Tables:32; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.1733; CHECK0-NOT:   %jump-table.1:34; CHECK4-NEXT:  %jump-table.0: %bb.2 %bb.3 %bb.4 %bb.535; CHECK4-NEXT:  %jump-table.1: %bb.6 %bb.7 %bb.8 %bb.936; CHECK4-NEXT:  %jump-table.2: %bb.10 %bb.11 %bb.12 %bb.1337; CHECK4-NEXT:  %jump-table.3: %bb.14 %bb.15 %bb.16 %bb.1738; CHECK4-NOT:   %jump-table.4:39; CHECK8-NEXT:  %jump-table.0: %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.940; CHECK8-NEXT:  %jump-table.1: %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.1741; CHECK8-NOT:   %jump-table.2:42; CHECK16-NEXT: %jump-table.0: %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.1743; CHECK16-NOT:  %jump-table.1:44; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.1745; CHECKM3-NOT:  %jump-table.1:46 47bb1:  tail call void @ext(i32 1, i32 0)  br label %return48bb2:  tail call void @ext(i32 2, i32 2)  br label %return49bb3:  tail call void @ext(i32 3, i32 4)  br label %return50bb4:  tail call void @ext(i32 4, i32 6)  br label %return51bb5:  tail call void @ext(i32 5, i32 8)  br label %return52bb6:  tail call void @ext(i32 6, i32 10) br label %return53bb7:  tail call void @ext(i32 7, i32 12) br label %return54bb8:  tail call void @ext(i32 8, i32 14) br label %return55bb9:  tail call void @ext(i32 9, i32 16) br label %return56bb10: tail call void @ext(i32 1, i32 18) br label %return57bb11: tail call void @ext(i32 2, i32 20) br label %return58bb12: tail call void @ext(i32 3, i32 22) br label %return59bb13: tail call void @ext(i32 4, i32 24) br label %return60bb14: tail call void @ext(i32 5, i32 26) br label %return61bb15: tail call void @ext(i32 6, i32 28) br label %return62bb16: tail call void @ext(i32 7, i32 30) br label %return63bb17: tail call void @ext(i32 8, i32 32) br label %return64 65return: ret i32 %b66}67 68define void @jt2(i32 %x) {69entry:70  switch i32 %x, label %return [71    i32 1,  label %bb172    i32 2,  label %bb273    i32 3,  label %bb374    i32 4,  label %bb475 76    i32 14, label %bb577    i32 15, label %bb678  ]79; CHECK-LABEL: function jt2:80; CHECK-NEXT: Jump Tables:81; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.5 %bb.6{{$}}82; CHECK0-NOT:   %jump-table.1:83; CHECK4-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4{{$}}84; CHECK4-NOT:   %jump-table.1:85; CHECK8-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4{{$}}86; CHECK8-NOT:   %jump-table.1:87; CHECK16-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.5 %bb.6{{$}}88; CHECK16-NOT:  %jump-table.1:89; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.7 %bb.5 %bb.6{{$}}90; CHECKM3-NOT:  %jump-table.1:91; CHECK-DAG: End machine code for function jt2.92 93bb1: tail call void @ext(i32 6, i32 1) br label %return94bb2: tail call void @ext(i32 5, i32 2) br label %return95bb3: tail call void @ext(i32 4, i32 3) br label %return96bb4: tail call void @ext(i32 3, i32 4) br label %return97bb5: tail call void @ext(i32 2, i32 5) br label %return98bb6: tail call void @ext(i32 1, i32 6) br label %return99return: ret void100}101 102define void @jt3(i32 %x) {103entry:104  switch i32 %x, label %return [105    i32 1,  label %bb1106    i32 2,  label %bb2107    i32 3,  label %bb3108    i32 4,  label %bb4109 110    i32 14, label %bb5111    i32 15, label %bb6112    i32 16, label %bb7113    i32 17, label %bb8114 115    i32 19, label %bb9116    i32 20, label %bb10117 118    i32 22, label %bb11119    i32 23, label %bb12120  ]121; CHECK-LABEL: function jt3:122; CHECK-NEXT: Jump Tables:123; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10 %bb.13 %bb.11 %bb.12124; CHECK0-NOT:   %jump-table.1:125; CHECK4-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4126; CHECK4-NEXT:  %jump-table.1: %bb.5 %bb.6 %bb.7 %bb.8127; CHECK4-NOT:   %jump-table.2:128; CHECK8-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4129; CHECK8-NEXT:  %jump-table.1: %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10130; CHECK8-NOT:   %jump-table.2:131; CHECK16-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7132; CHECK16-NEXT: %jump-table.1: %bb.8 %bb.13 %bb.9 %bb.10 %bb.13 %bb.11 %bb.12133; CHECK16-NOT:  %jump-table.2:134; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10135; CHECKM3-NOT:  %jump-table.1:136; CHECK-DAG: End machine code for function jt3.137 138bb1:  tail call void @ext(i32 1,  i32 12) br label %return139bb2:  tail call void @ext(i32 2,  i32 11) br label %return140bb3:  tail call void @ext(i32 3,  i32 10) br label %return141bb4:  tail call void @ext(i32 4,  i32 9)  br label %return142bb5:  tail call void @ext(i32 5,  i32 8)  br label %return143bb6:  tail call void @ext(i32 6,  i32 7)  br label %return144bb7:  tail call void @ext(i32 7,  i32 6)  br label %return145bb8:  tail call void @ext(i32 8,  i32 5)  br label %return146bb9:  tail call void @ext(i32 9,  i32 4)  br label %return147bb10: tail call void @ext(i32 10, i32 3)  br label %return148bb11: tail call void @ext(i32 11, i32 2)  br label %return149bb12: tail call void @ext(i32 12, i32 1)  br label %return150 151return: ret void152}153 154define void @jt4(i32 %x) {155entry:156  switch i32 %x, label %default [157    i32 1,  label %bb1158    i32 2,  label %bb2159    i32 3,  label %bb3160    i32 4,  label %bb4161 162    i32 14, label %bb5163    i32 15, label %bb6164    i32 16, label %bb7165    i32 17, label %bb8166 167    i32 19, label %bb9168    i32 20, label %bb10169 170    i32 22, label %bb11171    i32 23, label %bb12172  ]173; CHECK-LABEL: function jt4:174; CHECK-NEXT: Jump Tables:175; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10 %bb.13 %bb.11 %bb.12176; CHECK0-NOT:   %jump-table.1:177; CHECK4-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4178; CHECK4-NEXT:  %jump-table.1: %bb.5 %bb.6 %bb.7 %bb.8179; CHECK4-NOT:   %jump-table.2:180; CHECK8-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4181; CHECK8-NEXT:  %jump-table.1: %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10182; CHECK8-NOT:   %jump-table.2:183; CHECK16-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7184; CHECK16-NEXT: %jump-table.1: %bb.8 %bb.13 %bb.9 %bb.10 %bb.13 %bb.11 %bb.12185; CHECK16-NOT:  %jump-table.2:186; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.13 %bb.5 %bb.6 %bb.7 %bb.8 %bb.13 %bb.9 %bb.10187; CHECKM3-NOT:  %jump-table.1:188; CHECK-DAG: End machine code for function jt4.189 190bb1:  tail call void @ext(i32 1,  i32 12) br label %return191bb2:  tail call void @ext(i32 2,  i32 11) br label %return192bb3:  tail call void @ext(i32 3,  i32 10) br label %return193bb4:  tail call void @ext(i32 4,  i32 9)  br label %return194bb5:  tail call void @ext(i32 5,  i32 8)  br label %return195bb6:  tail call void @ext(i32 6,  i32 7)  br label %return196bb7:  tail call void @ext(i32 7,  i32 6)  br label %return197bb8:  tail call void @ext(i32 8,  i32 5)  br label %return198bb9:  tail call void @ext(i32 9,  i32 4)  br label %return199bb10: tail call void @ext(i32 10, i32 3)  br label %return200bb11: tail call void @ext(i32 11, i32 2)  br label %return201bb12: tail call void @ext(i32 12, i32 1)  br label %return202default: unreachable203 204return: ret void205}206 207define i32 @jt1_optsize(i32 %a, i32 %b) optsize {208entry:209  switch i32 %a, label %return [210    i32 1,  label %bb1211    i32 2,  label %bb2212    i32 3,  label %bb3213    i32 4,  label %bb4214    i32 5,  label %bb5215    i32 6,  label %bb6216    i32 7,  label %bb7217    i32 8,  label %bb8218    i32 9,  label %bb9219    i32 10, label %bb10220    i32 11, label %bb11221    i32 12, label %bb12222    i32 13, label %bb13223    i32 14, label %bb14224    i32 15, label %bb15225    i32 16, label %bb16226    i32 17, label %bb17227  ]228; CHECK-LABEL: function jt1_optsize:229; CHECK-NEXT: Jump Tables:230; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17231; CHECK0-NOT:   %jump-table.1:232; CHECK4-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17233; CHECK4-NOT:   %jump-table.1:234; CHECK8-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17235; CHECK8-NOT:   %jump-table.1:236; CHECK16-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17237; CHECK16-NOT:  %jump-table.1:238; CHECKM1-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17239; CHECKM1-NOT:  %jump-table.1:240; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17241; CHECKM3-NOT:  %jump-table.1:242; CHECK-DAG: End machine code for function jt1_optsize.243 244bb1:  tail call void @ext(i32 1, i32 0)  br label %return245bb2:  tail call void @ext(i32 2, i32 2)  br label %return246bb3:  tail call void @ext(i32 3, i32 4)  br label %return247bb4:  tail call void @ext(i32 4, i32 6)  br label %return248bb5:  tail call void @ext(i32 5, i32 8)  br label %return249bb6:  tail call void @ext(i32 6, i32 10) br label %return250bb7:  tail call void @ext(i32 7, i32 12) br label %return251bb8:  tail call void @ext(i32 8, i32 14) br label %return252bb9:  tail call void @ext(i32 9, i32 16) br label %return253bb10: tail call void @ext(i32 1, i32 18) br label %return254bb11: tail call void @ext(i32 2, i32 20) br label %return255bb12: tail call void @ext(i32 3, i32 22) br label %return256bb13: tail call void @ext(i32 4, i32 24) br label %return257bb14: tail call void @ext(i32 5, i32 26) br label %return258bb15: tail call void @ext(i32 6, i32 28) br label %return259bb16: tail call void @ext(i32 7, i32 30) br label %return260bb17: tail call void @ext(i32 8, i32 32) br label %return261 262return: ret i32 %b263}264 265define i32 @jt1_pgso(i32 %a, i32 %b) !prof !14 {266entry:267  switch i32 %a, label %return [268    i32 1,  label %bb1269    i32 2,  label %bb2270    i32 3,  label %bb3271    i32 4,  label %bb4272    i32 5,  label %bb5273    i32 6,  label %bb6274    i32 7,  label %bb7275    i32 8,  label %bb8276    i32 9,  label %bb9277    i32 10, label %bb10278    i32 11, label %bb11279    i32 12, label %bb12280    i32 13, label %bb13281    i32 14, label %bb14282    i32 15, label %bb15283    i32 16, label %bb16284    i32 17, label %bb17285  ]286; CHECK-LABEL: function jt1_pgso:287; CHECK-NEXT: Jump Tables:288; CHECK0-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17289; CHECK0-NOT:   %jump-table.1:290; CHECK4-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17291; CHECK4-NOT:   %jump-table.1:292; CHECK8-NEXT:  %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17293; CHECK8-NOT:   %jump-table.1:294; CHECK16-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17295; CHECK16-NOT:  %jump-table.1:296; CHECKM1-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17297; CHECKM1-NOT:  %jump-table.1:298; CHECKM3-NEXT: %jump-table.0: %bb.1 %bb.2 %bb.3 %bb.4 %bb.5 %bb.6 %bb.7 %bb.8 %bb.9 %bb.10 %bb.11 %bb.12 %bb.13 %bb.14 %bb.15 %bb.16 %bb.17299; CHECKM3-NOT:  %jump-table.1:300; CHECK-DAG: End machine code for function jt1_pgso.301 302bb1:  tail call void @ext(i32 1, i32 0)  br label %return303bb2:  tail call void @ext(i32 2, i32 2)  br label %return304bb3:  tail call void @ext(i32 3, i32 4)  br label %return305bb4:  tail call void @ext(i32 4, i32 6)  br label %return306bb5:  tail call void @ext(i32 5, i32 8)  br label %return307bb6:  tail call void @ext(i32 6, i32 10) br label %return308bb7:  tail call void @ext(i32 7, i32 12) br label %return309bb8:  tail call void @ext(i32 8, i32 14) br label %return310bb9:  tail call void @ext(i32 9, i32 16) br label %return311bb10: tail call void @ext(i32 1, i32 18) br label %return312bb11: tail call void @ext(i32 2, i32 20) br label %return313bb12: tail call void @ext(i32 3, i32 22) br label %return314bb13: tail call void @ext(i32 4, i32 24) br label %return315bb14: tail call void @ext(i32 5, i32 26) br label %return316bb15: tail call void @ext(i32 6, i32 28) br label %return317bb16: tail call void @ext(i32 7, i32 30) br label %return318bb17: tail call void @ext(i32 8, i32 32) br label %return319 320return: ret i32 %b321}322 323!llvm.module.flags = !{!0}324!0 = !{i32 1, !"ProfileSummary", !1}325!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}326!2 = !{!"ProfileFormat", !"InstrProf"}327!3 = !{!"TotalCount", i64 10000}328!4 = !{!"MaxCount", i64 10}329!5 = !{!"MaxInternalCount", i64 1}330!6 = !{!"MaxFunctionCount", i64 1000}331!7 = !{!"NumCounts", i64 3}332!8 = !{!"NumFunctions", i64 3}333!9 = !{!"DetailedSummary", !10}334!10 = !{!11, !12, !13}335!11 = !{i32 10000, i64 100, i32 1}336!12 = !{i32 999000, i64 100, i32 1}337!13 = !{i32 999999, i64 1, i32 2}338!14 = !{!"function_entry_count", i64 0}339