[llvm] AMDGPU: Mark SCC def dead in kill/demote lowering (PR #227024)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 28 08:56:51 PDT 2026


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/227024

Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>

>From 9fc9f0b887287ce0d56ad77bfd4ac22da52e5771 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Thu, 24 Sep 2026 23:25:05 +0200
Subject: [PATCH] AMDGPU: Mark SCC def dead in kill/demote lowering

Co-Authored-By: Claude Opus 5 <noreply at anthropic.com>
---
 llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp | 18 ++++++++++++------
 llvm/test/CodeGen/AMDGPU/wqm.mir           |  2 +-
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
index 3c6e11acf89f9..cfd10e9a4d981 100644
--- a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
+++ b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
@@ -934,7 +934,8 @@ MachineInstr *SIWholeQuadMode::lowerKillF32(MachineInstr &MI) {
   MachineInstr *ExecMaskMI =
       BuildMI(MBB, MI, DL, TII->get(LMC.AndN2Opc), LMC.ExecReg)
           .addReg(LMC.ExecReg)
-          .addReg(LMC.VccReg);
+          .addReg(LMC.VccReg)
+          .setOperandDead(3);
 
   assert(MBB.succ_size() == 1);
 
@@ -994,7 +995,8 @@ MachineInstr *SIWholeQuadMode::lowerKillI1(MachineInstr &MI, bool IsWQM) {
       TmpReg = MRI->createVirtualRegister(TRI->getBoolRC());
       ComputeKilledMaskMI = BuildMI(MBB, MI, DL, TII->get(LMC.AndN2Opc), TmpReg)
                                 .addReg(LMC.ExecReg)
-                                .add(Op);
+                                .add(Op)
+                                .setOperandDead(3);
       MaskUpdateMI = BuildMI(MBB, MI, DL, TII->get(LMC.AndN2Opc), LiveMaskReg)
                          .addReg(LiveMaskReg)
                          .addReg(TmpReg);
@@ -1020,10 +1022,12 @@ MachineInstr *SIWholeQuadMode::lowerKillI1(MachineInstr &MI, bool IsWQM) {
     // Demote - deactivate quads with only helper lanes
     LiveMaskWQM = MRI->createVirtualRegister(TRI->getBoolRC());
     WQMMaskMI = BuildMI(MBB, MI, DL, TII->get(LMC.WQMOpc), LiveMaskWQM)
-                    .addReg(LiveMaskReg);
+                    .addReg(LiveMaskReg)
+                    .setOperandDead(2);
     NewTerm = BuildMI(MBB, MI, DL, TII->get(LMC.AndOpc), LMC.ExecReg)
                   .addReg(LMC.ExecReg)
-                  .addReg(LiveMaskWQM);
+                  .addReg(LiveMaskWQM)
+                  .setOperandDead(3);
   } else {
     // Kill - deactivate lanes no longer in live mask
     if (Op.isImm()) {
@@ -1032,12 +1036,14 @@ MachineInstr *SIWholeQuadMode::lowerKillI1(MachineInstr &MI, bool IsWQM) {
     } else if (!IsWQM) {
       NewTerm = BuildMI(MBB, &MI, DL, TII->get(LMC.AndOpc), LMC.ExecReg)
                     .addReg(LMC.ExecReg)
-                    .addReg(LiveMaskReg);
+                    .addReg(LiveMaskReg)
+                    .setOperandDead(3);
     } else {
       unsigned Opcode = KillVal ? LMC.AndN2Opc : LMC.AndOpc;
       NewTerm = BuildMI(MBB, &MI, DL, TII->get(Opcode), LMC.ExecReg)
                     .addReg(LMC.ExecReg)
-                    .add(Op);
+                    .add(Op)
+                    .setOperandDead(3);
     }
   }
 
diff --git a/llvm/test/CodeGen/AMDGPU/wqm.mir b/llvm/test/CodeGen/AMDGPU/wqm.mir
index 61acddb6b170b..e67cd1a146218 100644
--- a/llvm/test/CodeGen/AMDGPU/wqm.mir
+++ b/llvm/test/CodeGen/AMDGPU/wqm.mir
@@ -635,7 +635,7 @@ body:             |
   ; CHECK-NEXT:   V_CMP_NGT_F32_e32 0, [[COPY1]], implicit-def $vcc, implicit $mode, implicit $exec
   ; CHECK-NEXT:   dead [[COPY:%[0-9]+]]:sreg_64 = S_ANDN2_B64 [[COPY]], $vcc, implicit-def $scc
   ; CHECK-NEXT:   SI_EARLY_TERMINATE_SCC0 implicit $exec, implicit $scc
-  ; CHECK-NEXT:   $exec = S_ANDN2_B64_term $exec, $vcc, implicit-def $scc
+  ; CHECK-NEXT:   $exec = S_ANDN2_B64_term $exec, $vcc, implicit-def dead $scc
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT: bb.1:
   ; CHECK-NEXT:   $exec = S_AND_B64 $exec, [[COPY2]], implicit-def $scc



More information about the llvm-commits mailing list