[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:35 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);
----------------
petar-avramovic wrote:

MRI.getRegBank(Src) used at multiple places, could make local var

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


More information about the llvm-commits mailing list