[Mlir-commits] [mlir] [MLIR][ROCDL] Add op for raw.ptr.buffer.load.lds (PR #127988)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Feb 20 02:55:58 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
@llvm/pr-subscribers-mlir-llvm
Author: Alexander Weinrauch (AlexAUT)
<details>
<summary>Changes</summary>
This PR adds raw.ptr.buffer.load.lds op to ROCDL to expose buffer loads directly to LDS.
The op is converted to the corresponding intrinsic call during the translation from MLIR to LLVM IR.
---
Full diff: https://github.com/llvm/llvm-project/pull/127988.diff
3 Files Affected:
- (modified) mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td (+19-1)
- (modified) mlir/test/Dialect/LLVMIR/rocdl.mlir (+9)
- (modified) mlir/test/Target/LLVMIR/rocdl.mlir (+12)
``````````diff
diff --git a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
index 7efa4ffa2aa6f..bdb7469433002 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
@@ -475,6 +475,24 @@ def ROCDL_RawPtrBufferLoadOp :
}];
}
+def ROCDL_RawPtrBufferLoadLdsOp :
+ ROCDL_IntrOp<"raw.ptr.buffer.load.lds", [], [], [], 0, 0, 1> {
+ dag args = (ins Arg<ROCDLBufferRsrc, "", [MemRead]>:$rsrc,
+ Arg<ROCDLBufferLDS, "", [MemWrite]>:$ldsPtr,
+ I32:$size,
+ I32:$voffset,
+ I32:$soffset,
+ I32:$offset,
+ I32:$aux);
+ let arguments = !con(args, aliasAttrs);
+ let assemblyFormat = "operands attr-dict";
+ let extraClassDefinition = [{
+ ::llvm::SmallVector<::mlir::Value> $cppClass::getAccessedOperands() {
+ return {getRsrc(), getLdsPtr()};
+ }
+ }];
+}
+
def ROCDL_RawPtrBufferStoreOp :
ROCDL_IntrOp<"raw.ptr.buffer.store", [], [0], [], 0, 0, 1> {
dag args = (ins LLVM_Type:$vdata,
@@ -692,7 +710,7 @@ def ROCDL_CvtScaleF32PkFp8F32:
attr-dict $srcA `,` $srcB `,` $scale `->` $old `[` $wordSel `]` `:` type($res)
}];
}
-
+
def ROCDL_CvtScaleF32PkBf8F32:
ROCDL_IntrOp<"cvt.scalef32.pk.bf8.f32", [], [], [Pure], 1>,
Arguments<(ins ROCDL_V2I16Type:$old, F32:$srcA, F32:$srcB, F32: $scale, I1:$wordSel)> {
diff --git a/mlir/test/Dialect/LLVMIR/rocdl.mlir b/mlir/test/Dialect/LLVMIR/rocdl.mlir
index 73e844b5f3e13..05469b64a8083 100644
--- a/mlir/test/Dialect/LLVMIR/rocdl.mlir
+++ b/mlir/test/Dialect/LLVMIR/rocdl.mlir
@@ -687,6 +687,15 @@ llvm.func @rocdl.raw.ptr.buffer.f32(%rsrc : !llvm.ptr<8>,
llvm.return
}
+llvm.func @rocdl.raw.ptr.buffer.load.lds(%rsrc : !llvm.ptr<8>, %dstLds : !llvm.ptr<3>,
+ %size: i32, %voffset : i32, %soffset : i32, %offset : i32,
+ %aux : i32) {
+ // CHECK-LABEL: rocdl.raw.ptr.buffer.load.lds
+ // CHECK: rocdl.raw.ptr.buffer.load.lds %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}
+ rocdl.raw.ptr.buffer.load.lds %rsrc, %dstLds, %size, %voffset, %soffset, %offset, %aux
+
+ llvm.return
+}
llvm.func @rocdl.raw.ptr.buffer.i32(%rsrc : !llvm.ptr<8>,
%offset : i32, %soffset : i32,
diff --git a/mlir/test/Target/LLVMIR/rocdl.mlir b/mlir/test/Target/LLVMIR/rocdl.mlir
index eac28c57e2ab4..196a15550e513 100644
--- a/mlir/test/Target/LLVMIR/rocdl.mlir
+++ b/mlir/test/Target/LLVMIR/rocdl.mlir
@@ -893,6 +893,18 @@ llvm.func @rocdl.raw.ptr.buffer(%rsrc : !llvm.ptr<8>,
llvm.return
}
+llvm.func @rocdl.raw.ptr.buffer.load.lds(%rsrc : !llvm.ptr<8>, %dstLds : !llvm.ptr<3>,
+ %voffset : i32, %soffset : i32) {
+ %size = llvm.mlir.constant(4 : i32) : i32
+ %offset = llvm.mlir.constant(128 : i32) : i32
+ %aux = llvm.mlir.constant(1 : i32) : i32
+ // CHECK-LABEL: rocdl.raw.ptr.buffer.load.lds
+ // CHECK: call void @llvm.amdgcn.raw.ptr.buffer.load.lds(ptr addrspace(8) %{{.*}}, ptr addrspace(3) %{{.*}}, i32 4, i32 %{{.*}}, i32 %{{.*}}, i32 128, i32 1
+ rocdl.raw.ptr.buffer.load.lds %rsrc, %dstLds, %size, %voffset, %soffset, %offset, %aux
+
+ llvm.return
+}
+
llvm.func @rocdl.raw.ptr.buffer.atomic.f32(%rsrc : !llvm.ptr<8>,
%offset : i32, %soffset : i32,
%vdata1 : f32) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/127988
More information about the Mlir-commits
mailing list