@@ -2811,8 +2811,8 @@ static SDValue lowerFP_TO_INT_SAT(SDValue Op, SelectionDAG &DAG,
2811
2811
SDValue SplatZero = DAG.getNode(
2812
2812
RISCVISD::VMV_V_X_VL, DL, DstContainerVT, DAG.getUNDEF(DstContainerVT),
2813
2813
DAG.getConstant(0, DL, Subtarget.getXLenVT()), VL);
2814
- Res = DAG.getNode(RISCVISD::VSELECT_VL , DL, DstContainerVT, IsNan, SplatZero,
2815
- Res, VL);
2814
+ Res = DAG.getNode(RISCVISD::VMERGE_VL , DL, DstContainerVT, IsNan, SplatZero,
2815
+ Res, DAG.getUNDEF(DstContainerVT), VL);
2816
2816
2817
2817
if (DstVT.isFixedLengthVector())
2818
2818
Res = convertFromScalableVector(DstVT, Res, DAG, Subtarget);
@@ -5401,17 +5401,17 @@ static SDValue lowerFMAXIMUM_FMINIMUM(SDValue Op, SelectionDAG &DAG,
5401
5401
SDValue XIsNonNan = DAG.getNode(RISCVISD::SETCC_VL, DL, Mask.getValueType(),
5402
5402
{X, X, DAG.getCondCode(ISD::SETOEQ),
5403
5403
DAG.getUNDEF(ContainerVT), Mask, VL});
5404
- NewY =
5405
- DAG.getNode(RISCVISD::VSELECT_VL, DL, ContainerVT, XIsNonNan, Y, X , VL);
5404
+ NewY = DAG.getNode(RISCVISD::VMERGE_VL, DL, ContainerVT, XIsNonNan, Y, X,
5405
+ DAG.getUNDEF(ContainerVT) , VL);
5406
5406
}
5407
5407
5408
5408
SDValue NewX = X;
5409
5409
if (!YIsNeverNan) {
5410
5410
SDValue YIsNonNan = DAG.getNode(RISCVISD::SETCC_VL, DL, Mask.getValueType(),
5411
5411
{Y, Y, DAG.getCondCode(ISD::SETOEQ),
5412
5412
DAG.getUNDEF(ContainerVT), Mask, VL});
5413
- NewX =
5414
- DAG.getNode(RISCVISD::VSELECT_VL, DL, ContainerVT, YIsNonNan, X, Y , VL);
5413
+ NewX = DAG.getNode(RISCVISD::VMERGE_VL, DL, ContainerVT, YIsNonNan, X, Y,
5414
+ DAG.getUNDEF(ContainerVT) , VL);
5415
5415
}
5416
5416
5417
5417
unsigned Opc =
@@ -5528,7 +5528,6 @@ static unsigned getRISCVVLOp(SDValue Op) {
5528
5528
return RISCVISD::VMXOR_VL;
5529
5529
return RISCVISD::XOR_VL;
5530
5530
case ISD::VP_SELECT:
5531
- return RISCVISD::VSELECT_VL;
5532
5531
case ISD::VP_MERGE:
5533
5532
return RISCVISD::VMERGE_VL;
5534
5533
case ISD::VP_ASHR:
@@ -5563,7 +5562,7 @@ static bool hasMergeOp(unsigned Opcode) {
5563
5562
Opcode <= RISCVISD::LAST_RISCV_STRICTFP_OPCODE &&
5564
5563
"not a RISC-V target specific op");
5565
5564
static_assert(RISCVISD::LAST_VL_VECTOR_OP - RISCVISD::FIRST_VL_VECTOR_OP ==
5566
- 125 &&
5565
+ 124 &&
5567
5566
RISCVISD::LAST_RISCV_STRICTFP_OPCODE -
5568
5567
ISD::FIRST_TARGET_STRICTFP_OPCODE ==
5569
5568
21 &&
@@ -5589,7 +5588,7 @@ static bool hasMaskOp(unsigned Opcode) {
5589
5588
Opcode <= RISCVISD::LAST_RISCV_STRICTFP_OPCODE &&
5590
5589
"not a RISC-V target specific op");
5591
5590
static_assert(RISCVISD::LAST_VL_VECTOR_OP - RISCVISD::FIRST_VL_VECTOR_OP ==
5592
- 125 &&
5591
+ 124 &&
5593
5592
RISCVISD::LAST_RISCV_STRICTFP_OPCODE -
5594
5593
ISD::FIRST_TARGET_STRICTFP_OPCODE ==
5595
5594
21 &&
@@ -7456,8 +7455,9 @@ SDValue RISCVTargetLowering::lowerVectorMaskExt(SDValue Op, SelectionDAG &DAG,
7456
7455
DAG.getUNDEF(ContainerVT), SplatZero, VL);
7457
7456
SplatTrueVal = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, ContainerVT,
7458
7457
DAG.getUNDEF(ContainerVT), SplatTrueVal, VL);
7459
- SDValue Select = DAG.getNode(RISCVISD::VSELECT_VL, DL, ContainerVT, CC,
7460
- SplatTrueVal, SplatZero, VL);
7458
+ SDValue Select =
7459
+ DAG.getNode(RISCVISD::VMERGE_VL, DL, ContainerVT, CC, SplatTrueVal,
7460
+ SplatZero, DAG.getUNDEF(ContainerVT), VL);
7461
7461
7462
7462
return convertFromScalableVector(VecVT, Select, DAG, Subtarget);
7463
7463
}
@@ -8240,8 +8240,8 @@ static SDValue lowerVectorIntrinsicScalars(SDValue Op, SelectionDAG &DAG,
8240
8240
return Vec;
8241
8241
// TAMU
8242
8242
if (Policy == RISCVII::TAIL_AGNOSTIC)
8243
- return DAG.getNode(RISCVISD::VSELECT_VL , DL, VT, Mask, Vec, MaskedOff,
8244
- AVL);
8243
+ return DAG.getNode(RISCVISD::VMERGE_VL , DL, VT, Mask, Vec, MaskedOff,
8244
+ DAG.getUNDEF(VT), AVL);
8245
8245
// TUMA or TUMU: Currently we always emit tumu policy regardless of tuma.
8246
8246
// It's fine because vmerge does not care mask policy.
8247
8247
return DAG.getNode(RISCVISD::VMERGE_VL, DL, VT, Mask, Vec, MaskedOff,
@@ -8489,8 +8489,8 @@ SDValue RISCVTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
8489
8489
DAG.getNode(RISCVISD::SETCC_VL, DL, MaskVT,
8490
8490
{VID, SplattedIdx, DAG.getCondCode(ISD::SETEQ),
8491
8491
DAG.getUNDEF(MaskVT), Mask, VL});
8492
- return DAG.getNode(RISCVISD::VSELECT_VL , DL, VT, SelectCond, SplattedVal,
8493
- Vec, VL);
8492
+ return DAG.getNode(RISCVISD::VMERGE_VL , DL, VT, SelectCond, SplattedVal,
8493
+ Vec, DAG.getUNDEF(VT), VL);
8494
8494
}
8495
8495
// EGS * EEW >= 128 bits
8496
8496
case Intrinsic::riscv_vaesdf_vv:
@@ -10243,8 +10243,8 @@ SDValue RISCVTargetLowering::lowerFixedLengthVectorSelectToRVV(
10243
10243
SDLoc DL(Op);
10244
10244
SDValue VL = getDefaultVLOps(VT, ContainerVT, DL, DAG, Subtarget).second;
10245
10245
10246
- SDValue Select =
10247
- DAG.getNode(RISCVISD::VSELECT_VL, DL, ContainerVT, CC, Op1, Op2, VL);
10246
+ SDValue Select = DAG.getNode(RISCVISD::VMERGE_VL, DL, ContainerVT, CC, Op1,
10247
+ Op2, DAG.getUNDEF(ContainerVT) , VL);
10248
10248
10249
10249
return convertFromScalableVector(VT, Select, DAG, Subtarget);
10250
10250
}
@@ -10327,9 +10327,14 @@ SDValue RISCVTargetLowering::lowerVPOp(SDValue Op, SelectionDAG &DAG) const {
10327
10327
Ops.push_back(DAG.getUNDEF(ContainerVT));
10328
10328
} else if (ISD::getVPExplicitVectorLengthIdx(Op.getOpcode()) ==
10329
10329
OpIdx.index()) {
10330
- // For VP_MERGE, copy the false operand instead of an undef value.
10331
- assert(Op.getOpcode() == ISD::VP_MERGE);
10332
- Ops.push_back(Ops.back());
10330
+ if (Op.getOpcode() == ISD::VP_MERGE) {
10331
+ // For VP_MERGE, copy the false operand instead of an undef value.
10332
+ Ops.push_back(Ops.back());
10333
+ } else {
10334
+ assert(Op.getOpcode() == ISD::VP_SELECT);
10335
+ // For VP_SELECT, add an undef value.
10336
+ Ops.push_back(DAG.getUNDEF(ContainerVT));
10337
+ }
10333
10338
}
10334
10339
}
10335
10340
// Pass through operands which aren't fixed-length vectors.
@@ -10379,8 +10384,8 @@ SDValue RISCVTargetLowering::lowerVPExtMaskOp(SDValue Op,
10379
10384
SDValue Splat = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, ContainerVT,
10380
10385
DAG.getUNDEF(ContainerVT), SplatValue, VL);
10381
10386
10382
- SDValue Result = DAG.getNode(RISCVISD::VSELECT_VL , DL, ContainerVT, Src,
10383
- Splat, ZeroSplat , VL);
10387
+ SDValue Result = DAG.getNode(RISCVISD::VMERGE_VL , DL, ContainerVT, Src, Splat ,
10388
+ ZeroSplat, DAG.getUNDEF(ContainerVT) , VL);
10384
10389
if (!VT.isFixedLengthVector())
10385
10390
return Result;
10386
10391
return convertFromScalableVector(VT, Result, DAG, Subtarget);
@@ -10508,8 +10513,8 @@ SDValue RISCVTargetLowering::lowerVPFPIntConvOp(SDValue Op,
10508
10513
RISCVISDExtOpc == RISCVISD::VZEXT_VL ? 1 : -1, DL, XLenVT);
10509
10514
SDValue OneSplat = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, IntVT,
10510
10515
DAG.getUNDEF(IntVT), One, VL);
10511
- Src = DAG.getNode(RISCVISD::VSELECT_VL , DL, IntVT, Src, OneSplat,
10512
- ZeroSplat, VL);
10516
+ Src = DAG.getNode(RISCVISD::VMERGE_VL , DL, IntVT, Src, OneSplat,
10517
+ ZeroSplat, DAG.getUNDEF(IntVT), VL);
10513
10518
} else if (DstEltSize > (2 * SrcEltSize)) {
10514
10519
// Widen before converting.
10515
10520
MVT IntVT = MVT::getVectorVT(MVT::getIntegerVT(DstEltSize / 2),
@@ -10633,17 +10638,17 @@ RISCVTargetLowering::lowerVPSpliceExperimental(SDValue Op,
10633
10638
SDValue SplatZeroOp1 = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, ContainerVT,
10634
10639
DAG.getUNDEF(ContainerVT),
10635
10640
DAG.getConstant(0, DL, XLenVT), EVL1);
10636
- Op1 = DAG.getNode(RISCVISD::VSELECT_VL , DL, ContainerVT, Op1, SplatOneOp1,
10637
- SplatZeroOp1, EVL1);
10641
+ Op1 = DAG.getNode(RISCVISD::VMERGE_VL , DL, ContainerVT, Op1, SplatOneOp1,
10642
+ SplatZeroOp1, DAG.getUNDEF(ContainerVT), EVL1);
10638
10643
10639
10644
SDValue SplatOneOp2 = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, ContainerVT,
10640
10645
DAG.getUNDEF(ContainerVT),
10641
10646
DAG.getConstant(1, DL, XLenVT), EVL2);
10642
10647
SDValue SplatZeroOp2 = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, ContainerVT,
10643
10648
DAG.getUNDEF(ContainerVT),
10644
10649
DAG.getConstant(0, DL, XLenVT), EVL2);
10645
- Op2 = DAG.getNode(RISCVISD::VSELECT_VL , DL, ContainerVT, Op2, SplatOneOp2,
10646
- SplatZeroOp2, EVL2);
10650
+ Op2 = DAG.getNode(RISCVISD::VMERGE_VL , DL, ContainerVT, Op2, SplatOneOp2,
10651
+ SplatZeroOp2, DAG.getUNDEF(ContainerVT), EVL2);
10647
10652
}
10648
10653
10649
10654
int64_t ImmValue = cast<ConstantSDNode>(Offset)->getSExtValue();
@@ -10713,8 +10718,8 @@ RISCVTargetLowering::lowerVPReverseExperimental(SDValue Op,
10713
10718
SDValue SplatZero = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, IndicesVT,
10714
10719
DAG.getUNDEF(IndicesVT),
10715
10720
DAG.getConstant(0, DL, XLenVT), EVL);
10716
- Op1 = DAG.getNode(RISCVISD::VSELECT_VL , DL, IndicesVT, Op1, SplatOne,
10717
- SplatZero, EVL);
10721
+ Op1 = DAG.getNode(RISCVISD::VMERGE_VL , DL, IndicesVT, Op1, SplatOne,
10722
+ SplatZero, DAG.getUNDEF(IndicesVT), EVL);
10718
10723
}
10719
10724
10720
10725
unsigned EltSize = GatherVT.getScalarSizeInBits();
@@ -18683,7 +18688,6 @@ const char *RISCVTargetLowering::getTargetNodeName(unsigned Opcode) const {
18683
18688
NODE_NAME_CASE(VWMACCSU_VL)
18684
18689
NODE_NAME_CASE(VNSRL_VL)
18685
18690
NODE_NAME_CASE(SETCC_VL)
18686
- NODE_NAME_CASE(VSELECT_VL)
18687
18691
NODE_NAME_CASE(VMERGE_VL)
18688
18692
NODE_NAME_CASE(VMAND_VL)
18689
18693
NODE_NAME_CASE(VMOR_VL)
0 commit comments