[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