Index: openmp/tools/archer/ompt-tsan.cpp =================================================================== --- openmp/tools/archer/ompt-tsan.cpp +++ openmp/tools/archer/ompt-tsan.cpp @@ -527,16 +527,14 @@ ompt_data_t *task_data, unsigned int team_size, unsigned int thread_num, int type) { - switch (endpoint) { - case ompt_scope_begin: + if (endpoint == ompt_scope_begin) { if (type & ompt_task_initial) { parallel_data->ptr = new ParallelData(nullptr); } task_data->ptr = new TaskData(ToParallelData(parallel_data)); TsanHappensAfter(ToParallelData(parallel_data)->GetParallelPtr()); TsanFuncEntry(ToParallelData(parallel_data)->codePtr); - break; - case ompt_scope_end: + } else if (endpoint == ompt_scope_end) { TaskData *Data = ToTaskData(task_data); assert(Data->freed == 0 && "Implicit task end should only be called once!"); Data->freed = 1; @@ -544,7 +542,6 @@ "All tasks should have finished at the implicit barrier!"); delete Data; TsanFuncExit(); - break; } } @@ -554,13 +551,15 @@ ompt_data_t *task_data, const void *codeptr_ra) { TaskData *Data = ToTaskData(task_data); - switch (endpoint) { - case ompt_scope_begin: + if (endpoint == ompt_scope_begin || endpoint == ompt_scope_beginend) { TsanFuncEntry(codeptr_ra); switch (kind) { case ompt_sync_region_barrier_implementation: case ompt_sync_region_barrier_implicit: case ompt_sync_region_barrier_explicit: + case ompt_sync_region_barrier_implicit_parallel: + case ompt_sync_region_barrier_implicit_workshare: + case ompt_sync_region_barrier_teams: case ompt_sync_region_barrier: { char BarrierIndex = Data->BarrierIndex; TsanHappensBefore(Data->Team->GetBarrierPtr(BarrierIndex)); @@ -585,16 +584,21 @@ Data->TaskGroup = new Taskgroup(Data->TaskGroup); break; - default: + case ompt_sync_region_reduction: + // should never be reached break; + } - break; - case ompt_scope_end: + } + if (endpoint == ompt_scope_end || endpoint == ompt_scope_beginend) { TsanFuncExit(); switch (kind) { case ompt_sync_region_barrier_implementation: case ompt_sync_region_barrier_implicit: case ompt_sync_region_barrier_explicit: + case ompt_sync_region_barrier_implicit_parallel: + case ompt_sync_region_barrier_implicit_workshare: + case ompt_sync_region_barrier_teams: case ompt_sync_region_barrier: { if (hasReductionCallback < ompt_set_always) { // We want to track writes after the barrier again. @@ -636,10 +640,11 @@ break; } - default: + case ompt_sync_region_reduction: + // should never be reached break; + } - break; } } @@ -648,8 +653,7 @@ ompt_data_t *parallel_data, ompt_data_t *task_data, const void *codeptr_ra) { - switch (endpoint) { - case ompt_scope_begin: + if (endpoint == ompt_scope_begin) { switch (kind) { case ompt_sync_region_reduction: TsanIgnoreWritesBegin(); @@ -657,8 +661,7 @@ default: break; } - break; - case ompt_scope_end: + } else if (endpoint == ompt_scope_end) { switch (kind) { case ompt_sync_region_reduction: TsanIgnoreWritesEnd(); @@ -666,7 +669,6 @@ default: break; } - break; } }