@@ -970,42 +970,13 @@ RISCVTTIImpl::getMinMaxReductionCost(Intrinsic::ID IID, VectorType *Ty,
970
970
}
971
971
972
972
// IR Reduction is composed by two vmv and one rvv reduction instruction.
973
- unsigned SplitOp;
974
- SmallVector<unsigned , 3 > Opcodes;
975
- switch (IID) {
976
- default :
977
- llvm_unreachable (" Unsupported intrinsic" );
978
- case Intrinsic::smax:
979
- SplitOp = RISCV::VMAX_VV;
980
- Opcodes = {RISCV::VMV_S_X, RISCV::VREDMAX_VS, RISCV::VMV_X_S};
981
- break ;
982
- case Intrinsic::smin:
983
- SplitOp = RISCV::VMIN_VV;
984
- Opcodes = {RISCV::VMV_S_X, RISCV::VREDMIN_VS, RISCV::VMV_X_S};
985
- break ;
986
- case Intrinsic::umax:
987
- SplitOp = RISCV::VMAXU_VV;
988
- Opcodes = {RISCV::VMV_S_X, RISCV::VREDMAXU_VS, RISCV::VMV_X_S};
989
- break ;
990
- case Intrinsic::umin:
991
- SplitOp = RISCV::VMINU_VV;
992
- Opcodes = {RISCV::VMV_S_X, RISCV::VREDMINU_VS, RISCV::VMV_X_S};
993
- break ;
994
- case Intrinsic::maxnum:
995
- SplitOp = RISCV::VFMAX_VV;
996
- Opcodes = {RISCV::VFMV_S_F, RISCV::VFREDMAX_VS, RISCV::VFMV_F_S};
997
- break ;
998
- case Intrinsic::minnum:
999
- SplitOp = RISCV::VFMIN_VV;
1000
- Opcodes = {RISCV::VFMV_S_F, RISCV::VFREDMIN_VS, RISCV::VFMV_F_S};
1001
- break ;
1002
- }
1003
- // Add a cost for data larger than LMUL8
1004
- InstructionCost SplitCost =
1005
- (LT.first > 1 ) ? (LT.first - 1 ) *
1006
- getRISCVInstructionCost (SplitOp, LT.second , CostKind)
1007
- : 0 ;
1008
- return SplitCost + getRISCVInstructionCost (Opcodes, LT.second , CostKind);
973
+ InstructionCost BaseCost = 2 ;
974
+
975
+ if (CostKind == TTI::TCK_CodeSize)
976
+ return (LT.first - 1 ) + BaseCost;
977
+
978
+ unsigned VL = getEstimatedVLFor (Ty);
979
+ return (LT.first - 1 ) + BaseCost + Log2_32_Ceil (VL);
1009
980
}
1010
981
1011
982
InstructionCost
0 commit comments