Skip to content

Commit ed3f456

Browse files
committed
fixup! Address review comments and add more tests
1 parent ac83561 commit ed3f456

File tree

2 files changed

+59
-17
lines changed

2 files changed

+59
-17
lines changed

llvm/lib/Target/RISCV/RISCVISelLowering.cpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1853,6 +1853,48 @@ define <8 x double> @buildvec_slideup(<4 x double> %v, double %e0, double %e1, d
18531853
ret <8 x double> %v7
18541854
}
18551855

1856+
define <8 x double> @buildvec_slideup_leading_undef(<4 x double> %v, double %e0, double %e1, double %e2, double %e3, double %e4) vscale_range(4, 128) {
1857+
; CHECK-LABEL: buildvec_slideup_leading_undef:
1858+
; CHECK: # %bb.0:
1859+
; CHECK-NEXT: vsetivli zero, 8, e64, m2, ta, ma
1860+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa4
1861+
; CHECK-NEXT: vfslide1up.vf v8, v10, fa3
1862+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa2
1863+
; CHECK-NEXT: vfslide1up.vf v8, v10, fa1
1864+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa0
1865+
; CHECK-NEXT: vslideup.vi v8, v10, 2
1866+
; CHECK-NEXT: ret
1867+
%v2 = insertelement <8 x double> poison, double %e0, i64 2
1868+
%v3 = insertelement <8 x double> %v2, double %e1, i64 3
1869+
%v4 = insertelement <8 x double> %v3, double %e2, i64 4
1870+
%v5 = insertelement <8 x double> %v4, double %e3, i64 5
1871+
%v6 = insertelement <8 x double> %v5, double %e4, i64 6
1872+
%e5 = extractelement <4 x double> %v, i64 0
1873+
%v7 = insertelement <8 x double> %v6, double %e5, i64 7
1874+
ret <8 x double> %v7
1875+
}
1876+
1877+
define <8 x double> @buildvec_slideup_mid_undef(<4 x double> %v, double %e0, double %e1, double %e2, double %e3, double %e4) vscale_range(4, 128) {
1878+
; CHECK-LABEL: buildvec_slideup_mid_undef:
1879+
; CHECK: # %bb.0:
1880+
; CHECK-NEXT: vsetivli zero, 8, e64, m2, ta, ma
1881+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa4
1882+
; CHECK-NEXT: vfslide1up.vf v8, v10, fa3
1883+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa2
1884+
; CHECK-NEXT: vslideup.vi v8, v10, 2
1885+
; CHECK-NEXT: vfslide1up.vf v10, v8, fa1
1886+
; CHECK-NEXT: vfslide1up.vf v8, v10, fa0
1887+
; CHECK-NEXT: ret
1888+
%v0 = insertelement <8 x double> poison, double %e0, i64 0
1889+
%v1 = insertelement <8 x double> %v0, double %e1, i64 1
1890+
%v4 = insertelement <8 x double> %v1, double %e2, i64 4
1891+
%v5 = insertelement <8 x double> %v4, double %e3, i64 5
1892+
%v6 = insertelement <8 x double> %v5, double %e4, i64 6
1893+
%e5 = extractelement <4 x double> %v, i64 0
1894+
%v7 = insertelement <8 x double> %v6, double %e5, i64 7
1895+
ret <8 x double> %v7
1896+
}
1897+
18561898
define <8 x double> @buildvec_slideup_trailing_undef(<4 x double> %v, double %e0, double %e1, double %e2, double %e3, double %e4) vscale_range(4, 128) {
18571899
; CHECK-LABEL: buildvec_slideup_trailing_undef:
18581900
; CHECK: # %bb.0:

0 commit comments

Comments
 (0)