[Mlir-commits] [mlir] d8bd7f1 - [mlir] Support ROCDL::ReadlaneOp (#116593)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Nov 19 15:36:33 PST 2024
Author: Kyle Wang
Date: 2024-11-19T17:36:30-06:00
New Revision: d8bd7f11c8c781646406e76731dd8d76ed5425dd
URL: https://github.com/llvm/llvm-project/commit/d8bd7f11c8c781646406e76731dd8d76ed5425dd
DIFF: https://github.com/llvm/llvm-project/commit/d8bd7f11c8c781646406e76731dd8d76ed5425dd.diff
LOG: [mlir] Support ROCDL::ReadlaneOp (#116593)
Support ROCDL::ReadlaneOp to solve
https://github.com/ROCm/triton-internal/issues/411.
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 3695708439d91f..71dac3ad39b7b1 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
@@ -197,6 +197,21 @@ def ROCDL_BallotOp :
let assemblyFormat = "$pred attr-dict `:` type($res)";
}
+def ROCDL_ReadlaneOp : ROCDL_IntrOp<"readlane", [], [0], [AllTypesMatch<["res", "src0"]>], 1>,
+ Arguments<(ins LLVM_Type:$src0,
+ I32:$src1)> {
+ let results = (outs LLVM_Type:$res);
+ let summary = "Get the value in the specific lane.";
+
+ let description = [{
+ Get the value in lane `src1` from input `src0`.
+ }];
+
+ let assemblyFormat = [{
+ $src0 `,` $src1 attr-dict `:` `(` type($src0) `,` type($src1) `)` `->` type($res)
+ }];
+}
+
//===----------------------------------------------------------------------===//
// Thread index and Block index
diff --git a/mlir/test/Dialect/LLVMIR/rocdl.mlir b/mlir/test/Dialect/LLVMIR/rocdl.mlir
index 4afa839aa3ea1b..92789246edb4f3 100644
--- a/mlir/test/Dialect/LLVMIR/rocdl.mlir
+++ b/mlir/test/Dialect/LLVMIR/rocdl.mlir
@@ -388,6 +388,17 @@ llvm.func @rocdl.s.wait.dscnt() {
// -----
+llvm.func @rocdl.readlane(%src : f32) -> f32 {
+ %cst0 = llvm.mlir.constant(0 : i32) : i32
+
+ // CHECK-LABEL: rocdl.readlane
+ // CHECK: rocdl.readlane %{{.*}} %{{.*}}
+ %ret = rocdl.readlane %src, %cst0 : (f32, i32) -> f32
+ llvm.return %ret : f32
+}
+
+// -----
+
// expected-error at below {{attribute attached to unexpected op}}
func.func private @expected_llvm_func() attributes { rocdl.kernel }
diff --git a/mlir/test/Target/LLVMIR/rocdl.mlir b/mlir/test/Target/LLVMIR/rocdl.mlir
index 2f34070147be47..0620c23b5fdad7 100644
--- a/mlir/test/Target/LLVMIR/rocdl.mlir
+++ b/mlir/test/Target/LLVMIR/rocdl.mlir
@@ -118,6 +118,25 @@ llvm.func @rocdl.ballot64(%pred : i1) -> i64 {
llvm.return %0 : i64
}
+llvm.func @rocdl.readlane(%src0 : f32, %src1: f64, %src2: i32, %src3: vector<2 x f32>) -> f32 {
+ %idx = llvm.mlir.constant(0 : i32) : i32
+
+ // CHECK-LABEL: rocdl.readlane
+ // CHECK: call float @llvm.amdgcn.readlane.f32(float %{{.*}}, i32 0)
+ %0 = rocdl.readlane %src0, %idx : (f32, i32) -> f32
+
+ // CHECK: call double @llvm.amdgcn.readlane.f64(double %{{.*}}, i32 0)
+ %1 = rocdl.readlane %src1, %idx : (f64, i32) -> f64
+
+ // CHECK: call i32 @llvm.amdgcn.readlane.i32(i32 %{{.*}}, i32 0)
+ %2 = rocdl.readlane %src2, %idx : (i32, i32) -> i32
+
+ // CHECK: call <2 x float> @llvm.amdgcn.readlane.v2f32(<2 x float> %{{.*}}, i32 0)
+ %3 = rocdl.readlane %src3, %idx : (vector<2 x f32>, i32) -> vector<2 x f32>
+
+ llvm.return %0 : f32
+}
+
llvm.func @rocdl.waitcnt() {
// CHECK-LABEL: rocdl.waitcnt
// CHECK-NEXT: call void @llvm.amdgcn.s.waitcnt(i32 0)
More information about the Mlir-commits
mailing list