Skip to content

Commit 651fa66

Browse files
committed
[TargetLowering] SimplifyDemandedBits ANY_EXTEND/ANY_EXTEND_VECTOR_INREG multi-use handling
Call SimplifyMultipleUseDemandedBits to peek through extended source args with multiple uses
1 parent 5e70f4b commit 651fa66

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,6 +1779,11 @@ bool TargetLowering::SimplifyDemandedBits(
17791779
assert(!Known.hasConflict() && "Bits known to be one AND zero?");
17801780
assert(Known.getBitWidth() == InBits && "Src width has changed?");
17811781
Known = Known.zext(BitWidth, false /* => any extend */);
1782+
1783+
// Attempt to avoid multi-use ops if we don't need anything from them.
1784+
if (SDValue NewSrc = SimplifyMultipleUseDemandedBits(
1785+
Src, InDemandedBits, InDemandedElts, TLO.DAG, Depth + 1))
1786+
return TLO.CombineTo(Op, TLO.DAG.getNode(Op.getOpcode(), dl, VT, NewSrc));
17821787
break;
17831788
}
17841789
case ISD::TRUNCATE: {

llvm/test/CodeGen/X86/vector-sext.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,11 +1748,11 @@ define <4 x i64> @load_sext_4i1_to_4i64(<4 x i1> *%ptr) {
17481748
; SSE41-NEXT: pinsrd $1, %ecx, %xmm1
17491749
; SSE41-NEXT: movl %eax, %ecx
17501750
; SSE41-NEXT: shrl $2, %ecx
1751+
; SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
17511752
; SSE41-NEXT: pinsrd $2, %ecx, %xmm1
17521753
; SSE41-NEXT: shrl $3, %eax
17531754
; SSE41-NEXT: pinsrd $3, %eax, %xmm1
17541755
; SSE41-NEXT: pand {{.*}}(%rip), %xmm1
1755-
; SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
17561756
; SSE41-NEXT: psllq $63, %xmm0
17571757
; SSE41-NEXT: psrad $31, %xmm0
17581758
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
@@ -1851,11 +1851,11 @@ define <4 x i64> @load_sext_4i1_to_4i64(<4 x i1> *%ptr) {
18511851
; X32-SSE41-NEXT: pinsrd $1, %ecx, %xmm1
18521852
; X32-SSE41-NEXT: movl %eax, %ecx
18531853
; X32-SSE41-NEXT: shrl $2, %ecx
1854+
; X32-SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
18541855
; X32-SSE41-NEXT: pinsrd $2, %ecx, %xmm1
18551856
; X32-SSE41-NEXT: shrl $3, %eax
18561857
; X32-SSE41-NEXT: pinsrd $3, %eax, %xmm1
18571858
; X32-SSE41-NEXT: pand {{\.LCPI.*}}, %xmm1
1858-
; X32-SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
18591859
; X32-SSE41-NEXT: psllq $63, %xmm0
18601860
; X32-SSE41-NEXT: psrad $31, %xmm0
18611861
; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]

0 commit comments

Comments
 (0)