r321816 - [OPENMP] Add debug info for generated functions.

Alexey Bataev via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 4 13:04:17 PST 2018


Yes, I mean these 2.

-------------
Best regards,
Alexey Bataev

04.01.2018 16:02, Jonas Hahnfeld пишет:
> You mean r321818 and r321820? I skipped them because they are for
> NVPTX and target directives which aren't fully functional in 6.0
> anyway, right?
> Or patches in the future?
>
> Am 2018-01-04 21:58, schrieb Alexey Bataev:
>> Hi Jonas, I don't think it is necessary. It is better to backport my 2
>> next patches with bug fixes.
>>
>> Best regards,
>> Alexey
>>
>> 04.01.2018 15:54, Jonas Hahnfeld пишет:
>>
>>> Hi Alexey,
>>>
>>> should this change be backported to 6.0?
>>>
>>> Regards,
>>> Jonas
>>>
>>> Am 2018-01-04 20:45, schrieb Alexey Bataev via cfe-commits:
>>>
>>>> Author: abataev
>>>> Date: Thu Jan  4 11:45:16 2018
>>>> New Revision: 321816
>>>>
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%3Frev%3D321816%26view%3Drev&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=g3DdxRoQ%2B8RbIORsLLfEJAAP4Zn2Orsshr6PwIthnQw%3D&reserved=0
>>
>>>> Log:
>>>> [OPENMP] Add debug info for generated functions.
>>>>
>>>> Most of the generated functions for the OpenMP were generated with
>>>>
>>>> disabled debug info. Patch fixes this for better user experience.
>>>>
>>>> Modified:
>>>> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>>>> cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
>>>> cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
>>>> cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.h
>>>> cfe/trunk/test/OpenMP/target_parallel_debug_codegen.cpp
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FCodeGen%2FCGOpenMPRuntime.cpp%3Frev%3D321816%26r1%3D321815%26r2%3D321816%26view%3Ddiff&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=2ppjOPjnpev4zlt1Fh6ByuYdotTiSr0Z1WyvBa8WWHo%3D&reserved=0
>>
>>>>
>>>>
>>>
>> ==============================================================================
>>
>>>>
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Thu Jan  4 11:45:16
>>>> 2018
>>>> @@ -1216,7 +1216,8 @@ emitCombinerOrInitializer(CodeGenModule
>>>> CodeGenFunction CGF(CGM);
>>>> // Map "T omp_in;" variable to "*omp_in_parm" value in all
>>>> expressions.
>>>> // Map "T omp_out;" variable to "*omp_out_parm" value in all
>>>> expressions.
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args,
>>>> In->getLocation(),
>>>> +                    Out->getLocation());
>>>> CodeGenFunction::OMPPrivateScope Scope(CGF);
>>>> Address AddrIn = CGF.GetAddrOfLocalVar(&OmpInParm);
>>>> Scope.addPrivate(In, [&CGF, AddrIn, PtrTy]() -> Address {
>>>> @@ -2383,7 +2384,8 @@ llvm::Function *CGOpenMPRuntime::emitThr
>>>> // threadprivate copy of the variable VD
>>>> CodeGenFunction CtorCGF(CGM);
>>>> FunctionArgList Args;
>>>> -      ImplicitParamDecl Dst(CGM.getContext(),
>>>> CGM.getContext().VoidPtrTy,
>>>> +      ImplicitParamDecl Dst(CGM.getContext(), /*DC=*/nullptr,
>>>> Loc,
>>>> +                            /*Id=*/nullptr,
>>>> CGM.getContext().VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> Args.push_back(&Dst);
>>>>
>>>> @@ -2393,13 +2395,13 @@ llvm::Function *CGOpenMPRuntime::emitThr
>>>> auto Fn = CGM.CreateGlobalInitOrDestructFunction(
>>>> FTy, ".__kmpc_global_ctor_.", FI, Loc);
>>>> CtorCGF.StartFunction(GlobalDecl(),
>>>> CGM.getContext().VoidPtrTy, Fn, FI,
>>>> -                            Args, SourceLocation());
>>>> +                            Args, Loc, Loc);
>>>> auto ArgVal = CtorCGF.EmitLoadOfScalar(
>>>> CtorCGF.GetAddrOfLocalVar(&Dst), /*Volatile=*/false,
>>>> CGM.getContext().VoidPtrTy, Dst.getLocation());
>>>> Address Arg = Address(ArgVal, VDAddr.getAlignment());
>>>> -      Arg = CtorCGF.Builder.CreateElementBitCast(Arg,
>>>> -
>>>> CtorCGF.ConvertTypeForMem(ASTTy));
>>>> +      Arg = CtorCGF.Builder.CreateElementBitCast(
>>>> +          Arg, CtorCGF.ConvertTypeForMem(ASTTy));
>>>> CtorCGF.EmitAnyExprToMem(Init, Arg,
>>>> Init->getType().getQualifiers(),
>>>> /*IsInitializer=*/true);
>>>> ArgVal = CtorCGF.EmitLoadOfScalar(
>>>> @@ -2414,7 +2416,8 @@ llvm::Function *CGOpenMPRuntime::emitThr
>>>> // of the variable VD
>>>> CodeGenFunction DtorCGF(CGM);
>>>> FunctionArgList Args;
>>>> -      ImplicitParamDecl Dst(CGM.getContext(),
>>>> CGM.getContext().VoidPtrTy,
>>>> +      ImplicitParamDecl Dst(CGM.getContext(), /*DC=*/nullptr,
>>>> Loc,
>>>> +                            /*Id=*/nullptr,
>>>> CGM.getContext().VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> Args.push_back(&Dst);
>>>>
>>>> @@ -2425,7 +2428,7 @@ llvm::Function *CGOpenMPRuntime::emitThr
>>>> FTy, ".__kmpc_global_dtor_.", FI, Loc);
>>>> auto NL = ApplyDebugLocation::CreateEmpty(DtorCGF);
>>>> DtorCGF.StartFunction(GlobalDecl(),
>>>> CGM.getContext().VoidTy,
>>>> Fn, FI, Args,
>>>> -                            SourceLocation());
>>>> +                            Loc, Loc);
>>>> // Create a scope with an artificial location for the body
>>>> of
>>>> this function.
>>>> auto AL = ApplyDebugLocation::CreateArtificial(DtorCGF);
>>>> auto ArgVal = DtorCGF.EmitLoadOfScalar(
>>>> @@ -2469,7 +2472,7 @@ llvm::Function *CGOpenMPRuntime::emitThr
>>>> FunctionArgList ArgList;
>>>> InitCGF.StartFunction(GlobalDecl(),
>>>> CGM.getContext().VoidTy,
>>>> InitFunction,
>>>>
>>>> CGM.getTypes().arrangeNullaryFunction(), ArgList,
>>>> -                            Loc);
>>>> +                            Loc, Loc);
>>>> emitThreadPrivateVarInit(InitCGF, VDAddr, Ctor, CopyCtor,
>>>> Dtor, Loc);
>>>> InitCGF.FinishFunction();
>>>> return InitFunction;
>>>> @@ -2783,12 +2786,15 @@ static Address emitAddrOfVarFromArray(Co
>>>> static llvm::Value *emitCopyprivateCopyFunction(
>>>> CodeGenModule &CGM, llvm::Type *ArgsType,
>>>> ArrayRef<const Expr *> CopyprivateVars, ArrayRef<const Expr
>>>> *> DestExprs,
>>>> -    ArrayRef<const Expr *> SrcExprs, ArrayRef<const Expr *>
>>>> AssignmentOps) {
>>>> +    ArrayRef<const Expr *> SrcExprs, ArrayRef<const Expr *>
>>>> AssignmentOps,
>>>> +    SourceLocation Loc) {
>>>> auto &C = CGM.getContext();
>>>> // void copy_func(void *LHSArg, void *RHSArg);
>>>> FunctionArgList Args;
>>>> -  ImplicitParamDecl LHSArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> -  ImplicitParamDecl RHSArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl LHSArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, C.VoidPtrTy,
>>>> +                           ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl RHSArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, C.VoidPtrTy,
>>>> +                           ImplicitParamDecl::Other);
>>>> Args.push_back(&LHSArg);
>>>> Args.push_back(&RHSArg);
>>>> auto &CGFI =
>>>> CGM.getTypes().arrangeBuiltinFunctionDeclaration(C.VoidTy, Args);
>>>> @@ -2797,7 +2803,7 @@ static llvm::Value *emitCopyprivateCopyF
>>>> ".omp.copyprivate.copy_func", &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>> // Dest = (void*[n])(LHSArg);
>>>> // Src = (void*[n])(RHSArg);
>>>> Address LHS(CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
>>>> @@ -2888,7 +2894,7 @@ void CGOpenMPRuntime::emitSingleRegion(C
>>>> // threads in the corresponding parallel region.
>>>> auto *CpyFn = emitCopyprivateCopyFunction(
>>>> CGM,
>>>> CGF.ConvertTypeForMem(CopyprivateArrayTy)->getPointerTo(),
>>>> -        CopyprivateVars, SrcExprs, DstExprs, AssignmentOps);
>>>> +        CopyprivateVars, SrcExprs, DstExprs, AssignmentOps, Loc);
>>>>
>>>> auto *BufSize = CGF.getTypeSize(CopyprivateArrayTy);
>>>> Address CL =
>>>>
>>>> CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(CopyprivateList,
>>>> @@ -3399,11 +3405,13 @@ createOffloadingBinaryDescriptorFunction
>>>> Args.push_back(&DummyPtr);
>>>>
>>>> CodeGenFunction CGF(CGM);
>>>> +  // Disable debug info for global (de-)initializer because they
>>>> are
>>>> not part of
>>>> +  // some particular construct.
>>>> +  CGF.disableDebugInfo();
>>>> auto &FI =
>>>> CGM.getTypes().arrangeBuiltinFunctionDeclaration(C.VoidTy, Args);
>>>> auto FTy = CGM.getTypes().GetFunctionType(FI);
>>>> -  auto *Fn =
>>>> -      CGM.CreateGlobalInitOrDestructFunction(FTy, Name, FI,
>>>> SourceLocation());
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FI, Args,
>>>> SourceLocation());
>>>> +  auto *Fn = CGM.CreateGlobalInitOrDestructFunction(FTy, Name,
>>>> FI);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FI, Args);
>>>> Codegen(CGF);
>>>> CGF.FinishFunction();
>>>> return Fn;
>>>> @@ -3411,7 +3419,6 @@ createOffloadingBinaryDescriptorFunction
>>>>
>>>> llvm::Function *
>>>> CGOpenMPRuntime::createOffloadingBinaryDescriptorRegistration() {
>>>>
>>>> -
>>>> // If we don't have entries or if we are emitting code for the
>>>> device, we
>>>> // don't need to do anything.
>>>> if (CGM.getLangOpts().OpenMPIsDevice ||
>>>> OffloadEntriesInfoManager.empty())
>>>> @@ -3945,7 +3952,8 @@ emitProxyTaskFunction(CodeGenModule &CGM
>>>> ".omp_task_entry.",
>>>> &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, TaskEntry,
>>>> TaskEntryFnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.StartFunction(GlobalDecl(), KmpInt32Ty, TaskEntry,
>>>> TaskEntryFnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), KmpInt32Ty, TaskEntry,
>>>> TaskEntryFnInfo, Args,
>>>> +                    Loc, Loc);
>>>>
>>>> // TaskFunction(gtid, tt->task_data.part_id, &tt->privates,
>>>> task_privates_map,
>>>> // tt,
>>>> @@ -4045,9 +4053,8 @@ static llvm::Value *emitDestructorsFunct
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, DestructorFn,
>>>> DestructorFnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> CGF.StartFunction(GlobalDecl(), KmpInt32Ty, DestructorFn,
>>>> DestructorFnInfo,
>>>> -                    Args);
>>>> +                    Args, Loc, Loc);
>>>>
>>>> LValue Base = CGF.EmitLoadOfPointerLValue(
>>>> CGF.GetAddrOfLocalVar(&TaskTypeArg),
>>>> @@ -4139,9 +4146,8 @@ emitTaskPrivateMappingFunction(CodeGenMo
>>>> TaskPrivatesMap->removeFnAttr(llvm::Attribute::OptimizeNone);
>>>> TaskPrivatesMap->addFnAttr(llvm::Attribute::AlwaysInline);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> CGF.StartFunction(GlobalDecl(), C.VoidTy, TaskPrivatesMap,
>>>> -                    TaskPrivatesMapFnInfo, Args);
>>>> +                    TaskPrivatesMapFnInfo, Args, Loc, Loc);
>>>>
>>>> // *privi = &.privates.privi;
>>>> LValue Base = CGF.EmitLoadOfPointerLValue(
>>>> @@ -4322,8 +4328,8 @@ emitTaskDupFunction(CodeGenModule &CGM,
>>>> ".omp_task_dup.", &CGM.getModule());
>>>>
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, TaskDup,
>>>> TaskDupFnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, TaskDup,
>>>> TaskDupFnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, TaskDup,
>>>> TaskDupFnInfo, Args, Loc,
>>>> +                    Loc);
>>>>
>>>> LValue TDBase = CGF.EmitLoadOfPointerLValue(
>>>> CGF.GetAddrOfLocalVar(&DstArg),
>>>> @@ -4943,15 +4949,17 @@ static void emitReductionCombiner(CodeGe
>>>> }
>>>>
>>>> llvm::Value *CGOpenMPRuntime::emitReductionFunction(
>>>> -    CodeGenModule &CGM, llvm::Type *ArgsType, ArrayRef<const Expr
>>>> *> Privates,
>>>> -    ArrayRef<const Expr *> LHSExprs, ArrayRef<const Expr *>
>>>> RHSExprs,
>>>> -    ArrayRef<const Expr *> ReductionOps) {
>>>> +    CodeGenModule &CGM, SourceLocation Loc, llvm::Type *ArgsType,
>>>>
>>>> +    ArrayRef<const Expr *> Privates, ArrayRef<const Expr *>
>>>> LHSExprs,
>>>> +    ArrayRef<const Expr *> RHSExprs, ArrayRef<const Expr *>
>>>> ReductionOps) {
>>>> auto &C = CGM.getContext();
>>>>
>>>> // void reduction_func(void *LHSArg, void *RHSArg);
>>>> FunctionArgList Args;
>>>> -  ImplicitParamDecl LHSArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> -  ImplicitParamDecl RHSArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl LHSArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, C.VoidPtrTy,
>>>> +                           ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl RHSArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, C.VoidPtrTy,
>>>> +                           ImplicitParamDecl::Other);
>>>> Args.push_back(&LHSArg);
>>>> Args.push_back(&RHSArg);
>>>> auto &CGFI =
>>>> CGM.getTypes().arrangeBuiltinFunctionDeclaration(C.VoidTy, Args);
>>>> @@ -4960,7 +4968,7 @@ llvm::Value *CGOpenMPRuntime::emitReduct
>>>> ".omp.reduction.reduction_func", &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>>
>>>> // Dst = (void*[n])(LHSArg);
>>>> // Src = (void*[n])(RHSArg);
>>>> @@ -5149,8 +5157,8 @@ void CGOpenMPRuntime::emitReduction(Code
>>>>
>>>> // 2. Emit reduce_func().
>>>> auto *ReductionFn = emitReductionFunction(
>>>> -      CGM,
>>>> CGF.ConvertTypeForMem(ReductionArrayTy)->getPointerTo(), Privates,
>>>>
>>>> -      LHSExprs, RHSExprs, ReductionOps);
>>>> +      CGM, Loc,
>>>> CGF.ConvertTypeForMem(ReductionArrayTy)->getPointerTo(),
>>>> +      Privates, LHSExprs, RHSExprs, ReductionOps);
>>>>
>>>> // 3. Create static kmp_critical_name lock = { 0 };
>>>> auto *Lock = getCriticalRegionLock(".reduction");
>>>> @@ -5365,7 +5373,8 @@ static llvm::Value *emitReduceInitFuncti
>>>> ReductionCodeGen &RCG,
>>>> unsigned N) {
>>>> auto &C = CGM.getContext();
>>>> FunctionArgList Args;
>>>> -  ImplicitParamDecl Param(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl Param(C, /*DC=*/nullptr, Loc, /*Id=*/nullptr,
>>>> C.VoidPtrTy,
>>>> +                          ImplicitParamDecl::Other);
>>>> Args.emplace_back(&Param);
>>>> auto &FnInfo =
>>>> CGM.getTypes().arrangeBuiltinFunctionDeclaration(C.VoidTy,
>>>> Args);
>>>> @@ -5374,8 +5383,7 @@ static llvm::Value *emitReduceInitFuncti
>>>> ".red_init.",
>>>> &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, FnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args,
>>>> Loc, Loc);
>>>> Address PrivateAddr = CGF.EmitLoadOfPointer(
>>>> CGF.GetAddrOfLocalVar(&Param),
>>>> C.getPointerType(C.VoidPtrTy).castAs<PointerType>());
>>>> @@ -5435,8 +5443,10 @@ static llvm::Value *emitReduceCombFuncti
>>>> auto *LHSVD = cast<VarDecl>(cast<DeclRefExpr>(LHS)->getDecl());
>>>>
>>>> auto *RHSVD = cast<VarDecl>(cast<DeclRefExpr>(RHS)->getDecl());
>>>>
>>>> FunctionArgList Args;
>>>> -  ImplicitParamDecl ParamInOut(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> -  ImplicitParamDecl ParamIn(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ParamInOut(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                               C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ParamIn(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> C.VoidPtrTy,
>>>> +                            ImplicitParamDecl::Other);
>>>> Args.emplace_back(&ParamInOut);
>>>> Args.emplace_back(&ParamIn);
>>>> auto &FnInfo =
>>>> @@ -5446,8 +5456,7 @@ static llvm::Value *emitReduceCombFuncti
>>>> ".red_comb.",
>>>> &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, FnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args,
>>>> Loc, Loc);
>>>> llvm::Value *Size = nullptr;
>>>> // If the size of the reduction item is non-constant, load it
>>>> from global
>>>> // threadprivate variable.
>>>> @@ -5506,7 +5515,8 @@ static llvm::Value *emitReduceFiniFuncti
>>>> return nullptr;
>>>> auto &C = CGM.getContext();
>>>> FunctionArgList Args;
>>>> -  ImplicitParamDecl Param(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl Param(C, /*DC=*/nullptr, Loc, /*Id=*/nullptr,
>>>> C.VoidPtrTy,
>>>> +                          ImplicitParamDecl::Other);
>>>> Args.emplace_back(&Param);
>>>> auto &FnInfo =
>>>> CGM.getTypes().arrangeBuiltinFunctionDeclaration(C.VoidTy,
>>>> Args);
>>>> @@ -5515,8 +5525,7 @@ static llvm::Value *emitReduceFiniFuncti
>>>> ".red_fini.",
>>>> &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, FnInfo);
>>>> CodeGenFunction CGF(CGM);
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, FnInfo, Args,
>>>> Loc, Loc);
>>>> Address PrivateAddr = CGF.EmitLoadOfPointer(
>>>> CGF.GetAddrOfLocalVar(&Param),
>>>> C.getPointerType(C.VoidPtrTy).castAs<PointerType>());
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FCodeGen%2FCGOpenMPRuntime.h%3Frev%3D321816%26r1%3D321815%26r2%3D321816%26view%3Ddiff&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=9ULj5fjX4dJY8HK4muYuuyx1qObSdR%2BEyhUOz%2FDN%2Bvo%3D&reserved=0
>>
>>>>
>>>>
>>>
>> ==============================================================================
>>
>>>>
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h Thu Jan  4 11:45:16
>>>> 2018
>>>> @@ -1048,7 +1048,8 @@ public:
>>>> /// \param RHSExprs List of RHS in \a ReductionOps reduction
>>>> operations.
>>>> /// \param ReductionOps List of reduction operations in form
>>>> 'LHS binop RHS'
>>>> /// or 'operator binop(LHS, RHS)'.
>>>> -  llvm::Value *emitReductionFunction(CodeGenModule &CGM,
>>>> llvm::Type *ArgsType,
>>>> +  llvm::Value *emitReductionFunction(CodeGenModule &CGM,
>>>> SourceLocation Loc,
>>>> +                                     llvm::Type *ArgsType,
>>>> ArrayRef<const Expr *>
>>>> Privates,
>>>> ArrayRef<const Expr *>
>>>> LHSExprs,
>>>> ArrayRef<const Expr *>
>>>> RHSExprs,
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FCodeGen%2FCGOpenMPRuntimeNVPTX.cpp%3Frev%3D321816%26r1%3D321815%26r2%3D321816%26view%3Ddiff&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=yD%2BjGSEyCFMT4V6IBEyy%2BYKVSXg2yqtJixYBH3FQGMw%3D&reserved=0
>>
>>>>
>>>>
>>>
>> ==============================================================================
>>
>>>>
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp Thu Jan  4
>>>> 11:45:16 2018
>>>> @@ -250,8 +250,8 @@ static llvm::Value *getMasterThreadID(Co
>>>> }
>>>>
>>>> CGOpenMPRuntimeNVPTX::WorkerFunctionState::WorkerFunctionState(
>>>> -    CodeGenModule &CGM)
>>>> -    : WorkerFn(nullptr), CGFI(nullptr) {
>>>> +    CodeGenModule &CGM, SourceLocation Loc)
>>>> +    : WorkerFn(nullptr), CGFI(nullptr), Loc(Loc) {
>>>> createWorkerFunction(CGM);
>>>> }
>>>>
>>>> @@ -297,28 +297,28 @@ void CGOpenMPRuntimeNVPTX::emitGenericKe
>>>> ExecutionModeRAII ModeRAII(CurrentExecutionMode,
>>>>
>>>> CGOpenMPRuntimeNVPTX::ExecutionMode::Generic);
>>>> EntryFunctionState EST;
>>>> -  WorkerFunctionState WST(CGM);
>>>> +  WorkerFunctionState WST(CGM, D.getLocStart());
>>>> Work.clear();
>>>> WrapperFunctionsMap.clear();
>>>>
>>>> // Emit target region as a standalone region.
>>>> class NVPTXPrePostActionTy : public PrePostActionTy {
>>>> -    CGOpenMPRuntimeNVPTX &RT;
>>>> CGOpenMPRuntimeNVPTX::EntryFunctionState &EST;
>>>> CGOpenMPRuntimeNVPTX::WorkerFunctionState &WST;
>>>>
>>>> public:
>>>> -    NVPTXPrePostActionTy(CGOpenMPRuntimeNVPTX &RT,
>>>> -                         CGOpenMPRuntimeNVPTX::EntryFunctionState
>>>> &EST,
>>>> +    NVPTXPrePostActionTy(CGOpenMPRuntimeNVPTX::EntryFunctionState
>>>> &EST,
>>>>
>>>> CGOpenMPRuntimeNVPTX::WorkerFunctionState &WST)
>>>> -        : RT(RT), EST(EST), WST(WST) {}
>>>> +        : EST(EST), WST(WST) {}
>>>> void Enter(CodeGenFunction &CGF) override {
>>>> -      RT.emitGenericEntryHeader(CGF, EST, WST);
>>>> +      static_cast<CGOpenMPRuntimeNVPTX
>>>> &>(CGF.CGM.getOpenMPRuntime())
>>>> +          .emitGenericEntryHeader(CGF, EST, WST);
>>>> }
>>>> void Exit(CodeGenFunction &CGF) override {
>>>> -      RT.emitGenericEntryFooter(CGF, EST);
>>>> +      static_cast<CGOpenMPRuntimeNVPTX
>>>> &>(CGF.CGM.getOpenMPRuntime())
>>>> +          .emitGenericEntryFooter(CGF, EST);
>>>> }
>>>> -  } Action(*this, EST, WST);
>>>> +  } Action(EST, WST);
>>>> CodeGen.setAction(Action);
>>>> emitTargetOutlinedFunctionHelper(D, ParentName, OutlinedFn,
>>>> OutlinedFnID,
>>>> IsOffloadEntry, CodeGen);
>>>> @@ -347,7 +347,7 @@ void CGOpenMPRuntimeNVPTX::emitGenericEn
>>>> Bld.CreateCondBr(IsWorker, WorkerBB, MasterCheckBB);
>>>>
>>>> CGF.EmitBlock(WorkerBB);
>>>> -  emitCall(CGF, WST.WorkerFn);
>>>> +  emitOutlinedFunctionCall(CGF, WST.Loc, WST.WorkerFn);
>>>> CGF.EmitBranch(EST.ExitBB);
>>>>
>>>> CGF.EmitBlock(MasterCheckBB);
>>>> @@ -479,8 +479,8 @@ void CGOpenMPRuntimeNVPTX::emitWorkerFun
>>>> ASTContext &Ctx = CGM.getContext();
>>>>
>>>> CodeGenFunction CGF(CGM, /*suppressNewContext=*/true);
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), Ctx.VoidTy, WST.WorkerFn,
>>>> *WST.CGFI, {});
>>>> +  CGF.StartFunction(GlobalDecl(), Ctx.VoidTy, WST.WorkerFn,
>>>> *WST.CGFI, {},
>>>> +                    WST.Loc, WST.Loc);
>>>> emitWorkerLoop(CGF, WST);
>>>> CGF.FinishFunction();
>>>> }
>>>> @@ -571,8 +571,9 @@ void CGOpenMPRuntimeNVPTX::emitWorkerLoo
>>>> Address Capture = CGF.EmitLoadOfPointer(SharedArgs,
>>>> Ctx.getPointerType(
>>>>
>>>> Ctx.getPointerType(Ctx.VoidPtrTy)).castAs<PointerType>());
>>>> -    emitCall(CGF, W, {Bld.getInt16(/*ParallelLevel=*/0),
>>>> -        getMasterThreadID(CGF), Capture.getPointer()});
>>>> +    emitOutlinedFunctionCall(CGF, WST.Loc, W,
>>>> +                             {Bld.getInt16(/*ParallelLevel=*/0),
>>>> +                              getMasterThreadID(CGF),
>>>> Capture.getPointer()});
>>>>
>>>> // Go to end of parallel region.
>>>> CGF.EmitBranch(TerminateBB);
>>>> @@ -1319,27 +1320,31 @@ static void emitReductionListCopy(
>>>> ///    local = local @ remote
>>>> ///  else
>>>> ///    local = remote
>>>> -static llvm::Value *
>>>> -emitReduceScratchpadFunction(CodeGenModule &CGM,
>>>> -                             ArrayRef<const Expr *> Privates,
>>>> -                             QualType ReductionArrayTy,
>>>> llvm::Value
>>>> *ReduceFn) {
>>>> +static llvm::Value *emitReduceScratchpadFunction(
>>>> +    CodeGenModule &CGM, ArrayRef<const Expr *> Privates,
>>>> +    QualType ReductionArrayTy, llvm::Value *ReduceFn,
>>>> SourceLocation Loc) {
>>>> auto &C = CGM.getContext();
>>>> auto Int32Ty = C.getIntTypeForBitwidth(32, /* Signed */ true);
>>>>
>>>> // Destination of the copy.
>>>> -  ImplicitParamDecl ReduceListArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ReduceListArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // Base address of the scratchpad array, with each element
>>>> storing a
>>>> // Reduce list per team.
>>>> -  ImplicitParamDecl ScratchPadArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ScratchPadArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // A source index into the scratchpad array.
>>>> -  ImplicitParamDecl IndexArg(C, Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl IndexArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, Int32Ty,
>>>> +                             ImplicitParamDecl::Other);
>>>> // Row width of an element in the scratchpad array, typically
>>>> // the number of teams.
>>>> -  ImplicitParamDecl WidthArg(C, Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl WidthArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, Int32Ty,
>>>> +                             ImplicitParamDecl::Other);
>>>> // If should_reduce == 1, then it's load AND reduce,
>>>> // If should_reduce == 0 (or otherwise), then it only loads (+
>>>> copy).
>>>> // The latter case is used for initialization.
>>>> -  ImplicitParamDecl ShouldReduceArg(C, Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ShouldReduceArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                    Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>>
>>>> FunctionArgList Args;
>>>> Args.push_back(&ReduceListArg);
>>>> @@ -1354,10 +1359,7 @@ emitReduceScratchpadFunction(CodeGenModu
>>>> "_omp_reduction_load_and_reduce", &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*DC=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  // We don't need debug information in this function as nothing
>>>> here refers to
>>>> -  // user code.
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>>
>>>> auto &Bld = CGF.Builder;
>>>>
>>>> @@ -1421,7 +1423,8 @@ emitReduceScratchpadFunction(CodeGenModu
>>>> ReduceListAddr.getPointer(), CGF.VoidPtrTy);
>>>> llvm::Value *RemoteDataPtr =
>>>> Bld.CreatePointerBitCastOrAddrSpaceCast(
>>>> RemoteReduceList.getPointer(), CGF.VoidPtrTy);
>>>> -  CGF.EmitCallOrInvoke(ReduceFn, {LocalDataPtr, RemoteDataPtr});
>>>> +  CGM.getOpenMPRuntime().emitOutlinedFunctionCall(
>>>> +      CGF, Loc, ReduceFn, {LocalDataPtr, RemoteDataPtr});
>>>> Bld.CreateBr(MergeBB);
>>>>
>>>> CGF.EmitBlock(ElseBB);
>>>> @@ -1445,22 +1448,27 @@ emitReduceScratchpadFunction(CodeGenModu
>>>> ///
>>>> static llvm::Value *emitCopyToScratchpad(CodeGenModule &CGM,
>>>> ArrayRef<const Expr *>
>>>> Privates,
>>>> -                                         QualType
>>>> ReductionArrayTy) {
>>>> +                                         QualType
>>>> ReductionArrayTy,
>>>> +                                         SourceLocation Loc) {
>>>>
>>>> auto &C = CGM.getContext();
>>>> auto Int32Ty = C.getIntTypeForBitwidth(32, /* Signed */ true);
>>>>
>>>> // Source of the copy.
>>>> -  ImplicitParamDecl ReduceListArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ReduceListArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // Base address of the scratchpad array, with each element
>>>> storing a
>>>> // Reduce list per team.
>>>> -  ImplicitParamDecl ScratchPadArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ScratchPadArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // A destination index into the scratchpad array, typically the
>>>> team
>>>> // identifier.
>>>> -  ImplicitParamDecl IndexArg(C, Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl IndexArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, Int32Ty,
>>>> +                             ImplicitParamDecl::Other);
>>>> // Row width of an element in the scratchpad array, typically
>>>> // the number of teams.
>>>> -  ImplicitParamDecl WidthArg(C, Int32Ty,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl WidthArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr, Int32Ty,
>>>> +                             ImplicitParamDecl::Other);
>>>>
>>>> FunctionArgList Args;
>>>> Args.push_back(&ReduceListArg);
>>>> @@ -1474,10 +1482,7 @@ static llvm::Value *emitCopyToScratchpad
>>>> "_omp_reduction_copy_to_scratchpad", &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*DC=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  // We don't need debug information in this function as nothing
>>>> here refers to
>>>> -  // user code.
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>>
>>>> auto &Bld = CGF.Builder;
>>>>
>>>> @@ -1534,17 +1539,19 @@ static llvm::Value *emitCopyToScratchpad
>>>> ///     sync
>>>> static llvm::Value *emitInterWarpCopyFunction(CodeGenModule &CGM,
>>>>
>>>> ArrayRef<const Expr
>>>> *> Privates,
>>>> -                                              QualType
>>>> ReductionArrayTy) {
>>>> +                                              QualType
>>>> ReductionArrayTy,
>>>> +                                              SourceLocation Loc)
>>>> {
>>>> auto &C = CGM.getContext();
>>>> auto &M = CGM.getModule();
>>>>
>>>> // ReduceList: thread local Reduce list.
>>>> // At the stage of the computation when this function is
>>>> called, partially
>>>> // aggregated values reside in the first lane of every active
>>>> warp.
>>>> -  ImplicitParamDecl ReduceListArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ReduceListArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // NumWarps: number of warps active in the parallel region.
>>>> This could
>>>> // be smaller than 32 (max warps in a CTA) for partial block
>>>> reduction.
>>>> -  ImplicitParamDecl NumWarpsArg(C,
>>>> +  ImplicitParamDecl NumWarpsArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> C.getIntTypeForBitwidth(32, /*
>>>> Signed */ true),
>>>> ImplicitParamDecl::Other);
>>>> FunctionArgList Args;
>>>> @@ -1557,10 +1564,7 @@ static llvm::Value *emitInterWarpCopyFun
>>>> "_omp_reduction_inter_warp_copy_func", &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*DC=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  // We don't need debug information in this function as nothing
>>>> here refers to
>>>> -  // user code.
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>>
>>>> auto &Bld = CGF.Builder;
>>>>
>>>> @@ -1781,21 +1785,23 @@ static llvm::Value *emitInterWarpCopyFun
>>>> ///   (2k+1)th thread is ignored in the value aggregation.
>>>> Therefore
>>>> ///   we copy the Reduce list from the (2k+1)th lane to (k+1)th
>>>> lane so
>>>> ///   that the contiguity assumption still holds.
>>>> -static llvm::Value *
>>>> -emitShuffleAndReduceFunction(CodeGenModule &CGM,
>>>> -                             ArrayRef<const Expr *> Privates,
>>>> -                             QualType ReductionArrayTy,
>>>> llvm::Value
>>>> *ReduceFn) {
>>>> +static llvm::Value *emitShuffleAndReduceFunction(
>>>> +    CodeGenModule &CGM, ArrayRef<const Expr *> Privates,
>>>> +    QualType ReductionArrayTy, llvm::Value *ReduceFn,
>>>> SourceLocation Loc) {
>>>> auto &C = CGM.getContext();
>>>>
>>>> // Thread local Reduce list used to host the values of data to
>>>> be reduced.
>>>> -  ImplicitParamDecl ReduceListArg(C, C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ReduceListArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                  C.VoidPtrTy,
>>>> ImplicitParamDecl::Other);
>>>> // Current lane id; could be logical.
>>>> -  ImplicitParamDecl LaneIDArg(C, C.ShortTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl LaneIDArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> C.ShortTy,
>>>> +                              ImplicitParamDecl::Other);
>>>> // Offset of the remote source lane relative to the current
>>>> lane.
>>>> -  ImplicitParamDecl RemoteLaneOffsetArg(C, C.ShortTy,
>>>> -
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl RemoteLaneOffsetArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                                        C.ShortTy,
>>>> ImplicitParamDecl::Other);
>>>> // Algorithm version.  This is expected to be known at compile
>>>> time.
>>>> -  ImplicitParamDecl AlgoVerArg(C, C.ShortTy,
>>>> ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl AlgoVerArg(C, /*DC=*/nullptr, Loc,
>>>> /*Id=*/nullptr,
>>>> +                               C.ShortTy,
>>>> ImplicitParamDecl::Other);
>>>> FunctionArgList Args;
>>>> Args.push_back(&ReduceListArg);
>>>> Args.push_back(&LaneIDArg);
>>>> @@ -1808,10 +1814,7 @@ emitShuffleAndReduceFunction(CodeGenModu
>>>> "_omp_reduction_shuffle_and_reduce_func",
>>>> &CGM.getModule());
>>>> CGM.SetInternalFunctionAttributes(/*D=*/nullptr, Fn, CGFI);
>>>> CodeGenFunction CGF(CGM);
>>>> -  // We don't need debug information in this function as nothing
>>>> here refers to
>>>> -  // user code.
>>>> -  CGF.disableDebugInfo();
>>>> -  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args);
>>>> +  CGF.StartFunction(GlobalDecl(), C.VoidTy, Fn, CGFI, Args, Loc,
>>>> Loc);
>>>>
>>>> auto &Bld = CGF.Builder;
>>>>
>>>> @@ -1898,7 +1901,8 @@ emitShuffleAndReduceFunction(CodeGenModu
>>>> LocalReduceList.getPointer(), CGF.VoidPtrTy);
>>>> llvm::Value *RemoteReduceListPtr =
>>>> Bld.CreatePointerBitCastOrAddrSpaceCast(
>>>> RemoteReduceList.getPointer(), CGF.VoidPtrTy);
>>>> -  CGF.EmitCallOrInvoke(ReduceFn, {LocalReduceListPtr,
>>>> RemoteReduceListPtr});
>>>> +  CGM.getOpenMPRuntime().emitOutlinedFunctionCall(
>>>> +      CGF, Loc, ReduceFn, {LocalReduceListPtr,
>>>> RemoteReduceListPtr});
>>>> Bld.CreateBr(MergeBB);
>>>>
>>>> CGF.EmitBlock(ElseBB);
>>>> @@ -2228,8 +2232,8 @@ void CGOpenMPRuntimeNVPTX::emitReduction
>>>>
>>>> // 2. Emit reduce_func().
>>>> auto *ReductionFn = emitReductionFunction(
>>>> -      CGM,
>>>> CGF.ConvertTypeForMem(ReductionArrayTy)->getPointerTo(), Privates,
>>>>
>>>> -      LHSExprs, RHSExprs, ReductionOps);
>>>> +      CGM, Loc,
>>>> CGF.ConvertTypeForMem(ReductionArrayTy)->getPointerTo(),
>>>> +      Privates, LHSExprs, RHSExprs, ReductionOps);
>>>>
>>>> // 4. Build res = __kmpc_reduce{_nowait}(<gtid>, <n>,
>>>> sizeof(RedList),
>>>> // RedList, shuffle_reduce_func, interwarp_copy_func);
>>>> @@ -2239,9 +2243,9 @@ void CGOpenMPRuntimeNVPTX::emitReduction
>>>> ReductionList.getPointer(), CGF.VoidPtrTy);
>>>>
>>>> auto *ShuffleAndReduceFn = emitShuffleAndReduceFunction(
>>>> -      CGM, Privates, ReductionArrayTy, ReductionFn);
>>>> +      CGM, Privates, ReductionArrayTy, ReductionFn, Loc);
>>>> auto *InterWarpCopyFn =
>>>> -      emitInterWarpCopyFunction(CGM, Privates, ReductionArrayTy);
>>>>
>>>> +      emitInterWarpCopyFunction(CGM, Privates, ReductionArrayTy,
>>>> Loc);
>>>>
>>>> llvm::Value *Res = nullptr;
>>>> if (ParallelReduction) {
>>>> @@ -2259,9 +2263,9 @@ void CGOpenMPRuntimeNVPTX::emitReduction
>>>>
>>>> if (TeamsReduction) {
>>>> auto *ScratchPadCopyFn =
>>>> -        emitCopyToScratchpad(CGM, Privates, ReductionArrayTy);
>>>> +        emitCopyToScratchpad(CGM, Privates, ReductionArrayTy,
>>>> Loc);
>>>> auto *LoadAndReduceFn = emitReduceScratchpadFunction(
>>>> -        CGM, Privates, ReductionArrayTy, ReductionFn);
>>>> +        CGM, Privates, ReductionArrayTy, ReductionFn, Loc);
>>>>
>>>> llvm::Value *Args[] = {ThreadId,
>>>> CGF.Builder.getInt32(RHSExprs.size()),
>>>>
>>>> @@ -2422,10 +2426,15 @@ llvm::Function *CGOpenMPRuntimeNVPTX::cr
>>>> Ctx.getIntTypeForBitwidth(/*DestWidth=*/32,
>>>> /*Signed=*/false);
>>>> QualType Int32PtrQTy = Ctx.getPointerType(Int32QTy);
>>>> QualType VoidPtrPtrQTy = Ctx.getPointerType(Ctx.VoidPtrTy);
>>>> -  ImplicitParamDecl ParallelLevelArg(Ctx, Int16QTy,
>>>> ImplicitParamDecl::Other);
>>>> -  ImplicitParamDecl WrapperArg(Ctx, Int32QTy,
>>>> ImplicitParamDecl::Other);
>>>> -  ImplicitParamDecl SharedArgsList(Ctx, VoidPtrPtrQTy,
>>>> -      ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl ParallelLevelArg(Ctx, /*DC=*/nullptr,
>>>> D.getLocStart(),
>>>> +                                     /*Id=*/nullptr, Int16QTy,
>>>> +                                     ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl WrapperArg(Ctx, /*DC=*/nullptr,
>>>> D.getLocStart(),
>>>> +                               /*Id=*/nullptr, Int32QTy,
>>>> +                               ImplicitParamDecl::Other);
>>>> +  ImplicitParamDecl SharedArgsList(Ctx, /*DC=*/nullptr,
>>>> D.getLocStart(),
>>>> +                                   /*Id=*/nullptr, VoidPtrPtrQTy,
>>>>
>>>> +                                   ImplicitParamDecl::Other);
>>>> WrapperArgs.emplace_back(&ParallelLevelArg);
>>>> WrapperArgs.emplace_back(&WrapperArg);
>>>> WrapperArgs.emplace_back(&SharedArgsList);
>>>> @@ -2440,7 +2449,8 @@ llvm::Function *CGOpenMPRuntimeNVPTX::cr
>>>> Fn->setLinkage(llvm::GlobalValue::InternalLinkage);
>>>>
>>>> CodeGenFunction CGF(CGM, /*suppressNewContext=*/true);
>>>> -  CGF.StartFunction(GlobalDecl(), Ctx.VoidTy, Fn, CGFI,
>>>> WrapperArgs);
>>>> +  CGF.StartFunction(GlobalDecl(), Ctx.VoidTy, Fn, CGFI,
>>>> WrapperArgs,
>>>> +                    D.getLocStart(), D.getLocStart());
>>>>
>>>> const auto *RD = CS.getCapturedRecordDecl();
>>>> auto CurField = RD->field_begin();
>>>> @@ -2489,7 +2499,7 @@ llvm::Function *CGOpenMPRuntimeNVPTX::cr
>>>> Args.emplace_back(Arg);
>>>> }
>>>>
>>>> -  emitCall(CGF, OutlinedParallelFn, Args);
>>>> +  emitOutlinedFunctionCall(CGF, D.getLocStart(),
>>>> OutlinedParallelFn, Args);
>>>> CGF.FinishFunction();
>>>> return Fn;
>>>> }
>>>>
>>>> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.h
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Flib%2FCodeGen%2FCGOpenMPRuntimeNVPTX.h%3Frev%3D321816%26r1%3D321815%26r2%3D321816%26view%3Ddiff&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=8q%2F2IpesrmjFhNMuynt92WrL2WGAC7Ojviosu%2Bp9VH4%3D&reserved=0
>>
>>>>
>>>>
>>>
>> ==============================================================================
>>
>>>>
>>>> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.h (original)
>>>> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntimeNVPTX.h Thu Jan  4
>>>> 11:45:16 2018
>>>> @@ -36,8 +36,9 @@ private:
>>>> public:
>>>> llvm::Function *WorkerFn;
>>>> const CGFunctionInfo *CGFI;
>>>> +    SourceLocation Loc;
>>>>
>>>> -    WorkerFunctionState(CodeGenModule &CGM);
>>>> +    WorkerFunctionState(CodeGenModule &CGM, SourceLocation Loc);
>>>>
>>>> private:
>>>> void createWorkerFunction(CodeGenModule &CGM);
>>>>
>>>> Modified: cfe/trunk/test/OpenMP/target_parallel_debug_codegen.cpp
>>>> URL:
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%2Fcfe%2Ftrunk%2Ftest%2FOpenMP%2Ftarget_parallel_debug_codegen.cpp%3Frev%3D321816%26r1%3D321815%26r2%3D321816%26view%3Ddiff&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=siASjNxr19H1DzRg8PevnLyG%2BoyBlM2EfA8AGdijjW0%3D&reserved=0
>>
>>>>
>>>>
>>>
>> ==============================================================================
>>
>>>>
>>>> --- cfe/trunk/test/OpenMP/target_parallel_debug_codegen.cpp
>>>> (original)
>>>> +++ cfe/trunk/test/OpenMP/target_parallel_debug_codegen.cpp Thu
>>>> Jan  4
>>>> 11:45:16 2018
>>>> @@ -116,8 +116,8 @@ int main() {
>>>> // CHECK: !DILocalVariable(name: ".bound_tid.",
>>>> // CHECK-SAME: DIFlagArtificial
>>>> // CHECK: !DILocalVariable(name: "c",
>>>> -// CHECK-SAMEi-NOT: DIFlagArtificial
>>>> +// CHECK-SAME: line: 11
>>>> // CHECK: !DILocalVariable(name: "a",
>>>> -// CHECK-SAMEi-NOT: DIFlagArtificial
>>>> +// CHECK-SAME: line: 9
>>>> // CHECK: !DILocalVariable(name: "b",
>>>> -// CHECK-SAMEi-NOT: DIFlagArtificial
>>>> +// CHECK-SAME: line: 10
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at lists.llvm.org
>>>>
>>>
>> https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits&data=02%7C01%7C%7Ceb0f898e6fe040bc1a4208d553b566ae%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636506960925164662&sdata=2y6Ln%2FGNGg3I6IsOdiGlJinTN2vpuPSjx1YB6MnbLSU%3D&reserved=0
>>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180104/310aef8a/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180104/310aef8a/attachment-0001.sig>


More information about the cfe-commits mailing list