[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