Mercurial > hg > CbC > CbC_llvm
diff clang/test/PCH/pragma-loop.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | 1f2b6ac9f198 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/PCH/pragma-loop.cpp Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,114 @@ +// RUN: %clang_cc1 -emit-pch -o %t.a %s +// RUN: %clang_cc1 -include-pch %t.a %s -ast-print -o - | FileCheck %s + +// CHECK: #pragma clang loop vectorize_width(4) +// CHECK: #pragma clang loop interleave_count(8) +// CHECK: #pragma clang loop unroll_count(16){{$}} +// CHECK: #pragma clang loop vectorize(enable) +// CHECK: #pragma clang loop interleave(disable) +// CHECK: #pragma clang loop unroll(disable) +// CHECK: #pragma clang loop distribute(enable) +// CHECK: #pragma clang loop vectorize(disable) +// CHECK: #pragma clang loop interleave(enable) +// CHECK: #pragma clang loop unroll(full) +// CHECK: #pragma clang loop distribute(disable) +// FIXME: "#pragma unroll (enable)" is invalid and is not the input source. +// CHECK: #pragma unroll (enable){{$}} +// CHECK: #pragma unroll (32){{$}} +// CHECK: #pragma nounroll{{$}} +// CHECK: #pragma clang loop vectorize_width(V) +// CHECK: #pragma clang loop interleave_count(I) + +#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) +#pragma clang loop unroll_count(16) + 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) +#pragma clang loop unroll(disable) +#pragma clang loop distribute(enable) + 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) +#pragma clang loop unroll(full) +#pragma clang loop distribute(disable) + while (i - 3 < Length) { + List[i] = i; + i++; + } + } + + 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++; + } + } + + inline void run6(int *List, int Length) { + int i = 0; +#pragma nounroll + while (i - 3 < Length) { + List[i] = i; + i++; + } + } + + 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; + } + } +}; +#else + +void test() { + int List[100]; + + pragma_test pt; + + pt.run1(List, 100); + pt.run2(List, 100); + pt.run3(List, 100); + pt.run4(List, 100); + pt.run5(List, 100); + pt.run6(List, 100); + pt.run7<2, 4>(List, 100); +} + +#endif