blob: 5fb7a67a7d9e83c57696e8217ab6a31645049495 [file] [log] [blame]
// 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}