diff options
author | Alexey Bataev <a.bataev@hotmail.com> | 2017-11-22 14:25:55 +0000 |
---|---|---|
committer | Alexey Bataev <a.bataev@hotmail.com> | 2017-11-22 14:25:55 +0000 |
commit | f9fc42e50b5dfe1d12036f1da5381b4c7a9f7be3 (patch) | |
tree | 7c4fc550504480983f6fed750d933b77ffa360e2 /clang/lib/CodeGen/CGStmtOpenMP.cpp | |
parent | 6be1e3da1e9ff1c18b880f422fd2bf561fdc23ae (diff) | |
download | bcm5719-llvm-f9fc42e50b5dfe1d12036f1da5381b4c7a9f7be3.tar.gz bcm5719-llvm-f9fc42e50b5dfe1d12036f1da5381b4c7a9f7be3.zip |
[OPENMP] Codegen for `target teams` directive.
Added codegen of the clauses for `target teams` directive.
llvm-svn: 318834
Diffstat (limited to 'clang/lib/CodeGen/CGStmtOpenMP.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGStmtOpenMP.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp index 0c3d15e092c..0863cc83aba 100644 --- a/clang/lib/CodeGen/CGStmtOpenMP.cpp +++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp @@ -3812,11 +3812,20 @@ static void emitTargetTeamsRegion(CodeGenFunction &CGF, PrePostActionTy &Action, const OMPTargetTeamsDirective &S) { auto *CS = S.getCapturedStmt(OMPD_teams); Action.Enter(CGF); - auto &&CodeGen = [CS](CodeGenFunction &CGF, PrePostActionTy &) { - // TODO: Add support for clauses. + // Emit teams region as a standalone region. + auto &&CodeGen = [&S, CS](CodeGenFunction &CGF, PrePostActionTy &Action) { + CodeGenFunction::OMPPrivateScope PrivateScope(CGF); + (void)CGF.EmitOMPFirstprivateClause(S, PrivateScope); + CGF.EmitOMPPrivateClause(S, PrivateScope); + CGF.EmitOMPReductionClauseInit(S, PrivateScope); + (void)PrivateScope.Privatize(); + Action.Enter(CGF); CGF.EmitStmt(CS->getCapturedStmt()); + CGF.EmitOMPReductionClauseFinal(S, /*ReductionKind=*/OMPD_teams); }; emitCommonOMPTeamsDirective(CGF, S, OMPD_teams, CodeGen); + emitPostUpdateForReductionClause( + CGF, S, [](CodeGenFunction &) -> llvm::Value * { return nullptr; }); } void CodeGenFunction::EmitOMPTargetTeamsDeviceFunction( |