Skip to content

Commit 86c5539

Browse files
authored
[IR][RISCV] Remove @llvm.experimental.vp.splat (#171084)
@llvm.experimental.vp.splat was originally added in #98731 in order to prevent VL toggles when optimizing a zero strided load to a scalar load + splat on RISC-V: #101329 However, the need to explicitly set the VL operand has been superseded by RISCVVLOptimizer which can infer this automatically based on the splat's users, and the use of the vp.splat intrinsic was removed in #170543. Now that there are no users of @llvm.experimental.vp.splat internal to LLVM and it's unlikely we will need it in future due to RISCVVLOptimizer, this patch removes the intrinsic. I couldn't find any publicly available out-of-tree users of the intrinsic with a quick search on GitHub.
1 parent 5079260 commit 86c5539

File tree

16 files changed

+14
-1953
lines changed

16 files changed

+14
-1953
lines changed

llvm/docs/LangRef.rst

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -24608,54 +24608,6 @@ Examples:
2460824608
llvm.experimental.vp.splice(<A,B,C,D>, <E,F,G,H>, 1, 2, 3); ==> <B, E, F, poison> index
2460924609
llvm.experimental.vp.splice(<A,B,C,D>, <E,F,G,H>, -2, 3, 2); ==> <B, C, poison, poison> trailing elements
2461024610

24611-
24612-
.. _int_experimental_vp_splat:
24613-
24614-
24615-
'``llvm.experimental.vp.splat``' Intrinsic
24616-
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
24617-
24618-
Syntax:
24619-
"""""""
24620-
This is an overloaded intrinsic.
24621-
24622-
::
24623-
24624-
declare <2 x double> @llvm.experimental.vp.splat.v2f64(double %scalar, <2 x i1> %mask, i32 %evl)
24625-
declare <vscale x 4 x i32> @llvm.experimental.vp.splat.nxv4i32(i32 %scalar, <vscale x 4 x i1> %mask, i32 %evl)
24626-
24627-
Overview:
24628-
"""""""""
24629-
24630-
The '``llvm.experimental.vp.splat.*``' intrinsic is to create a predicated splat
24631-
with specific effective vector length.
24632-
24633-
Arguments:
24634-
""""""""""
24635-
24636-
The result is a vector and it is a splat of the first scalar argument. The
24637-
second argument ``mask`` is a vector mask and has the same number of elements as
24638-
the result. The third argument is the explicit vector length of the operation.
24639-
24640-
Semantics:
24641-
""""""""""
24642-
24643-
This intrinsic splats a vector with ``evl`` elements of a scalar argument.
24644-
The lanes in the result vector disabled by ``mask`` are ``poison``. The
24645-
elements past ``evl`` are poison.
24646-
24647-
Examples:
24648-
"""""""""
24649-
24650-
.. code-block:: llvm
24651-
24652-
%r = call <4 x float> @llvm.vp.splat.v4f32(float %a, <4 x i1> %mask, i32 %evl)
24653-
;; For all lanes below %evl, %r is lane-wise equivalent to %also.r
24654-
%e = insertelement <4 x float> poison, float %a, i32 0
24655-
%s = shufflevector <4 x float> %e, <4 x float> poison, <4 x i32> zeroinitializer
24656-
%also.r = select <4 x i1> %mask, <4 x float> %s, <4 x float> poison
24657-
24658-
2465924611
.. _int_experimental_vp_reverse:
2466024612

2466124613

llvm/include/llvm/IR/Intrinsics.td

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2505,13 +2505,6 @@ def int_experimental_vp_reverse:
25052505
llvm_i32_ty],
25062506
[IntrNoMem, IntrSpeculatable]>;
25072507

2508-
def int_experimental_vp_splat:
2509-
DefaultAttrsIntrinsic<[llvm_anyvector_ty],
2510-
[LLVMVectorElementType<0>,
2511-
LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>,
2512-
llvm_i32_ty],
2513-
[IntrNoMem, IntrSpeculatable]>;
2514-
25152508
def int_vp_is_fpclass:
25162509
DefaultAttrsIntrinsic<[ LLVMScalarOrSameVectorWidth<0, llvm_i1_ty>],
25172510
[ llvm_anyvector_ty,

llvm/include/llvm/IR/VPIntrinsics.def

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -748,13 +748,6 @@ END_REGISTER_VP(experimental_vp_reverse, EXPERIMENTAL_VP_REVERSE)
748748

749749
///// } Shuffles
750750

751-
// llvm.vp.splat(val,mask,vlen)
752-
BEGIN_REGISTER_VP_INTRINSIC(experimental_vp_splat, 1, 2)
753-
BEGIN_REGISTER_VP_SDNODE(EXPERIMENTAL_VP_SPLAT, -1, experimental_vp_splat, 1, 2)
754-
VP_PROPERTY_NO_FUNCTIONAL
755-
HELPER_MAP_VPID_TO_VPSD(experimental_vp_splat, EXPERIMENTAL_VP_SPLAT)
756-
END_REGISTER_VP(experimental_vp_splat, EXPERIMENTAL_VP_SPLAT)
757-
758751
#undef BEGIN_REGISTER_VP
759752
#undef BEGIN_REGISTER_VP_INTRINSIC
760753
#undef BEGIN_REGISTER_VP_SDNODE

llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ void DAGTypeLegalizer::PromoteIntegerResult(SDNode *N, unsigned ResNo) {
145145
break;
146146
case ISD::SPLAT_VECTOR:
147147
case ISD::SCALAR_TO_VECTOR:
148-
case ISD::EXPERIMENTAL_VP_SPLAT:
149148
Res = PromoteIntRes_ScalarOp(N);
150149
break;
151150
case ISD::STEP_VECTOR: Res = PromoteIntRes_STEP_VECTOR(N); break;
@@ -2008,7 +2007,6 @@ bool DAGTypeLegalizer::PromoteIntegerOperand(SDNode *N, unsigned OpNo) {
20082007
break;
20092008
case ISD::SPLAT_VECTOR:
20102009
case ISD::SCALAR_TO_VECTOR:
2011-
case ISD::EXPERIMENTAL_VP_SPLAT:
20122010
Res = PromoteIntOp_ScalarOp(N);
20132011
break;
20142012
case ISD::VSELECT:
@@ -2363,9 +2361,6 @@ SDValue DAGTypeLegalizer::PromoteIntOp_INSERT_VECTOR_ELT(SDNode *N,
23632361

23642362
SDValue DAGTypeLegalizer::PromoteIntOp_ScalarOp(SDNode *N) {
23652363
SDValue Op = GetPromotedInteger(N->getOperand(0));
2366-
if (N->getOpcode() == ISD::EXPERIMENTAL_VP_SPLAT)
2367-
return SDValue(
2368-
DAG.UpdateNodeOperands(N, Op, N->getOperand(1), N->getOperand(2)), 0);
23692364

23702365
// Integer SPLAT_VECTOR/SCALAR_TO_VECTOR operands are implicitly truncated,
23712366
// so just promote the operand in place.
@@ -5456,7 +5451,6 @@ bool DAGTypeLegalizer::ExpandIntegerOperand(SDNode *N, unsigned OpNo) {
54565451
break;
54575452
case ISD::INSERT_VECTOR_ELT: Res = ExpandOp_INSERT_VECTOR_ELT(N); break;
54585453
case ISD::SCALAR_TO_VECTOR: Res = ExpandOp_SCALAR_TO_VECTOR(N); break;
5459-
case ISD::EXPERIMENTAL_VP_SPLAT:
54605454
case ISD::SPLAT_VECTOR: Res = ExpandIntOp_SPLAT_VECTOR(N); break;
54615455
case ISD::SELECT_CC: Res = ExpandIntOp_SELECT_CC(N); break;
54625456
case ISD::SETCC: Res = ExpandIntOp_SETCC(N); break;
@@ -6100,10 +6094,6 @@ SDValue DAGTypeLegalizer::PromoteIntRes_ScalarOp(SDNode *N) {
61006094
EVT NOutElemVT = NOutVT.getVectorElementType();
61016095

61026096
SDValue Op = DAG.getNode(ISD::ANY_EXTEND, dl, NOutElemVT, N->getOperand(0));
6103-
if (N->isVPOpcode())
6104-
return DAG.getNode(N->getOpcode(), dl, NOutVT, Op, N->getOperand(1),
6105-
N->getOperand(2));
6106-
61076097
return DAG.getNode(N->getOpcode(), dl, NOutVT, Op);
61086098
}
61096099

llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,6 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
990990
bool SplitSETCC = false);
991991
void SplitVecRes_VECTOR_COMPRESS(SDNode *N, SDValue &Lo, SDValue &Hi);
992992
void SplitVecRes_ScalarOp(SDNode *N, SDValue &Lo, SDValue &Hi);
993-
void SplitVecRes_VP_SPLAT(SDNode *N, SDValue &Lo, SDValue &Hi);
994993
void SplitVecRes_STEP_VECTOR(SDNode *N, SDValue &Lo, SDValue &Hi);
995994
void SplitVecRes_SETCC(SDNode *N, SDValue &Lo, SDValue &Hi);
996995
void SplitVecRes_VECTOR_REVERSE(SDNode *N, SDValue &Lo, SDValue &Hi);
@@ -1143,7 +1142,6 @@ class LLVM_LIBRARY_VISIBILITY DAGTypeLegalizer {
11431142
SDValue WidenVecOp_MGATHER(SDNode* N, unsigned OpNo);
11441143
SDValue WidenVecOp_MSCATTER(SDNode* N, unsigned OpNo);
11451144
SDValue WidenVecOp_VP_SCATTER(SDNode* N, unsigned OpNo);
1146-
SDValue WidenVecOp_VP_SPLAT(SDNode *N, unsigned OpNo);
11471145
SDValue WidenVecOp_SETCC(SDNode* N);
11481146
SDValue WidenVecOp_STRICT_FSETCC(SDNode* N);
11491147
SDValue WidenVecOp_VSELECT(SDNode *N);

llvm/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,7 +1217,6 @@ void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) {
12171217
case ISD::FCOPYSIGN: SplitVecRes_FPOp_MultiType(N, Lo, Hi); break;
12181218
case ISD::IS_FPCLASS: SplitVecRes_IS_FPCLASS(N, Lo, Hi); break;
12191219
case ISD::INSERT_VECTOR_ELT: SplitVecRes_INSERT_VECTOR_ELT(N, Lo, Hi); break;
1220-
case ISD::EXPERIMENTAL_VP_SPLAT: SplitVecRes_VP_SPLAT(N, Lo, Hi); break;
12211220
case ISD::SPLAT_VECTOR:
12221221
case ISD::SCALAR_TO_VECTOR:
12231222
SplitVecRes_ScalarOp(N, Lo, Hi);
@@ -2191,16 +2190,6 @@ void DAGTypeLegalizer::SplitVecRes_ScalarOp(SDNode *N, SDValue &Lo,
21912190
}
21922191
}
21932192

2194-
void DAGTypeLegalizer::SplitVecRes_VP_SPLAT(SDNode *N, SDValue &Lo,
2195-
SDValue &Hi) {
2196-
SDLoc dl(N);
2197-
auto [LoVT, HiVT] = DAG.GetSplitDestVTs(N->getValueType(0));
2198-
auto [MaskLo, MaskHi] = SplitMask(N->getOperand(1));
2199-
auto [EVLLo, EVLHi] = DAG.SplitEVL(N->getOperand(2), N->getValueType(0), dl);
2200-
Lo = DAG.getNode(N->getOpcode(), dl, LoVT, N->getOperand(0), MaskLo, EVLLo);
2201-
Hi = DAG.getNode(N->getOpcode(), dl, HiVT, N->getOperand(0), MaskHi, EVLHi);
2202-
}
2203-
22042193
void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
22052194
SDValue &Hi) {
22062195
assert(ISD::isUNINDEXEDLoad(LD) && "Indexed load during type legalization!");
@@ -4875,7 +4864,6 @@ void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) {
48754864
case ISD::STEP_VECTOR:
48764865
case ISD::SPLAT_VECTOR:
48774866
case ISD::SCALAR_TO_VECTOR:
4878-
case ISD::EXPERIMENTAL_VP_SPLAT:
48794867
Res = WidenVecRes_ScalarOp(N);
48804868
break;
48814869
case ISD::SIGN_EXTEND_INREG: Res = WidenVecRes_InregOp(N); break;
@@ -6587,9 +6575,6 @@ SDValue DAGTypeLegalizer::WidenVecRes_VP_GATHER(VPGatherSDNode *N) {
65876575

65886576
SDValue DAGTypeLegalizer::WidenVecRes_ScalarOp(SDNode *N) {
65896577
EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
6590-
if (N->isVPOpcode())
6591-
return DAG.getNode(N->getOpcode(), SDLoc(N), WidenVT, N->getOperand(0),
6592-
N->getOperand(1), N->getOperand(2));
65936578
return DAG.getNode(N->getOpcode(), SDLoc(N), WidenVT, N->getOperand(0));
65946579
}
65956580

@@ -7132,10 +7117,6 @@ bool DAGTypeLegalizer::WidenVectorOperand(SDNode *N, unsigned OpNo) {
71327117
Res = WidenVecOp_FP_TO_XINT_SAT(N);
71337118
break;
71347119

7135-
case ISD::EXPERIMENTAL_VP_SPLAT:
7136-
Res = WidenVecOp_VP_SPLAT(N, OpNo);
7137-
break;
7138-
71397120
case ISD::VECREDUCE_FADD:
71407121
case ISD::VECREDUCE_FMUL:
71417122
case ISD::VECREDUCE_ADD:
@@ -7655,13 +7636,6 @@ SDValue DAGTypeLegalizer::WidenVecOp_STORE(SDNode *N) {
76557636
report_fatal_error("Unable to widen vector store");
76567637
}
76577638

7658-
SDValue DAGTypeLegalizer::WidenVecOp_VP_SPLAT(SDNode *N, unsigned OpNo) {
7659-
assert(OpNo == 1 && "Can widen only mask operand of vp_splat");
7660-
return DAG.getNode(N->getOpcode(), SDLoc(N), N->getValueType(0),
7661-
N->getOperand(0), GetWidenedVector(N->getOperand(1)),
7662-
N->getOperand(2));
7663-
}
7664-
76657639
SDValue DAGTypeLegalizer::WidenVecOp_VP_STORE(SDNode *N, unsigned OpNo) {
76667640
assert((OpNo == 1 || OpNo == 3) &&
76677641
"Can widen only data or mask operand of vp_store");

llvm/lib/IR/IntrinsicInst.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,9 +697,6 @@ Function *VPIntrinsic::getOrInsertDeclarationForParams(
697697
VPFunc = Intrinsic::getOrInsertDeclaration(
698698
M, VPID, {Params[0]->getType(), Params[1]->getType()});
699699
break;
700-
case Intrinsic::experimental_vp_splat:
701-
VPFunc = Intrinsic::getOrInsertDeclaration(M, VPID, ReturnType);
702-
break;
703700
}
704701
assert(VPFunc && "Could not declare VP intrinsic");
705702
return VPFunc;

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 5 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ static cl::opt<bool>
8989

9090
// TODO: Support more ops
9191
static const unsigned ZvfbfaVPOps[] = {
92-
ISD::VP_FNEG, ISD::VP_FABS, ISD::VP_FCOPYSIGN, ISD::EXPERIMENTAL_VP_SPLAT};
92+
ISD::VP_FNEG, ISD::VP_FABS, ISD::VP_FCOPYSIGN};
9393
static const unsigned ZvfbfaOps[] = {
9494
ISD::FNEG, ISD::FABS, ISD::FCOPYSIGN, ISD::SPLAT_VECTOR,
9595
ISD::FADD, ISD::FSUB, ISD::FMUL};
@@ -795,8 +795,7 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
795795
ISD::VP_SMAX, ISD::VP_UMIN, ISD::VP_UMAX,
796796
ISD::VP_ABS, ISD::EXPERIMENTAL_VP_REVERSE, ISD::EXPERIMENTAL_VP_SPLICE,
797797
ISD::VP_SADDSAT, ISD::VP_UADDSAT, ISD::VP_SSUBSAT,
798-
ISD::VP_USUBSAT, ISD::VP_CTTZ_ELTS, ISD::VP_CTTZ_ELTS_ZERO_UNDEF,
799-
ISD::EXPERIMENTAL_VP_SPLAT};
798+
ISD::VP_USUBSAT, ISD::VP_CTTZ_ELTS, ISD::VP_CTTZ_ELTS_ZERO_UNDEF};
800799

801800
static const unsigned FloatingPointVPOps[] = {
802801
ISD::VP_FADD, ISD::VP_FSUB, ISD::VP_FMUL,
@@ -811,7 +810,7 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
811810
ISD::VP_FRINT, ISD::VP_FNEARBYINT, ISD::VP_IS_FPCLASS,
812811
ISD::VP_FMINIMUM, ISD::VP_FMAXIMUM, ISD::VP_LRINT,
813812
ISD::VP_LLRINT, ISD::VP_REDUCE_FMINIMUM,
814-
ISD::VP_REDUCE_FMAXIMUM, ISD::EXPERIMENTAL_VP_SPLAT};
813+
ISD::VP_REDUCE_FMAXIMUM};
815814

816815
static const unsigned IntegerVecReduceOps[] = {
817816
ISD::VECREDUCE_ADD, ISD::VECREDUCE_AND, ISD::VECREDUCE_OR,
@@ -905,7 +904,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
905904

906905
setOperationAction(ISD::EXPERIMENTAL_VP_SPLICE, VT, Custom);
907906
setOperationAction(ISD::EXPERIMENTAL_VP_REVERSE, VT, Custom);
908-
setOperationAction(ISD::EXPERIMENTAL_VP_SPLAT, VT, Custom);
909907

910908
setOperationPromotedToType(
911909
ISD::VECTOR_SPLICE, VT,
@@ -1250,12 +1248,10 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
12501248
setOperationAction(ISD::EXPERIMENTAL_VP_REVERSE, VT, Custom);
12511249
MVT EltVT = VT.getVectorElementType();
12521250
if (isTypeLegal(EltVT))
1253-
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXPERIMENTAL_VP_SPLAT,
1254-
ISD::EXTRACT_VECTOR_ELT},
1251+
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXTRACT_VECTOR_ELT},
12551252
VT, Custom);
12561253
else
1257-
setOperationAction({ISD::SPLAT_VECTOR, ISD::EXPERIMENTAL_VP_SPLAT},
1258-
EltVT, Custom);
1254+
setOperationAction(ISD::SPLAT_VECTOR, EltVT, Custom);
12591255
setOperationAction({ISD::LOAD, ISD::STORE, ISD::MLOAD, ISD::MSTORE,
12601256
ISD::MGATHER, ISD::MSCATTER, ISD::VP_LOAD,
12611257
ISD::VP_STORE, ISD::EXPERIMENTAL_VP_STRIDED_LOAD,
@@ -1303,7 +1299,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
13031299
VT, Custom);
13041300
setOperationAction(ISD::EXPERIMENTAL_VP_SPLICE, VT, Custom);
13051301
setOperationAction(ISD::EXPERIMENTAL_VP_REVERSE, VT, Custom);
1306-
setOperationAction(ISD::EXPERIMENTAL_VP_SPLAT, VT, Custom);
13071302

13081303
setOperationAction(ISD::FCOPYSIGN, VT, Legal);
13091304
setOperationAction(ISD::SPLAT_VECTOR, VT, Legal);
@@ -8881,8 +8876,6 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
88818876
return lowerVPSpliceExperimental(Op, DAG);
88828877
case ISD::EXPERIMENTAL_VP_REVERSE:
88838878
return lowerVPReverseExperimental(Op, DAG);
8884-
case ISD::EXPERIMENTAL_VP_SPLAT:
8885-
return lowerVPSplatExperimental(Op, DAG);
88868879
case ISD::CLEAR_CACHE: {
88878880
assert(getTargetMachine().getTargetTriple().isOSLinux() &&
88888881
"llvm.clear_cache only needs custom lower on Linux targets");
@@ -14102,47 +14095,6 @@ RISCVTargetLowering::lowerVPSpliceExperimental(SDValue Op,
1410214095
return convertFromScalableVector(VT, Result, DAG, Subtarget);
1410314096
}
1410414097

14105-
SDValue RISCVTargetLowering::lowerVPSplatExperimental(SDValue Op,
14106-
SelectionDAG &DAG) const {
14107-
SDLoc DL(Op);
14108-
SDValue Val = Op.getOperand(0);
14109-
SDValue Mask = Op.getOperand(1);
14110-
SDValue VL = Op.getOperand(2);
14111-
MVT VT = Op.getSimpleValueType();
14112-
14113-
MVT ContainerVT = VT;
14114-
if (VT.isFixedLengthVector()) {
14115-
ContainerVT = getContainerForFixedLengthVector(VT);
14116-
MVT MaskVT = getMaskTypeFor(ContainerVT);
14117-
Mask = convertToScalableVector(MaskVT, Mask, DAG, Subtarget);
14118-
}
14119-
14120-
SDValue Result;
14121-
if (VT.getScalarType() == MVT::i1) {
14122-
if (auto *C = dyn_cast<ConstantSDNode>(Val)) {
14123-
Result =
14124-
DAG.getNode(C->isZero() ? RISCVISD::VMCLR_VL : RISCVISD::VMSET_VL, DL,
14125-
ContainerVT, VL);
14126-
} else {
14127-
MVT WidenVT = ContainerVT.changeVectorElementType(MVT::i8);
14128-
SDValue LHS =
14129-
DAG.getNode(RISCVISD::VMV_V_X_VL, DL, WidenVT, DAG.getUNDEF(WidenVT),
14130-
DAG.getZExtOrTrunc(Val, DL, Subtarget.getXLenVT()), VL);
14131-
SDValue RHS = DAG.getConstant(0, DL, WidenVT);
14132-
Result = DAG.getNode(RISCVISD::SETCC_VL, DL, ContainerVT,
14133-
{LHS, RHS, DAG.getCondCode(ISD::SETNE),
14134-
DAG.getUNDEF(ContainerVT), Mask, VL});
14135-
}
14136-
} else {
14137-
Result =
14138-
lowerScalarSplat(SDValue(), Val, VL, ContainerVT, DL, DAG, Subtarget);
14139-
}
14140-
14141-
if (!VT.isFixedLengthVector())
14142-
return Result;
14143-
return convertFromScalableVector(VT, Result, DAG, Subtarget);
14144-
}
14145-
1414614098
SDValue
1414714099
RISCVTargetLowering::lowerVPReverseExperimental(SDValue Op,
1414814100
SelectionDAG &DAG) const {

llvm/lib/Target/RISCV/RISCVISelLowering.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,6 @@ class RISCVTargetLowering : public TargetLowering {
551551
SDValue lowerVPExtMaskOp(SDValue Op, SelectionDAG &DAG) const;
552552
SDValue lowerVPSetCCMaskOp(SDValue Op, SelectionDAG &DAG) const;
553553
SDValue lowerVPMergeMask(SDValue Op, SelectionDAG &DAG) const;
554-
SDValue lowerVPSplatExperimental(SDValue Op, SelectionDAG &DAG) const;
555554
SDValue lowerVPSpliceExperimental(SDValue Op, SelectionDAG &DAG) const;
556555
SDValue lowerVPReverseExperimental(SDValue Op, SelectionDAG &DAG) const;
557556
SDValue lowerVPFPIntConvOp(SDValue Op, SelectionDAG &DAG) const;

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.cpp

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1622,16 +1622,6 @@ RISCVTTIImpl::getIntrinsicInstrCost(const IntrinsicCostAttributes &ICA,
16221622

16231623
return Cost;
16241624
}
1625-
case Intrinsic::experimental_vp_splat: {
1626-
auto LT = getTypeLegalizationCost(RetTy);
1627-
// TODO: Lower i1 experimental_vp_splat
1628-
if (!ST->hasVInstructions() || LT.second.getScalarType() == MVT::i1)
1629-
return InstructionCost::getInvalid();
1630-
return LT.first * getRISCVInstructionCost(LT.second.isFloatingPoint()
1631-
? RISCV::VFMV_V_F
1632-
: RISCV::VMV_V_X,
1633-
LT.second, CostKind);
1634-
}
16351625
case Intrinsic::experimental_vp_splice: {
16361626
// To support type-based query from vectorizer, set the index to 0.
16371627
// Note that index only change the cost from vslide.vx to vslide.vi and in
@@ -3419,11 +3409,8 @@ bool RISCVTTIImpl::isProfitableToSinkOperands(
34193409
if (!Op || any_of(Ops, [&](Use *U) { return U->get() == Op; }))
34203410
continue;
34213411

3422-
// We are looking for a splat/vp.splat that can be sunk.
3423-
bool IsVPSplat = match(Op, m_Intrinsic<Intrinsic::experimental_vp_splat>(
3424-
m_Value(), m_Value(), m_Value()));
3425-
if (!IsVPSplat &&
3426-
!match(Op, m_Shuffle(m_InsertElt(m_Value(), m_Value(), m_ZeroInt()),
3412+
// We are looking for a splat that can be sunk.
3413+
if (!match(Op, m_Shuffle(m_InsertElt(m_Value(), m_Value(), m_ZeroInt()),
34273414
m_Value(), m_ZeroMask())))
34283415
continue;
34293416

@@ -3440,16 +3427,11 @@ bool RISCVTTIImpl::isProfitableToSinkOperands(
34403427
}
34413428

34423429
// Sink any fpexts since they might be used in a widening fp pattern.
3443-
if (IsVPSplat) {
3444-
if (isa<FPExtInst>(Op->getOperand(0)))
3445-
Ops.push_back(&Op->getOperandUse(0));
3446-
} else {
3447-
Use *InsertEltUse = &Op->getOperandUse(0);
3448-
auto *InsertElt = cast<InsertElementInst>(InsertEltUse);
3449-
if (isa<FPExtInst>(InsertElt->getOperand(1)))
3450-
Ops.push_back(&InsertElt->getOperandUse(1));
3451-
Ops.push_back(InsertEltUse);
3452-
}
3430+
Use *InsertEltUse = &Op->getOperandUse(0);
3431+
auto *InsertElt = cast<InsertElementInst>(InsertEltUse);
3432+
if (isa<FPExtInst>(InsertElt->getOperand(1)))
3433+
Ops.push_back(&InsertElt->getOperandUse(1));
3434+
Ops.push_back(InsertEltUse);
34533435
Ops.push_back(&OpIdx.value());
34543436
}
34553437
return true;

0 commit comments

Comments
 (0)