No expectations for review at this stage unless you are super keen.
This extends the proof of concept introduced by https://reviews.llvm.org/D71760 to show the work required to custom lower the main fixed length vector operations. The general scheme being:
<n x ty> op (<n x ty> op1, <n x ty> op2...
becomes
pg = create_predicate_for(<n x ty>) new_op1 = convertToSVE(op1) new_op2 = convertToSVE(op2) ... return convertFromSVE(sve_op(pg, new_op1, new_op2...
To keep the patch small I've reused the existing intrinsic isel rules. This provides a route to reasonable performance whilst allowing us to start work on immediate packing, condition code handling and better utilisation of reversed instructions and movprfx. The ultimately goal is that the first patch ensures everything can run, whilst this and subsequent patches improve performance.
clang-format: please reformat the code