teak-llvm/openmp/runtime/test/api/omp_pause_resource.c
Jonathan Peyton 9b8bb323c9 [OpenMP] Add omp_pause_resource* API
Add omp_pause_resource and omp_pause_resource_all API and enum, plus stub for
internal implementation. Implemented callable helper function to do local pause,
and added basic functionality for hard and soft pause.

Patch by Terry Wilmarth

Differential Revision: https://reviews.llvm.org/D55078

llvm-svn: 351372
2019-01-16 20:07:39 +00:00

59 lines
1.1 KiB
C

// RUN: %libomp-compile-and-run
#include <stdio.h>
#include "omp_testsuite.h"
int test_omp_pause_resource() {
int fails, nthreads, my_dev;
fails = 0;
nthreads = 0;
my_dev = omp_get_initial_device();
#pragma omp parallel
#pragma omp single
nthreads = omp_get_num_threads();
if (omp_pause_resource(omp_pause_soft, my_dev))
fails++;
#pragma omp parallel shared(nthreads)
#pragma omp single
nthreads = omp_get_num_threads();
if (nthreads == 0)
fails++;
if (omp_pause_resource(omp_pause_hard, my_dev))
fails++;
nthreads = 0;
#pragma omp parallel shared(nthreads)
#pragma omp single
nthreads = omp_get_num_threads();
if (nthreads == 0)
fails++;
if (omp_pause_resource_all(omp_pause_soft))
fails++;
nthreads = 0;
#pragma omp parallel shared(nthreads)
#pragma omp single
nthreads = omp_get_num_threads();
if (nthreads == 0)
fails++;
return fails == 0;
}
int main() {
int i;
int num_failed = 0;
for (i = 0; i < REPETITIONS; i++) {
if (!test_omp_pause_resource()) {
num_failed++;
}
}
return num_failed;
}