diff options
Diffstat (limited to 'clang/test/OpenMP/simd_ast_print.cpp')
-rw-r--r-- | clang/test/OpenMP/simd_ast_print.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/clang/test/OpenMP/simd_ast_print.cpp b/clang/test/OpenMP/simd_ast_print.cpp index fd9668c4363..4b1fccb92fd 100644 --- a/clang/test/OpenMP/simd_ast_print.cpp +++ b/clang/test/OpenMP/simd_ast_print.cpp @@ -33,12 +33,22 @@ template<class T> struct S { T val; // CHECK: T res; // CHECK: T val; -#pragma omp simd private(val) -// CHECK-NEXT: #pragma omp simd private(val) + #pragma omp simd private(val) safelen(7) +// CHECK-NEXT: #pragma omp simd private(val) safelen(7) for (T i = 7; i < m_a; ++i) { val = v[i-7] + m_a; res = val; } + const T clen = 3; +// CHECK: T clen = 3; + #pragma omp simd safelen(clen-1) +// CHECK-NEXT: #pragma omp simd safelen(clen - 1) + for(T i = clen+2; i < 20; ++i) { +// CHECK-NEXT: for (T i = clen + 2; i < 20; ++i) { + v[i] = v[v-clen] + 1; +// CHECK-NEXT: v[i] = v[v - clen] + 1; + } +// CHECK-NEXT: } return res; } ~S() @@ -46,6 +56,24 @@ template<class T> struct S { T m_a; }; +template<int LEN> struct S2 { + static void func(int n, float *a, float *b, float *c) { +#pragma omp simd safelen(LEN) + for(int i = 0; i < n; i++) { + c[i] = a[i] + b[i]; + } + } +}; + +// S2<4>::func is called below in main. +// CHECK: template <int LEN = 4> struct S2 { +// CHECK-NEXT: static void func(int n, float *a, float *b, float *c) { +// CHECK-NEXT: #pragma omp simd safelen(4) +// CHECK-NEXT: for (int i = 0; i < n; i++) { +// CHECK-NEXT: c[i] = a[i] + b[i]; +// CHECK-NEXT: } +// CHECK-NEXT: } + int main (int argc, char **argv) { int b = argc, c, d, e, f, g; int k1=0,k2=0; @@ -69,11 +97,16 @@ int main (int argc, char **argv) { for (int i = 0; i < 10; ++i)foo(); // CHECK-NEXT: for (int i = 0; i < 10; ++i) // CHECK-NEXT: foo(); -#pragma omp simd -// CHECK-NEXT: #pragma omp simd + const int CLEN = 4; +// CHECK-NEXT: const int CLEN = 4; + #pragma omp simd safelen(CLEN) +// CHECK-NEXT: #pragma omp simd safelen(CLEN) for (int i = 0; i < 10; ++i)foo(); // CHECK-NEXT: for (int i = 0; i < 10; ++i) // CHECK-NEXT: foo(); + + float arr[16]; + S2<4>::func(0,arr,arr,arr); return (0); } |