Mark de Wever | 2bcda6b | 2020-10-18 13:34:41 +0200 | [diff] [blame] | 1 | // RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - -triple=x86_64-linux-gnu | FileCheck %s |
| 2 | |
| 3 | extern volatile int i; |
| 4 | |
| 5 | void OneCaseL() { |
| 6 | // CHECK-LABEL: define{{.*}}OneCaseL |
| 7 | // CHECK: switch |
| 8 | // CHECK: {{.*}} !prof !6 |
| 9 | switch (i) { |
| 10 | [[likely]] case 1: break; |
| 11 | } |
| 12 | } |
| 13 | |
| 14 | void OneCaseU() { |
| 15 | // CHECK-LABEL: define{{.*}}OneCaseU |
| 16 | // CHECK: switch |
| 17 | // CHECK: {{.*}} !prof !7 |
| 18 | switch (i) { |
| 19 | [[unlikely]] case 1: ++i; break; |
| 20 | } |
| 21 | } |
| 22 | |
| 23 | void TwoCasesLN() { |
| 24 | // CHECK-LABEL: define{{.*}}TwoCasesLN |
| 25 | // CHECK: switch |
| 26 | // CHECK: {{.*}} !prof !8 |
| 27 | switch (i) { |
| 28 | [[likely]] case 1: break; |
| 29 | case 2: break; |
| 30 | } |
| 31 | } |
| 32 | |
| 33 | void TwoCasesUN() { |
| 34 | // CHECK-LABEL: define{{.*}}TwoCasesUN |
| 35 | // CHECK: switch |
| 36 | // CHECK: {{.*}} !prof !9 |
| 37 | switch (i) { |
| 38 | [[unlikely]] case 1: break; |
| 39 | case 2: break; |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | void TwoCasesLU() { |
| 44 | // CHECK-LABEL: define{{.*}}TwoCasesLU |
| 45 | // CHECK: switch |
| 46 | // CHECK: {{.*}} !prof !10 |
| 47 | switch (i) { |
| 48 | [[likely]] case 1: break; |
| 49 | [[unlikely]] case 2: break; |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | void CasesFallthroughNNLN() { |
| 54 | // CHECK-LABEL: define{{.*}}CasesFallthroughNNLN |
| 55 | // CHECK: switch |
| 56 | // CHECK: {{.*}} !prof !11 |
| 57 | switch (i) { |
| 58 | case 1: |
| 59 | case 2: |
| 60 | [[likely]] case 3: |
| 61 | case 4: break; |
| 62 | } |
| 63 | } |
| 64 | |
| 65 | void CasesFallthroughNNUN() { |
| 66 | // CHECK-LABEL: define{{.*}}CasesFallthroughNNUN |
| 67 | // CHECK: switch |
| 68 | // CHECK: {{.*}} !prof !12 |
| 69 | switch (i) { |
| 70 | case 1: |
| 71 | case 2: |
| 72 | [[unlikely]] case 3: |
| 73 | case 4: break; |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | void CasesFallthroughRangeSmallLN() { |
| 78 | // CHECK-LABEL: define{{.*}}CasesFallthroughRangeSmallLN |
| 79 | // CHECK: switch |
| 80 | // CHECK: {{.*}} !prof !13 |
| 81 | switch (i) { |
| 82 | case 1 ... 5: ++i; |
| 83 | case 102: |
| 84 | [[likely]] case 103: |
| 85 | case 104: break; |
| 86 | } |
| 87 | } |
| 88 | |
| 89 | void CasesFallthroughRangeSmallUN() { |
| 90 | // CHECK-LABEL: define{{.*}}CasesFallthroughRangeSmallUN |
| 91 | // CHECK: switch |
| 92 | // CHECK: {{.*}} !prof !14 |
| 93 | switch (i) { |
| 94 | case 1 ... 5: ++i; |
| 95 | case 102: |
| 96 | [[unlikely]] case 103: |
| 97 | case 104: break; |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | void CasesFallthroughRangeLargeLLN() { |
| 102 | // CHECK-LABEL: define{{.*}}CasesFallthroughRangeLargeLLN |
| 103 | // CHECK: switch |
| 104 | // CHECK: {{.*}} !prof !8 |
| 105 | // CHECK: caserange |
| 106 | // CHECK: br{{.*}} !prof !15 |
| 107 | switch (i) { |
| 108 | [[likely]] case 0 ... 64: |
| 109 | [[likely]] case 1003: |
| 110 | case 104: break; |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | void CasesFallthroughRangeLargeUUN() { |
| 115 | // CHECK-LABEL: define{{.*}}CasesFallthroughRangeLargeUUN |
| 116 | // CHECK: switch |
| 117 | // CHECK: {{.*}} !prof !9 |
| 118 | // CHECK: caserange |
| 119 | // CHECK: br{{.*}} !prof !16 |
| 120 | switch (i) { |
| 121 | [[unlikely]] case 0 ... 64: |
| 122 | [[unlikely]] case 1003: |
| 123 | case 104: break; |
| 124 | } |
| 125 | } |
| 126 | |
| 127 | void OneCaseDefaultL() { |
| 128 | // CHECK-LABEL: define{{.*}}OneCaseDefaultL |
| 129 | // CHECK: switch |
| 130 | // CHECK: {{.*}} !prof !17 |
| 131 | switch (i) { |
| 132 | case 1: break; |
| 133 | [[likely]] default: break; |
| 134 | } |
| 135 | } |
| 136 | |
| 137 | void OneCaseDefaultU() { |
| 138 | // CHECK-LABEL: define{{.*}}OneCaseDefaultU |
| 139 | // CHECK: switch |
| 140 | // CHECK: {{.*}} !prof !18 |
| 141 | switch (i) { |
| 142 | case 1: break; |
| 143 | [[unlikely]] default: break; |
| 144 | } |
| 145 | } |
| 146 | |
| 147 | void TwoCasesDefaultLNL() { |
| 148 | // CHECK-LABEL: define{{.*}}TwoCasesDefaultLNL |
| 149 | // CHECK: switch |
| 150 | // CHECK: {{.*}} !prof !19 |
| 151 | switch (i) { |
| 152 | [[likely]] case 1: break; |
| 153 | case 2: break; |
| 154 | [[likely]] default: break; |
| 155 | } |
| 156 | } |
| 157 | |
| 158 | void TwoCasesDefaultLNN() { |
| 159 | // CHECK-LABEL: define{{.*}}TwoCasesDefaultLNN |
| 160 | // CHECK: switch |
| 161 | // CHECK: {{.*}} !prof !8 |
| 162 | switch (i) { |
| 163 | [[likely]] case 1: break; |
| 164 | case 2: break; |
| 165 | default: break; |
| 166 | } |
| 167 | } |
| 168 | |
| 169 | void TwoCasesDefaultLNU() { |
| 170 | // CHECK-LABEL: define{{.*}}TwoCasesDefaultLNU |
| 171 | // CHECK: switch |
| 172 | // CHECK: {{.*}} !prof !20 |
| 173 | switch (i) { |
| 174 | [[likely]] case 1: break; |
| 175 | case 2: break; |
| 176 | [[unlikely]] default: break; |
| 177 | } |
| 178 | } |
| 179 | |
Arthur Eubanks | 5c31b8b | 2020-10-31 00:15:46 -0700 | [diff] [blame] | 180 | // CHECK: !6 = !{!"branch_weights", i32 357913942, i32 715827883} |
| 181 | // CHECK: !7 = !{!"branch_weights", i32 536870912, i32 1} |
| 182 | // CHECK: !8 = !{!"branch_weights", i32 238609295, i32 715827883, i32 238609295} |
| 183 | // CHECK: !9 = !{!"branch_weights", i32 357913942, i32 1, i32 357913942} |
| 184 | // CHECK: !10 = !{!"branch_weights", i32 357913942, i32 715827883, i32 1} |
| 185 | // CHECK: !11 = !{!"branch_weights", i32 143165577, i32 143165577, i32 143165577, i32 715827883, i32 143165577} |
| 186 | // CHECK: !12 = !{!"branch_weights", i32 214748365, i32 214748365, i32 214748365, i32 1, i32 214748365} |
| 187 | // CHECK: !13 = !{!"branch_weights", i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 79536432, i32 715827883, i32 79536432} |
| 188 | // CHECK: !14 = !{!"branch_weights", i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 119304648, i32 1, i32 119304648} |
| 189 | // CHECK: !15 = !{!"branch_weights", i32 2000, i32 1} |
| 190 | // CHECK: !16 = !{!"branch_weights", i32 1, i32 2000} |
| 191 | // CHECK: !17 = !{!"branch_weights", i32 715827883, i32 357913942} |
| 192 | // CHECK: !18 = !{!"branch_weights", i32 1, i32 536870912} |
| 193 | // CHECK: !19 = !{!"branch_weights", i32 536870912, i32 536870912, i32 268435456} |
| 194 | // CHECK: !20 = !{!"branch_weights", i32 1, i32 715827883, i32 357913942} |