[llvm] [LegalizeTypes] Handle non byte-sized elt types when splitting INSERT/EXTRACT_VECTOR_ELT (PR #93357)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 12 12:03:32 PDT 2024
================
@@ -3443,11 +3438,13 @@ SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(SDNode *N) {
// Make the vector elements byte-addressable if they aren't already.
SDLoc dl(N);
EVT EltVT = VecVT.getVectorElementType();
- if (VecVT.getScalarSizeInBits() < 8) {
- EltVT = MVT::i8;
- VecVT = EVT::getVectorVT(*DAG.getContext(), EltVT,
- VecVT.getVectorElementCount());
+ if (!EltVT.isByteSized()) {
+ EltVT = EltVT.changeTypeToInteger().getRoundIntegerType(*DAG.getContext());
+ VecVT = VecVT.changeElementType(EltVT);
Vec = DAG.getNode(ISD::ANY_EXTEND, dl, VecVT, Vec);
+ SDValue NewExtract =
+ DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, EltVT, Vec, Idx);
+ return DAG.getZExtOrTrunc(NewExtract, dl, N->getValueType(0));
----------------
arsenm wrote:
Why isn't this any ext or trunc?
https://github.com/llvm/llvm-project/pull/93357
More information about the llvm-commits
mailing list