[Mlir-commits] [mlir] [ROCDL] Added global/flag data prefetch ops (PR #171449)
Ravil Dorozhinskii
llvmlistbot at llvm.org
Wed Dec 10 03:10:39 PST 2025
https://github.com/ravil-mobile updated https://github.com/llvm/llvm-project/pull/171449
>From 71905669bf50a6787452c32bb282e0727795124d Mon Sep 17 00:00:00 2001
From: ravil-mobile <ravil.aviva.com at gmail.com>
Date: Tue, 9 Dec 2025 14:28:21 +0000
Subject: [PATCH] [ROCDL] Added global/flag data prefetch ops
---
mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td | 25 ++++++++++++++++++++
mlir/test/Dialect/LLVMIR/rocdl.mlir | 14 +++++++++++
mlir/test/Target/LLVMIR/rocdl.mlir | 14 +++++++++++
3 files changed, 53 insertions(+)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
index cd36300d7ac16..0bb5579e9e475 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 qualified(type($ptr)) `,` `scope` $scope attr-dict";
+}
+
+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 qualified(type($ptr)) `,` `scope` $scope attr-dict";
+}
+
//===---------------------------------------------------------------------===//
// 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..d75e3ce13a79d 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
+ rocdl.global.prefetch %ptr !llvm.ptr<1>, scope 0
+ llvm.return
+}
+
+llvm.func @rocdl.flat.prefetch(%ptr : !llvm.ptr) {
+ // CHECK-LABEL: rocdl.flat.prefetch
+ // CHECK: rocdl.flat.prefetch %{{.*}} scope 0
+ rocdl.flat.prefetch %ptr !llvm.ptr, scope 0
+ 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..a98e392acc87f 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 !llvm.ptr<1>, scope 0
+ 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 !llvm.ptr, scope 0
+ 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