[llvm] [AArch64] Extend usage of `XAR` instruction for fixed-length operations (PR #139460)

David Green via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 3 00:37:09 PDT 2025


================
@@ -4661,12 +4694,28 @@ bool AArch64DAGToDAGISel::trySelectXAR(SDNode *N) {
   }
 
   SDValue Ops[] = {R1, R2, Imm};
-  SDNode *XAR = CurDAG->getMachineNode(AArch64::XAR, DL, MVT::v2i64, Ops);
+  SDNode *XAR = nullptr;
+
+  if (SVT != VT && VT != MVT::v1i64) {
+    if (auto Opc = SelectOpcodeFromVT<SelectTypeKind::Int>(
+            SVT, {AArch64::XAR_ZZZI_B, AArch64::XAR_ZZZI_H, AArch64::XAR_ZZZI_S,
+                  AArch64::XAR_ZZZI_D}))
+      XAR = CurDAG->getMachineNode(Opc, DL, VT, Ops);
+  } else {
+    XAR = CurDAG->getMachineNode(AArch64::XAR, DL, MVT::v2i64, Ops);
+  }
+
+  if (!XAR)
+    return false;
----------------
davemgreen wrote:

I think this should always succeed and could be an assert.

https://github.com/llvm/llvm-project/pull/139460


More information about the llvm-commits mailing list