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 | |