Committed revision 259160 Best regards, Alexey Bataev ============= Software Engineer Intel Compiler Team
29.01.2016 7:57, Bataev, Alexey пишет: > I will merge this fix > > Best regards, > Alexey Bataev > ============= > Software Engineer > Intel Compiler Team > > 28.01.2016 22:18, Hans Wennborg пишет: >> Alexey: you're the owner of openmp in Clang. >> >> Can you comment on what should be merged here? >> >> On Tue, Jan 26, 2016 at 3:43 PM, Jack Howarth >> <howarth.mailing.li...@gmail.com> wrote: >>> Tested the attached patch which contains a back port of the net >>> changes from both r258307 and >>> >>> Author: abataev >>> Date: Fri Jan 22 02:56:50 2016 >>> New Revision: 258495 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=258495&view=rev >>> Log: >>> [OPENMP] Generalize codegen for 'sections'-based directive. >>> If 'sections' directive has only one sub-section, the code for >>> 'single'-based directive was emitted. Removed this codegen, because it >>> causes crashes in different cases. >>> >>> Modified: >>> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp >>> cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp >>> cfe/trunk/test/OpenMP/cancel_codegen.cpp >>> cfe/trunk/test/OpenMP/cancellation_point_codegen.cpp >>> cfe/trunk/test/OpenMP/parallel_sections_codegen.cpp >>> cfe/trunk/test/OpenMP/sections_codegen.cpp >>> cfe/trunk/test/OpenMP/sections_firstprivate_codegen.cpp >>> cfe/trunk/test/OpenMP/sections_lastprivate_codegen.cpp >>> cfe/trunk/test/OpenMP/sections_private_codegen.cpp >>> cfe/trunk/test/OpenMP/sections_reduction_codegen.cpp >>> >>> on x86_64-apple-darwin15 without regressions in the cfe or libomp >>> test suites. >>> Jack >>> ps Also verified that no regressions occur in the OpenMP3.1_Validation >>> test suite. >>> >>> On Tue, Jan 26, 2016 at 2:23 PM, Hans Wennborg <h...@chromium.org> >>> wrote: >>>> 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