Skip to content

Commit ca48343

Browse files
fixup! [InstCombine][RISCV] Convert VPIntrinsics with splat operands to splats of the scalar operation
Use getFunctionalIntrinsicID
1 parent 6abb0d3 commit ca48343

File tree

1 file changed

+6
-17
lines changed

1 file changed

+6
-17
lines changed

llvm/lib/Transforms/Vectorize/VectorCombine.cpp

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -782,29 +782,18 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
782782
std::optional<unsigned> FunctionalOpcode =
783783
VPI.getFunctionalOpcode();
784784
bool ScalarIsIntr = false;
785-
Intrinsic::ID ScalarIntrID;
785+
std::optional<Intrinsic::ID> ScalarIntrID;
786786
if (!FunctionalOpcode) {
787-
// Explicitly handle supported instructions (i.e. those that return
788-
// isVPBinOp above, that do not have functional nor constrained opcodes due
789-
// their intrinsic definitions.
790-
DenseMap<Intrinsic::ID, Intrinsic::ID> VPIntrToIntr(
791-
{{Intrinsic::vp_smax, Intrinsic::smax},
792-
{Intrinsic::vp_smin, Intrinsic::smin},
793-
{Intrinsic::vp_umax, Intrinsic::umax},
794-
{Intrinsic::vp_umin, Intrinsic::umin},
795-
{Intrinsic::vp_copysign, Intrinsic::copysign},
796-
{Intrinsic::vp_minnum, Intrinsic::minnum},
797-
{Intrinsic::vp_maxnum, Intrinsic::maxnum}});
787+
ScalarIntrID = VPI.getFunctionalIntrinsicID();
788+
if (!ScalarIntrID)
789+
return false;
798790
ScalarIsIntr = true;
799-
assert(VPIntrToIntr.contains(IntrID) &&
800-
"Unable to determine scalar opcode");
801-
ScalarIntrID = VPIntrToIntr[IntrID];
802791
}
803792

804793
// Calculate cost of scalarizing
805794
InstructionCost ScalarOpCost = 0;
806795
if (ScalarIsIntr) {
807-
IntrinsicCostAttributes Attrs(ScalarIntrID, VecTy->getScalarType(), Args);
796+
IntrinsicCostAttributes Attrs(*ScalarIntrID, VecTy->getScalarType(), Args);
808797
ScalarOpCost = TTI.getIntrinsicInstrCost(Attrs, CostKind);
809798
} else {
810799
ScalarOpCost =
@@ -840,7 +829,7 @@ bool VectorCombine::scalarizeVPIntrinsic(Instruction &I) {
840829
Value *ScalarOp1 = getSplatValue(Op1);
841830
Value *ScalarVal =
842831
ScalarIsIntr
843-
? Builder.CreateIntrinsic(VecTy->getScalarType(), ScalarIntrID,
832+
? Builder.CreateIntrinsic(VecTy->getScalarType(), *ScalarIntrID,
844833
{ScalarOp0, ScalarOp1})
845834
: Builder.CreateBinOp((Instruction::BinaryOps)(*FunctionalOpcode),
846835
ScalarOp0, ScalarOp1);

0 commit comments

Comments
 (0)