1 // RUN: %clang_cc1 -emit-pch -o %t.a %s 2 // RUN: %clang_cc1 -include-pch %t.a %s -ast-print -o - | FileCheck %s 3 4 // FIXME: A bug in ParsedAttributes causes the order of the attributes to be 5 // reversed. The checks are consequently in the reverse order below. 6 7 // CHECK: #pragma clang loop unroll_count(16) 8 // CHECK: #pragma clang loop interleave_count(8) 9 // CHECK: #pragma clang loop vectorize_width(4) 10 // CHECK: #pragma clang loop unroll(disable) 11 // CHECK: #pragma clang loop interleave(disable) 12 // CHECK: #pragma clang loop vectorize(enable) 13 // CHECK: #pragma clang loop unroll(full) 14 // CHECK: #pragma clang loop interleave(enable) 15 // CHECK: #pragma clang loop vectorize(disable) 16 // CHECK: #pragma unroll 17 // CHECK: #pragma unroll (32) 18 // CHECK: #pragma nounroll 19 20 #ifndef HEADER 21 #define HEADER 22 23 class pragma_test { 24 public: 25 inline void run1(int *List, int Length) { 26 int i = 0; 27 #pragma clang loop vectorize_width(4) 28 #pragma clang loop interleave_count(8) 29 #pragma clang loop unroll_count(16) 30 while (i < Length) { 31 List[i] = i; 32 i++; 33 } 34 } 35 36 inline void run2(int *List, int Length) { 37 int i = 0; 38 #pragma clang loop vectorize(enable) 39 #pragma clang loop interleave(disable) 40 #pragma clang loop unroll(disable) 41 while (i - 1 < Length) { 42 List[i] = i; 43 i++; 44 } 45 } 46 47 inline void run3(int *List, int Length) { 48 int i = 0; 49 #pragma clang loop vectorize(disable) 50 #pragma clang loop interleave(enable) 51 #pragma clang loop unroll(full) 52 while (i - 3 < Length) { 53 List[i] = i; 54 i++; 55 } 56 } 57 58 inline void run4(int *List, int Length) { 59 int i = 0; 60 #pragma unroll 61 while (i - 3 < Length) { 62 List[i] = i; 63 i++; 64 } 65 } 66 67 inline void run5(int *List, int Length) { 68 int i = 0; 69 #pragma unroll 32 70 while (i - 3 < Length) { 71 List[i] = i; 72 i++; 73 } 74 } 75 76 inline void run6(int *List, int Length) { 77 int i = 0; 78 #pragma nounroll 79 while (i - 3 < Length) { 80 List[i] = i; 81 i++; 82 } 83 } 84 }; 85 #else 86 87 void test() { 88 int List[100]; 89 90 pragma_test pt; 91 92 pt.run1(List, 100); 93 pt.run2(List, 100); 94 pt.run3(List, 100); 95 pt.run4(List, 100); 96 pt.run5(List, 100); 97 pt.run6(List, 100); 98 } 99 100 #endif 101