This patch adds legalisation of extensions where the operand
of the extend is a legal scalable type but the result is not.
EXTRACT_SUBVECTOR is used to split the result, before
being replaced by target-specific [S|U]UNPK[HI|LO] operations.
For example:
zext <vscale x 16 x i8> %a to <vscale x 16 x i16>
should emit:
uunpklo z2.h, z0.b uunpkhi z1.h, z0.b
Can you restrict this to specifically the types you're interested in handling? It looks like you only implemented handling for the following types: nxv8i8, nxv4i16, nxv2i32.