From 579e41ced22fe784060d07b9395f58f5c2f7ad0d Mon Sep 17 00:00:00 2001 From: Kelvin Li Date: Wed, 30 Nov 2016 23:51:03 +0000 Subject: [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 --- clang/lib/Parse/ParseOpenMP.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'clang/lib/Parse/ParseOpenMP.cpp') 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) { -- cgit v1.2.3