[Mlir-commits] [mlir] fec0a64 - [ROCDL] Added global/flag data prefetch ops (#171449)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Dec 10 06:57:31 PST 2025
Author: Ravil Dorozhinskii
Date: 2025-12-10T09:57:26-05:00
New Revision: fec0a64daea642e699c1b31498a17b9718513774
URL: https://github.com/llvm/llvm-project/commit/fec0a64daea642e699c1b31498a17b9718513774
DIFF: https://github.com/llvm/llvm-project/commit/fec0a64daea642e699c1b31498a17b9718513774.diff
LOG: [ROCDL] Added global/flag data prefetch ops (#171449)
This PR brings data prefetch ops to ROCDL for gfx1250 architecture.
Extended all necessary rocdl tests
Added:
Modified:
mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
mlir/test/Dialect/LLVMIR/rocdl.mlir
mlir/test/Target/LLVMIR/rocdl.mlir
Removed:
################################################################################
diff --git a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
index cd36300d7ac16..57cb98a1d9be7 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
@@ -1173,6 +1173,31 @@ def ROCDL_RawBufferAtomicCmpSwap :
}];
}
+//===---------------------------------------------------------------------===//
+// Memory prefetch intrinsics
+
+def ROCDL_GlobalPrefetchOp :
+ ROCDL_IntrOp<"global.prefetch", [], [], [], 0, 0, 0, 0, [1], ["scope"]>,
+ Arguments<(ins Arg<LLVM_PointerInAddressSpace<1>, "", []>:$ptr, I32Attr:$scope)> {
+ let description = [{
+ Prefetches 1 byte of data per lane from global memory into the WGP-cache or L2-cache.
+ Available on gfx1250+.
+ }];
+ let results = (outs);
+ let assemblyFormat = "$ptr `,` `scope` $scope attr-dict `:` qualified(type($ptr))";
+}
+
+def ROCDL_FlatPrefetchOp :
+ ROCDL_IntrOp<"flat.prefetch", [], [], [], 0, 0, 0, 0, [1], ["scope"]>,
+ Arguments<(ins Arg<LLVM_PointerInAddressSpace<0>, "", []>:$ptr, I32Attr:$scope)> {
+ let description = [{
+ Prefetches 1 byte of data per lane using flat-memory addresses into the WGP-cache or L2-cache.
+ Available on gfx1250+.
+ }];
+ let results = (outs);
+ let assemblyFormat = "$ptr `,` `scope` $scope attr-dict `:` qualified(type($ptr))";
+}
+
//===---------------------------------------------------------------------===//
// MI-100 and MI-200 buffer atomic floating point add intrinsic
diff --git a/mlir/test/Dialect/LLVMIR/rocdl.mlir b/mlir/test/Dialect/LLVMIR/rocdl.mlir
index 40084bc07d4f7..ae25b111ea325 100644
--- a/mlir/test/Dialect/LLVMIR/rocdl.mlir
+++ b/mlir/test/Dialect/LLVMIR/rocdl.mlir
@@ -878,6 +878,20 @@ llvm.func @rocdl.raw.ptr.buffer.i32(%rsrc : !llvm.ptr<8>,
llvm.return
}
+llvm.func @rocdl.global.prefetch(%ptr : !llvm.ptr<1>) {
+ // CHECK-LABEL: rocdl.global.prefetch
+ // CHECK: rocdl.global.prefetch %{{.*}}, scope 0 : !llvm.ptr<1>
+ rocdl.global.prefetch %ptr, scope 0 : !llvm.ptr<1>
+ llvm.return
+}
+
+llvm.func @rocdl.flat.prefetch(%ptr : !llvm.ptr) {
+ // CHECK-LABEL: rocdl.flat.prefetch
+ // CHECK: rocdl.flat.prefetch %{{.*}}, scope 0 : !llvm.ptr
+ rocdl.flat.prefetch %ptr, scope 0 : !llvm.ptr
+ llvm.return
+}
+
// -----
llvm.func @rocdl.raw.buffer.f32(%rsrc : vector<4xi32>,
diff --git a/mlir/test/Target/LLVMIR/rocdl.mlir b/mlir/test/Target/LLVMIR/rocdl.mlir
index 2c748ad509356..87faed16aa59c 100644
--- a/mlir/test/Target/LLVMIR/rocdl.mlir
+++ b/mlir/test/Target/LLVMIR/rocdl.mlir
@@ -1341,6 +1341,20 @@ llvm.func @rocdl.raw.ptr.buffer.load.lds(%rsrc : !llvm.ptr<8>, %dstLds : !llvm.p
llvm.return
}
+llvm.func @rocdl.global.prefetch(%ptr : !llvm.ptr<1>) {
+ // CHECK-LABEL: rocdl.global.prefetch
+ // CHECK: call void @llvm.amdgcn.global.prefetch(ptr addrspace(1) %{{.*}}, i32 0)
+ rocdl.global.prefetch %ptr, scope 0 : !llvm.ptr<1>
+ llvm.return
+}
+
+llvm.func @rocdl.flat.prefetch(%ptr : !llvm.ptr) {
+ // CHECK-LABEL: rocdl.flat.prefetch
+ // CHECK: call void @llvm.amdgcn.flat.prefetch(ptr %{{.*}}, i32 0)
+ rocdl.flat.prefetch %ptr, scope 0 : !llvm.ptr
+ llvm.return
+}
+
llvm.func @rocdl.wmma.scale(%arg0: i32, %arg1: vector<4xf32>, %arg2: vector<8xi32>,
%arg3: vector<12xi32>, %arg5: vector<16xi32>,
%arg8: i64, %arg9: vector<8xf32>) -> vector<4xf32> {
More information about the Mlir-commits
mailing list