On targets where we don't have scalar pack insts, it's more efficient to first widen the SHUFFLE_VECTOR before lowering. It avoids a bunch of useless bit-manipulation instructions.
This also:
- Fixes a small bug in the LegalizationArtefactCombiner that was exposed by this patch (a few tests were crashing because of it)
- Adds logic to the Legalizer so it can handle widening G_SHUFFLE_VECTORS
This is redundant with the assert in operator->