From dd313b0673febe0a5763c4aa475874d630b24fc1 Mon Sep 17 00:00:00 2001 From: Andrey Churbanov Date: Tue, 1 Nov 2016 08:33:36 +0000 Subject: [PATCH] Add more conditions to check whether task waiting is necessary in kmp_omp_taskwait. Differential Revision: https://reviews.llvm.org/D26058 Patch by Victor Campos llvm-svn: 285678 --- openmp/runtime/src/kmp_tasking.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openmp/runtime/src/kmp_tasking.c b/openmp/runtime/src/kmp_tasking.c index 888a3f3d9291..d3fcba85dfa4 100644 --- a/openmp/runtime/src/kmp_tasking.c +++ b/openmp/runtime/src/kmp_tasking.c @@ -1480,13 +1480,13 @@ __kmpc_omp_taskwait( ident_t *loc_ref, kmp_int32 gtid ) __kmp_itt_taskwait_starting( gtid, itt_sync_obj ); #endif /* USE_ITT_BUILD */ + bool must_wait = ! taskdata->td_flags.team_serial && ! taskdata->td_flags.final; + #if OMP_45_ENABLED - if ( ! taskdata->td_flags.team_serial || (thread->th.th_task_team != NULL && thread->th.th_task_team->tt.tt_found_proxy_tasks) ) -#else - if ( ! taskdata->td_flags.team_serial ) + must_wait = must_wait || (thread->th.th_task_team != NULL && thread->th.th_task_team->tt.tt_found_proxy_tasks); #endif + if (must_wait) { - // GEH: if team serialized, avoid reading the volatile variable below. kmp_flag_32 flag(&(taskdata->td_incomplete_child_tasks), 0U); while ( TCR_4(taskdata -> td_incomplete_child_tasks) != 0 ) { flag.execute_tasks(thread, gtid, FALSE, &thread_finished -- 2.34.1