195 lines
4.8 KiB
C++
195 lines
4.8 KiB
C++
|
// RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - -triple=x86_64-linux-gnu | FileCheck %s
|
||
|
|
||
|
extern volatile int i;
|
||
|
|
||
|
void OneCaseL() {
|
||
|
// CHECK-LABEL: define{{.*}}OneCaseL
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !6
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OneCaseU() {
|
||
|
// CHECK-LABEL: define{{.*}}OneCaseU
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !7
|
||
|
switch (i) {
|
||
|
[[unlikely]] case 1: ++i; break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesLN() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesLN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !8
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
case 2: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesUN() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesUN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !9
|
||
|
switch (i) {
|
||
|
[[unlikely]] case 1: break;
|
||
|
case 2: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesLU() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesLU
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !10
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
[[unlikely]] case 2: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughNNLN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughNNLN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !11
|
||
|
switch (i) {
|
||
|
case 1:
|
||
|
case 2:
|
||
|
[[likely]] case 3:
|
||
|
case 4: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughNNUN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughNNUN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !12
|
||
|
switch (i) {
|
||
|
case 1:
|
||
|
case 2:
|
||
|
[[unlikely]] case 3:
|
||
|
case 4: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughRangeSmallLN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughRangeSmallLN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !13
|
||
|
switch (i) {
|
||
|
case 1 ... 5: ++i;
|
||
|
case 102:
|
||
|
[[likely]] case 103:
|
||
|
case 104: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughRangeSmallUN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughRangeSmallUN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !14
|
||
|
switch (i) {
|
||
|
case 1 ... 5: ++i;
|
||
|
case 102:
|
||
|
[[unlikely]] case 103:
|
||
|
case 104: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughRangeLargeLLN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughRangeLargeLLN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !8
|
||
|
// CHECK: caserange
|
||
|
// CHECK: br{{.*}} !prof !15
|
||
|
switch (i) {
|
||
|
[[likely]] case 0 ... 64:
|
||
|
[[likely]] case 1003:
|
||
|
case 104: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CasesFallthroughRangeLargeUUN() {
|
||
|
// CHECK-LABEL: define{{.*}}CasesFallthroughRangeLargeUUN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !9
|
||
|
// CHECK: caserange
|
||
|
// CHECK: br{{.*}} !prof !16
|
||
|
switch (i) {
|
||
|
[[unlikely]] case 0 ... 64:
|
||
|
[[unlikely]] case 1003:
|
||
|
case 104: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OneCaseDefaultL() {
|
||
|
// CHECK-LABEL: define{{.*}}OneCaseDefaultL
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !17
|
||
|
switch (i) {
|
||
|
case 1: break;
|
||
|
[[likely]] default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void OneCaseDefaultU() {
|
||
|
// CHECK-LABEL: define{{.*}}OneCaseDefaultU
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !18
|
||
|
switch (i) {
|
||
|
case 1: break;
|
||
|
[[unlikely]] default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesDefaultLNL() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesDefaultLNL
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !19
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
case 2: break;
|
||
|
[[likely]] default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesDefaultLNN() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesDefaultLNN
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !8
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
case 2: break;
|
||
|
default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void TwoCasesDefaultLNU() {
|
||
|
// CHECK-LABEL: define{{.*}}TwoCasesDefaultLNU
|
||
|
// CHECK: switch
|
||
|
// CHECK: {{.*}} !prof !20
|
||
|
switch (i) {
|
||
|
[[likely]] case 1: break;
|
||
|
case 2: break;
|
||
|
[[unlikely]] default: break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// CHECK: !6 = !{!"branch_weights", i32 357913942, i32 715827883}
|
||
|
// CHECK: !7 = !{!"branch_weights", i32 536870912, i32 1}
|
||
|
// CHECK: !8 = !{!"branch_weights", i32 238609295, i32 715827883, i32 238609295}
|
||
|
// CHECK: !9 = !{!"branch_weights", i32 357913942, i32 1, i32 357913942}
|
||
|
// CHECK: !10 = !{!"branch_weights", i32 357913942, i32 715827883, i32 1}
|
||
|
// CHECK: !11 = !{!"branch_weights", i32 143165577, i32 143165577, i32 143165577, i32 715827883, i32 143165577}
|
||
|
// CHECK: !12 = !{!"branch_weights", i32 214748365, i32 214748365, i32 214748365, i32 1, i32 214748365}
|
||
|
// CHECK: !13 = !{!"branch_weights", i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 715827883, i32 79536432}
|
||
|
// CHECK: !14 = !{!"branch_weights", i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 1, i32 119304648}
|
||
|
// CHECK: !15 = !{!"branch_weights", i32 2000, i32 1}
|
||
|
// CHECK: !16 = !{!"branch_weights", i32 1, i32 2000}
|
||
|
// CHECK: !17 = !{!"branch_weights", i32 715827883, i32 357913942}
|
||
|
// CHECK: !18 = !{!"branch_weights", i32 1, i32 536870912}
|
||
|
// CHECK: !19 = !{!"branch_weights", i32 536870912, i32 536870912, i32 268435456}
|
||
|
// CHECK: !20 = !{!"branch_weights", i32 1, i32 715827883, i32 357913942}
|