This does three things:
- Adds G_REV16, G_REV32, and G_REV64. These are equivalent to AArch64rev16, AArch64rev32, and AArch64rev64 respectively.
- Adds support for producing G_REV64 in the postlegalizer combiner. We don't legalize any of the shuffles which could give us a G_REV32 or G_REV16 yet. Since the function for detecting the rev mask is lifted from AArch64ISelLowering, it should work for G_REV32 and G_REV16 when we get there.
- Adds a selection test for a good portion of the patterns imported for the rev family. The only ones which are not tested are the ones with bitconvert.
This also does a little cleanup, and adds a struct for shuffle vector pseudo matchdata. This lets us still use applyShuffleVectorPseudo rather than adding a new function. It should also make it a bit easier to port some of the other masks from AArch64ISelLowering. (e.g. isZIP_v_undef_Mask and friends)
We don't need to pass Dst by ref here do we?