brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 8055a2b Raw
151 lines · plain
1; RUN: llc -mtriple=x86_64-linux-gnu %s -o - -jump-table-density=25 | FileCheck %s --check-prefix=DENSE --check-prefix=CHECK2; RUN: llc -mtriple=x86_64-linux-gnu %s -o - -jump-table-density=10 | FileCheck %s --check-prefix=SPARSE --check-prefix=CHECK3 4declare void @g(i32)5 6define void @sparse(i32 %x) {7entry:8  switch i32 %x, label %return [9    i32 300, label %bb010    i32 100, label %bb111    i32 400, label %bb112    i32 500, label %bb213  ]14bb0: tail call void @g(i32 0) br label %return15bb1: tail call void @g(i32 1) br label %return16bb2: tail call void @g(i32 1) br label %return17return: ret void18 19; Should pivot around 400 for two subtrees with two jump tables each.20; CHECK-LABEL: sparse21; CHECK-NOT: cmpl22; CHECK: cmpl $39923; CHECK: cmpl $10024; CHECK: cmpl $30025; CHECK: cmpl $40026; CHECK: cmpl $50027}28 29define void @med(i32 %x) {30entry:31  switch i32 %x, label %return [32    i32 30, label %bb033    i32 10, label %bb134    i32 40, label %bb135    i32 50, label %bb236    i32 20, label %bb337  ]38bb0: tail call void @g(i32 0) br label %return39bb1: tail call void @g(i32 1) br label %return40bb2: tail call void @g(i32 1) br label %return41bb3: tail call void @g(i32 2) br label %return42return: ret void43 44; Lowered as a jump table when sparse, and branches when dense.45; CHECK-LABEL: med46; SPARSE: addl $-1047; SPARSE: cmpl $4048; SPARSE: ja49; SPARSE: jmpq *.LJTI50; DENSE-NOT: cmpl51; DENSE: cmpl $2952; DENSE-DAG: cmpl $1053; DENSE-DAG: cmpl $2054; DENSE-DAG: cmpl $3055; DENSE-DAG: cmpl $4056; DENSE-DAG: cmpl $5057; DENSE: retq58}59 60define void @dense(i32 %x) {61entry:62  switch i32 %x, label %return [63    i32 12, label %bb064    i32 4,  label %bb165    i32 16, label %bb166    i32 20, label %bb267    i32 8,  label %bb368  ]69bb0: tail call void @g(i32 0) br label %return70bb1: tail call void @g(i32 1) br label %return71bb2: tail call void @g(i32 1) br label %return72bb3: tail call void @g(i32 2) br label %return73return: ret void74 75; Lowered as a jump table when sparse, and branches when dense.76; CHECK-LABEL: dense77; CHECK: addl $-478; CHECK: cmpl $1679; CHECK: ja80; CHECK: jmpq *.LJTI81}82 83define void @dense_optsize(i32 %x) optsize {84entry:85  switch i32 %x, label %return [86    i32 12, label %bb087    i32 4,  label %bb188    i32 16, label %bb189    i32 20, label %bb290    i32 8,  label %bb391  ]92bb0: tail call void @g(i32 0) br label %return93bb1: tail call void @g(i32 1) br label %return94bb2: tail call void @g(i32 1) br label %return95bb3: tail call void @g(i32 2) br label %return96return: ret void97 98; Lowered as branches.99; CHECK-LABEL: dense_optsize100; CHECK: cmpl $11101; CHECK: cmpl $20102; CHECK: cmpl $16103; CHECK: cmpl $12104; CHECK: cmpl $4105; CHECK: cmpl $8106; CHECK: retq107}108 109define void @dense_pgso(i32 %x) !prof !14 {110entry:111  switch i32 %x, label %return [112    i32 12, label %bb0113    i32 4,  label %bb1114    i32 16, label %bb1115    i32 20, label %bb2116    i32 8,  label %bb3117  ]118bb0: tail call void @g(i32 0) br label %return119bb1: tail call void @g(i32 1) br label %return120bb2: tail call void @g(i32 1) br label %return121bb3: tail call void @g(i32 2) br label %return122return: ret void123 124; Lowered as branches.125; CHECK-LABEL: dense_pgso126; CHECK: cmpl $11127; CHECK: cmpl $20128; CHECK: cmpl $16129; CHECK: cmpl $12130; CHECK: cmpl $4131; CHECK: cmpl $8132; CHECK: retq133}134 135!llvm.module.flags = !{!0}136!0 = !{i32 1, !"ProfileSummary", !1}137!1 = !{!2, !3, !4, !5, !6, !7, !8, !9}138!2 = !{!"ProfileFormat", !"InstrProf"}139!3 = !{!"TotalCount", i64 10000}140!4 = !{!"MaxCount", i64 10}141!5 = !{!"MaxInternalCount", i64 1}142!6 = !{!"MaxFunctionCount", i64 1000}143!7 = !{!"NumCounts", i64 3}144!8 = !{!"NumFunctions", i64 3}145!9 = !{!"DetailedSummary", !10}146!10 = !{!11, !12, !13}147!11 = !{i32 10000, i64 100, i32 1}148!12 = !{i32 999000, i64 100, i32 1}149!13 = !{i32 999999, i64 1, i32 2}150!14 = !{!"function_entry_count", i64 0}151