Skip to content

Commit 59e5590

Browse files
authored
Revert "[RISCV] Refine cost on Min/Max reduction" (#80340)
Reverts #79402. Crash reported. On closer inspection, this patch does not handle Intrinsic::maximum and Intrinsic::minimum.
1 parent 8ad14b6 commit 59e5590

File tree

5 files changed

+237
-266
lines changed

5 files changed

+237
-266
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -970,42 +970,13 @@ RISCVTTIImpl::getMinMaxReductionCost(Intrinsic::ID IID, VectorType *Ty,
970970
}
971971

972972
// 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);
1009980
}
1010981

1011982
InstructionCost

0 commit comments

Comments
 (0)