[llvm] AMDGPU/GlobalISel: RegBankLegalize rules for G_INSERT_VECTOR_ELT (PR #191296)

Petar Avramovic via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 14 09:15:36 PDT 2026


================
@@ -979,6 +979,109 @@ bool RegBankLegalizeHelper::lowerExtrVecEltTo32(MachineInstr &MI) {
   return true;
 }
 
+bool RegBankLegalizeHelper::lowerInsVecEltToSel(MachineInstr &MI) {
+  // Lower insert vector element to a compare-select chain:
+  //   for i in 0..N-1:
+  //     result[i] = (idx == i) ? elt : srcVec[i]
+  //   dst = merge(result[0..N-1])
+  //
+  // VGPR B64 requires splitting to lo/hi s32 pairs since there is no
+  // v_cndmask_b64. SGPR B64/B32 and VGPR B32 can be handled natively.
+  Register Dst = MI.getOperand(0).getReg();
+  Register Src = MI.getOperand(1).getReg();
+  Register Elt = MI.getOperand(2).getReg();
+  Register Idx = MI.getOperand(3).getReg();
+
+  LLT VecTy = MRI.getType(Src);
+  LLT ScalarTy = VecTy.getScalarType();
+  unsigned NumElts = VecTy.getNumElements();
+  bool IsSGPR = (MRI.getRegBank(Src) == SgprRB);
+  SmallVector<Register, 16> Selects;
+
+  MachineRegisterInfo::VRegAttrs SrcRB_EltTy = {MRI.getRegBank(Src), ScalarTy};
+  MachineRegisterInfo::VRegAttrs CmpTy = IsSGPR ? SgprRB_S32 : VccRB_S1;
----------------
petar-avramovic wrote:

move down, only used in else path

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


More information about the llvm-commits mailing list