This is the third patch in a collection to support prefixing destructive operations, with the MOVPRFX instruction, to build constructive operations. The previous patch is D73212.
Here we add support for DestructiveBinary and DestructiveBinaryComm DestructiveInstTypes, as well as the lowering code to expand the new Pseudos into the final movprfx+instruction pairs.
This patch comes mostly from D71712, with some modifications to SelectDupZero(...) in AArch64ISelDAGToDAG.cpp. IINM, the SelectDupZero(...) difference works around a separate feature (not upstreamed yet) to make use of SPLAT_VECTOR for zero vectors.