@@ -550,6 +550,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
550
550
551
551
setOperationAction (ISD::VECREDUCE_FADD, VT, Custom);
552
552
setOperationAction (ISD::VECREDUCE_SEQ_FADD, VT, Custom);
553
+ setOperationAction (ISD::VECREDUCE_FMIN, VT, Custom);
554
+ setOperationAction (ISD::VECREDUCE_FMAX, VT, Custom);
553
555
setOperationAction (ISD::FCOPYSIGN, VT, Legal);
554
556
555
557
setOperationAction (ISD::MLOAD, VT, Custom);
@@ -746,6 +748,8 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
746
748
747
749
setOperationAction (ISD::VECREDUCE_FADD, VT, Custom);
748
750
setOperationAction (ISD::VECREDUCE_SEQ_FADD, VT, Custom);
751
+ setOperationAction (ISD::VECREDUCE_FMIN, VT, Custom);
752
+ setOperationAction (ISD::VECREDUCE_FMAX, VT, Custom);
749
753
}
750
754
751
755
// Custom-legalize bitcasts from fixed-length vectors to scalar types.
@@ -2226,6 +2230,8 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
2226
2230
return lowerVECREDUCE (Op, DAG);
2227
2231
case ISD::VECREDUCE_FADD:
2228
2232
case ISD::VECREDUCE_SEQ_FADD:
2233
+ case ISD::VECREDUCE_FMIN:
2234
+ case ISD::VECREDUCE_FMAX:
2229
2235
return lowerFPVECREDUCE (Op, DAG);
2230
2236
case ISD::INSERT_SUBVECTOR:
2231
2237
return lowerINSERT_SUBVECTOR (Op, DAG);
@@ -3476,7 +3482,10 @@ SDValue RISCVTargetLowering::lowerVECREDUCE(SDValue Op,
3476
3482
static std::tuple<unsigned , SDValue, SDValue>
3477
3483
getRVVFPReductionOpAndOperands (SDValue Op, SelectionDAG &DAG, EVT EltVT) {
3478
3484
SDLoc DL (Op);
3479
- switch (Op.getOpcode ()) {
3485
+ auto Flags = Op->getFlags ();
3486
+ unsigned Opcode = Op.getOpcode ();
3487
+ unsigned BaseOpcode = ISD::getVecReduceBaseOpcode (Opcode);
3488
+ switch (Opcode) {
3480
3489
default :
3481
3490
llvm_unreachable (" Unhandled reduction" );
3482
3491
case ISD::VECREDUCE_FADD:
@@ -3485,6 +3494,12 @@ getRVVFPReductionOpAndOperands(SDValue Op, SelectionDAG &DAG, EVT EltVT) {
3485
3494
case ISD::VECREDUCE_SEQ_FADD:
3486
3495
return std::make_tuple (RISCVISD::VECREDUCE_SEQ_FADD_VL, Op.getOperand (1 ),
3487
3496
Op.getOperand (0 ));
3497
+ case ISD::VECREDUCE_FMIN:
3498
+ return std::make_tuple (RISCVISD::VECREDUCE_FMIN_VL, Op.getOperand (0 ),
3499
+ DAG.getNeutralElement (BaseOpcode, DL, EltVT, Flags));
3500
+ case ISD::VECREDUCE_FMAX:
3501
+ return std::make_tuple (RISCVISD::VECREDUCE_FMAX_VL, Op.getOperand (0 ),
3502
+ DAG.getNeutralElement (BaseOpcode, DL, EltVT, Flags));
3488
3503
}
3489
3504
}
3490
3505
@@ -7762,6 +7777,8 @@ const char *RISCVTargetLowering::getTargetNodeName(unsigned Opcode) const {
7762
7777
NODE_NAME_CASE (VECREDUCE_XOR_VL)
7763
7778
NODE_NAME_CASE (VECREDUCE_FADD_VL)
7764
7779
NODE_NAME_CASE (VECREDUCE_SEQ_FADD_VL)
7780
+ NODE_NAME_CASE (VECREDUCE_FMIN_VL)
7781
+ NODE_NAME_CASE (VECREDUCE_FMAX_VL)
7765
7782
NODE_NAME_CASE (ADD_VL)
7766
7783
NODE_NAME_CASE (AND_VL)
7767
7784
NODE_NAME_CASE (MUL_VL)
0 commit comments