Skip to content

Commit b42fe67

Browse files
authored
[DAG] Add users of operand of simplified extract_vector_elt to worklist (#100074)
This helps to ensure we revisit the last extract_element uses of a node so that it can be optimized away in cases such as extract(insert(scalartovec(x), 1), 0).
1 parent 1a3cfe5 commit b42fe67

17 files changed

+1206
-1487
lines changed

llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22533,6 +22533,7 @@ SDValue DAGCombiner::visitEXTRACT_VECTOR_ELT(SDNode *N) {
2253322533
if (VecOp.getOpcode() == ISD::INSERT_VECTOR_ELT &&
2253422534
Index == VecOp.getOperand(2)) {
2253522535
SDValue Elt = VecOp.getOperand(1);
22536+
AddUsersToWorklist(VecOp.getNode());
2253622537
return VecVT.isInteger() ? DAG.getAnyExtOrTrunc(Elt, DL, ScalarVT) : Elt;
2253722538
}
2253822539

llvm/test/CodeGen/AArch64/arm64-subvector-extend.ll

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -951,10 +951,8 @@ define <1 x i128> @sext_v1x64(<1 x i64> %arg) {
951951
; CHECK-SD-LABEL: sext_v1x64:
952952
; CHECK-SD: // %bb.0:
953953
; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
954-
; CHECK-SD-NEXT: fmov x8, d0
955-
; CHECK-SD-NEXT: asr x1, x8, #63
956-
; CHECK-SD-NEXT: mov.d v0[1], x1
957954
; CHECK-SD-NEXT: fmov x0, d0
955+
; CHECK-SD-NEXT: asr x1, x0, #63
958956
; CHECK-SD-NEXT: ret
959957
;
960958
; CHECK-GI-LABEL: sext_v1x64:

llvm/test/CodeGen/AArch64/arm64-vabs.ll

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,28 +1802,25 @@ define <2 x i128> @uabd_i64(<2 x i64> %a, <2 x i64> %b) {
18021802
; CHECK-NEXT: mov.d x8, v0[1]
18031803
; CHECK-NEXT: mov.d x9, v1[1]
18041804
; CHECK-NEXT: fmov x10, d0
1805-
; CHECK-NEXT: fmov x11, d1
1806-
; CHECK-NEXT: asr x12, x10, #63
1807-
; CHECK-NEXT: asr x13, x11, #63
1808-
; CHECK-NEXT: subs x10, x10, x11
1805+
; CHECK-NEXT: fmov x12, d1
1806+
; CHECK-NEXT: asr x14, x10, #63
18091807
; CHECK-NEXT: asr x11, x8, #63
1810-
; CHECK-NEXT: asr x14, x9, #63
1811-
; CHECK-NEXT: sbc x12, x12, x13
1808+
; CHECK-NEXT: asr x13, x9, #63
1809+
; CHECK-NEXT: asr x15, x12, #63
18121810
; CHECK-NEXT: subs x8, x8, x9
1813-
; CHECK-NEXT: sbc x9, x11, x14
1814-
; CHECK-NEXT: asr x13, x12, #63
1815-
; CHECK-NEXT: asr x11, x9, #63
1816-
; CHECK-NEXT: eor x10, x10, x13
1817-
; CHECK-NEXT: eor x8, x8, x11
1818-
; CHECK-NEXT: eor x9, x9, x11
1819-
; CHECK-NEXT: subs x2, x8, x11
1820-
; CHECK-NEXT: eor x8, x12, x13
1821-
; CHECK-NEXT: sbc x3, x9, x11
1822-
; CHECK-NEXT: subs x9, x10, x13
1823-
; CHECK-NEXT: fmov d0, x9
1824-
; CHECK-NEXT: sbc x1, x8, x13
1825-
; CHECK-NEXT: mov.d v0[1], x1
1826-
; CHECK-NEXT: fmov x0, d0
1811+
; CHECK-NEXT: sbc x9, x11, x13
1812+
; CHECK-NEXT: subs x10, x10, x12
1813+
; CHECK-NEXT: sbc x11, x14, x15
1814+
; CHECK-NEXT: asr x13, x9, #63
1815+
; CHECK-NEXT: asr x12, x11, #63
1816+
; CHECK-NEXT: eor x8, x8, x13
1817+
; CHECK-NEXT: eor x9, x9, x13
1818+
; CHECK-NEXT: eor x10, x10, x12
1819+
; CHECK-NEXT: eor x11, x11, x12
1820+
; CHECK-NEXT: subs x0, x10, x12
1821+
; CHECK-NEXT: sbc x1, x11, x12
1822+
; CHECK-NEXT: subs x2, x8, x13
1823+
; CHECK-NEXT: sbc x3, x9, x13
18271824
; CHECK-NEXT: ret
18281825
%aext = sext <2 x i64> %a to <2 x i128>
18291826
%bext = sext <2 x i64> %b to <2 x i128>

llvm/test/CodeGen/AArch64/cmp-select-sign.ll

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -241,21 +241,18 @@ define <4 x i32> @not_sign_4xi32_3(<4 x i32> %a) {
241241
define <4 x i65> @sign_4xi65(<4 x i65> %a) {
242242
; CHECK-LABEL: sign_4xi65:
243243
; CHECK: // %bb.0:
244-
; CHECK-NEXT: sbfx x8, x1, #0, #1
245-
; CHECK-NEXT: sbfx x9, x5, #0, #1
246-
; CHECK-NEXT: sbfx x10, x3, #0, #1
247-
; CHECK-NEXT: lsr x1, x8, #63
248-
; CHECK-NEXT: orr x8, x8, #0x1
249-
; CHECK-NEXT: lsr x3, x10, #63
250-
; CHECK-NEXT: fmov d0, x8
251-
; CHECK-NEXT: sbfx x8, x7, #0, #1
252-
; CHECK-NEXT: lsr x5, x9, #63
253-
; CHECK-NEXT: orr x2, x10, #0x1
254-
; CHECK-NEXT: orr x4, x9, #0x1
255-
; CHECK-NEXT: lsr x7, x8, #63
256-
; CHECK-NEXT: orr x6, x8, #0x1
257-
; CHECK-NEXT: mov v0.d[1], x1
258-
; CHECK-NEXT: fmov x0, d0
244+
; CHECK-NEXT: sbfx x8, x5, #0, #1
245+
; CHECK-NEXT: sbfx x9, x3, #0, #1
246+
; CHECK-NEXT: sbfx x10, x1, #0, #1
247+
; CHECK-NEXT: sbfx x11, x7, #0, #1
248+
; CHECK-NEXT: lsr x1, x10, #63
249+
; CHECK-NEXT: lsr x3, x9, #63
250+
; CHECK-NEXT: lsr x5, x8, #63
251+
; CHECK-NEXT: lsr x7, x11, #63
252+
; CHECK-NEXT: orr x0, x10, #0x1
253+
; CHECK-NEXT: orr x2, x9, #0x1
254+
; CHECK-NEXT: orr x4, x8, #0x1
255+
; CHECK-NEXT: orr x6, x11, #0x1
259256
; CHECK-NEXT: ret
260257
%c = icmp sgt <4 x i65> %a, <i65 -1, i65 -1, i65 -1, i65 -1>
261258
%res = select <4 x i1> %c, <4 x i65> <i65 1, i65 1, i65 1, i65 1>, <4 x i65 > <i65 -1, i65 -1, i65 -1, i65 -1>

0 commit comments

Comments
 (0)