No expectations for review at this stage unless you are super keen.
This is a proof of concept patch to show how SVE can be used to code generate fixed length vectors. It represents the minimum amount of SVE instructions (ld1, st1, uzp, uunpklo) required to get most workloads to run.
The general idea is to make all fixed length vector types that fit within a user specified size legal and custom lower all fixed length vector operations to scalable vector operations that use a suitably created predicate. After legalisation there should be no vector operations that operate on fixed length vectors beyond insert/extract_subvector and various extends and truncate. The reason for special case these operations is to maximum our ability for DAG combine to remove them. Those still around at isel get custom selected within ISelDagToDag.
If we're going to use this approach, we probably want to custom legalize TRUNCATE and ANY_EXTEND, and leave only the INSERT_SUBVECTOR/EXTRACT_SUBVECTOR operations to be handled in Select().