diff --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td index 995ade5c9b033..5747021be189c 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td @@ -3176,12 +3176,7 @@ def NVVM_PrefetchOp : NVVM_Op<"prefetch", let llvmBuilder = [{ auto [id, args] = NVVM::PrefetchOp::getIntrinsicIDAndArgs(op, moduleTranslation, builder); - - if(op.getTensormap()) - // Overloaded intrinsic - createIntrinsicCall(builder, id, args, {args[0]->getType()}); - else - createIntrinsicCall(builder, id, args); + createIntrinsicCall(builder, id, builder.getVoidTy(), args); }]; } diff --git a/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h b/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h index eb7dfa7637e52..039ac8e2e1911 100644 --- a/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h +++ b/mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h @@ -512,6 +512,15 @@ llvm::CallInst *createIntrinsicCall(llvm::IRBuilderBase &builder, ArrayRef args = {}, ArrayRef tys = {}); +/// Creates a call to an LLVM IR intrinsic function with the given return type +/// and arguments. If the intrinsic is overloaded, the function signature will +/// be automatically resolved based on the provided return type and argument +/// types. +llvm::CallInst *createIntrinsicCall(llvm::IRBuilderBase &builder, + llvm::Intrinsic::ID intrinsic, + llvm::Type *retTy, + ArrayRef args); + /// Creates a call to a LLVM IR intrinsic defined by LLVM_IntrOpBase. This /// resolves the overloads, and maps mixed MLIR value and attribute arguments to /// LLVM values. diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index 64e3c5f085bb3..caeee50acdef1 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -892,10 +892,13 @@ void mlir::LLVM::detail::connectPHINodes(Region ®ion, llvm::CallInst *mlir::LLVM::detail::createIntrinsicCall( llvm::IRBuilderBase &builder, llvm::Intrinsic::ID intrinsic, ArrayRef args, ArrayRef tys) { - llvm::Module *module = builder.GetInsertBlock()->getModule(); - llvm::Function *fn = - llvm::Intrinsic::getOrInsertDeclaration(module, intrinsic, tys); - return builder.CreateCall(fn, args); + return builder.CreateIntrinsic(intrinsic, tys, args); +} + +llvm::CallInst *mlir::LLVM::detail::createIntrinsicCall( + llvm::IRBuilderBase &builder, llvm::Intrinsic::ID intrinsic, + llvm::Type *retTy, ArrayRef args) { + return builder.CreateIntrinsic(retTy, intrinsic, args); } llvm::CallInst *mlir::LLVM::detail::createIntrinsicCall(