[llvm] [AArch64] Lower aarch64_neon_saddlv via SADDLV nodes. (PR #103307)
Sam Tebbs via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 22 02:08:41 PDT 2024
================
@@ -6097,20 +6097,24 @@ SDValue AArch64TargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
return DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl, VT, MaskAsInt,
DAG.getVectorIdxConstant(0, dl));
}
+ case Intrinsic::aarch64_neon_saddlv:
case Intrinsic::aarch64_neon_uaddlv: {
EVT OpVT = Op.getOperand(1).getValueType();
EVT ResVT = Op.getValueType();
- if (ResVT == MVT::i32 && (OpVT == MVT::v8i8 || OpVT == MVT::v16i8 ||
- OpVT == MVT::v8i16 || OpVT == MVT::v4i16)) {
- // In order to avoid insert_subvector, used v4i32 than v2i32.
- SDValue UADDLV =
- DAG.getNode(AArch64ISD::UADDLV, dl, MVT::v4i32, Op.getOperand(1));
- SDValue EXTRACT_VEC_ELT =
- DAG.getNode(ISD::EXTRACT_VECTOR_ELT, dl, MVT::i32, UADDLV,
- DAG.getConstant(0, dl, MVT::i64));
- return EXTRACT_VEC_ELT;
- }
- return SDValue();
+ assert(
+ ((ResVT == MVT::i32 && (OpVT == MVT::v8i8 || OpVT == MVT::v16i8 ||
+ OpVT == MVT::v8i16 || OpVT == MVT::v4i16)) ||
+ (ResVT == MVT::i64 && (OpVT == MVT::v4i32 || OpVT == MVT::v2i32))) &&
+ "Unexpected aarch64_neon_u/saddlv type");
+ // In order to avoid insert_subvector, used v4i32 than v2i32.
----------------
SamTebbs33 wrote:
Should this be "use v4i32 rather than v2i32"?
https://github.com/llvm/llvm-project/pull/103307
More information about the llvm-commits
mailing list