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

Alexey Bataev via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 16 07:07:00 PST 2018


Hi Hans, I don't think we need to merge some of these to 6.0 branch,
they are not bug fixes, just some new functionality

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

16.01.2018 9:59, Hans Wennborg пишет:
> Please file a merge request bug blocking PR35804 for what you'd like
> merged (unless you already have).
>
> Thanks,
> Hans
>
> On Mon, Jan 8, 2018 at 5:27 PM, Alexey Bataev via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>> Will add some more tests later today
>> -------------
>> Best regards,
>> Alexey Bataev
>>
>> 08.01.2018 11:13, David Blaikie пишет:
>>
>> Rough guess: That seems like a lot of code changes for relatively little
>> test changes - are all parts of this change tested? (Might well be - just
>> lots of layers to plumb things through - but if there's lots of places that
>> get locations and only a few of those are tested, maybe this could use more
>> coverage?)
>>
>> On Thu, Jan 4, 2018 at 11:46 AM Alexey Bataev via cfe-commits
>> <cfe-commits at lists.llvm.org> wrote:
>>> Author: abataev
>>> Date: Thu Jan  4 11:45:16 2018
>>> New Revision: 321816
>>>
>>> URL: https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fllvm.org%2Fviewvc%2Fllvm-project%3Frev%3D321816%26view%3Drev&data=02%7C01%7C%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=BadegqUC2t2TewTv8LJWOrOGFv1xmYT4dQd0e5hMPKw%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://eur01.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%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=wKocNVvjbyMUCScwauKF8aG9EDT%2BMQioljf29p9GVYQ%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://eur01.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%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=6MZ%2B79J72mHiG7r4khg6ChDTSZoiJsBoZshwXrDFm4k%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://eur01.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%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=GBl1v7ViUmRhtT%2FXSwdqqTLyQr9JPxxiZmIjax8H9aE%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://eur01.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%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=19CSmcdZgYmCiINSyZFKwPxMvQNQa2G3CFxeoOUX7ME%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://eur01.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%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=0E6M3IQr%2BIDOO69bBoA%2BipyxmdEDhviQpGPcUYq8WO8%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://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits&data=02%7C01%7C%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=j5Uz3DcBR8HHqvuw8ZIaO4jbM67vxo8045jHkAse3IA%3D&reserved=0
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> https://eur01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.llvm.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fcfe-commits&data=02%7C01%7C%7Cf0fd30fe0fc94a6ee12e08d55cf1c15b%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636517115748946666&sdata=j5Uz3DcBR8HHqvuw8ZIaO4jbM67vxo8045jHkAse3IA%3D&reserved=0
>>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180116/56e63983/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/20180116/56e63983/attachment-0001.sig>


More information about the cfe-commits mailing list