Later today I will post another fix, that will fix all 'sections' related troubles, including this one. So I don't think it is necessary to merge it
Best regards, Alexey Bataev ============= Software Engineer Intel Compiler Team 22.01.2016 0:10, Hans Wennborg пишет: > 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