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@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits