Changes in this patch:
- When lowering floating-point masked gathers, cast the result of the gather back to the original type with reinterpret_cast before returning.
- Added patterns for reinterpret_casts from integer to floating point, and concat_vector patterns for bfloat16.
- Tests for various legalisation scenarios with floating point types.
Is it worth having a helper function here, something like "isVectorUnpack(bool Signed)"? The reason I mention this is that there are two other places in the codebase where we also check if an opcode is "AArch64ISD::UUNPKLO || IdxOp == AArch64ISD::UUNPKHI".