Skip to content

Commit 80381c4

Browse files
author
Cameron McInally
committed
[SVE] Lower fixed length VECREDUCE_[FMAX|FMIN] to Scalable
Differential Revision: https://reviews.llvm.org/D88444
1 parent 13f701b commit 80381c4

File tree

2 files changed

+453
-2
lines changed

2 files changed

+453
-2
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,6 +1223,8 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
12231223
setOperationAction(ISD::UMAX, VT, Custom);
12241224
setOperationAction(ISD::UMIN, VT, Custom);
12251225
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1226+
setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1227+
setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
12261228
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
12271229
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
12281230
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
@@ -9662,8 +9664,8 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
96629664

96639665
// Try to lower fixed length reductions to SVE.
96649666
EVT SrcVT = Src.getValueType();
9665-
bool OverrideNEON = SrcVT.getVectorElementType() == MVT::i64 &&
9666-
Op.getOpcode() != ISD::VECREDUCE_ADD;
9667+
bool OverrideNEON = Op.getOpcode() != ISD::VECREDUCE_ADD &&
9668+
SrcVT.getVectorElementType() == MVT::i64;
96679669
if (useSVEForFixedLengthVectorVT(SrcVT, OverrideNEON)) {
96689670
switch (Op.getOpcode()) {
96699671
case ISD::VECREDUCE_ADD:
@@ -9676,6 +9678,10 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
96769678
return LowerFixedLengthReductionToSVE(AArch64ISD::UMAXV_PRED, Op, DAG);
96779679
case ISD::VECREDUCE_UMIN:
96789680
return LowerFixedLengthReductionToSVE(AArch64ISD::UMINV_PRED, Op, DAG);
9681+
case ISD::VECREDUCE_FMAX:
9682+
return LowerFixedLengthReductionToSVE(AArch64ISD::FMAXNMV_PRED, Op, DAG);
9683+
case ISD::VECREDUCE_FMIN:
9684+
return LowerFixedLengthReductionToSVE(AArch64ISD::FMINNMV_PRED, Op, DAG);
96799685
default:
96809686
llvm_unreachable("Unhandled fixed length reduction");
96819687
}

0 commit comments

Comments
 (0)