[llvm] [GlobalISel] Import extract/insert subvector (PR #110287)
Quentin Colombet via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 28 12:07:19 PDT 2024
================
@@ -2588,6 +2588,20 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
getOrCreateVReg(*CI.getOperand(0)),
getOrCreateVReg(*CI.getOperand(1)));
return true;
+ case Intrinsic::vector_extract: {
+ ConstantInt *Index = cast<ConstantInt>(CI.getOperand(1));
+ MIRBuilder.buildExtractSubvector(getOrCreateVReg(CI),
+ getOrCreateVReg(*CI.getOperand(0)),
+ Index->getZExtValue());
+ return true;
+ }
+ case Intrinsic::vector_insert: {
----------------
qcolombet wrote:
What would it take to reuse the implementation of `IRTranslator::translateInsertElement` directly? (And same question for extract)
Reimplementing things here will lead us to having to fix the same issues we had in the past.
E.g.,
```
// If it is a <1 x Ty> vector, use the scalar as it is
// not a legal vector type in LLT.
if (auto *FVT = dyn_cast<FixedVectorType>(U.getType());
FVT && FVT->getNumElements() == 1)
return translateCopy(U, *U.getOperand(1), MIRBuilder);
```
https://github.com/llvm/llvm-project/pull/110287
More information about the llvm-commits
mailing list