diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -2059,6 +2059,15 @@ { ISD::BITCAST, MVT::nxv2i16, MVT::nxv2f16, 0 }, { ISD::BITCAST, MVT::nxv4i16, MVT::nxv4f16, 0 }, { ISD::BITCAST, MVT::nxv2i32, MVT::nxv2f32, 0 }, + + // Add high cost for extending to illegal -too widen- scalable vectors. + { ISD::ZERO_EXTEND, MVT::nxv16i16, MVT::nxv16i8, 16}, + { ISD::ZERO_EXTEND, MVT::nxv16i32, MVT::nxv16i8, 32}, + { ISD::ZERO_EXTEND, MVT::nxv16i64, MVT::nxv16i8, 64}, + + { ISD::SIGN_EXTEND, MVT::nxv16i16, MVT::nxv16i8, 16}, + { ISD::SIGN_EXTEND, MVT::nxv16i32, MVT::nxv16i8, 32}, + { ISD::SIGN_EXTEND, MVT::nxv16i64, MVT::nxv16i8, 64}, }; if (const auto *Entry = ConvertCostTableLookup(ConversionTbl, ISD,