[Mlir-commits] [mlir] fc2f31c - [MLIR][ROCDL] Add op for raw.ptr.buffer.load.lds (#127988)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri Feb 21 03:37:23 PST 2025
Author: Alexander Weinrauch
Date: 2025-02-21T11:37:20Z
New Revision: fc2f31c9494c2d29c5d7103ac36956aa15a51f09
URL: https://github.com/llvm/llvm-project/commit/fc2f31c9494c2d29c5d7103ac36956aa15a51f09
DIFF: https://github.com/llvm/llvm-project/commit/fc2f31c9494c2d29c5d7103ac36956aa15a51f09.diff
LOG: [MLIR][ROCDL] Add op for raw.ptr.buffer.load.lds (#127988)
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.
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 e9dcd112ce54e..58bdbbbe039b5 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 84a30277e63da..e0ca51afb02d6 100644
--- a/mlir/test/Target/LLVMIR/rocdl.mlir
+++ b/mlir/test/Target/LLVMIR/rocdl.mlir
@@ -904,6 +904,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) {
More information about the Mlir-commits
mailing list