[llvm] [AArch64][SVE2] Generate urshr rounding shift rights (PR #78374)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 30 11:19:26 PST 2024
================
@@ -20808,6 +20867,52 @@ static SDValue performUnpackCombine(SDNode *N, SelectionDAG &DAG,
return SDValue();
}
+static bool isHalvingTruncateAndConcatOfLegalIntScalableType(SDNode *N) {
+ if (N->getOpcode() != AArch64ISD::UZP1)
+ return false;
+ SDValue Op0 = N->getOperand(0);
+ EVT SrcVT = Op0->getValueType(0);
+ EVT DstVT = N->getValueType(0);
+ return (SrcVT == MVT::nxv8i16 && DstVT == MVT::nxv16i8) ||
+ (SrcVT == MVT::nxv4i32 && DstVT == MVT::nxv8i16) ||
+ (SrcVT == MVT::nxv2i64 && DstVT == MVT::nxv4i32);
+}
+
+// Try to combine rounding shifts where the operands come from an extend, and
+// the result is truncated and combined into one vector.
+// uzp1(rshrnb(uunpklo(X),C), rshrnb(uunpkhi(X), C)) -> urshr(X, C)
+static SDValue tryCombineExtendRShTrunc(SDNode *N, SelectionDAG &DAG) {
+ assert(N->getOpcode() == AArch64ISD::UZP1 && "Only UZP1 expected.");
+ SDValue Op0 = N->getOperand(0);
+ SDValue Op1 = N->getOperand(1);
+ EVT VT = Op0->getValueType(0);
----------------
davemgreen wrote:
VT looks unused.
https://github.com/llvm/llvm-project/pull/78374
More information about the llvm-commits
mailing list