Skip to content

Commit d34df26

Browse files
committed
Address review comments
1 parent 82e5c49 commit d34df26

File tree

4 files changed

+12
-96
lines changed

4 files changed

+12
-96
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25185,24 +25185,23 @@ static SDValue combineConcatVectorInterleave(SDNode *N, SelectionDAG &DAG) {
2518525185
return SDValue();
2518625186
}
2518725187

25188-
SDValue InOp0 = FirstOp.getOperand(0);
25189-
if (!llvm::all_of(FirstOp->ops(),
25190-
[&InOp0](SDValue Op) { return Op == InOp0; }))
25188+
if (!llvm::all_equal(FirstOp->op_values()))
2519125189
return SDValue();
2519225190

2519325191
// We're concatenating all the sequential results of the same vector
2519425192
// interleave node. Now check if all inputs to the interleave are splats.
25195-
if (SDValue Splat = DAG.getSplatValue(InOp0)) {
25196-
SDLoc DL(N);
25197-
EVT SubVecTy = InOp0.getValueType();
25198-
// Create the wider type required.
25199-
EVT WideVecTy = EVT::getVectorVT(
25200-
*DAG.getContext(), SubVecTy.getScalarType(),
25201-
SubVecTy.getVectorElementCount() * N->getNumOperands());
25202-
return DAG.getSplat(WideVecTy, DL, Splat);
25203-
}
25193+
SDValue InOp0 = FirstOp.getOperand(0);
25194+
SDValue Splat = DAG.getSplatValue(InOp0);
25195+
if (!Splat)
25196+
return SDValue();
2520425197

25205-
return SDValue();
25198+
SDLoc DL(N);
25199+
EVT SubVecTy = InOp0.getValueType();
25200+
// Create the wider type required.
25201+
EVT WideVecTy =
25202+
EVT::getVectorVT(*DAG.getContext(), SubVecTy.getScalarType(),
25203+
SubVecTy.getVectorElementCount() * N->getNumOperands());
25204+
return DAG.getSplat(WideVecTy, DL, Splat);
2520625205
}
2520725206

2520825207
// See if this is a simple CONCAT_VECTORS with no UNDEF operands, and if one of

llvm/test/CodeGen/AArch64/fixed-vector-interleave.ll

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -216,20 +216,3 @@ define <4 x i16> @interleave2_diff_nonconst_splat_v4i16(i16 %a, i16 %b) {
216216
; %retval = call <8 x i16> @llvm.vector.interleave4.v8i16(<2 x i16> splat(i16 3), <2 x i16> splat(i16 3), <2 x i16> splat(i16 3), <2 x i16> splat(i16 3))
217217
; ret <8 x i16> %retval
218218
;}
219-
220-
221-
; Float declarations
222-
declare <4 x half> @llvm.vector.interleave2.v4f16(<2 x half>, <2 x half>)
223-
declare <8 x half> @llvm.vector.interleave2.v8f16(<4 x half>, <4 x half>)
224-
declare <16 x half> @llvm.vector.interleave2.v16f16(<8 x half>, <8 x half>)
225-
declare <4 x float> @llvm.vector.interleave2.v4f32(<2 x float>, <2 x float>)
226-
declare <8 x float> @llvm.vector.interleave2.v8f32(<4 x float>, <4 x float>)
227-
declare <4 x double> @llvm.vector.interleave2.v4f64(<2 x double>, <2 x double>)
228-
229-
; Integer declarations
230-
declare <32 x i8> @llvm.vector.interleave2.v32i8(<16 x i8>, <16 x i8>)
231-
declare <16 x i16> @llvm.vector.interleave2.v16i16(<8 x i16>, <8 x i16>)
232-
declare <8 x i32> @llvm.vector.interleave2.v8i32(<4 x i32>, <4 x i32>)
233-
declare <4 x i64> @llvm.vector.interleave2.v4i64(<2 x i64>, <2 x i64>)
234-
declare <4 x i16> @llvm.vector.interleave2.v4i16(<2 x i16>, <2 x i16>)
235-
declare <8 x i16> @llvm.vector.interleave4.v8i16(<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>)

llvm/test/CodeGen/AArch64/sve-vector-interleave.ll

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -618,33 +618,3 @@ define <vscale x 8 x i16> @interleave4_same_const_splat_nxv8i16() {
618618
%retval = call <vscale x 8 x i16> @llvm.vector.interleave4.nxv8i16(<vscale x 2 x i16> splat(i16 3), <vscale x 2 x i16> splat(i16 3), <vscale x 2 x i16> splat(i16 3), <vscale x 2 x i16> splat(i16 3))
619619
ret <vscale x 8 x i16> %retval
620620
}
621-
622-
; Float declarations
623-
declare <vscale x 4 x half> @llvm.vector.interleave2.nxv4f16(<vscale x 2 x half>, <vscale x 2 x half>)
624-
declare <vscale x 8 x half> @llvm.vector.interleave2.nxv8f16(<vscale x 4 x half>, <vscale x 4 x half>)
625-
declare <vscale x 16 x half> @llvm.vector.interleave2.nxv16f16(<vscale x 8 x half>, <vscale x 8 x half>)
626-
declare <vscale x 4 x float> @llvm.vector.interleave2.nxv4f32(<vscale x 2 x float>, <vscale x 2 x float>)
627-
declare <vscale x 8 x float> @llvm.vector.interleave2.nxv8f32(<vscale x 4 x float>, <vscale x 4 x float>)
628-
declare <vscale x 4 x double> @llvm.vector.interleave2.nxv4f64(<vscale x 2 x double>, <vscale x 2 x double>)
629-
630-
; Integer declarations
631-
declare <vscale x 32 x i8> @llvm.vector.interleave2.nxv32i8(<vscale x 16 x i8>, <vscale x 16 x i8>)
632-
declare <vscale x 16 x i16> @llvm.vector.interleave2.nxv16i16(<vscale x 8 x i16>, <vscale x 8 x i16>)
633-
declare <vscale x 8 x i32> @llvm.vector.interleave2.nxv8i32(<vscale x 4 x i32>, <vscale x 4 x i32>)
634-
declare <vscale x 4 x i64> @llvm.vector.interleave2.nxv4i64(<vscale x 2 x i64>, <vscale x 2 x i64>)
635-
636-
; Predicated
637-
declare <vscale x 32 x i1> @llvm.vector.interleave2.nxv32i1(<vscale x 16 x i1>, <vscale x 16 x i1>)
638-
declare <vscale x 16 x i1> @llvm.vector.interleave2.nxv16i1(<vscale x 8 x i1>, <vscale x 8 x i1>)
639-
declare <vscale x 8 x i1> @llvm.vector.interleave2.nxv8i1(<vscale x 4 x i1>, <vscale x 4 x i1>)
640-
declare <vscale x 4 x i1> @llvm.vector.interleave2.nxv4i1(<vscale x 2 x i1>, <vscale x 2 x i1>)
641-
642-
; Illegal type size
643-
declare <vscale x 16 x i32> @llvm.vector.interleave2.nxv16i32(<vscale x 8 x i32>, <vscale x 8 x i32>)
644-
declare <vscale x 8 x i64> @llvm.vector.interleave2.nxv8i64(<vscale x 4 x i64>, <vscale x 4 x i64>)
645-
646-
declare <vscale x 16 x i8> @llvm.vector.interleave2.nxv16i8(<vscale x 8 x i8>, <vscale x 8 x i8>)
647-
declare <vscale x 8 x i16> @llvm.vector.interleave2.nxv8i16(<vscale x 4 x i16>, <vscale x 4 x i16>)
648-
declare <vscale x 4 x i32> @llvm.vector.interleave2.nxv4i32(<vscale x 2 x i32>, <vscale x 2 x i32>)
649-
declare <vscale x 4 x i16> @llvm.vector.interleave2.nxv4i16(<vscale x 2 x i16>, <vscale x 2 x i16>)
650-
declare <vscale x 8 x i16> @llvm.vector.interleave4.nxv8i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i16>)

llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14965,22 +14965,6 @@ define <vscale x 4 x i16> @interleave2_same_const_splat_nxv4i16() {
1496514965
}
1496614966

1496714967
define <vscale x 4 x i16> @interleave2_diff_const_splat_nxv4i16() {
14968-
; SVE-LABEL: interleave2_diff_const_splat_nxv4i16:
14969-
; SVE: // %bb.0:
14970-
; SVE-NEXT: mov z0.d, #4 // =0x4
14971-
; SVE-NEXT: mov z1.d, #3 // =0x3
14972-
; SVE-NEXT: zip2 z2.d, z1.d, z0.d
14973-
; SVE-NEXT: zip1 z0.d, z1.d, z0.d
14974-
; SVE-NEXT: uzp1 z0.s, z0.s, z2.s
14975-
; SVE-NEXT: ret
14976-
;
14977-
; SME2-LABEL: interleave2_diff_const_splat_nxv4i16:
14978-
; SME2: // %bb.0:
14979-
; SME2-NEXT: mov z0.d, #4 // =0x4
14980-
; SME2-NEXT: mov z1.d, #3 // =0x3
14981-
; SME2-NEXT: zip { z0.d, z1.d }, z1.d, z0.d
14982-
; SME2-NEXT: uzp1 z0.s, z0.s, z1.s
14983-
; SME2-NEXT: ret
1498414968
; V-LABEL: interleave2_diff_const_splat_nxv4i16:
1498514969
; V: # %bb.0:
1498614970
; V-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
@@ -15045,26 +15029,6 @@ define <vscale x 4 x i16> @interleave2_same_nonconst_splat_nxv4i16(i16 %a) {
1504515029
}
1504615030

1504715031
define <vscale x 4 x i16> @interleave2_diff_nonconst_splat_nxv4i16(i16 %a, i16 %b) {
15048-
; SVE-LABEL: interleave2_diff_nonconst_splat_nxv4i16:
15049-
; SVE: // %bb.0:
15050-
; SVE-NEXT: // kill: def $w1 killed $w1 def $x1
15051-
; SVE-NEXT: // kill: def $w0 killed $w0 def $x0
15052-
; SVE-NEXT: mov z0.d, x0
15053-
; SVE-NEXT: mov z1.d, x1
15054-
; SVE-NEXT: zip2 z2.d, z0.d, z1.d
15055-
; SVE-NEXT: zip1 z0.d, z0.d, z1.d
15056-
; SVE-NEXT: uzp1 z0.s, z0.s, z2.s
15057-
; SVE-NEXT: ret
15058-
;
15059-
; SME2-LABEL: interleave2_diff_nonconst_splat_nxv4i16:
15060-
; SME2: // %bb.0:
15061-
; SME2-NEXT: // kill: def $w1 killed $w1 def $x1
15062-
; SME2-NEXT: // kill: def $w0 killed $w0 def $x0
15063-
; SME2-NEXT: mov z0.d, x0
15064-
; SME2-NEXT: mov z1.d, x1
15065-
; SME2-NEXT: zip { z0.d, z1.d }, z0.d, z1.d
15066-
; SME2-NEXT: uzp1 z0.s, z0.s, z1.s
15067-
; SME2-NEXT: ret
1506815032
; V-LABEL: interleave2_diff_nonconst_splat_nxv4i16:
1506915033
; V: # %bb.0:
1507015034
; V-NEXT: vsetvli a2, zero, e16, mf2, ta, ma

0 commit comments

Comments
 (0)