[llvm] [AMDGPU][SIInsertWaitcnts][NFC] Refactor counterOutOfOrder() to use a WaitEventSet (PR #187758)

via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 23 11:48:27 PDT 2026


https://github.com/vporpo updated https://github.com/llvm/llvm-project/pull/187758

>From d7872d325790e3ee6816e58bd409dac70ff230eb Mon Sep 17 00:00:00 2001
From: Vasileios Porpodas <vasileios.porpodas at amd.com>
Date: Fri, 20 Mar 2026 17:38:57 +0000
Subject: [PATCH 1/2] [AMDGPU][SIInsertWaitcnts][NFC] Refactor
 counterOutOfOrder() to use WaitEventSet

This is a follow-up to @piotrAMD's comment in #178511 about using a
`WaitEventSet` instead of an unsigned maksk in `counterOutOfOrder()`.
---
 llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index 522a520c2f50c..43c68a5d1a462 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -1676,13 +1676,15 @@ bool WaitcntBrackets::counterOutOfOrder(InstCounterType T) const {
   // so having GLOBAL_INV_ACCESS mixed with other LOAD_CNT events doesn't cause
   // out-of-order completion.
   if (T == LOAD_CNT) {
-    unsigned Events = hasPendingEvent(T);
+    WaitEventSet Events;
+    if (hasPendingEvent(T))
+      Events.insert(VMEM_ACCESS);
     // Remove GLOBAL_INV_ACCESS from the event mask before checking for mixed
     // events
-    Events &= ~(1 << GLOBAL_INV_ACCESS);
+    Events.remove(GLOBAL_INV_ACCESS);
     // Return true only if there are still multiple event types after removing
     // GLOBAL_INV
-    return Events & (Events - 1);
+    return Events.twoOrMore();
   }
 
   return hasMixedPendingEvents(T);

>From 90ee13da2ed3acde1b52c33b2f1850cefdce0bfa Mon Sep 17 00:00:00 2001
From: Vasileios Porpodas <vasileios.porpodas at amd.com>
Date: Mon, 23 Mar 2026 18:18:44 +0000
Subject: [PATCH 2/2] fixup! [AMDGPU][SIInsertWaitcnts][NFC] Refactor
 counterOutOfOrder() to use WaitEventSet

---
 llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
index 43c68a5d1a462..bb085b6ac786c 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaitcnts.cpp
@@ -1676,9 +1676,7 @@ bool WaitcntBrackets::counterOutOfOrder(InstCounterType T) const {
   // so having GLOBAL_INV_ACCESS mixed with other LOAD_CNT events doesn't cause
   // out-of-order completion.
   if (T == LOAD_CNT) {
-    WaitEventSet Events;
-    if (hasPendingEvent(T))
-      Events.insert(VMEM_ACCESS);
+    WaitEventSet Events = PendingEvents & Context->getWaitEvents(T);
     // Remove GLOBAL_INV_ACCESS from the event mask before checking for mixed
     // events
     Events.remove(GLOBAL_INV_ACCESS);



More information about the llvm-commits mailing list