This adds custom lowering for truncating stores when operating on
fixed length vectors in SVE.
Currently truncating stores are not used in certain cases where
the size of the vector is larger than the target vector width.
It also includes an AArch64-specific DAG combine to prevent a
regression where truncates would be merged in to stores before
being cancelled out with a prior extend; this DAG combine
merges the extends and truncating stores to obtain a normal store.
There's a potential infinite loop here: if a truncstore is "custom", and expands to trunc+store, combining never ends. You can avoid this by checking for LegalOperations.