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:$rsrc, + Arg:$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) {