[Mlir-commits] [mlir] [MLIR][NVVM] Combine griddepcontrol Ops (PR #152525)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Aug 7 08:01:20 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-llvm
Author: Guray Ozen (grypp)
<details>
<summary>Changes</summary>
We've 2 ops:
1. nvvm.griddepcontrol.wait
2. nvvm.griddepcontrol.launch_dependents
They are related to FDL and same concept. This PR unifies both ops into a single one.
---
Full diff: https://github.com/llvm/llvm-project/pull/152525.diff
3 Files Affected:
- (modified) mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td (+30-13)
- (modified) mlir/test/Dialect/LLVMIR/nvvm.mlir (+4-4)
- (modified) mlir/test/Target/LLVMIR/nvvmir.mlir (+13-2)
``````````diff
diff --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
index 30df3b739e5ca..136984caa7724 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
@@ -2995,30 +2995,47 @@ def NVVM_WgmmaMmaAsyncOp : NVVM_Op<"wgmma.mma_async",
// NVVM Griddepcontrol Ops
//===----------------------------------------------------------------------===//
-def NVVM_GriddepcontrolWaitOp : NVVM_IntrOp<"griddepcontrol.wait", [], 0> {
- let assemblyFormat = "attr-dict";
+def FDLWait : I32EnumAttrCase<"wait", 0>;
+def FDLLaunchDependent : I32EnumAttrCase<"launch_dependents", 1>;
+def FDLKind : I32EnumAttr<"FDLKind", "Fast dependenct launch kind",
+ [FDLWait, FDLLaunchDependent]> {
+ let genSpecializedAttr = 0;
+ let cppNamespace = "::mlir::NVVM";
+}
+
+def FDLKindAttr : EnumAttr<NVVM_Dialect, FDLKind, "fdl_kind">;
+
+def NVVM_GriddepcontrolOp : NVVM_Op<"griddepcontrol", []> {
let description = [{
- Causes the executing thread to wait until all prerequisite grids in flight
+ If the $kind attribute is set to `wait`, the instruction, it causes the
+ executing thread to wait until all prerequisite grids in flight
have completed and all the memory operations from the prerequisite grids
are performed and made visible to the current grid.
+ When the $kind is launch_dependents, it signals that specific dependents
+ the runtime system designated to react to this instruction can be scheduled
+ as soon as all other CTAs in the grid issue the same instruction or have
+ completed.
[For more information, see PTX ISA](https://docs.nvidia.com/cuda/parallel-thread-execution/#parallel-synchronization-and-communication-instructions-griddepcontrol)
}];
-}
-def NVVM_GriddepcontrolLaunchDependentsOp
- : NVVM_IntrOp<"griddepcontrol.launch.dependents", [], 0> {
- let assemblyFormat = "attr-dict";
-
- let description = [{
- Signals that specific dependents the runtime system designated to react to
- this instruction can be scheduled as soon as all other CTAs in the grid
- issue the same instruction or have completed.
+ let arguments = (ins FDLKindAttr:$kind);
+ let assemblyFormat = "$kind attr-dict";
- [For more information, see PTX ISA](https://docs.nvidia.com/cuda/parallel-thread-execution/#parallel-synchronization-and-communication-instructions-griddepcontrol)
+ string llvmBuilder = [{
+ llvm::Intrinsic::ID id;
+ switch ($kind) {
+ case NVVM::FDLKind::wait:
+ id = llvm::Intrinsic::nvvm_griddepcontrol_wait;
+ break;
+ case NVVM::FDLKind::launch_dependents:
+ id = llvm::Intrinsic::nvvm_griddepcontrol_launch_dependents;
+ break;
+ }
+ createIntrinsicCall(builder, id);
}];
}
diff --git a/mlir/test/Dialect/LLVMIR/nvvm.mlir b/mlir/test/Dialect/LLVMIR/nvvm.mlir
index c7fa41c98ac92..cd14be5473432 100644
--- a/mlir/test/Dialect/LLVMIR/nvvm.mlir
+++ b/mlir/test/Dialect/LLVMIR/nvvm.mlir
@@ -535,15 +535,15 @@ func.func @wgmma_wait_group_sync_aligned() {
}
func.func @griddepcontrol_wait() {
- // CHECK: nvvm.griddepcontrol.wait
- nvvm.griddepcontrol.wait
+ // CHECK: nvvm.griddepcontrol wait
+ nvvm.griddepcontrol wait
return
}
func.func @griddepcontrol_launch_dependents()
{
- // CHECK: nvvm.griddepcontrol.launch.dependents
- nvvm.griddepcontrol.launch.dependents
+ // CHECK: nvvm.griddepcontrol launch_dependents
+ nvvm.griddepcontrol launch_dependents
return
}
diff --git a/mlir/test/Target/LLVMIR/nvvmir.mlir b/mlir/test/Target/LLVMIR/nvvmir.mlir
index 5c2cfa4683104..6af347d6dcea3 100644
--- a/mlir/test/Target/LLVMIR/nvvmir.mlir
+++ b/mlir/test/Target/LLVMIR/nvvmir.mlir
@@ -766,7 +766,7 @@ llvm.func @nvvm_wgmma_wait_group_aligned() {
// CHECK-LABEL: @nvvm_griddepcontrol_wait
llvm.func @nvvm_griddepcontrol_wait() {
// CHECK: call void @llvm.nvvm.griddepcontrol.wait()
- nvvm.griddepcontrol.wait
+ nvvm.griddepcontrol wait
llvm.return
}
@@ -774,7 +774,7 @@ llvm.func @nvvm_griddepcontrol_wait() {
// CHECK-LABEL: @nvvm_griddepcontrol_launch_dependents
llvm.func @nvvm_griddepcontrol_launch_dependents() {
// CHECK: call void @llvm.nvvm.griddepcontrol.launch.dependents()
- nvvm.griddepcontrol.launch.dependents
+ nvvm.griddepcontrol launch_dependents
llvm.return
}
@@ -918,3 +918,14 @@ llvm.func @nvvm_dot_accumulate_2way(%a: vector<2xi16>, %b: vector<4xi8>, %c: i32
%7 = nvvm.dot.accumulate.2way %a <signed>, %b <signed>, %c {b_hi = true}: vector<2xi16>, vector<4xi8>
llvm.return
}
+
+// -----
+
+// CHECK-LABEL: @nvvm_pmevent
+llvm.func @nvvm_pmevent() {
+ // CHECK: call void @llvm.nvvm.pm.event.mask(i16 15000)
+ nvvm.pmevent mask = 15000
+ // CHECK: call void @llvm.nvvm.pm.event.mask(i16 4)
+ nvvm.pmevent mask = 4
+ llvm.return
+}
\ No newline at end of file
``````````
</details>
https://github.com/llvm/llvm-project/pull/152525
More information about the Mlir-commits
mailing list