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 // CHECK: #pragma clang loop vectorize_width(4) 5 // CHECK: #pragma clang loop interleave_count(8) 6 // CHECK: #pragma clang loop unroll_count(16){{$}} 7 // CHECK: #pragma clang loop vectorize(enable) 8 // CHECK: #pragma clang loop interleave(disable) 9 // CHECK: #pragma clang loop unroll(disable) 10 // CHECK: #pragma clang loop distribute(enable) 11 // CHECK: #pragma clang loop vectorize(disable) 12 // CHECK: #pragma clang loop interleave(enable) 13 // CHECK: #pragma clang loop unroll(full) 14 // CHECK: #pragma clang loop distribute(disable) 15 // FIXME: "#pragma unroll (enable)" is invalid and is not the input source. 16 // CHECK: #pragma unroll (enable){{$}} 17 // CHECK: #pragma unroll (32){{$}} 18 // CHECK: #pragma nounroll{{$}} 19 // CHECK: #pragma clang loop vectorize_width(V) 20 // CHECK: #pragma clang loop interleave_count(I) 21 22 #ifndef HEADER 23 #define HEADER 24 25 class pragma_test { 26 public: 27 inline void run1(int *List, int Length) { 28 int i = 0; 29 #pragma clang loop vectorize_width(4) 30 #pragma clang loop interleave_count(8) 31 #pragma clang loop unroll_count(16) 32 while (i < Length) { 33 List[i] = i; 34 i++; 35 } 36 } 37 38 inline void run2(int *List, int Length) { 39 int i = 0; 40 #pragma clang loop vectorize(enable) 41 #pragma clang loop interleave(disable) 42 #pragma clang loop unroll(disable) 43 #pragma clang loop distribute(enable) 44 while (i - 1 < Length) { 45 List[i] = i; 46 i++; 47 } 48 } 49 50 inline void run3(int *List, int Length) { 51 int i = 0; 52 #pragma clang loop vectorize(disable) 53 #pragma clang loop interleave(enable) 54 #pragma clang loop unroll(full) 55 #pragma clang loop distribute(disable) 56 while (i - 3 < Length) { 57 List[i] = i; 58 i++; 59 } 60 } 61 62 inline void run4(int *List, int Length) { 63 int i = 0; 64 #pragma unroll 65 while (i - 3 < Length) { 66 List[i] = i; 67 i++; 68 } 69 } 70 71 inline void run5(int *List, int Length) { 72 int i = 0; 73 #pragma unroll 32 74 while (i - 3 < Length) { 75 List[i] = i; 76 i++; 77 } 78 } 79 80 inline void run6(int *List, int Length) { 81 int i = 0; 82 #pragma nounroll 83 while (i - 3 < Length) { 84 List[i] = i; 85 i++; 86 } 87 } 88 89 template <int V, int I> 90 inline void run7(int *List, int Length) { 91 #pragma clang loop vectorize_width(V) 92 #pragma clang loop interleave_count(I) 93 for (int i = 0; i < Length; i++) { 94 List[i] = i; 95 } 96 } 97 }; 98 #else 99 100 void test() { 101 int List[100]; 102 103 pragma_test pt; 104 105 pt.run1(List, 100); 106 pt.run2(List, 100); 107 pt.run3(List, 100); 108 pt.run4(List, 100); 109 pt.run5(List, 100); 110 pt.run6(List, 100); 111 pt.run7<2, 4>(List, 100); 112 } 113 114 #endif 115