Skip to content

Commit 92e0c0d

Browse files
committed
[DAG] Restrict insert_subvector undef, splat_veector, dontcare transform
On the extract_subvector side, we already have the restriction. With D158201, we'd start getting unprofitable splat combines unless we add the same one on the extract_subvector side. Differential Revision: https://reviews.llvm.org/D158202
1 parent 80ce7ce commit 92e0c0d

File tree

2 files changed

+5
-13
lines changed

2 files changed

+5
-13
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25620,7 +25620,8 @@ SDValue DAGCombiner::visitINSERT_SUBVECTOR(SDNode *N) {
2562025620
// Simplify scalar inserts into an undef vector:
2562125621
// insert_subvector undef, (splat X), N2 -> splat X
2562225622
if (N0.isUndef() && N1.getOpcode() == ISD::SPLAT_VECTOR)
25623-
return DAG.getNode(ISD::SPLAT_VECTOR, SDLoc(N), VT, N1.getOperand(0));
25623+
if (DAG.isConstantValueOfAnyType(N1.getOperand(0)) || N1.hasOneUse())
25624+
return DAG.getNode(ISD::SPLAT_VECTOR, SDLoc(N), VT, N1.getOperand(0));
2562425625

2562525626
// If we are inserting a bitcast value into an undef, with the same
2562625627
// number of elements, just use the bitcast input of the extract.

llvm/test/CodeGen/RISCV/rvv/splats-with-mixed-vl.ll

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,8 @@ define <vscale x 1 x i32> @extract_vector_multiuse2(ptr %p, ptr %p2, i32 %v) {
159159
; CHECK: # %bb.0:
160160
; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
161161
; CHECK-NEXT: vmv.v.x v8, a2
162-
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
163-
; CHECK-NEXT: vmv.v.x v9, a2
164162
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
165-
; CHECK-NEXT: vse32.v v9, (a0)
163+
; CHECK-NEXT: vse32.v v8, (a0)
166164
; CHECK-NEXT: ret
167165
%elt.head = insertelement <vscale x 1 x i32> poison, i32 %v, i32 0
168166
%splat = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
@@ -177,10 +175,8 @@ define void @extract_vector_mixed1(ptr %p, ptr %p2, i32 %v) {
177175
; CHECK: # %bb.0:
178176
; CHECK-NEXT: vsetvli a3, zero, e32, mf2, ta, ma
179177
; CHECK-NEXT: vmv.v.x v8, a2
180-
; CHECK-NEXT: vsetvli a3, zero, e32, m1, ta, ma
181-
; CHECK-NEXT: vmv.v.x v9, a2
182178
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
183-
; CHECK-NEXT: vse32.v v9, (a0)
179+
; CHECK-NEXT: vse32.v v8, (a0)
184180
; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
185181
; CHECK-NEXT: vse32.v v8, (a1)
186182
; CHECK-NEXT: ret
@@ -200,8 +196,6 @@ define void @extract_vector_mixed2(ptr %p, ptr %p2, i32 %v) {
200196
; CHECK-NEXT: vsetvli a3, zero, e32, mf2, ta, ma
201197
; CHECK-NEXT: vmv.v.x v8, a2
202198
; CHECK-NEXT: vse32.v v8, (a0)
203-
; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma
204-
; CHECK-NEXT: vmv.v.x v8, a2
205199
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
206200
; CHECK-NEXT: vse32.v v8, (a1)
207201
; CHECK-NEXT: ret
@@ -219,12 +213,9 @@ define void @extract_vector_mixed3(ptr %p, ptr %p2, i32 %v) {
219213
; CHECK: # %bb.0:
220214
; CHECK-NEXT: vsetvli a3, zero, e32, mf2, ta, ma
221215
; CHECK-NEXT: vmv.v.x v8, a2
222-
; CHECK-NEXT: vsetvli a3, zero, e32, m1, ta, ma
223-
; CHECK-NEXT: vmv.v.x v9, a2
224-
; CHECK-NEXT: vsetvli a2, zero, e32, mf2, ta, ma
225216
; CHECK-NEXT: vse32.v v8, (a0)
226217
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
227-
; CHECK-NEXT: vse32.v v9, (a1)
218+
; CHECK-NEXT: vse32.v v8, (a1)
228219
; CHECK-NEXT: ret
229220
%elt.head = insertelement <vscale x 1 x i32> poison, i32 %v, i32 0
230221
%splat = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer

0 commit comments

Comments
 (0)