summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseOpenMP.cpp
diff options
context:
space:
mode:
authorKelvin Li <kkwli0@gmail.com>2016-11-30 23:51:03 +0000
committerKelvin Li <kkwli0@gmail.com>2016-11-30 23:51:03 +0000
commit579e41ced22fe784060d07b9395f58f5c2f7ad0d (patch)
treeb9e8ddf914f542f4917133564497313cfb83ae1f /clang/lib/Parse/ParseOpenMP.cpp
parented14cb060420040e712ff159058e53c62a7326a0 (diff)
downloadbcm5719-llvm-579e41ced22fe784060d07b9395f58f5c2f7ad0d.tar.gz
bcm5719-llvm-579e41ced22fe784060d07b9395f58f5c2f7ad0d.zip
[OpenMP] Sema and parsing for 'teams distribute parallel for simd' pragma
This patch is to implement sema and parsing for 'teams distribute parallel for simd' pragma. Differential Revision: https://reviews.llvm.org/D27084 llvm-svn: 288294
Diffstat (limited to 'clang/lib/Parse/ParseOpenMP.cpp')
-rw-r--r--clang/lib/Parse/ParseOpenMP.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp
index 4f418e3946d..ce1b3cd2ebe 100644
--- a/clang/lib/Parse/ParseOpenMP.cpp
+++ b/clang/lib/Parse/ParseOpenMP.cpp
@@ -39,7 +39,9 @@ enum OpenMPDirectiveKindEx {
OMPD_target_enter,
OMPD_target_exit,
OMPD_update,
- OMPD_distribute_parallel
+ OMPD_distribute_parallel,
+ OMPD_teams_distribute_parallel,
+ OMPD_teams_distribute_parallel_for
};
class ThreadprivateListParserHelper final {
@@ -110,7 +112,10 @@ static OpenMPDirectiveKind ParseOpenMPDirectiveKind(Parser &P) {
{ OMPD_target_parallel, OMPD_for, OMPD_target_parallel_for },
{ OMPD_target_parallel_for, OMPD_simd, OMPD_target_parallel_for_simd },
{ OMPD_teams, OMPD_distribute, OMPD_teams_distribute },
- { OMPD_teams_distribute, OMPD_simd, OMPD_teams_distribute_simd }
+ { OMPD_teams_distribute, OMPD_simd, OMPD_teams_distribute_simd },
+ { OMPD_teams_distribute, OMPD_parallel, OMPD_teams_distribute_parallel },
+ { OMPD_teams_distribute_parallel, OMPD_for, OMPD_teams_distribute_parallel_for },
+ { OMPD_teams_distribute_parallel_for, OMPD_simd, OMPD_teams_distribute_parallel_for_simd }
};
enum { CancellationPoint = 0, DeclareReduction = 1, TargetData = 2 };
auto Tok = P.getCurToken();
@@ -744,6 +749,7 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
case OMPD_target_simd:
case OMPD_teams_distribute:
case OMPD_teams_distribute_simd:
+ case OMPD_teams_distribute_parallel_for_simd:
Diag(Tok, diag::err_omp_unexpected_directive)
<< getOpenMPDirectiveName(DKind);
break;
@@ -778,7 +784,8 @@ Parser::DeclGroupPtrTy Parser::ParseOpenMPDeclarativeDirectiveWithExtDecl(
/// 'target update' | 'distribute parallel for' |
/// 'distribute paralle for simd' | 'distribute simd' |
/// 'target parallel for simd' | 'target simd' |
-/// 'teams distribute' | 'teams distribute simd' {clause}
+/// 'teams distribute' | 'teams distribute simd' |
+/// 'teams distribute parallel for simd' {clause}
/// annot_pragma_openmp_end
///
StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
@@ -889,7 +896,8 @@ StmtResult Parser::ParseOpenMPDeclarativeOrExecutableDirective(
case OMPD_target_parallel_for_simd:
case OMPD_target_simd:
case OMPD_teams_distribute:
- case OMPD_teams_distribute_simd: {
+ case OMPD_teams_distribute_simd:
+ case OMPD_teams_distribute_parallel_for_simd: {
ConsumeToken();
// Parse directive name of the 'critical' directive if any.
if (DKind == OMPD_critical) {
OpenPOWER on IntegriCloud