diff options
author | Kelvin Li <kkwli0@gmail.com> | 2016-08-05 14:37:37 +0000 |
---|---|---|
committer | Kelvin Li <kkwli0@gmail.com> | 2016-08-05 14:37:37 +0000 |
commit | 02532876334c3323c26b236761bca6b4cead3c27 (patch) | |
tree | 5324cdc4a4a6726796691a75ebd274772c66b66f /clang/lib/CodeGen | |
parent | 24dc1e7a90ee85b33ac103f976bf6ad14097f9bf (diff) | |
download | bcm5719-llvm-02532876334c3323c26b236761bca6b4cead3c27.tar.gz bcm5719-llvm-02532876334c3323c26b236761bca6b4cead3c27.zip |
[OpenMP] Sema and parsing for 'teams distribute' pragma
This patch is to implement sema and parsing for 'teams distribute' pragma.
Differential Revision: https://reviews.llvm.org/D23189
llvm-svn: 277818
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGStmt.cpp | 3 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGStmtOpenMP.cpp | 12 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGStmt.cpp b/clang/lib/CodeGen/CGStmt.cpp index 2adb1770ea4..aa457ad5f3f 100644 --- a/clang/lib/CodeGen/CGStmt.cpp +++ b/clang/lib/CodeGen/CGStmt.cpp @@ -298,6 +298,9 @@ void CodeGenFunction::EmitStmt(const Stmt *S) { case Stmt::OMPTargetSimdDirectiveClass: EmitOMPTargetSimdDirective(cast<OMPTargetSimdDirective>(*S)); break; + case Stmt::OMPTeamsDistributeDirectiveClass: + EmitOMPTeamsDistributeDirective(cast<OMPTeamsDistributeDirective>(*S)); + break; } } diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp index 954721e16a9..f2b99428588 100644 --- a/clang/lib/CodeGen/CGStmtOpenMP.cpp +++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp @@ -1934,6 +1934,18 @@ void CodeGenFunction::EmitOMPTargetSimdDirective( }); } +void CodeGenFunction::EmitOMPTeamsDistributeDirective( + const OMPTeamsDistributeDirective &S) { + OMPLexicalScope Scope(*this, S, /*AsInlined=*/true); + CGM.getOpenMPRuntime().emitInlinedDirective( + *this, OMPD_teams_distribute, + [&S](CodeGenFunction &CGF, PrePostActionTy &) { + OMPLoopScope PreInitScope(CGF, S); + CGF.EmitStmt( + cast<CapturedStmt>(S.getAssociatedStmt())->getCapturedStmt()); + }); +} + /// \brief Emit a helper variable and return corresponding lvalue. static LValue EmitOMPHelperVar(CodeGenFunction &CGF, const DeclRefExpr *Helper) { diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 24ead4c3095..bb0437157e5 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -2512,6 +2512,7 @@ public: void EmitOMPTargetParallelForSimdDirective( const OMPTargetParallelForSimdDirective &S); void EmitOMPTargetSimdDirective(const OMPTargetSimdDirective &S); + void EmitOMPTeamsDistributeDirective(const OMPTeamsDistributeDirective &S); /// Emit outlined function for the target directive. static std::pair<llvm::Function * /*OutlinedFn*/, |