================
@@ -478,6 +486,65 @@ bool AMDGPURegBankCombinerImpl::applyD16Load(
   return true;
 }
 
+// Eliminate VCC->SGPR->VGPR register bounce for uniform boolean extensions.
+// Match: COPY (G_SELECT (G_AND (G_AMDGPU_COPY_SCC_VCC %vcc), 1), {-1|1}, 0)
+// Replace with: G_SELECT %vcc, {-1|1}, 0
+bool AMDGPURegBankCombinerImpl::matchCopySccVcc(
+    MachineInstr &MI, CopySccVccMatchInfo &MatchInfo) const {
+  assert(MI.getOpcode() == AMDGPU::COPY);
+
+  Register VgprDst = MI.getOperand(0).getReg();
+  Register SgprSrc = MI.getOperand(1).getReg();
+
+  if (!VgprDst.isVirtual() || !SgprSrc.isVirtual())
+    return false;
+
+  if (!isVgprRegBank(VgprDst))
+    return false;
+
+  // Match: G_SELECT (G_AND (G_AMDGPU_COPY_SCC_VCC %vcc), 1), TrueReg, 0
+  MachineInstr *CopySccVcc;
+  Register TrueReg;
+  if (!mi_match(SgprSrc, MRI,
+                m_GISelect(m_GAnd(m_MInstr(CopySccVcc), m_SpecificICst(1)),
----------------
petar-avramovic wrote:

think that there is no need to try and match constants in select, just match 
the m_Reg. It might cover more cases

https://github.com/llvm/llvm-project/pull/179352
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to