[Mlir-commits] [mlir] [mlir][rocdl] Add GlobalLoadAsyncToLDS operation (PR #165374)

Ravil Dorozhinskii llvmlistbot at llvm.org
Wed Oct 29 03:22:14 PDT 2025


================
@@ -692,6 +692,39 @@ def ROCDL_GlobalLoadLDSOp :
   }];
 }
 
+//===---------------------------------------------------------------------===//
+// Async load to LDS intrinsic (available in GFX1250)
+//===---------------------------------------------------------------------===//
+
+class ROCDL_GlobalLoadAsyncToLDSOp<string mnemonic> :
+  ROCDL_IntrOp<mnemonic, [], [], [], 0, 0, 1, 0, [2, 3], ["offset", "aux"]> {
+  dag args = (ins Arg<ROCDLGlobalBuffer, "", [MemRead]>:$globalPtr,
+                 Arg<ROCDLBufferLDS, "", [MemWrite]>:$ldsPtr,
+                 I32Attr:$offset,
+                 I32Attr:$aux);
+  let arguments = !con(args, baseArgs);
+  let assemblyFormat = [{
+    $globalPtr `,`  $ldsPtr `,` $offset `,` $aux
+    attr-dict `:` type($globalPtr)
+  }];
+  let description = [{
+    Loads data asynchronously from a global memory pointer to a local data
+    store (LDS) pointer.
+
+    Available on gfx1250+.
+  }];
+  let extraClassDefinition = [{
+    ::llvm::SmallVector<::mlir::Value> $cppClass::getAccessedOperands() {
+      return {getGlobalPtr(), getLdsPtr()};
+    }
+  }];
+}
+
+def ROCDL_GlobalLoadAsyncToLDSB8Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b8">;
+def ROCDL_GlobalLoadAsyncToLDSB32Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b32">;
+def ROCDL_GlobalLoadAsyncToLDSB64Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b64">;
+def ROCDL_GlobalLoadAsyncToLDSB128Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b128">;
----------------
ravil-mobile wrote:

NIT: Maybe we can use `foreach` construct in tablegen?

```
foreach bytes = [8,  32,  64, 128] in {
let bytesStr = "b" # !cast<string>(bytes) in
def ROCDL_GlobalLoadAsyncToLDS # !toupper(bytesStr) # Op :
  ROCDL_IntrOp<"global.load.async.to.lds." # bytesStr, [], [], [], 0, 0, 1, 0, [2, 3], ["offset", "aux"]> {
  dag args = (ins Arg<ROCDLGlobalBuffer, "", [MemRead]>:$globalPtr,
                 Arg<ROCDLBufferLDS, "", [MemWrite]>:$ldsPtr,
                 I32Attr:$offset,
                 I32Attr:$aux);
  let arguments = !con(args, baseArgs);
  let assemblyFormat = [{
    $globalPtr `,`  $ldsPtr `,` $offset `,` $aux
    attr-dict `:` type($globalPtr)
  }];
  let description = [{
    Asynchronously loads # bytes # bytes of data from a global memory to a Local Data
    Store (LDS).

    Available on gfx1250+.
  }];
  let extraClassDefinition = [{
    ::llvm::SmallVector<::mlir::Value> $cppClass::getAccessedOperands() {
      return {getGlobalPtr(), getLdsPtr()};
    }
  }];
}
}
```

https://github.com/llvm/llvm-project/pull/165374


More information about the Mlir-commits mailing list