[Mlir-commits] [mlir] 9b6bf8f - [ROCDL] added: rsq to rocdl.math; fixes to global/flat prefetch (#176167)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Jan 15 12:12:03 PST 2026
Author: Ravil Dorozhinskii
Date: 2026-01-15T21:11:57+01:00
New Revision: 9b6bf8f91c4741fbc069f5811405810cb107afb0
URL: https://github.com/llvm/llvm-project/commit/9b6bf8f91c4741fbc069f5811405810cb107afb0
DIFF: https://github.com/llvm/llvm-project/commit/9b6bf8f91c4741fbc069f5811405810cb107afb0.diff
LOG: [ROCDL] added: rsq to rocdl.math; fixes to global/flat prefetch (#176167)
PR adds rsq to rocdl.math as well as a fix to global/flat prefetch
- Note, prefetch ops must have MemWrite trait. Otherwise, they
are removed by any DCE pass in a pipeline.
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 265c2e99f52d6..9f2350763f328 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
@@ -1298,7 +1298,7 @@ def ROCDL_RawBufferAtomicCmpSwap :
def ROCDL_GlobalPrefetchOp :
ROCDL_IntrOp<"global.prefetch", [], [], [], 0, 0, 1, 0, [1], ["scope"]> {
- dag args = (ins Arg<LLVM_PointerInAddressSpace<1>, "", [MemRead]>:$ptr,
+ dag args = (ins Arg<LLVM_PointerInAddressSpace<1>, "", [MemRead, MemRead]>:$ptr,
I32Attr:$scope);
let arguments = !con(args, baseArgs);
let description = [{
@@ -1316,7 +1316,7 @@ def ROCDL_GlobalPrefetchOp :
def ROCDL_FlatPrefetchOp :
ROCDL_IntrOp<"flat.prefetch", [], [], [], 0, 0, 1, 0, [1], ["scope"]> {
- dag args = (ins Arg<LLVM_PointerInAddressSpace<0>, "", [MemRead]>:$ptr,
+ dag args = (ins Arg<LLVM_PointerInAddressSpace<0>, "", [MemRead, MemRead]>:$ptr,
I32Attr:$scope);
let arguments = !con(args, baseArgs);
let description = [{
@@ -2140,6 +2140,7 @@ def ROCDLExp : ROCDL_Math_IntrOp<"exp">;
def ROCDLExp2 : ROCDL_Math_IntrOp<"exp2">;
def ROCDLLog : ROCDL_Math_IntrOp<"log">;
def ROCDLSqrt : ROCDL_Math_IntrOp<"sqrt">;
+def ROCDLRsq : ROCDL_Math_IntrOp<"rsq">;
//===----------------------------------------------------------------------===//
// ROCDL target attribute.
diff --git a/mlir/test/Dialect/LLVMIR/rocdl.mlir b/mlir/test/Dialect/LLVMIR/rocdl.mlir
index cf2b144219f36..d519145afa6b4 100644
--- a/mlir/test/Dialect/LLVMIR/rocdl.mlir
+++ b/mlir/test/Dialect/LLVMIR/rocdl.mlir
@@ -99,6 +99,13 @@ func.func @rocdl.math.ops(%a: f32, %b: f16, %c: bf16) {
%sqrt0 = rocdl.sqrt %a f32 -> f32
%sqrt1 = rocdl.sqrt %b f16 -> f16
%sqrt2 = rocdl.sqrt %c bf16 -> bf16
+
+ // CHECK: %{{.*}} = rocdl.rsq %{{.*}} f32 -> f32
+ // CHECK: %{{.*}} = rocdl.rsq %{{.*}} f16 -> f16
+ // CHECK: %{{.*}} = rocdl.rsq %{{.*}} bf16 -> bf16
+ %rsq0 = rocdl.rsq %a f32 -> f32
+ %rsq1 = rocdl.rsq %b f16 -> f16
+ %rsq2 = rocdl.rsq %c bf16 -> bf16
llvm.return
}
diff --git a/mlir/test/Target/LLVMIR/rocdl.mlir b/mlir/test/Target/LLVMIR/rocdl.mlir
index dc6a00e19afc3..8496823b5850a 100644
--- a/mlir/test/Target/LLVMIR/rocdl.mlir
+++ b/mlir/test/Target/LLVMIR/rocdl.mlir
@@ -111,6 +111,13 @@ llvm.func @kernel_math_ops(%a: f32, %b: f16, %c: bf16) {
%sqrt0 = rocdl.sqrt %a f32 -> f32
%sqrt1 = rocdl.sqrt %b f16 -> f16
%sqrt2 = rocdl.sqrt %c bf16 -> bf16
+
+ // CHECK: call float @llvm.amdgcn.rsq.f32(float %{{.*}})
+ // CHECK: call half @llvm.amdgcn.rsq.f16(half %{{.*}})
+ // CHECK: call bfloat @llvm.amdgcn.rsq.bf16(bfloat %{{.*}})
+ %rsq0 = rocdl.rsq %a f32 -> f32
+ %rsq1 = rocdl.rsq %b f16 -> f16
+ %rsq2 = rocdl.rsq %c bf16 -> bf16
llvm.return
}
More information about the Mlir-commits
mailing list