mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-30 08:49:04 -04:00

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
59 lines
1.1 KiB
C
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;
|
|
}
|