1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -O3 -emit-llvm -gline-tables-only -S -verify -o /dev/null
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// REQUIRES: x86-registered-target
3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// Test verifies optimization failures generated by the backend are handled
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// correctly by clang. LLVM tests verify all of the failure conditions.
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid test_switch(int *A, int *B, int Length) {
8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma clang loop vectorize(enable) unroll(disable)
93ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  for (int i = 0; i < Length; i++) {
103ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar/* expected-warning {{loop not vectorized: failed explicitly specified loop vectorization}} */ switch (A[i]) {
11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    case 0:
12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      B[i] = 1;
13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      break;
14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    case 1:
15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      B[i] = 2;
16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      break;
17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    default:
18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      B[i] = 3;
19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
22