[llvm] [AMDGPU] Change static NOP last terminator SI_DEMOTE_I1 to be replaced by S_BRANCH instead of assert (PR #204649)

Domenic Nutile via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 22 18:07:46 PDT 2026


https://github.com/saxlungs updated https://github.com/llvm/llvm-project/pull/204649

>From 145baec928f454f21cf4334e3827f1a818817982 Mon Sep 17 00:00:00 2001
From: Domenic Nutile <domenic.nutile at gmail.com>
Date: Thu, 18 Jun 2026 13:27:52 -0400
Subject: [PATCH 1/3] [AMDGPU] Change static NOP last terminator SI_DEMOTE_I1
 to be replaced by S_BRANCH instead of assert

---
 llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp    |  2 +-
 .../uniform-intrin-combine-wqm-demote.ll      | 23 +++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll

diff --git a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
index bf5dc2c529be6..008f7f70456df 100644
--- a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
+++ b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
@@ -979,7 +979,7 @@ MachineInstr *SIWholeQuadMode::lowerKillI1(MachineInstr &MI, bool IsWQM) {
       if (!IsLastTerminator) {
         LIS->RemoveMachineInstrFromMaps(MI);
       } else {
-        assert(MBB.succ_size() == 1 && MI.getOpcode() != AMDGPU::SI_DEMOTE_I1);
+        assert(MBB.succ_size() == 1);
         MachineInstr *NewTerm = BuildMI(MBB, MI, DL, TII->get(AMDGPU::S_BRANCH))
                                     .addMBB(*MBB.succ_begin());
         LIS->ReplaceMachineInstrInMaps(MI, *NewTerm);
diff --git a/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
new file mode 100644
index 0000000000000..181039e02bf57
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
@@ -0,0 +1,23 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1100 %s -o - | FileCheck %s
+
+define amdgpu_ps void @_amdgpu_ps_main() #0 {
+; CHECK-LABEL: _amdgpu_ps_main:
+; CHECK:       ; %bb.0: ; %.entry
+; CHECK-NEXT:    s_endpgm
+.entry:
+  %ballot = call i64 @llvm.amdgcn.ballot.i64(i1 true)
+  %not_ballot = icmp eq i64 %ballot, 0
+  %inverse = xor i1 %not_ballot, true
+  call void @llvm.amdgcn.wqm.demote(i1 %inverse)
+  br label %.exit
+
+.exit:
+  ret void
+}
+
+declare void @llvm.amdgcn.wqm.demote(i1) #1
+
+declare i64 @llvm.amdgcn.ballot.i64(i1) #2
+
+attributes #0 = { "amdgpu-conditional-discard-transformations" "amdgpu-transform-discard-to-demote" }

>From 6480a08af6fa64f804de64f5e9082371de854dc7 Mon Sep 17 00:00:00 2001
From: Domenic Nutile <domenic.nutile at gmail.com>
Date: Thu, 18 Jun 2026 15:37:03 -0400
Subject: [PATCH 2/3] Remove references to attribute groups that aren't present

---
 llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
index 181039e02bf57..18f8e3a041908 100644
--- a/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
+++ b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
@@ -16,8 +16,8 @@ define amdgpu_ps void @_amdgpu_ps_main() #0 {
   ret void
 }
 
-declare void @llvm.amdgcn.wqm.demote(i1) #1
+declare void @llvm.amdgcn.wqm.demote(i1)
 
-declare i64 @llvm.amdgcn.ballot.i64(i1) #2
+declare i64 @llvm.amdgcn.ballot.i64(i1)
 
 attributes #0 = { "amdgpu-conditional-discard-transformations" "amdgpu-transform-discard-to-demote" }

>From 5caebab4c8f7feebe7dca4f2f6e4f19009ac0638 Mon Sep 17 00:00:00 2001
From: Domenic Nutile <domenic.nutile at gmail.com>
Date: Mon, 22 Jun 2026 21:07:33 -0400
Subject: [PATCH 3/3] Testing updates per PR feedback

---
 .../CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll   | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
index 18f8e3a041908..2dfc1a22b829d 100644
--- a/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
+++ b/llvm/test/CodeGen/AMDGPU/uniform-intrin-combine-wqm-demote.ll
@@ -1,7 +1,7 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
 ; RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1100 %s -o - | FileCheck %s
 
-define amdgpu_ps void @_amdgpu_ps_main() #0 {
+define amdgpu_ps void @_amdgpu_ps_main() "amdgpu-conditional-discard-transformations" "amdgpu-transform-discard-to-demote" {
 ; CHECK-LABEL: _amdgpu_ps_main:
 ; CHECK:       ; %bb.0: ; %.entry
 ; CHECK-NEXT:    s_endpgm
@@ -15,9 +15,3 @@ define amdgpu_ps void @_amdgpu_ps_main() #0 {
 .exit:
   ret void
 }
-
-declare void @llvm.amdgcn.wqm.demote(i1)
-
-declare i64 @llvm.amdgcn.ballot.i64(i1)
-
-attributes #0 = { "amdgpu-conditional-discard-transformations" "amdgpu-transform-discard-to-demote" }



More information about the llvm-commits mailing list