r258307 - [OPENMP 4.0] Fix for codegen of 'cancel' directive within 'sections' directive.
Hans Wennborg via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 21 13:10:32 PST 2016
Jack suggested (https://llvm.org/bugs/show_bug.cgi?id=26059#c7) that
this should be merged to 3.8.
Alexey, you're the code owner here. OK for merging? If yes, do you
want to go ahead and merge with utils/release/merge.sh?
On Wed, Jan 20, 2016 at 4:29 AM, Alexey Bataev via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> Author: abataev
> Date: Wed Jan 20 06:29:47 2016
> New Revision: 258307
>
> URL: http://llvm.org/viewvc/llvm-project?rev=258307&view=rev
> Log:
> [OPENMP 4.0] Fix for codegen of 'cancel' directive within 'sections' directive.
> Allow to emit code for 'cancel' directive within 'sections' directive with single sub-section.
>
> Modified:
> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
> cfe/trunk/test/OpenMP/cancel_codegen.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=258307&r1=258306&r2=258307&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Wed Jan 20 06:29:47 2016
> @@ -3685,8 +3685,6 @@ void CGOpenMPRuntime::emitCancelCall(Cod
> // kmp_int32 cncl_kind);
> if (auto *OMPRegionInfo =
> dyn_cast_or_null<CGOpenMPRegionInfo>(CGF.CapturedStmtInfo)) {
> - if (OMPRegionInfo->getDirectiveKind() == OMPD_single)
> - return;
> auto &&ThenGen = [this, Loc, CancelRegion,
> OMPRegionInfo](CodeGenFunction &CGF) {
> llvm::Value *Args[] = {
>
> Modified: cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp?rev=258307&r1=258306&r2=258307&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp Wed Jan 20 06:29:47 2016
> @@ -1786,7 +1786,11 @@ CodeGenFunction::EmitSections(const OMPE
> CGF.EmitOMPPrivateClause(S, SingleScope);
> (void)SingleScope.Privatize();
>
> + auto Exit = CGF.getJumpDestInCurrentScope("omp.sections.exit");
> + CGF.BreakContinueStack.push_back(BreakContinue(Exit, Exit));
> CGF.EmitStmt(Stmt);
> + CGF.EmitBlock(Exit.getBlock());
> + CGF.BreakContinueStack.pop_back();
> };
> CGM.getOpenMPRuntime().emitSingleRegion(*this, CodeGen, S.getLocStart(),
> llvm::None, llvm::None, llvm::None,
> @@ -2647,7 +2651,8 @@ CodeGenFunction::getOMPCancelDestination
> if (Kind == OMPD_parallel || Kind == OMPD_task)
> return ReturnBlock;
> assert(Kind == OMPD_for || Kind == OMPD_section || Kind == OMPD_sections ||
> - Kind == OMPD_parallel_sections || Kind == OMPD_parallel_for);
> + Kind == OMPD_parallel_sections || Kind == OMPD_parallel_for ||
> + Kind == OMPD_single);
> return BreakContinueStack.back().BreakBlock;
> }
>
>
> Modified: cfe/trunk/test/OpenMP/cancel_codegen.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/OpenMP/cancel_codegen.cpp?rev=258307&r1=258306&r2=258307&view=diff
> ==============================================================================
> --- cfe/trunk/test/OpenMP/cancel_codegen.cpp (original)
> +++ cfe/trunk/test/OpenMP/cancel_codegen.cpp Wed Jan 20 06:29:47 2016
> @@ -20,7 +20,7 @@ int main (int argc, char **argv) {
> #pragma omp cancel sections
> }
> // CHECK: call i32 @__kmpc_single(
> -// CHECK-NOT: @__kmpc_cancel
> +// CHECK: call i32 @__kmpc_cancel(
> // CHECK: call void @__kmpc_end_single(
> // CHECK: call void @__kmpc_barrier(%ident_t*
> #pragma omp sections
> @@ -126,7 +126,7 @@ for (int i = 0; i < argc; ++i) {
>
> // CHECK: define internal void @{{[^(]+}}(i32* {{[^,]+}}, i32* {{[^,]+}})
> // CHECK: call i32 @__kmpc_single(
> -// CHECK-NOT: @__kmpc_cancel
> +// CHECK: call i32 @__kmpc_cancel(
> // CHECK: call void @__kmpc_end_single(
> // CHECK: ret void
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list