
This patch properly marks the support level for libomp test when testing with GCC. Some new OpenMP features were only introduced with GCC 11. Tests using the target construct are incompatibe with GCC. Tests pass now with GCC 10, 11, 12
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
// This test is adapted from test_parallel_for_allocate.c in SOLLVE V&V.
|
|
// https://github.com/SOLLVE/sollve_vv/blob/master/tests/5.0/parallel_for/test_parallel_for_allocate.c
|
|
// RUN: %libomp-compile-and-run
|
|
|
|
// Support for allocate was added in GCC 11
|
|
// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8, gcc-9, gcc-10
|
|
|
|
#include <omp.h>
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
|
|
#define N 128
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int errors = 0;
|
|
int *x;
|
|
int result[N][N];
|
|
int successful_alloc = 0;
|
|
|
|
omp_memspace_handle_t x_memspace = omp_default_mem_space;
|
|
omp_alloctrait_t x_traits[1] = {omp_atk_alignment, 64};
|
|
omp_allocator_handle_t x_alloc = omp_init_allocator(x_memspace, 1, x_traits);
|
|
|
|
for (int i = 0; i < N; i++) {
|
|
for (int j = 0; j < N; j++) {
|
|
result[i][j] = -1;
|
|
}
|
|
}
|
|
|
|
#pragma omp parallel for allocate(x_alloc: x) private(x) shared(result)
|
|
for (int i = 0; i < N; i++) {
|
|
x = (int *)malloc(N * sizeof(int));
|
|
if (x != NULL) {
|
|
#pragma omp simd simdlen(16) aligned(x : 64)
|
|
for (int j = 0; j < N; j++) {
|
|
x[j] = j * i;
|
|
}
|
|
for (int j = 0; j < N; j++) {
|
|
result[i][j] = x[j];
|
|
}
|
|
free(x);
|
|
successful_alloc++;
|
|
}
|
|
}
|
|
|
|
errors += successful_alloc < 1;
|
|
|
|
for (int i = 0; i < N; i++) {
|
|
for (int j = 0; j < N; j++) {
|
|
errors += result[i][j] != i * j;
|
|
}
|
|
}
|
|
|
|
omp_destroy_allocator(x_alloc);
|
|
|
|
return errors;
|
|
}
|