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