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