Patch to match cases where shuffle masks can be reduced to bit shifts. Similar to byte shift shuffle matching from D5699.
For integer vector shuffles where lanes are being moved to the left/right in short groups and zeros are being inserted. Each integer type can be shifted safely using any wider type (so i8 -> i16/i32/i64, i16 -> i32/i64, i32 -> i64).
I have an upcoming patch that will fix the combine-or.ll domain mismatch.
I kept to just providing the immediate versions of the SSE2 logical bit shifts - there may be a case for adding support for AVX2 per-lane shifts but I don't have the hardware to test this.
Theoretically I think in the future this could be generalised (endian fixes) and moved to DAGCombine?
Is this clang-formatted? I would have expected a slightly different layout, but I don't want to quibble with whatever clang-format chooses.