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