r321816 - [OPENMP] Add debug info for generated functions.
Jonas Hahnfeld via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 4 13:02:58 PST 2018
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
More information about the cfe-commits
mailing list