diff options
| author | Mingming Liu <mingmingl@google.com> | 2025-09-10 15:25:31 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-10 15:25:31 -0700 |
| commit | 1417dafa1db9cb1b2b09438aa9f53ea5ab6e36e2 (patch) | |
| tree | 57f4b1f313c8cf74eed8819870f39c36ea263c68 /clang/lib/CodeGen/Targets/NVPTX.cpp | |
| parent | 898b813bc8a6d0276bf0f4769f5f2f64b34e632d (diff) | |
| parent | b8cefcb601ddaa18482555c4ff363c01a270c2fe (diff) | |
Merge branch 'main' into users/mingmingl-llvm/samplefdo-profile-formatusers/mingmingl-llvm/samplefdo-profile-format
Diffstat (limited to 'clang/lib/CodeGen/Targets/NVPTX.cpp')
| -rw-r--r-- | clang/lib/CodeGen/Targets/NVPTX.cpp | 55 |
1 files changed, 12 insertions, 43 deletions
diff --git a/clang/lib/CodeGen/Targets/NVPTX.cpp b/clang/lib/CodeGen/Targets/NVPTX.cpp index e874617796f8..53f2fc4a040a 100644 --- a/clang/lib/CodeGen/Targets/NVPTX.cpp +++ b/clang/lib/CodeGen/Targets/NVPTX.cpp @@ -87,10 +87,6 @@ public: static void addNVVMMetadata(llvm::GlobalValue *GV, StringRef Name, int Operand); - static void - addGridConstantNVVMMetadata(llvm::GlobalValue *GV, - const SmallVectorImpl<int> &GridConstantArgs); - private: static void emitBuiltinSurfTexDeviceCopy(CodeGenFunction &CGF, LValue Dst, LValue Src) { @@ -130,10 +126,9 @@ bool NVPTXABIInfo::isUnsupportedType(QualType T) const { return true; if (const auto *AT = T->getAsArrayTypeUnsafe()) return isUnsupportedType(AT->getElementType()); - const auto *RT = T->getAs<RecordType>(); - if (!RT) + const auto *RD = T->getAsRecordDecl(); + if (!RD) return false; - const RecordDecl *RD = RT->getOriginalDecl()->getDefinitionOrSelf(); // If this is a C++ record, check the bases first. if (const CXXRecordDecl *CXXRD = dyn_cast<CXXRecordDecl>(RD)) @@ -173,8 +168,8 @@ ABIArgInfo NVPTXABIInfo::classifyReturnType(QualType RetTy) const { return ABIArgInfo::getDirect(); // Treat an enum type as its underlying type. - if (const EnumType *EnumTy = RetTy->getAs<EnumType>()) - RetTy = EnumTy->getOriginalDecl()->getDefinitionOrSelf()->getIntegerType(); + if (const auto *ED = RetTy->getAsEnumDecl()) + RetTy = ED->getIntegerType(); return (isPromotableIntegerTypeForABI(RetTy) ? ABIArgInfo::getExtend(RetTy) : ABIArgInfo::getDirect()); @@ -182,8 +177,8 @@ ABIArgInfo NVPTXABIInfo::classifyReturnType(QualType RetTy) const { ABIArgInfo NVPTXABIInfo::classifyArgumentType(QualType Ty) const { // Treat an enum type as its underlying type. - if (const EnumType *EnumTy = Ty->getAs<EnumType>()) - Ty = EnumTy->getOriginalDecl()->getDefinitionOrSelf()->getIntegerType(); + if (const auto *ED = Ty->getAsEnumDecl()) + Ty = ED->getIntegerType(); // Return aggregates type as indirect by value if (isAggregateTypeForABI(Ty)) { @@ -266,27 +261,24 @@ void NVPTXTargetCodeGenInfo::setTargetAttributes( // By default, all functions are device functions if (FD->hasAttr<DeviceKernelAttr>() || FD->hasAttr<CUDAGlobalAttr>()) { // OpenCL/CUDA kernel functions get kernel metadata - // Create !{<func-ref>, metadata !"kernel", i32 1} node // And kernel functions are not subject to inlining F->addFnAttr(llvm::Attribute::NoInline); if (FD->hasAttr<CUDAGlobalAttr>()) { - SmallVector<int, 10> GCI; + F->setCallingConv(llvm::CallingConv::PTX_Kernel); + for (auto IV : llvm::enumerate(FD->parameters())) if (IV.value()->hasAttr<CUDAGridConstantAttr>()) - // For some reason arg indices are 1-based in NVVM - GCI.push_back(IV.index() + 1); - // Create !{<func-ref>, metadata !"kernel", i32 1} node - F->setCallingConv(llvm::CallingConv::PTX_Kernel); - addGridConstantNVVMMetadata(F, GCI); + F->addParamAttr( + IV.index(), + llvm::Attribute::get(F->getContext(), "nvvm.grid_constant")); } if (CUDALaunchBoundsAttr *Attr = FD->getAttr<CUDALaunchBoundsAttr>()) M.handleCUDALaunchBoundsAttr(F, Attr); } } // Attach kernel metadata directly if compiling for NVPTX. - if (FD->hasAttr<DeviceKernelAttr>()) { + if (FD->hasAttr<DeviceKernelAttr>()) F->setCallingConv(llvm::CallingConv::PTX_Kernel); - } } void NVPTXTargetCodeGenInfo::addNVVMMetadata(llvm::GlobalValue *GV, @@ -306,29 +298,6 @@ void NVPTXTargetCodeGenInfo::addNVVMMetadata(llvm::GlobalValue *GV, MD->addOperand(llvm::MDNode::get(Ctx, MDVals)); } -void NVPTXTargetCodeGenInfo::addGridConstantNVVMMetadata( - llvm::GlobalValue *GV, const SmallVectorImpl<int> &GridConstantArgs) { - - llvm::Module *M = GV->getParent(); - llvm::LLVMContext &Ctx = M->getContext(); - - // Get "nvvm.annotations" metadata node - llvm::NamedMDNode *MD = M->getOrInsertNamedMetadata("nvvm.annotations"); - - SmallVector<llvm::Metadata *, 5> MDVals = {llvm::ConstantAsMetadata::get(GV)}; - if (!GridConstantArgs.empty()) { - SmallVector<llvm::Metadata *, 10> GCM; - for (int I : GridConstantArgs) - GCM.push_back(llvm::ConstantAsMetadata::get( - llvm::ConstantInt::get(llvm::Type::getInt32Ty(Ctx), I))); - MDVals.append({llvm::MDString::get(Ctx, "grid_constant"), - llvm::MDNode::get(Ctx, GCM)}); - } - - // Append metadata to nvvm.annotations - MD->addOperand(llvm::MDNode::get(Ctx, MDVals)); -} - bool NVPTXTargetCodeGenInfo::shouldEmitStaticExternCAliases() const { return false; } |
