This patch extends the vector type-conversion and legalization capabilities of
scalable vector types.
Firstly, vscale x 1 types now behave more like the corresponding `vscale x
2+` types. This enables the integer promotion legalization of extended scalable
types, such as the promotion of <vscale x 1 x i5> to <vscale x 1 x i8>.
These vscale x 1 types are also now better handled by
getVectorTypeBreakdown, where what looks like older handling for 1-element
fixed-length vector types was spuriously updated to include scalable types.
Widening of scalable types is now better supported, by using INSERT_SUBVECTOR
to insert the smaller scalable vector "value" type into the wider scalable
vector "part" type. This allows AArch64 to pass and return vscale x 1 types
by value by widening.
There are still cases where we are unable to legalize vscale x 1 types, such
as where expansion would require splitting the vector in two.
Should this also return SDValue() if PartNumElts.isScalable() != ValueNumElts.isScalable() ?