This patch does several things to achieve this:
- All patterns for destructive instructions with psuedos have been moved out of the main instruction multiclass and into the pseudo instruction multiclasses
- The pseudo instruction mutliclasses now contain patterns for both the ISD nodes and the intrinsic nodes.
- The set of pseudo instructions has been expanded in some cases to allow for a 'reverse' intrinsic (e.g. subr) to be reversed (e.g. into a sub), and to allow matching intrinsic nodes that don't have an ISD node equivalent.
As part of this patch missing patterns for the immediate versions of
UQSHL and SQSHL have been added. As well as support for DestructiveBinary
in AArch64ExpandPseudo::expand_DestructiveOp, which allows for expanding
pseudos where the operands cannot be swapped, (e.g. fscale, more will
follow).
Are you sure this is safe? The intrinsics have strict requirement regarding how inactive lanes are handled that I believe these patterns will not honour.