diff options
author | Arpith Chacko Jacob <acjacob@us.ibm.com> | 2016-01-26 16:37:23 +0000 |
---|---|---|
committer | Arpith Chacko Jacob <acjacob@us.ibm.com> | 2016-01-26 16:37:23 +0000 |
commit | 3cf89040b0fa1ef6d930374e04a314d4c1cb0c87 (patch) | |
tree | 88435467e8adcbbe760803882052ba793b8b54b5 /clang/lib/Sema | |
parent | 980b280f501b91fb13538c95de5b0677f2b635fb (diff) | |
download | bcm5719-llvm-3cf89040b0fa1ef6d930374e04a314d4c1cb0c87.tar.gz bcm5719-llvm-3cf89040b0fa1ef6d930374e04a314d4c1cb0c87.zip |
[OpenMP] Parsing + sema for defaultmap clause.
Summary:
This patch adds parsing + sema for the defaultmap clause associated with the target directive (among others).
Reviewers: ABataev
Differential Revision: http://reviews.llvm.org/D16527
llvm-svn: 258817
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/SemaOpenMP.cpp | 41 | ||||
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 6 |
2 files changed, 47 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index d9ea8fb0cca..6a5c1d9e126 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -5921,6 +5921,7 @@ OMPClause *Sema::ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind, Expr *Expr, case OMPC_map: case OMPC_nogroup: case OMPC_dist_schedule: + case OMPC_defaultmap: case OMPC_unknown: llvm_unreachable("Clause is not allowed."); } @@ -6205,6 +6206,7 @@ OMPClause *Sema::ActOnOpenMPSimpleClause( case OMPC_num_tasks: case OMPC_hint: case OMPC_dist_schedule: + case OMPC_defaultmap: case OMPC_unknown: llvm_unreachable("Clause is not allowed."); } @@ -6308,6 +6310,14 @@ OMPClause *Sema::ActOnOpenMPSingleExprWithArgClause( static_cast<OpenMPDistScheduleClauseKind>(Argument.back()), Expr, StartLoc, LParenLoc, ArgumentLoc.back(), DelimLoc, EndLoc); break; + case OMPC_defaultmap: + enum { Modifier, DefaultmapKind }; + Res = ActOnOpenMPDefaultmapClause( + static_cast<OpenMPDefaultmapClauseModifier>(Argument[Modifier]), + static_cast<OpenMPDefaultmapClauseKind>(Argument[DefaultmapKind]), + StartLoc, LParenLoc, ArgumentLoc[Modifier], + ArgumentLoc[DefaultmapKind], EndLoc); + break; case OMPC_final: case OMPC_num_threads: case OMPC_safelen: @@ -6532,6 +6542,7 @@ OMPClause *Sema::ActOnOpenMPClause(OpenMPClauseKind Kind, case OMPC_num_tasks: case OMPC_hint: case OMPC_dist_schedule: + case OMPC_defaultmap: case OMPC_unknown: llvm_unreachable("Clause is not allowed."); } @@ -6676,6 +6687,7 @@ OMPClause *Sema::ActOnOpenMPVarListClause( case OMPC_num_tasks: case OMPC_hint: case OMPC_dist_schedule: + case OMPC_defaultmap: case OMPC_unknown: llvm_unreachable("Clause is not allowed."); } @@ -9222,3 +9234,32 @@ OMPClause *Sema::ActOnOpenMPDistScheduleClause( OMPDistScheduleClause(StartLoc, LParenLoc, KindLoc, CommaLoc, EndLoc, Kind, ValExpr, HelperValExpr); } + +OMPClause *Sema::ActOnOpenMPDefaultmapClause( + OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind, + SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc, + SourceLocation KindLoc, SourceLocation EndLoc) { + // OpenMP 4.5 only supports 'defaultmap(tofrom: scalar)' + if (M != OMPC_DEFAULTMAP_MODIFIER_tofrom || + Kind != OMPC_DEFAULTMAP_scalar) { + std::string Value; + SourceLocation Loc; + Value += "'"; + if (M != OMPC_DEFAULTMAP_MODIFIER_tofrom) { + Value += getOpenMPSimpleClauseTypeName(OMPC_defaultmap, + OMPC_DEFAULTMAP_MODIFIER_tofrom); + Loc = MLoc; + } else { + Value += getOpenMPSimpleClauseTypeName(OMPC_defaultmap, + OMPC_DEFAULTMAP_scalar); + Loc = KindLoc; + } + Value += "'"; + Diag(Loc, diag::err_omp_unexpected_clause_value) + << Value << getOpenMPClauseName(OMPC_defaultmap); + return nullptr; + } + + return new (Context) + OMPDefaultmapClause(StartLoc, LParenLoc, MLoc, KindLoc, EndLoc, Kind, M); +} diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 11793c6ebcc..648a6c17425 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -7936,6 +7936,12 @@ OMPClause *TreeTransform<Derived>::TransformOMPDistScheduleClause( C->getDistScheduleKindLoc(), C->getCommaLoc(), C->getLocEnd()); } +template <typename Derived> +OMPClause * +TreeTransform<Derived>::TransformOMPDefaultmapClause(OMPDefaultmapClause *C) { + return C; +} + //===----------------------------------------------------------------------===// // Expression transformation //===----------------------------------------------------------------------===// |