[llvm] [AArch64] Avoid selecting XAR for reverse operations. (PR #178706)
Ricardo Jesus via llvm-commits
llvm-commits at lists.llvm.org
Mon Feb 9 05:48:21 PST 2026
================
@@ -20771,6 +20771,97 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
CSel0.getOperand(1), getCondCode(DAG, CC1), CCmp);
}
+// Attempt to use REVs for half-rotations of vectors of i32 and i64.
+// Patterns for i32:
+//
+// (OR (SHL_PRED all-true, X, (splat 16)),
+// (SRL_PRED all-true, X, (splat 16)))
+// =>
+// REVH all-true, X, poison
+//
+// (OR (VSHL X, 16), (VLSHR X, 16))
+// =>
+// NVCAST (REV32 X)
+static SDValue tryCombineToREV(SDNode *N, SelectionDAG &DAG) {
+ assert(N->getOpcode() == ISD::OR && "Expected OR instruction");
+
----------------
rj-jesus wrote:
Thanks, I've added `isBeforeLegalizeOps()` below. Please let me know if you had something else in mind.
https://github.com/llvm/llvm-project/pull/178706
More information about the llvm-commits
mailing list