[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