@@ -87,10 +87,6 @@ class NVPTXTargetCodeGenInfo : public TargetCodeGenInfo {
8787 static void addNVVMMetadata (llvm::GlobalValue *GV, StringRef Name,
8888 int Operand);
8989
90- static void
91- addGridConstantNVVMMetadata (llvm::GlobalValue *GV,
92- const SmallVectorImpl<int > &GridConstantArgs);
93-
9490private:
9591 static void emitBuiltinSurfTexDeviceCopy (CodeGenFunction &CGF, LValue Dst,
9692 LValue Src) {
@@ -265,27 +261,24 @@ void NVPTXTargetCodeGenInfo::setTargetAttributes(
265261 // By default, all functions are device functions
266262 if (FD->hasAttr <DeviceKernelAttr>() || FD->hasAttr <CUDAGlobalAttr>()) {
267263 // OpenCL/CUDA kernel functions get kernel metadata
268- // Create !{<func-ref>, metadata !"kernel", i32 1} node
269264 // And kernel functions are not subject to inlining
270265 F->addFnAttr (llvm::Attribute::NoInline);
271266 if (FD->hasAttr <CUDAGlobalAttr>()) {
272- SmallVector<int , 10 > GCI;
267+ F->setCallingConv (llvm::CallingConv::PTX_Kernel);
268+
273269 for (auto IV : llvm::enumerate (FD->parameters ()))
274270 if (IV.value ()->hasAttr <CUDAGridConstantAttr>())
275- // For some reason arg indices are 1-based in NVVM
276- GCI.push_back (IV.index () + 1 );
277- // Create !{<func-ref>, metadata !"kernel", i32 1} node
278- F->setCallingConv (llvm::CallingConv::PTX_Kernel);
279- addGridConstantNVVMMetadata (F, GCI);
271+ F->addParamAttr (
272+ IV.index (),
273+ llvm::Attribute::get (F->getContext (), " nvvm.grid_constant" ));
280274 }
281275 if (CUDALaunchBoundsAttr *Attr = FD->getAttr <CUDALaunchBoundsAttr>())
282276 M.handleCUDALaunchBoundsAttr (F, Attr);
283277 }
284278 }
285279 // Attach kernel metadata directly if compiling for NVPTX.
286- if (FD->hasAttr <DeviceKernelAttr>()) {
280+ if (FD->hasAttr <DeviceKernelAttr>())
287281 F->setCallingConv (llvm::CallingConv::PTX_Kernel);
288- }
289282}
290283
291284void NVPTXTargetCodeGenInfo::addNVVMMetadata (llvm::GlobalValue *GV,
@@ -305,29 +298,6 @@ void NVPTXTargetCodeGenInfo::addNVVMMetadata(llvm::GlobalValue *GV,
305298 MD->addOperand (llvm::MDNode::get (Ctx, MDVals));
306299}
307300
308- void NVPTXTargetCodeGenInfo::addGridConstantNVVMMetadata (
309- llvm::GlobalValue *GV, const SmallVectorImpl<int > &GridConstantArgs) {
310-
311- llvm::Module *M = GV->getParent ();
312- llvm::LLVMContext &Ctx = M->getContext ();
313-
314- // Get "nvvm.annotations" metadata node
315- llvm::NamedMDNode *MD = M->getOrInsertNamedMetadata (" nvvm.annotations" );
316-
317- SmallVector<llvm::Metadata *, 5 > MDVals = {llvm::ConstantAsMetadata::get (GV)};
318- if (!GridConstantArgs.empty ()) {
319- SmallVector<llvm::Metadata *, 10 > GCM;
320- for (int I : GridConstantArgs)
321- GCM.push_back (llvm::ConstantAsMetadata::get (
322- llvm::ConstantInt::get (llvm::Type::getInt32Ty (Ctx), I)));
323- MDVals.append ({llvm::MDString::get (Ctx, " grid_constant" ),
324- llvm::MDNode::get (Ctx, GCM)});
325- }
326-
327- // Append metadata to nvvm.annotations
328- MD->addOperand (llvm::MDNode::get (Ctx, MDVals));
329- }
330-
331301bool NVPTXTargetCodeGenInfo::shouldEmitStaticExternCAliases () const {
332302 return false ;
333303}
0 commit comments