| /* PR hsa/69568 */ |
| |
| typedef float float2 __attribute__ ((vector_size (8))); |
| float2 *output; |
| |
| void __attribute__((noinline, noclone)) |
| foo (int n, float2 *a, int workgroup_size) |
| { |
| int i; |
| #pragma omp target map(from:a[:n]) firstprivate(n, workgroup_size) |
| #pragma omp teams thread_limit(workgroup_size) |
| #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) |
| for (i = 0; i < n; i++) |
| { float2 v; |
| v[0] = i; |
| v[1] = 1+i; |
| a[i] = v; |
| } |
| } |
| |
| int main (int argc, char **argv) |
| { |
| int n = 32; |
| float2 *a = __builtin_malloc (sizeof (float2) * n); |
| int i; |
| |
| __builtin_memset (a, 0, sizeof (float2) * n); |
| foo (n, a, 32); |
| for (i = 0; i < n; i++) |
| { |
| float2 v = a[i]; |
| if (__builtin_abs (v[0] - i) > 0.1 |
| || __builtin_abs (v[1] - i - 1) > 0.1) |
| { |
| __builtin_abort (); |
| return 1; |
| } |
| } |
| return 0; |
| } |
| |