[Mlir-commits] [mlir] [MLIR][NVVM][NVGPU] Combine prefetch and prefetch.tensormap (PR #153134)
Srinivasa Ravi
llvmlistbot at llvm.org
Fri Aug 22 03:33:57 PDT 2025
================
@@ -2446,33 +2457,44 @@ def NVVM_PrefetchOp : NVVM_Op<"prefetch"> {
[For more information, see PTX ISA](https://docs.nvidia.com/cuda/parallel-thread-execution/#data-movement-and-conversion-instructions-prefetch-prefetchu)
}];
- let arguments = (ins PrefetchCacheLevelAttr:$cacheLevel,
- UnitAttr:$uniform,
+ let arguments = (ins OptionalAttr<PrefetchCacheLevelAttr>:$cacheLevel,
+ OptionalAttr<CacheEvictionPriorityAttr>:$evictPriority,
AnyTypeOf<[LLVM_PointerGlobal,
LLVM_PointerLocal,
- LLVM_PointerGeneric]>:$addr,
- OptionalAttr<CacheEvictionPriorityAttr>:$evictPriority);
- let assemblyFormat = "`level` `=` $cacheLevel (`uniform` $uniform^)? `,` $addr (`,` `evict_priority` `=` $evictPriority^)? attr-dict `:` type($addr)";
+ LLVM_PointerGeneric,
+ LLVM_PointerConst]>:$addr,
+ PtxPredicate:$predicate,
+ UnitAttr:$tensormap,
+ UnitAttr:$uniform,
+ UnitAttr:$in_param_space);
+ let assemblyFormat = "(`level` `=` $cacheLevel^ (`uniform` $uniform^)? `,`)? (`tensormap` $tensormap^ (`in_param_space` $in_param_space^)? `,`)? (`evict_priority` `=` $evictPriority^ `,`)? $addr (`,` `predicate` `=` $predicate^)? attr-dict `:` type(operands)";
let hasVerifier = 1;
let extraClassDeclaration = [{
static llvm::Intrinsic::ID getIntrinsicID(NVVM::PrefetchOp &op);
- }];
- let llvmBuilder = [{
- auto intId = NVVM::PrefetchOp::getIntrinsicID(op);
- createIntrinsicCall(builder, intId, $addr);
- }];
-}
-def NVVM_PrefetchTensorMapOp : NVVM_Op<"prefetch.tensormap",
- [DeclareOpInterfaceMethods<BasicPtxBuilderOpInterface>]>,
- Arguments<(ins LLVM_AnyPointer:$tmaDescriptor, PtxPredicate:$predicate)> {
- let assemblyFormat = "$tmaDescriptor (`,` `predicate` `=` $predicate^)? attr-dict `:` type(operands)";
+ bool hasIntrinsic() { return !getPredicate() || !getTensormap(); }
+
+ llvm::Value*
+ getAddrOrCastedAddr(llvm::Value* addr, llvm::IRBuilderBase &builder);
+ }];
let extraClassDefinition = [{
- std::string $cppClass::getPtx() {
+ std::string $cppClass::getPtx() {
+ // Inline PTX is only supported for prefetch tensormap
return std::string("prefetch.tensormap [%0];");
}
}];
+ let llvmBuilder = [{
+ auto intId = NVVM::PrefetchOp::getIntrinsicID(op);
+ llvm::Value*
+ addr = op.getAddrOrCastedAddr($addr, builder);
+
+ if(op.getTensormap())
+ // Overloaded intrinsic
+ createIntrinsicCall(builder, intId, {addr}, {addr->getType()});
+ else
+ createIntrinsicCall(builder, intId, {addr});
----------------
Wolfram70 wrote:
Okay, that looks cleaner to me as well. Updated in the latest revision, thanks!
https://github.com/llvm/llvm-project/pull/153134
More information about the Mlir-commits
mailing list