Did that fix land, and should it be merged to 3.8?
On Thu, Jan 21, 2016 at 7:03 PM, Alexey Bataev <a.bat...@hotmail.com> wrote: > 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