Skip to content

Commit 9642ded

Browse files
author
Cameron McInally
committed
[SVE] Lower fixed length VECREDUCE_AND operation
Differential Revision: https://reviews.llvm.org/D88707
1 parent 5ba084c commit 9642ded

File tree

2 files changed

+388
-2
lines changed

2 files changed

+388
-2
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,6 +1114,13 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
11141114
setOperationAction(ISD::UMAX, MVT::v2i64, Custom);
11151115
setOperationAction(ISD::UMIN, MVT::v1i64, Custom);
11161116
setOperationAction(ISD::UMIN, MVT::v2i64, Custom);
1117+
setOperationAction(ISD::VECREDUCE_AND, MVT::v8i8, Custom);
1118+
setOperationAction(ISD::VECREDUCE_AND, MVT::v16i8, Custom);
1119+
setOperationAction(ISD::VECREDUCE_AND, MVT::v4i16, Custom);
1120+
setOperationAction(ISD::VECREDUCE_AND, MVT::v8i16, Custom);
1121+
setOperationAction(ISD::VECREDUCE_AND, MVT::v2i32, Custom);
1122+
setOperationAction(ISD::VECREDUCE_AND, MVT::v4i32, Custom);
1123+
setOperationAction(ISD::VECREDUCE_AND, MVT::v2i64, Custom);
11171124
setOperationAction(ISD::VECREDUCE_SMAX, MVT::v2i64, Custom);
11181125
setOperationAction(ISD::VECREDUCE_SMIN, MVT::v2i64, Custom);
11191126
setOperationAction(ISD::VECREDUCE_UMAX, MVT::v2i64, Custom);
@@ -1245,6 +1252,7 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
12451252
setOperationAction(ISD::UMAX, VT, Custom);
12461253
setOperationAction(ISD::UMIN, VT, Custom);
12471254
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1255+
setOperationAction(ISD::VECREDUCE_AND, VT, Custom);
12481256
setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
12491257
setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
12501258
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
@@ -3927,6 +3935,7 @@ SDValue AArch64TargetLowering::LowerOperation(SDValue Op,
39273935
case ISD::STORE:
39283936
return LowerSTORE(Op, DAG);
39293937
case ISD::VECREDUCE_ADD:
3938+
case ISD::VECREDUCE_AND:
39303939
case ISD::VECREDUCE_SMAX:
39313940
case ISD::VECREDUCE_SMIN:
39323941
case ISD::VECREDUCE_UMAX:
@@ -9714,12 +9723,15 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
97149723

97159724
// Try to lower fixed length reductions to SVE.
97169725
EVT SrcVT = Src.getValueType();
9717-
bool OverrideNEON = Op.getOpcode() != ISD::VECREDUCE_ADD &&
9718-
SrcVT.getVectorElementType() == MVT::i64;
9726+
bool OverrideNEON = Op.getOpcode() == ISD::VECREDUCE_AND ||
9727+
(Op.getOpcode() != ISD::VECREDUCE_ADD &&
9728+
SrcVT.getVectorElementType() == MVT::i64);
97199729
if (useSVEForFixedLengthVectorVT(SrcVT, OverrideNEON)) {
97209730
switch (Op.getOpcode()) {
97219731
case ISD::VECREDUCE_ADD:
97229732
return LowerFixedLengthReductionToSVE(AArch64ISD::UADDV_PRED, Op, DAG);
9733+
case ISD::VECREDUCE_AND:
9734+
return LowerFixedLengthReductionToSVE(AArch64ISD::ANDV_PRED, Op, DAG);
97239735
case ISD::VECREDUCE_SMAX:
97249736
return LowerFixedLengthReductionToSVE(AArch64ISD::SMAXV_PRED, Op, DAG);
97259737
case ISD::VECREDUCE_SMIN:

0 commit comments

Comments
 (0)