[llvm] [RISCV][GISel] Support select G_INSERT_VECTOR_ELT (PR #176687)

Jianjian Guan via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 28 23:39:45 PDT 2026


================
@@ -1361,6 +1361,101 @@ bool RISCVLegalizerInfo::legalizeInsertSubvector(MachineInstr &MI,
   return true;
 }
 
+static std::optional<LLT>
+getSmallestVectorTypeForIndex(LLT VecTy, unsigned MaxIdx,
+                              const RISCVSubtarget &Subtarget) {
+  MVT VecVT = getMVTForLLT(VecTy);
+  assert(VecVT.isScalableVector());
+  const unsigned EltSize = VecVT.getScalarSizeInBits();
+  const unsigned VectorBitsMin = Subtarget.getRealMinVLen();
+  const unsigned MinVLMAX = VectorBitsMin / EltSize;
+  MVT SmallerVT;
+  if (MaxIdx < MinVLMAX)
+    SmallerVT = RISCVTargetLowering::getM1VT(VecVT);
+  else if (MaxIdx < MinVLMAX * 2)
+    SmallerVT =
+        RISCVTargetLowering::getM1VT(VecVT).getDoubleNumVectorElementsVT();
+  else if (MaxIdx < MinVLMAX * 4)
+    SmallerVT = RISCVTargetLowering::getM1VT(VecVT)
+                    .getDoubleNumVectorElementsVT()
+                    .getDoubleNumVectorElementsVT();
+  if (!SmallerVT.isValid() || !VecVT.bitsGT(SmallerVT))
+    return std::nullopt;
+  return getLLTForMVT(SmallerVT);
+}
+
+bool RISCVLegalizerInfo::legalizeInsertVectotElt(MachineInstr &MI,
----------------
jacquesguan wrote:

Fixed.

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


More information about the llvm-commits mailing list