@@ -4512,15 +4512,6 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
45124512 "Illegal type which will result in reserved encoding");
45134513
45144514 const unsigned Policy = RISCVVType::TAIL_AGNOSTIC | RISCVVType::MASK_AGNOSTIC;
4515- auto getVSlide = [&](bool SlideUp, EVT ContainerVT, SDValue Passthru,
4516- SDValue Vec, SDValue Offset, SDValue Mask,
4517- SDValue VL) -> SDValue {
4518- if (SlideUp)
4519- return getVSlideup(DAG, Subtarget, DL, ContainerVT, Passthru, Vec, Offset,
4520- Mask, VL, Policy);
4521- return getVSlidedown(DAG, Subtarget, DL, ContainerVT, Passthru, Vec, Offset,
4522- Mask, VL, Policy);
4523- };
45244515
45254516 // General case: splat the first operand and slide other operands down one
45264517 // by one to form a vector. Alternatively, if the last operand is an
@@ -4529,6 +4520,15 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
45294520 SmallVector<SDValue> Operands(Op->op_begin(), Op->op_end());
45304521 SDValue EVec;
45314522 bool SlideUp = false;
4523+ auto getVSlide = [&](EVT ContainerVT, SDValue Passthru, SDValue Vec,
4524+ SDValue Offset, SDValue Mask, SDValue VL) -> SDValue {
4525+ if (SlideUp)
4526+ return getVSlideup(DAG, Subtarget, DL, ContainerVT, Passthru, Vec, Offset,
4527+ Mask, VL, Policy);
4528+ return getVSlidedown(DAG, Subtarget, DL, ContainerVT, Passthru, Vec, Offset,
4529+ Mask, VL, Policy);
4530+ };
4531+
45324532 // Find the first first non-undef from the tail.
45334533 auto ItLastNonUndef = find_if(Operands.rbegin(), Operands.rend(),
45344534 [](SDValue V) { return !V.isUndef(); });
@@ -4583,26 +4583,26 @@ static SDValue lowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG,
45834583
45844584 if (UndefCount) {
45854585 const SDValue Offset = DAG.getConstant(UndefCount, DL, Subtarget.getXLenVT());
4586- Vec = getVSlide(SlideUp, ContainerVT, DAG.getUNDEF(ContainerVT), Vec,
4587- Offset, Mask, VL);
4586+ Vec = getVSlide(ContainerVT, DAG.getUNDEF(ContainerVT), Vec, Offset, Mask ,
4587+ VL);
45884588 UndefCount = 0;
45894589 }
45904590
4591- unsigned OpCode ;
4591+ unsigned Opcode ;
45924592 if (VT.isFloatingPoint())
4593- OpCode = SlideUp ? RISCVISD::VFSLIDE1UP_VL : RISCVISD::VFSLIDE1DOWN_VL;
4593+ Opcode = SlideUp ? RISCVISD::VFSLIDE1UP_VL : RISCVISD::VFSLIDE1DOWN_VL;
45944594 else
4595- OpCode = SlideUp ? RISCVISD::VSLIDE1UP_VL : RISCVISD::VSLIDE1DOWN_VL;
4595+ Opcode = SlideUp ? RISCVISD::VSLIDE1UP_VL : RISCVISD::VSLIDE1DOWN_VL;
45964596
45974597 if (!VT.isFloatingPoint())
45984598 V = DAG.getNode(ISD::ANY_EXTEND, DL, Subtarget.getXLenVT(), V);
4599- Vec = DAG.getNode(OpCode , DL, ContainerVT, DAG.getUNDEF(ContainerVT), Vec,
4599+ Vec = DAG.getNode(Opcode , DL, ContainerVT, DAG.getUNDEF(ContainerVT), Vec,
46004600 V, Mask, VL);
46014601 }
46024602 if (UndefCount) {
46034603 const SDValue Offset = DAG.getConstant(UndefCount, DL, Subtarget.getXLenVT());
4604- Vec = getVSlide(SlideUp, ContainerVT, DAG.getUNDEF(ContainerVT), Vec,
4605- Offset, Mask, VL);
4604+ Vec = getVSlide(ContainerVT, DAG.getUNDEF(ContainerVT), Vec, Offset, Mask ,
4605+ VL);
46064606 }
46074607 return convertFromScalableVector(VT, Vec, DAG, Subtarget);
46084608}
0 commit comments