@@ -1223,6 +1223,8 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1223
1223
setOperationAction(ISD::UMAX, VT, Custom);
1224
1224
setOperationAction(ISD::UMIN, VT, Custom);
1225
1225
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1226
+ setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1227
+ setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1226
1228
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
1227
1229
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
1228
1230
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
@@ -9662,8 +9664,8 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
9662
9664
9663
9665
// Try to lower fixed length reductions to SVE.
9664
9666
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 ;
9667
9669
if (useSVEForFixedLengthVectorVT(SrcVT, OverrideNEON)) {
9668
9670
switch (Op.getOpcode()) {
9669
9671
case ISD::VECREDUCE_ADD:
@@ -9676,6 +9678,10 @@ SDValue AArch64TargetLowering::LowerVECREDUCE(SDValue Op,
9676
9678
return LowerFixedLengthReductionToSVE(AArch64ISD::UMAXV_PRED, Op, DAG);
9677
9679
case ISD::VECREDUCE_UMIN:
9678
9680
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);
9679
9685
default:
9680
9686
llvm_unreachable("Unhandled fixed length reduction");
9681
9687
}
0 commit comments