[llvm] [AMDGPU] Handle phys regs in flat_scratch_base_hi operand check (PR #170395)

Stanislav Mekhanoshin via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 2 16:27:40 PST 2025


https://github.com/rampitec created https://github.com/llvm/llvm-project/pull/170395

None

>From a9dcbf8903e503ebb1ecd338c78e7003f4596f45 Mon Sep 17 00:00:00 2001
From: Stanislav Mekhanoshin <Stanislav.Mekhanoshin at amd.com>
Date: Tue, 2 Dec 2025 16:23:47 -0800
Subject: [PATCH] [AMDGPU] Handle phys regs in flat_scratch_base_hi operand
 check

---
 llvm/lib/Target/AMDGPU/SIInstrInfo.cpp              |  3 ++-
 .../CodeGen/AMDGPU/hazard-gfx1250-flat-scr-hi.mir   | 13 +++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
index 50860a9a8e4c1..088533306c79b 100644
--- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp
@@ -6260,7 +6260,8 @@ bool SIInstrInfo::isLegalRegOperand(const MachineInstr &MI, unsigned OpIdx,
   if (ST.hasFlatScratchHiInB64InstHazard() &&
       MO.getReg() == AMDGPU::SRC_FLAT_SCRATCH_BASE_HI && isSALU(MI)) {
     if (const MachineOperand *Dst = getNamedOperand(MI, AMDGPU::OpName::sdst)) {
-      if (AMDGPU::getRegBitWidth(*MRI.getRegClass(Dst->getReg())) == 64)
+      if (AMDGPU::getRegBitWidth(*RI.getRegClassForReg(MRI, Dst->getReg())) ==
+          64)
         return false;
     }
     if (Opc == AMDGPU::S_BITCMP0_B64 || Opc == AMDGPU::S_BITCMP1_B64)
diff --git a/llvm/test/CodeGen/AMDGPU/hazard-gfx1250-flat-scr-hi.mir b/llvm/test/CodeGen/AMDGPU/hazard-gfx1250-flat-scr-hi.mir
index e661b6859e09d..e3b28c5518695 100644
--- a/llvm/test/CodeGen/AMDGPU/hazard-gfx1250-flat-scr-hi.mir
+++ b/llvm/test/CodeGen/AMDGPU/hazard-gfx1250-flat-scr-hi.mir
@@ -143,3 +143,16 @@ body:             |
     %0:sreg_32 = COPY $src_flat_scratch_base_hi
     %1:sreg_64 = S_BITSET1_B64 %0, undef %1:sreg_64, implicit-def $scc
 ...
+
+---
+name:            s_ashr_i64_phys_dst
+tracksRegLiveness: true
+body:             |
+  bb.0:
+
+    ; GCN-LABEL: name: s_ashr_i64_phys_dst
+    ; GCN: [[COPY:%[0-9]+]]:sreg_32 = COPY $src_flat_scratch_base_hi
+    ; GCN-NEXT: $sgpr0_sgpr1 = S_ASHR_I64 undef %1:sreg_64, [[COPY]], implicit-def $scc
+    %0:sreg_32 = COPY $src_flat_scratch_base_hi
+    $sgpr0_sgpr1 = S_ASHR_I64 undef %1:sreg_64, %0, implicit-def $scc
+...



More information about the llvm-commits mailing list