annotate clang/test/PCH/pragma-loop.cpp @ 150:1d019706d866

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