diff options
| author | Carlo Bertolli <cbertol@us.ibm.com> | 2016-07-13 15:37:16 +0000 |
|---|---|---|
| committer | Carlo Bertolli <cbertol@us.ibm.com> | 2016-07-13 15:37:16 +0000 |
| commit | 2404b1719241456b7c4a3f8c5f9ece18eebcfa48 (patch) | |
| tree | c0ab2da3adf82d8b9c5ff603fb8bdba0443bf95b /clang/lib/AST | |
| parent | 48d83407602b15f80310bba0bdf5731ed194e092 (diff) | |
| download | bcm5719-llvm-2404b1719241456b7c4a3f8c5f9ece18eebcfa48.tar.gz bcm5719-llvm-2404b1719241456b7c4a3f8c5f9ece18eebcfa48.zip | |
[OpenMP] Initial implementation of parse+sema for clause use_device_ptr of 'target data'
http://reviews.llvm.org/D21904
This patch is similar to the implementation of 'private' clause: it adds a list of private pointers to be used within the target data region to store the device pointers returned by the runtime.
Please refer to the following document for a full description of what the runtime witll return in this case (page 10 and 11):
https://github.com/clang-omp/OffloadingDesign
I am happy to answer any question related to the runtime interface to help reviewing this patch.
llvm-svn: 275271
Diffstat (limited to 'clang/lib/AST')
| -rw-r--r-- | clang/lib/AST/OpenMPClause.cpp | 20 | ||||
| -rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 8 | ||||
| -rw-r--r-- | clang/lib/AST/StmtProfile.cpp | 4 |
3 files changed, 32 insertions, 0 deletions
diff --git a/clang/lib/AST/OpenMPClause.cpp b/clang/lib/AST/OpenMPClause.cpp index 5b51c277d6f..6e9f4ee9f5f 100644 --- a/clang/lib/AST/OpenMPClause.cpp +++ b/clang/lib/AST/OpenMPClause.cpp @@ -89,6 +89,7 @@ const OMPClauseWithPreInit *OMPClauseWithPreInit::get(const OMPClause *C) { case OMPC_uniform: case OMPC_to: case OMPC_from: + case OMPC_use_device_ptr: break; } @@ -152,6 +153,7 @@ const OMPClauseWithPostUpdate *OMPClauseWithPostUpdate::get(const OMPClause *C) case OMPC_uniform: case OMPC_to: case OMPC_from: + case OMPC_use_device_ptr: break; } @@ -727,3 +729,21 @@ OMPFromClause *OMPFromClause::CreateEmpty(const ASTContext &C, unsigned NumVars, return new (Mem) OMPFromClause(NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents); } + +OMPUseDevicePtrClause *OMPUseDevicePtrClause::Create(const ASTContext &C, + SourceLocation StartLoc, + SourceLocation LParenLoc, + SourceLocation EndLoc, + ArrayRef<Expr *> VL) { + void *Mem = C.Allocate(totalSizeToAlloc<Expr *>(VL.size())); + OMPUseDevicePtrClause *Clause = + new (Mem) OMPUseDevicePtrClause(StartLoc, LParenLoc, EndLoc, VL.size()); + Clause->setVarRefs(VL); + return Clause; +} + +OMPUseDevicePtrClause *OMPUseDevicePtrClause::CreateEmpty(const ASTContext &C, + unsigned N) { + void *Mem = C.Allocate(totalSizeToAlloc<Expr *>(N)); + return new (Mem) OMPUseDevicePtrClause(N); +} diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index cb6298b160e..89f2ad4cf96 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -947,6 +947,14 @@ void OMPClausePrinter::VisitOMPDefaultmapClause(OMPDefaultmapClause *Node) { Node->getDefaultmapKind()); OS << ")"; } + +void OMPClausePrinter::VisitOMPUseDevicePtrClause(OMPUseDevicePtrClause *Node) { + if (!Node->varlist_empty()) { + OS << "use_device_ptr"; + VisitOMPClauseList(Node, '('); + OS << ")"; + } +} } //===----------------------------------------------------------------------===// diff --git a/clang/lib/AST/StmtProfile.cpp b/clang/lib/AST/StmtProfile.cpp index aaeb6e986ca..2028b714a7d 100644 --- a/clang/lib/AST/StmtProfile.cpp +++ b/clang/lib/AST/StmtProfile.cpp @@ -529,6 +529,10 @@ void OMPClauseProfiler::VisitOMPToClause(const OMPToClause *C) { void OMPClauseProfiler::VisitOMPFromClause(const OMPFromClause *C) { VisitOMPClauseList(C); } +void OMPClauseProfiler::VisitOMPUseDevicePtrClause( + const OMPUseDevicePtrClause *C) { + VisitOMPClauseList(C); +} } void |

