2023-08-09 14:26:29 -05:00
|
|
|
// RUN: %clang_cc1 -fopenmp -emit-pch -o %t.a %s
|
|
|
|
// RUN: %clang_cc1 -fopenmp -include-pch %t.a %s -ast-print -o - | FileCheck %s
|
2014-06-10 21:35:24 +00:00
|
|
|
|
2018-06-25 20:06:13 +00:00
|
|
|
// CHECK: #pragma clang loop vectorize_width(4)
|
2018-08-03 01:21:16 +00:00
|
|
|
// CHECK: #pragma clang loop interleave_count(8)
|
|
|
|
// CHECK: #pragma clang loop unroll_count(16){{$}}
|
2018-06-25 20:06:13 +00:00
|
|
|
// CHECK: #pragma clang loop vectorize(enable)
|
2018-08-03 01:21:16 +00:00
|
|
|
// CHECK: #pragma clang loop interleave(disable)
|
|
|
|
// CHECK: #pragma clang loop unroll(disable)
|
|
|
|
// CHECK: #pragma clang loop distribute(enable)
|
2018-06-25 20:06:13 +00:00
|
|
|
// CHECK: #pragma clang loop vectorize(disable)
|
2018-08-03 01:21:16 +00:00
|
|
|
// CHECK: #pragma clang loop interleave(enable)
|
|
|
|
// CHECK: #pragma clang loop unroll(full)
|
|
|
|
// CHECK: #pragma clang loop distribute(disable)
|
2018-02-14 17:38:47 +00:00
|
|
|
// FIXME: "#pragma unroll (enable)" is invalid and is not the input source.
|
|
|
|
// CHECK: #pragma unroll (enable){{$}}
|
|
|
|
// CHECK: #pragma unroll (32){{$}}
|
|
|
|
// CHECK: #pragma nounroll{{$}}
|
2018-06-25 20:06:13 +00:00
|
|
|
// CHECK: #pragma clang loop vectorize_width(V)
|
2018-08-03 01:21:16 +00:00
|
|
|
// CHECK: #pragma clang loop interleave_count(I)
|
2024-07-23 07:31:42 -05:00
|
|
|
// CHECK: #pragma omp loop bind(thread)
|
|
|
|
// CHECK: #pragma omp loop bind(parallel)
|
|
|
|
// CHECK: #pragma omp loop bind(teams)
|
2014-06-10 21:35:24 +00:00
|
|
|
|
|
|
|
#ifndef HEADER
|
|
|
|
#define HEADER
|
|
|
|
|
|
|
|
class pragma_test {
|
|
|
|
public:
|
|
|
|
inline void run1(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma clang loop vectorize_width(4)
|
|
|
|
#pragma clang loop interleave_count(8)
|
2014-06-11 17:56:26 +00:00
|
|
|
#pragma clang loop unroll_count(16)
|
2014-06-10 21:35:24 +00:00
|
|
|
while (i < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void run2(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma clang loop vectorize(enable)
|
|
|
|
#pragma clang loop interleave(disable)
|
2014-06-11 17:56:26 +00:00
|
|
|
#pragma clang loop unroll(disable)
|
2016-06-14 12:04:26 +00:00
|
|
|
#pragma clang loop distribute(enable)
|
2014-06-10 21:35:24 +00:00
|
|
|
while (i - 1 < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void run3(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma clang loop vectorize(disable)
|
|
|
|
#pragma clang loop interleave(enable)
|
2014-07-23 17:31:31 +00:00
|
|
|
#pragma clang loop unroll(full)
|
2016-06-14 12:04:26 +00:00
|
|
|
#pragma clang loop distribute(disable)
|
2014-06-10 21:35:24 +00:00
|
|
|
while (i - 3 < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
2014-07-21 18:08:34 +00:00
|
|
|
|
|
|
|
inline void run4(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma unroll
|
|
|
|
while (i - 3 < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void run5(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma unroll 32
|
|
|
|
while (i - 3 < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
2014-06-10 21:35:24 +00:00
|
|
|
|
2014-07-24 18:09:38 +00:00
|
|
|
inline void run6(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma nounroll
|
|
|
|
while (i - 3 < Length) {
|
|
|
|
List[i] = i;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
}
|
2014-10-12 20:46:07 +00:00
|
|
|
|
|
|
|
template <int V, int I>
|
|
|
|
inline void run7(int *List, int Length) {
|
|
|
|
#pragma clang loop vectorize_width(V)
|
|
|
|
#pragma clang loop interleave_count(I)
|
|
|
|
for (int i = 0; i < Length; i++) {
|
|
|
|
List[i] = i;
|
|
|
|
}
|
|
|
|
}
|
2023-08-09 14:26:29 -05:00
|
|
|
|
|
|
|
inline void run8(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma omp loop bind(thread)
|
|
|
|
for (int i = 0; i < Length; i++) {
|
|
|
|
List[i] = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void run9(int *List, int Length) {
|
|
|
|
int i = 0;
|
|
|
|
#pragma omp loop bind(parallel)
|
|
|
|
for (int i = 0; i < Length; i++) {
|
|
|
|
List[i] = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void run10(int *List, int Length) {
|
|
|
|
int i = 0;
|
2024-01-09 11:14:56 +05:30
|
|
|
int j = 0;
|
|
|
|
#pragma omp teams
|
2023-08-09 14:26:29 -05:00
|
|
|
for (int i = 0; i < Length; i++) {
|
2024-01-09 11:14:56 +05:30
|
|
|
#pragma omp loop bind(teams)
|
|
|
|
for (int j = 0; j < Length; j++) {
|
|
|
|
List[i] = i+j;
|
|
|
|
}
|
2023-08-09 14:26:29 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-24 18:09:38 +00:00
|
|
|
};
|
2014-06-10 21:35:24 +00:00
|
|
|
#else
|
|
|
|
void test() {
|
|
|
|
int List[100];
|
|
|
|
|
|
|
|
pragma_test pt;
|
|
|
|
|
|
|
|
pt.run1(List, 100);
|
|
|
|
pt.run2(List, 100);
|
|
|
|
pt.run3(List, 100);
|
2014-07-21 18:08:34 +00:00
|
|
|
pt.run4(List, 100);
|
|
|
|
pt.run5(List, 100);
|
2014-07-24 18:09:38 +00:00
|
|
|
pt.run6(List, 100);
|
2014-10-12 20:46:07 +00:00
|
|
|
pt.run7<2, 4>(List, 100);
|
2023-08-09 14:26:29 -05:00
|
|
|
pt.run8(List, 100);
|
|
|
|
pt.run9(List, 100);
|
|
|
|
pt.run10(List, 100);
|
2014-06-10 21:35:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|