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@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 >>
signature.asc
Description: OpenPGP digital signature
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits