Lines Matching +full:odr +full:- +full:value

1 //===----- CGCUDANV.cpp - Interface to NVIDIA CUDA Runtime ----------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
103 llvm::Constant *Value = in makeConstantArray() local
106 TheModule, Value->getType(), /*isConstant=*/true, in makeConstantArray()
107 llvm::GlobalValue::PrivateLinkage, Value, Name); in makeConstantArray()
109 GV->setSection(SectionName); in makeConstantArray()
112 GV->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::None); in makeConstantArray()
115 GV->setAlignment(llvm::Align(Alignment)); in makeConstantArray()
121 assert(FnTy->getReturnType()->isVoidTy() && in makeDummyFunction()
144 VD->hasAttr<HIPManagedAttr>(), in registerDeviceVar()
179 return Loc->second; in getKernelStub()
211 CGM.getContext().getAuxTargetInfo()->getCXXABI().isItaniumFamily()) { in InitDeviceMC()
278 if (MC->shouldMangleDeclName(ND)) { in getDeviceSideName()
281 MC->mangleName(GD, Out); in getDeviceSideName()
284 DeviceSideName = std::string(ND->getIdentifier()->getName()); in getDeviceSideName()
286 // Make unique name for device side static file-scope variable for HIP. in getDeviceSideName()
302 dyn_cast<llvm::GlobalVariable>(KernelHandles[CGF.CurFn->getName()])) { in emitDeviceStub()
303 GV->setLinkage(CGF.CurFn->getLinkage()); in emitDeviceStub()
304 GV->setInitializer(CGF.CurFn); in emitDeviceStub()
328 llvm::Value *VarPtr = CGF.GetAddrOfLocalVar(Args[i]).emitRawPointer(CGF); in emitDeviceStubBodyNew()
329 llvm::Value *VoidVarPtr = CGF.Builder.CreatePointerCast(VarPtr, PtrTy); in emitDeviceStubBodyNew()
338 // HIP kernel launching API name depends on -fgpu-default-stream option. For in emitDeviceStubBodyNew()
339 // the default value 'legacy', it is hipLaunchKernel. For 'per-thread', in emitDeviceStubBodyNew()
361 for (auto *Result : DC->lookup(&cudaLaunchKernelII)) { in emitDeviceStubBodyNew()
367 CGM.Error(CGF.CurFuncDecl->getLocation(), in emitDeviceStubBodyNew()
372 ParmVarDecl *GridDimParam = cudaLaunchKernelFD->getParamDecl(1); in emitDeviceStubBodyNew()
373 QualType Dim3Ty = GridDimParam->getType(); in emitDeviceStubBodyNew()
396 llvm::Value *Kernel = in emitDeviceStubBodyNew()
397 CGF.Builder.CreatePointerCast(KernelHandles[CGF.CurFn->getName()], PtrTy); in emitDeviceStubBodyNew()
400 cudaLaunchKernelFD->getParamDecl(0)->getType()); in emitDeviceStubBodyNew()
404 cudaLaunchKernelFD->getParamDecl(3)->getType()); in emitDeviceStubBodyNew()
406 cudaLaunchKernelFD->getParamDecl(4)->getType()); in emitDeviceStubBodyNew()
408 cudaLaunchKernelFD->getParamDecl(5)->getType()); in emitDeviceStubBodyNew()
410 QualType QT = cudaLaunchKernelFD->getType(); in emitDeviceStubBodyNew()
428 std::string GlobalVarName = (KernelFunction->getName() + ".id").str(); in emitDeviceStubBodyNew()
435 /*Constant=*/false, KernelFunction->getLinkage(), in emitDeviceStubBodyNew()
437 HandleVar->setDSOLocal(KernelFunction->isDSOLocal()); in emitDeviceStubBodyNew()
438 HandleVar->setVisibility(KernelFunction->getVisibility()); in emitDeviceStubBodyNew()
439 if (KernelFunction->hasComdat()) in emitDeviceStubBodyNew()
440 HandleVar->setComdat(CGM.getModule().getOrInsertComdat(GlobalVarName)); in emitDeviceStubBodyNew()
460 auto TInfo = CGM.getContext().getTypeInfoInChars(A->getType()); in emitDeviceStubBodyLegacy()
462 llvm::Value *Args[] = { in emitDeviceStubBodyLegacy()
470 llvm::Value *CBZero = CGF.Builder.CreateICmpEQ(CB, Zero); in emitDeviceStubBodyLegacy()
479 llvm::Value *Arg = in emitDeviceStubBodyLegacy()
480 CGF.Builder.CreatePointerCast(KernelHandles[CGF.CurFn->getName()], PtrTy); in emitDeviceStubBodyLegacy()
492 for (auto &&VarUse : Var->uses()) { in replaceManagedVar()
499 for (auto &&UU : U->uses()) { in replaceManagedVar()
507 llvm::Value *OldV = Var; in replaceManagedVar()
509 new llvm::LoadInst(Var->getType(), ManagedVar, "ld.managed", false, in replaceManagedVar()
510 llvm::Align(Var->getAlignment()), I); in replaceManagedVar()
516 auto *NewInst = CE->getAsInstruction(); in replaceManagedVar()
517 NewInst->insertBefore(*I->getParent(), I->getIterator()); in replaceManagedVar()
518 NewInst->replaceUsesOfWith(OldV, NewV); in replaceManagedVar()
522 I->replaceUsesOfWith(OldV, NewV); in replaceManagedVar()
568 llvm::Argument &GpuBinaryHandlePtr = *RegisterKernelsFunc->arg_begin(); in makeRegisterGlobalsFn()
573 llvm::Value *Args[] = { in makeRegisterGlobalsFn()
575 KernelHandles[I.Kernel->getName()], in makeRegisterGlobalsFn()
578 llvm::ConstantInt::get(IntTy, -1), in makeRegisterGlobalsFn()
621 assert((!Var->isDeclaration() || Info.Flags.isManaged()) && in makeRegisterGlobalsFn()
628 CGM.getDataLayout().getTypeAllocSize(Var->getValueType()); in makeRegisterGlobalsFn()
630 assert(Var->getName().ends_with(".managed") && in makeRegisterGlobalsFn()
633 Var->getName().drop_back(StringRef(".managed").size())); in makeRegisterGlobalsFn()
634 llvm::Value *Args[] = { in makeRegisterGlobalsFn()
640 llvm::ConstantInt::get(IntTy, Var->getAlignment())}; in makeRegisterGlobalsFn()
641 if (!Var->isDeclaration()) in makeRegisterGlobalsFn()
644 llvm::Value *Args[] = { in makeRegisterGlobalsFn()
732 VFS->getBufferForFile(CudaGpuBinaryFileName, -1, false); in makeModuleCtorFunction()
768 FatBinStr = makeConstantArray(std::string(CudaGpuBinary->getBuffer()), "", in makeModuleCtorFunction()
780 cast<llvm::GlobalVariable>(FatBinStr)->setSection(FatbinConstantName); in makeModuleCtorFunction()
803 FatBinStr = makeConstantArray(std::string(CudaGpuBinary->getBuffer()), "", in makeModuleCtorFunction()
822 FatbinWrapper->setSection(FatbinSectionName); in makeModuleCtorFunction()
847 GpuBinaryHandle->setAlignment(CGM.getPointerAlign().getAsAlign()); in makeModuleCtorFunction()
850 GpuBinaryHandle->setVisibility(llvm::GlobalValue::HiddenVisibility); in makeModuleCtorFunction()
853 CharUnits::fromQuantity(GpuBinaryHandle->getAlignment())); in makeModuleCtorFunction()
857 llvm::Constant::getNullValue(HandleValue->getType()); in makeModuleCtorFunction()
858 llvm::Value *EQZero = CtorBuilder.CreateICmpEQ(HandleValue, Zero); in makeModuleCtorFunction()
886 GpuBinaryHandle->setAlignment(CGM.getPointerAlign().getAsAlign()); in makeModuleCtorFunction()
907 OS << ModuleIDPrefix << llvm::format("%" PRIx64, FatbinWrapper->getGUID()); in makeModuleCtorFunction()
923 llvm::Value *Args[] = {RegisterGlobalsFunc, FatbinWrapper, ModuleIDConstant, in makeModuleCtorFunction()
930 // double-free in 9.2. in makeModuleCtorFunction()
934 llvm::FunctionType::get(IntTy, CleanupFn->getType(), false); in makeModuleCtorFunction()
985 GpuBinaryHandle, GpuBinaryHandle->getValueType(), in makeModuleDtorFunction()
986 CharUnits::fromQuantity(GpuBinaryHandle->getAlignment())); in makeModuleDtorFunction()
996 llvm::Constant *Zero = llvm::Constant::getNullValue(HandleValue->getType()); in makeModuleDtorFunction()
997 llvm::Value *NEZero = DtorBuilder.CreateICmpNE(HandleValue, Zero); in makeModuleDtorFunction()
1019 // For -fno-gpu-rdc, host-side shadows of external declarations of device-side in internalizeDeviceSideVar()
1024 // For -fgpu-rdc, the shadow variables should not be internalized because in internalizeDeviceSideVar()
1031 // can't really be used to access their device-side in internalizeDeviceSideVar()
1034 if (D->hasAttr<CUDADeviceAttr>() || D->hasAttr<CUDAConstantAttr>() || in internalizeDeviceSideVar()
1035 D->hasAttr<CUDASharedAttr>() || in internalizeDeviceSideVar()
1036 D->getType()->isCUDADeviceBuiltinSurfaceType() || in internalizeDeviceSideVar()
1037 D->getType()->isCUDADeviceBuiltinTextureType()) { in internalizeDeviceSideVar()
1044 if (D->hasAttr<CUDADeviceAttr>() || D->hasAttr<CUDAConstantAttr>()) { in handleVarRegistration()
1057 // added to llvm.compiler-used, therefore they are safe to be registered. in handleVarRegistration()
1058 if ((!D->hasExternalStorage() && !D->isInline()) || in handleVarRegistration()
1060 D->hasAttr<HIPManagedAttr>()) { in handleVarRegistration()
1061 registerDeviceVar(D, GV, !D->hasDefinition(), in handleVarRegistration()
1062 D->hasAttr<CUDAConstantAttr>()); in handleVarRegistration()
1064 } else if (D->getType()->isCUDADeviceBuiltinSurfaceType() || in handleVarRegistration()
1065 D->getType()->isCUDADeviceBuiltinTextureType()) { in handleVarRegistration()
1069 D->getType()->castAs<RecordType>()->getDecl()); in handleVarRegistration()
1070 const TemplateArgumentList &Args = TD->getTemplateArgs(); in handleVarRegistration()
1071 if (TD->hasAttr<CUDADeviceBuiltinSurfaceTypeAttr>()) { in handleVarRegistration()
1076 if (!D->hasExternalStorage()) in handleVarRegistration()
1077 registerDeviceSurf(D, GV, !D->hasDefinition(), SurfType.getSExtValue()); in handleVarRegistration()
1084 if (!D->hasExternalStorage()) in handleVarRegistration()
1085 registerDeviceTex(D, GV, !D->hasDefinition(), TexType.getSExtValue(), in handleVarRegistration()
1101 CGM.getModule(), Var->getType(), in transformManagedVars()
1102 /*isConstant=*/false, Var->getLinkage(), in transformManagedVars()
1103 /*Init=*/Var->isDeclaration() in transformManagedVars()
1105 : llvm::ConstantPointerNull::get(Var->getType()), in transformManagedVars()
1111 ManagedVar->setDSOLocal(Var->isDSOLocal()); in transformManagedVars()
1112 ManagedVar->setVisibility(Var->getVisibility()); in transformManagedVars()
1113 ManagedVar->setExternallyInitialized(true); in transformManagedVars()
1115 ManagedVar->takeName(Var); in transformManagedVars()
1116 Var->setName(Twine(ManagedVar->getName()) + ".managed"); in transformManagedVars()
1119 if (CGM.getLangOpts().CUDAIsDevice && !Var->isDeclaration()) { in transformManagedVars()
1120 assert(!ManagedVar->isDeclaration()); in transformManagedVars()
1137 M, KernelHandles[I.Kernel->getName()], in createOffloadingEntries()
1143 CGM.getDataLayout().getTypeAllocSize(I.Var->getValueType()); in createOffloadingEntries()
1179 // Mark ODR-used device variables as compiler used to prevent it from being in finalizeModule()
1181 // ODR-used by host functions. Sema correctly marks them as ODR-used no in finalizeModule()
1182 // matter whether they are ODR-used by device or host functions. in finalizeModule()
1191 if (!Info.Var->isDeclaration() && in finalizeModule()
1192 !llvm::GlobalValue::isLocalLinkage(Info.Var->getLinkage()) && in finalizeModule()
1196 Info.D->isUsed() && !Info.D->hasAttr<UsedAttr>()) { in finalizeModule()
1212 auto Loc = KernelHandles.find(F->getName()); in getKernelHandle()
1214 auto OldHandle = Loc->second; in getKernelHandle()
1222 // to update the Stub value. in getKernelHandle()
1226 // For non-HIP compilation, erase the old Stub and fall-through to creating in getKernelHandle()
1232 KernelHandles[F->getName()] = F; in getKernelHandle()
1238 TheModule, F->getType(), /*isConstant=*/true, F->getLinkage(), in getKernelHandle()
1242 Var->setAlignment(CGM.getPointerAlign().getAsAlign()); in getKernelHandle()
1243 Var->setDSOLocal(F->isDSOLocal()); in getKernelHandle()
1244 Var->setVisibility(F->getVisibility()); in getKernelHandle()
1246 auto *FT = FD->getPrimaryTemplate(); in getKernelHandle()
1247 if (!FT || FT->isThisDeclarationADefinition()) in getKernelHandle()
1249 KernelHandles[F->getName()] = Var; in getKernelHandle()