forked from OSchip/llvm-project
[TargetLowering] SimplifyDemandedBits ANY_EXTEND/ANY_EXTEND_VECTOR_INREG multi-use handling
Call SimplifyMultipleUseDemandedBits to peek through extended source args with multiple uses
This commit is contained in:
parent
5e70f4bdc1
commit
651fa669a2
|
@ -1779,6 +1779,11 @@ bool TargetLowering::SimplifyDemandedBits(
|
|||
assert(!Known.hasConflict() && "Bits known to be one AND zero?");
|
||||
assert(Known.getBitWidth() == InBits && "Src width has changed?");
|
||||
Known = Known.zext(BitWidth, false /* => any extend */);
|
||||
|
||||
// Attempt to avoid multi-use ops if we don't need anything from them.
|
||||
if (SDValue NewSrc = SimplifyMultipleUseDemandedBits(
|
||||
Src, InDemandedBits, InDemandedElts, TLO.DAG, Depth + 1))
|
||||
return TLO.CombineTo(Op, TLO.DAG.getNode(Op.getOpcode(), dl, VT, NewSrc));
|
||||
break;
|
||||
}
|
||||
case ISD::TRUNCATE: {
|
||||
|
|
|
@ -1748,11 +1748,11 @@ define <4 x i64> @load_sext_4i1_to_4i64(<4 x i1> *%ptr) {
|
|||
; SSE41-NEXT: pinsrd $1, %ecx, %xmm1
|
||||
; SSE41-NEXT: movl %eax, %ecx
|
||||
; SSE41-NEXT: shrl $2, %ecx
|
||||
; SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
|
||||
; SSE41-NEXT: pinsrd $2, %ecx, %xmm1
|
||||
; SSE41-NEXT: shrl $3, %eax
|
||||
; SSE41-NEXT: pinsrd $3, %eax, %xmm1
|
||||
; SSE41-NEXT: pand {{.*}}(%rip), %xmm1
|
||||
; SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
|
||||
; SSE41-NEXT: psllq $63, %xmm0
|
||||
; SSE41-NEXT: psrad $31, %xmm0
|
||||
; 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) {
|
|||
; X32-SSE41-NEXT: pinsrd $1, %ecx, %xmm1
|
||||
; X32-SSE41-NEXT: movl %eax, %ecx
|
||||
; X32-SSE41-NEXT: shrl $2, %ecx
|
||||
; X32-SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
|
||||
; X32-SSE41-NEXT: pinsrd $2, %ecx, %xmm1
|
||||
; X32-SSE41-NEXT: shrl $3, %eax
|
||||
; X32-SSE41-NEXT: pinsrd $3, %eax, %xmm1
|
||||
; X32-SSE41-NEXT: pand {{\.LCPI.*}}, %xmm1
|
||||
; X32-SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
|
||||
; X32-SSE41-NEXT: psllq $63, %xmm0
|
||||
; X32-SSE41-NEXT: psrad $31, %xmm0
|
||||
; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
|
||||
|
|
Loading…
Reference in New Issue