@@ -1229,6 +1229,8 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1229
1229
setOperationAction(ISD::UMAX, VT, Custom);
1230
1230
setOperationAction(ISD::UMIN, VT, Custom);
1231
1231
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1232
+ setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1233
+ setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1232
1234
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
1233
1235
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
1234
1236
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
@@ -9852,8 +9854,8 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
9852
9854
9853
9855
// Try to lower fixed length reductions to SVE.
9854
9856
EVT SrcVT = Src.getValueType();
9855
- bool OverrideNEON = SrcVT.getVectorElementType () == MVT::i64 &&
9856
- Op.getOpcode () != ISD::VECREDUCE_ADD ;
9857
+ bool OverrideNEON = Op.getOpcode () != ISD::VECREDUCE_ADD &&
9858
+ SrcVT.getVectorElementType () == MVT::i64 ;
9857
9859
if (useSVEForFixedLengthVectorVT(SrcVT, OverrideNEON)) {
9858
9860
switch (Op.getOpcode()) {
9859
9861
case ISD::VECREDUCE_ADD:
@@ -9866,6 +9868,10 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
9866
9868
return LowerFixedLengthReductionToSVE(AArch64ISD::UMAXV_PRED, Op, DAG);
9867
9869
case ISD::VECREDUCE_UMIN:
9868
9870
return LowerFixedLengthReductionToSVE(AArch64ISD::UMINV_PRED, Op, DAG);
9871
+ case ISD::VECREDUCE_FMAX:
9872
+ return LowerFixedLengthReductionToSVE(AArch64ISD::FMAXNMV_PRED, Op, DAG);
9873
+ case ISD::VECREDUCE_FMIN:
9874
+ return LowerFixedLengthReductionToSVE(AArch64ISD::FMINNMV_PRED, Op, DAG);
9869
9875
default:
9870
9876
llvm_unreachable("Unhandled fixed length reduction");
9871
9877
}
0 commit comments