[llvm-branch-commits] [llvm] [AMDGPU][GlobalISel] Add SALU G_SELECT combine for COPY_SCC_VCC input (PR #179352)

Petar Avramovic via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Mar 16 05:33:59 PDT 2026


================
@@ -133,23 +145,116 @@ bool AMDGPURegBankCombinerImpl::isVgprRegBank(Register Reg) const {
   return RBI.getRegBank(Reg, MRI, TRI)->getID() == AMDGPU::VGPRRegBankID;
 }
 
+bool AMDGPURegBankCombinerImpl::isSgprRegBank(Register Reg) const {
+  return RBI.getRegBank(Reg, MRI, TRI)->getID() == AMDGPU::SGPRRegBankID;
+}
+
 Register AMDGPURegBankCombinerImpl::getAsVgpr(Register Reg) const {
   if (isVgprRegBank(Reg))
     return Reg;
 
+  const RegisterBank &VgprRB = RBI.getRegBank(AMDGPU::VGPRRegBankID);
+
+  // Build constants directly in VGPR instead of copying from SGPR.
+  if (auto V = getIConstantVRegValWithLookThrough(Reg, MRI)) {
+    auto VgprCst = B.buildConstant(MRI.getType(Reg), V->Value);
+    MRI.setRegBank(VgprCst.getReg(0), VgprRB);
+    return VgprCst.getReg(0);
+  }
+  if (auto V = getFConstantVRegValWithLookThrough(Reg, MRI)) {
+    if (MRI.getType(Reg).getSizeInBits() >= 32) {
+      auto VgprCst = B.buildFConstant(MRI.getType(Reg), V->Value);
+      MRI.setRegBank(VgprCst.getReg(0), VgprRB);
+      return VgprCst.getReg(0);
+    }
+  }
+
----------------
petar-avramovic wrote:

Does this really make a difference? SIFoldOperands should be dealing with it constant being defined in sgpr or vgpr. 

https://github.com/llvm/llvm-project/pull/179352


More information about the llvm-branch-commits mailing list