[llvm] [AArch64] recognise trn1/trn2 with flipped operands (PR #169858)
Philip Ginsbach-Chen via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 3 11:34:07 PST 2025
================
@@ -6699,33 +6699,52 @@ inline bool isUZPMask(ArrayRef<int> M, unsigned NumElts,
}
/// Return true for trn1 or trn2 masks of the form:
-/// <0, 8, 2, 10, 4, 12, 6, 14> or
-/// <1, 9, 3, 11, 5, 13, 7, 15>
+/// <0, 8, 2, 10, 4, 12, 6, 14> (WhichResultOut = 0, OperandOrderOut = 0) or
+/// <1, 9, 3, 11, 5, 13, 7, 15> (WhichResultOut = 1, OperandOrderOut = 0) or
+/// <8, 0, 10, 2, 12, 4, 14, 6> (WhichResultOut = 0, OperandOrderOut = 1) or
+/// <9, 1, 11, 3, 13, 5, 15, 7> (WhichResultOut = 1, OperandOrderOut = 1) or
inline bool isTRNMask(ArrayRef<int> M, unsigned NumElts,
- unsigned &WhichResultOut) {
+ unsigned &WhichResultOut, unsigned &OperandOrderOut) {
if (NumElts % 2 != 0)
return false;
- // Check the first non-undef element for trn1 vs trn2.
- unsigned WhichResult = 2;
+
+ // "Variant" refers to the distinction bwetween trn1 and trn2, while
+ // "Order" refers to sequence of input registers (matching vs flipped).
----------------
ginsbach wrote:
I have updated the comment in commit 5.
https://github.com/llvm/llvm-project/pull/169858
More information about the llvm-commits
mailing list