diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2019-04-15 20:38:10 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-04-15 20:38:10 +0000 |
commit | e0eb13135f96157e0b05f87729ada87989c72bd4 (patch) | |
tree | 1fb8ad70f8cd8bc5c23ff00b662922a6841eacf5 /clang/lib/CodeGen | |
parent | 5ae05d810c8db486989a799306f65e8e16cfeff1 (diff) | |
download | bcm5719-llvm-e0eb13135f96157e0b05f87729ada87989c72bd4.tar.gz bcm5719-llvm-e0eb13135f96157e0b05f87729ada87989c72bd4.zip |
[OPENMP][NVPTX]Run parallel regions with num_threads clauses in SPMD
mode.
After the previous patch with the more correct handling of the number of
threads in parallel regions, the parallel regions with num_threads
clauses can be executed in SPMD mode.
llvm-svn: 358445
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp index 5a8f50bf316..1ca9cd05496 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp @@ -715,12 +715,9 @@ getDataSharingMode(CodeGenModule &CGM) { } /// Check if the parallel directive has an 'if' clause with non-constant or -/// false condition. Also, check if the number of threads is strictly specified -/// and run those directives in non-SPMD mode. -static bool hasParallelIfNumThreadsClause(ASTContext &Ctx, - const OMPExecutableDirective &D) { - if (D.hasClausesOfKind<OMPNumThreadsClause>()) - return true; +/// false condition. +static bool hasParallelIfClause(ASTContext &Ctx, + const OMPExecutableDirective &D) { for (const auto *C : D.getClausesOfKind<OMPIfClause>()) { OpenMPDirectiveKind NameModifier = C->getNameModifier(); if (NameModifier != OMPD_parallel && NameModifier != OMPD_unknown) @@ -747,7 +744,7 @@ static bool hasNestedSPMDDirective(ASTContext &Ctx, switch (D.getDirectiveKind()) { case OMPD_target: if (isOpenMPParallelDirective(DKind) && - !hasParallelIfNumThreadsClause(Ctx, *NestedDir)) + !hasParallelIfClause(Ctx, *NestedDir)) return true; if (DKind == OMPD_teams) { Body = NestedDir->getInnermostCapturedStmt()->IgnoreContainers( @@ -759,14 +756,14 @@ static bool hasNestedSPMDDirective(ASTContext &Ctx, dyn_cast_or_null<OMPExecutableDirective>(ChildStmt)) { DKind = NND->getDirectiveKind(); if (isOpenMPParallelDirective(DKind) && - !hasParallelIfNumThreadsClause(Ctx, *NND)) + !hasParallelIfClause(Ctx, *NND)) return true; } } return false; case OMPD_target_teams: return isOpenMPParallelDirective(DKind) && - !hasParallelIfNumThreadsClause(Ctx, *NestedDir); + !hasParallelIfClause(Ctx, *NestedDir); case OMPD_target_simd: case OMPD_target_parallel: case OMPD_target_parallel_for: @@ -840,7 +837,7 @@ static bool supportsSPMDExecutionMode(ASTContext &Ctx, case OMPD_target_parallel_for_simd: case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: - return !hasParallelIfNumThreadsClause(Ctx, D); + return !hasParallelIfClause(Ctx, D); case OMPD_target_simd: case OMPD_target_teams_distribute: case OMPD_target_teams_distribute_simd: |