Skip to content

Commit d813c1e

Browse files
committed
1 parent b851269 commit d813c1e

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

external/llvm-project/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,39 @@ def ROCDL_GlobalLoadLDSOp :
558558
}];
559559
}
560560

561+
//===---------------------------------------------------------------------===//
562+
// Async load to LDS intrinsic (available in GFX1250)
563+
//===---------------------------------------------------------------------===//
564+
565+
class ROCDL_GlobalLoadAsyncToLDSOp<string mnemonic> :
566+
ROCDL_IntrOp<mnemonic, [], [], [], 0, 0, 1, 0, [2, 3], ["offset", "aux"]> {
567+
dag args = (ins Arg<ROCDLGlobalBuffer, "", [MemRead]>:$globalPtr,
568+
Arg<ROCDLBufferLDS, "", [MemWrite]>:$ldsPtr,
569+
I32Attr:$offset,
570+
I32Attr:$aux);
571+
let arguments = !con(args, baseArgs);
572+
let assemblyFormat = [{
573+
$globalPtr `,` $ldsPtr `,` $offset `,` $aux
574+
attr-dict `:` type($globalPtr)
575+
}];
576+
let description = [{
577+
Loads data asynchronously from a global memory pointer to a local data
578+
store (LDS) pointer.
579+
580+
Available on gfx1250+.
581+
}];
582+
let extraClassDefinition = [{
583+
::llvm::SmallVector<::mlir::Value> $cppClass::getAccessedOperands() {
584+
return {getGlobalPtr(), getLdsPtr()};
585+
}
586+
}];
587+
}
588+
589+
def ROCDL_GlobalLoadAsyncToLDSB8Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b8">;
590+
def ROCDL_GlobalLoadAsyncToLDSB32Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b32">;
591+
def ROCDL_GlobalLoadAsyncToLDSB64Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b64">;
592+
def ROCDL_GlobalLoadAsyncToLDSB128Op : ROCDL_GlobalLoadAsyncToLDSOp<"global.load.async.to.lds.b128">;
593+
561594
//===---------------------------------------------------------------------===//
562595
// Operations on raw buffer resources (stride of 0, bounds checks either off or in
563596
// raw buffer mode).

external/llvm-project/mlir/test/Dialect/LLVMIR/rocdl.mlir

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,19 @@ llvm.func @rocdl.global.load.lds(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
650650
llvm.return
651651
}
652652

653+
llvm.func @rocdl.global.load.async.to.lds(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
654+
// CHECK-LABEL @rocdl.global.load.async.to.lds
655+
// CHECK: rocdl.global.load.async.to.lds.b8 %{{.*}}, %{{.*}}, 0, 0
656+
// CHECK: rocdl.global.load.async.to.lds.b32 %{{.*}}, %{{.*}}, 0, 0
657+
// CHECK: rocdl.global.load.async.to.lds.b64 %{{.*}}, %{{.*}}, 0, 0
658+
// CHECK: rocdl.global.load.async.to.lds.b128 %{{.*}}, %{{.*}}, 0, 0
659+
rocdl.global.load.async.to.lds.b8 %src, %dst, 0, 0 : <1>
660+
rocdl.global.load.async.to.lds.b32 %src, %dst, 0, 0 : <1>
661+
rocdl.global.load.async.to.lds.b64 %src, %dst, 0, 0 : <1>
662+
rocdl.global.load.async.to.lds.b128 %src, %dst, 0, 0 : <1>
663+
llvm.return
664+
}
665+
653666
llvm.func @rocdl.make.buffer.rsrc(%ptr : !llvm.ptr,
654667
%stride : i16,
655668
%numRecords : i32,

external/llvm-project/mlir/test/Target/LLVMIR/rocdl.mlir

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,30 @@ llvm.func @rocdl.global.load.lds(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
905905
llvm.return
906906
}
907907

908+
llvm.func @rocdl.global.load.async.lds.b8(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
909+
// CHECK: call void @llvm.amdgcn.global.load.async.to.lds.b8
910+
rocdl.global.load.async.to.lds.b8 %src, %dst, 0, 0 : !llvm.ptr<1>
911+
llvm.return
912+
}
913+
914+
llvm.func @rocdl.global.load.async.lds.b32(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
915+
// CHECK: call void @llvm.amdgcn.global.load.async.to.lds.b32
916+
rocdl.global.load.async.to.lds.b32 %src, %dst, 0, 0 : !llvm.ptr<1>
917+
llvm.return
918+
}
919+
920+
llvm.func @rocdl.global.load.async.lds.b64(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
921+
// CHECK: call void @llvm.amdgcn.global.load.async.to.lds.b64
922+
rocdl.global.load.async.to.lds.b64 %src, %dst, 0, 0 : !llvm.ptr<1>
923+
llvm.return
924+
}
925+
926+
llvm.func @rocdl.global.load.async.lds.b128(%src : !llvm.ptr<1>, %dst: !llvm.ptr<3>) {
927+
// CHECK: call void @llvm.amdgcn.global.load.async.to.lds.b128
928+
rocdl.global.load.async.to.lds.b128 %src, %dst, 0, 0 : !llvm.ptr<1>
929+
llvm.return
930+
}
931+
908932
llvm.func @rocdl.make.buffer.rsrc(%ptr : !llvm.ptr,
909933
%stride : i16,
910934
%numRecords : i32,

0 commit comments

Comments
 (0)