Author: abataev Date: Mon Nov 27 11:38:52 2017 New Revision: 319078 URL: http://llvm.org/viewvc/llvm-project?rev=319078&view=rev Log: [OPENMP] Codegen for `distribute parallel for simd` directive.
Added proper codegen for `distribute parallel for simd` directive. Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp cfe/trunk/lib/Sema/SemaOpenMP.cpp Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=319078&r1=319077&r2=319078&view=diff ============================================================================== --- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original) +++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Mon Nov 27 11:38:52 2017 @@ -885,6 +885,7 @@ void clang::getOpenMPCaptureRegions( case OMPD_parallel_for_simd: case OMPD_parallel_sections: case OMPD_distribute_parallel_for: + case OMPD_distribute_parallel_for_simd: CaptureRegions.push_back(OMPD_parallel); break; case OMPD_target_teams: @@ -930,7 +931,6 @@ void clang::getOpenMPCaptureRegions( case OMPD_task: case OMPD_taskloop: case OMPD_taskloop_simd: - case OMPD_distribute_parallel_for_simd: case OMPD_distribute_simd: case OMPD_teams_distribute_simd: case OMPD_teams_distribute_parallel_for_simd: Modified: cfe/trunk/lib/Sema/SemaOpenMP.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaOpenMP.cpp?rev=319078&r1=319077&r2=319078&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaOpenMP.cpp (original) +++ cfe/trunk/lib/Sema/SemaOpenMP.cpp Mon Nov 27 11:38:52 2017 @@ -6838,13 +6838,24 @@ StmtResult Sema::ActOnOpenMPDistributePa // The point of exit cannot be a branch out of the structured block. // longjmp() and throw() must not violate the entry/exit criteria. CS->getCapturedDecl()->setNothrow(); + for (int ThisCaptureLevel = + getOpenMPCaptureLevels(OMPD_distribute_parallel_for_simd); + ThisCaptureLevel > 1; --ThisCaptureLevel) { + CS = cast<CapturedStmt>(CS->getCapturedStmt()); + // 1.2.2 OpenMP Language Terminology + // Structured block - An executable statement with a single entry at the + // top and a single exit at the bottom. + // The point of exit cannot be a branch out of the structured block. + // longjmp() and throw() must not violate the entry/exit criteria. + CS->getCapturedDecl()->setNothrow(); + } OMPLoopDirective::HelperExprs B; // In presence of clause 'collapse' with number of loops, it will // define the nested loops number. unsigned NestedLoopCount = CheckOpenMPLoop( OMPD_distribute_parallel_for_simd, getCollapseNumberExpr(Clauses), - nullptr /*ordered not a clause on distribute*/, AStmt, *this, *DSAStack, + nullptr /*ordered not a clause on distribute*/, CS, *this, *DSAStack, VarsWithImplicitDSA, B); if (NestedLoopCount == 0) return StmtError(); @@ -7793,6 +7804,7 @@ static OpenMPDirectiveKind getOpenMPCapt CaptureRegion = OMPD_teams; break; case OMPD_distribute_parallel_for: + case OMPD_distribute_parallel_for_simd: CaptureRegion = OMPD_parallel; break; case OMPD_parallel_for: @@ -7800,7 +7812,6 @@ static OpenMPDirectiveKind getOpenMPCapt case OMPD_target_teams_distribute_parallel_for: case OMPD_target_teams_distribute_parallel_for_simd: case OMPD_teams_distribute_parallel_for_simd: - case OMPD_distribute_parallel_for_simd: // Do not capture schedule clause expressions. break; case OMPD_task: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits