aboutsummaryrefslogtreecommitdiff
path: root/test/Misc/backend-optimization-failure.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Misc/backend-optimization-failure.cpp')
-rw-r--r--test/Misc/backend-optimization-failure.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/Misc/backend-optimization-failure.cpp b/test/Misc/backend-optimization-failure.cpp
new file mode 100644
index 000000000000..1b79fb31d1f9
--- /dev/null
+++ b/test/Misc/backend-optimization-failure.cpp
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown %s -O3 -emit-llvm -gline-tables-only -S -verify -o /dev/null
+// REQUIRES: x86-registered-target
+
+// Test verifies optimization failures generated by the backend are handled
+// correctly by clang. LLVM tests verify all of the failure conditions.
+
+void test_switch(int *A, int *B, int Length) {
+#pragma clang loop vectorize(enable) unroll(disable)
+ for (int i = 0; i < Length; i++) {
+ /* expected-warning {{loop not vectorized: failed explicitly specified loop vectorization}} */ switch (A[i]) {
+ case 0:
+ B[i] = 1;
+ break;
+ case 1:
+ B[i] = 2;
+ break;
+ default:
+ B[i] = 3;
+ }
+ }
+}