[Mlir-commits] [mlir] [MLIR][ROCDL] Add ops for raw.ptr.buffer.load.lds (PR #127988)
Alexander Weinrauch
llvmlistbot at llvm.org
Thu Feb 20 02:55:07 PST 2025
https://github.com/AlexAUT created https://github.com/llvm/llvm-project/pull/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.
>From 9967ad32ec7eea0e0903ddff14e16f4150ac1362 Mon Sep 17 00:00:00 2001
From: Alexander Weinrauch <alexander.weinrauch at amd.com>
Date: Wed, 19 Feb 2025 15:42:49 +0000
Subject: [PATCH] Add rocdl ops for buffer load into lds
---
mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td | 20 +++++++++++++++++++-
mlir/test/Dialect/LLVMIR/rocdl.mlir | 9 +++++++++
mlir/test/Target/LLVMIR/rocdl.mlir | 12 ++++++++++++
3 files changed, 40 insertions(+), 1 deletion(-)
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) {
More information about the Mlir-commits
mailing list