xref: /llvm-project/openmp/runtime/test/api/omp_in_parallel.c (revision 74f98554f92dabb4c1be7db9e1712f060f3cdbca)
1614c7ef8SJonathan Peyton // RUN: %libomp-compile-and-run
2614c7ef8SJonathan Peyton #include <stdio.h>
3614c7ef8SJonathan Peyton #include "omp_testsuite.h"
4614c7ef8SJonathan Peyton 
5614c7ef8SJonathan Peyton /*
6614c7ef8SJonathan Peyton  * Checks that false is returned when called from serial region
7614c7ef8SJonathan Peyton  * and true is returned when called within parallel region.
8614c7ef8SJonathan Peyton  */
test_omp_in_parallel()9614c7ef8SJonathan Peyton int test_omp_in_parallel()
10614c7ef8SJonathan Peyton {
11614c7ef8SJonathan Peyton   int serial;
12614c7ef8SJonathan Peyton   int isparallel;
13614c7ef8SJonathan Peyton 
14614c7ef8SJonathan Peyton   serial = 1;
15614c7ef8SJonathan Peyton   isparallel = 0;
16614c7ef8SJonathan Peyton   serial = omp_in_parallel();
17614c7ef8SJonathan Peyton 
18614c7ef8SJonathan Peyton   #pragma omp parallel
19614c7ef8SJonathan Peyton   {
20614c7ef8SJonathan Peyton     #pragma omp single
21614c7ef8SJonathan Peyton     {
22614c7ef8SJonathan Peyton       isparallel = omp_in_parallel();
23614c7ef8SJonathan Peyton     }
24614c7ef8SJonathan Peyton   }
25614c7ef8SJonathan Peyton   return (!(serial) && isparallel);
26614c7ef8SJonathan Peyton }
27614c7ef8SJonathan Peyton 
main()28614c7ef8SJonathan Peyton int main()
29614c7ef8SJonathan Peyton {
30614c7ef8SJonathan Peyton   int i;
31614c7ef8SJonathan Peyton   int num_failed=0;
32614c7ef8SJonathan Peyton 
33*74f98554SAndrey Churbanov   // the test requires more than 1 thread to pass
34*74f98554SAndrey Churbanov   omp_set_dynamic(0); // disable dynamic adjustment of threads
35*74f98554SAndrey Churbanov   if (omp_get_max_threads() == 1)
36*74f98554SAndrey Churbanov     omp_set_num_threads(2); // set 2 threads if no HW resources available
37*74f98554SAndrey Churbanov 
38614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
39614c7ef8SJonathan Peyton     if(!test_omp_in_parallel()) {
40614c7ef8SJonathan Peyton       num_failed++;
41614c7ef8SJonathan Peyton     }
42614c7ef8SJonathan Peyton   }
43614c7ef8SJonathan Peyton   return num_failed;
44614c7ef8SJonathan Peyton }
45