xref: /llvm-project/openmp/runtime/test/ompt/synchronization/test_nest_lock_parallel.c (revision 124d36e09332e28b807cdd38eb587a74335ce91e)
182e94a59SJoachim Protze // RUN: %libomp-compile-and-run | %sort-threads | FileCheck %s
282e94a59SJoachim Protze // REQUIRES: ompt
3633bc4caSJoachim Protze // UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7
482e94a59SJoachim Protze #include "callback.h"
582e94a59SJoachim Protze #include <omp.h>
682e94a59SJoachim Protze 
main()782e94a59SJoachim Protze int main()
882e94a59SJoachim Protze {
982e94a59SJoachim Protze   omp_nest_lock_t nest_lock;
1082e94a59SJoachim Protze   omp_init_nest_lock(&nest_lock);
1182e94a59SJoachim Protze 
1282e94a59SJoachim Protze   #pragma omp parallel num_threads(2)
1382e94a59SJoachim Protze   {
1482e94a59SJoachim Protze     #pragma omp master
1582e94a59SJoachim Protze     {
1682e94a59SJoachim Protze       omp_set_nest_lock(&nest_lock);
17723560d1SJonas Hahnfeld       print_fuzzy_address(1);
1882e94a59SJoachim Protze     }
1982e94a59SJoachim Protze     #pragma omp barrier
2082e94a59SJoachim Protze     omp_test_nest_lock(&nest_lock); //should fail for non-master
21723560d1SJonas Hahnfeld     print_fuzzy_address(2);
2282e94a59SJoachim Protze     #pragma omp barrier
2382e94a59SJoachim Protze     #pragma omp master
2482e94a59SJoachim Protze     {
2582e94a59SJoachim Protze       omp_unset_nest_lock(&nest_lock);
26723560d1SJonas Hahnfeld       print_fuzzy_address(3);
2782e94a59SJoachim Protze       omp_unset_nest_lock(&nest_lock);
28723560d1SJonas Hahnfeld       print_fuzzy_address(4);
2982e94a59SJoachim Protze     }
3082e94a59SJoachim Protze   }
3182e94a59SJoachim Protze 
3282e94a59SJoachim Protze   omp_destroy_nest_lock(&nest_lock);
3382e94a59SJoachim Protze 
3482e94a59SJoachim Protze   // Check if libomp supports the callbacks for this test.
3582e94a59SJoachim Protze   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_acquire'
3682e94a59SJoachim Protze   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_acquired'
3782e94a59SJoachim Protze   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_mutex_released'
3882e94a59SJoachim Protze   // CHECK-NOT: {{^}}0: Could not register callback 'ompt_callback_nest_lock'
3982e94a59SJoachim Protze 
4082e94a59SJoachim Protze   // CHECK: 0: NULL_POINTER=[[NULL:.*$]]
4182e94a59SJoachim Protze 
42723560d1SJonas Hahnfeld   // CHECK: {{^}}[[MASTER_ID:[0-9]+]]: ompt_event_wait_nest_lock: wait_id=[[WAIT_ID:[0-9]+]], hint=0, impl={{[0-9]+}}, codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
43723560d1SJonas Hahnfeld   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_acquired_nest_lock_first: wait_id=[[WAIT_ID]], codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}
44723560d1SJonas Hahnfeld   // CHECK-NEXT: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
45*124d36e0SJoachim Jenke   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_wait_test_nest_lock: wait_id=[[WAIT_ID]], hint=0, impl={{[0-9]+}}, codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
46723560d1SJonas Hahnfeld   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_acquired_nest_lock_next: wait_id=[[WAIT_ID]], codeptr_ra=[[RETURN_ADDRESS]]{{[0-f][0-f]}}
47723560d1SJonas Hahnfeld   // CHECK-NEXT: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
48723560d1SJonas Hahnfeld   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_release_nest_lock_prev: wait_id=[[WAIT_ID]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
49723560d1SJonas Hahnfeld   // CHECK-NEXT: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
50723560d1SJonas Hahnfeld   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_release_nest_lock_last: wait_id=[[WAIT_ID]], codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
51723560d1SJonas Hahnfeld   // CHECK-NEXT: {{^}}[[MASTER_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
5282e94a59SJoachim Protze 
5382e94a59SJoachim Protze   // CHECK: {{^}}[[MASTER_ID]]: ompt_event_destroy_nest_lock: wait_id=[[WAIT_ID]]
5482e94a59SJoachim Protze 
55*124d36e0SJoachim Jenke   // CHECK: {{^}}[[THREAD_ID:[0-9]+]]: ompt_event_wait_test_nest_lock: wait_id=[[WAIT_ID]], hint=0, impl={{[0-9]+}}, codeptr_ra=[[RETURN_ADDRESS:0x[0-f]+]]{{[0-f][0-f]}}
56*124d36e0SJoachim Jenke   // CHECK-NOT: {{^}}[[THREAD_ID]]: ompt_event_acquired_test_nest_lock_next: wait_id=[[WAIT_ID]]
57723560d1SJonas Hahnfeld   // CHECK-NEXT: {{^}}[[THREAD_ID]]: fuzzy_address={{.*}}[[RETURN_ADDRESS]]
5882e94a59SJoachim Protze 
5982e94a59SJoachim Protze   return 0;
6082e94a59SJoachim Protze }
61