Skip to content

Commit e3deb7d

Browse files
committed
[X86] computeKnownBitsForTargetNode - add X86ISD::AND KnownBits handling
Fixes #54171
1 parent 330b532 commit e3deb7d

File tree

2 files changed

+36
-60
lines changed

2 files changed

+36
-60
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36269,6 +36269,15 @@ void X86TargetLowering::computeKnownBitsForTargetNode(const SDValue Op,
3626936269
}
3627036270
break;
3627136271
}
36272+
case X86ISD::AND: {
36273+
if (Op.getResNo() == 0) {
36274+
KnownBits Known2;
36275+
Known = DAG.computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);
36276+
Known2 = DAG.computeKnownBits(Op.getOperand(0), DemandedElts, Depth + 1);
36277+
Known &= Known2;
36278+
}
36279+
break;
36280+
}
3627236281
case X86ISD::ANDNP: {
3627336282
KnownBits Known2;
3627436283
Known = DAG.computeKnownBits(Op.getOperand(1), DemandedElts, Depth + 1);

llvm/test/CodeGen/X86/vector-unsigned-cmp.ll

Lines changed: 27 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -535,55 +535,28 @@ define <8 x i16> @PR47448_ugt(i16 signext %0) {
535535
ret <8 x i16> %6
536536
}
537537

538-
; FIXME: Recognise the knownbits from X86ISD::AND in previous block.
538+
; Recognise the knownbits from X86ISD::AND in previous block.
539539
define void @PR54171(<4 x i64>* %mask0, <4 x i64>* %mask1, i64 %i) {
540-
; SSE2-LABEL: PR54171:
541-
; SSE2: # %bb.0: # %entry
542-
; SSE2-NEXT: andq $7, %rdx
543-
; SSE2-NEXT: je .LBB18_2
544-
; SSE2-NEXT: # %bb.1: # %if.then
545-
; SSE2-NEXT: movd %edx, %xmm0
546-
; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
547-
; SSE2-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
548-
; SSE2-NEXT: movdqa %xmm0, %xmm1
549-
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
550-
; SSE2-NEXT: movdqa %xmm0, %xmm2
551-
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
552-
; SSE2-NEXT: movdqa %xmm2, (%rdi)
553-
; SSE2-NEXT: movdqa %xmm1, 16(%rdi)
554-
; SSE2-NEXT: movdqa %xmm0, %xmm1
555-
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
556-
; SSE2-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
557-
; SSE2-NEXT: movdqa %xmm0, (%rsi)
558-
; SSE2-NEXT: movdqa %xmm1, 16(%rsi)
559-
; SSE2-NEXT: .LBB18_2: # %if.end
560-
; SSE2-NEXT: retq
561-
;
562-
; SSE41-LABEL: PR54171:
563-
; SSE41: # %bb.0: # %entry
564-
; SSE41-NEXT: andq $7, %rdx
565-
; SSE41-NEXT: je .LBB18_2
566-
; SSE41-NEXT: # %bb.1: # %if.then
567-
; SSE41-NEXT: movd %edx, %xmm0
568-
; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
569-
; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [3,3,4,4]
570-
; SSE41-NEXT: pmaxud %xmm0, %xmm1
571-
; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
572-
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [1,1,2,2]
573-
; SSE41-NEXT: pmaxud %xmm0, %xmm2
574-
; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
575-
; SSE41-NEXT: movdqa %xmm2, (%rdi)
576-
; SSE41-NEXT: movdqa %xmm1, 16(%rdi)
577-
; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [7,7,8,8]
578-
; SSE41-NEXT: pmaxud %xmm0, %xmm1
579-
; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
580-
; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [5,5,6,6]
581-
; SSE41-NEXT: pmaxud %xmm0, %xmm2
582-
; SSE41-NEXT: pcmpeqd %xmm0, %xmm2
583-
; SSE41-NEXT: movdqa %xmm2, (%rsi)
584-
; SSE41-NEXT: movdqa %xmm1, 16(%rsi)
585-
; SSE41-NEXT: .LBB18_2: # %if.end
586-
; SSE41-NEXT: retq
540+
; SSE-LABEL: PR54171:
541+
; SSE: # %bb.0: # %entry
542+
; SSE-NEXT: andq $7, %rdx
543+
; SSE-NEXT: je .LBB18_2
544+
; SSE-NEXT: # %bb.1: # %if.then
545+
; SSE-NEXT: movd %edx, %xmm0
546+
; SSE-NEXT: pshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
547+
; SSE-NEXT: movdqa %xmm0, %xmm1
548+
; SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
549+
; SSE-NEXT: movdqa %xmm0, %xmm2
550+
; SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2
551+
; SSE-NEXT: movdqa %xmm2, (%rdi)
552+
; SSE-NEXT: movdqa %xmm1, 16(%rdi)
553+
; SSE-NEXT: movdqa %xmm0, %xmm1
554+
; SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
555+
; SSE-NEXT: pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
556+
; SSE-NEXT: movdqa %xmm0, (%rsi)
557+
; SSE-NEXT: movdqa %xmm1, 16(%rsi)
558+
; SSE-NEXT: .LBB18_2: # %if.end
559+
; SSE-NEXT: retq
587560
;
588561
; AVX1-LABEL: PR54171:
589562
; AVX1: # %bb.0: # %entry
@@ -592,16 +565,12 @@ define void @PR54171(<4 x i64>* %mask0, <4 x i64>* %mask1, i64 %i) {
592565
; AVX1-NEXT: # %bb.1: # %if.then
593566
; AVX1-NEXT: vmovd %edx, %xmm0
594567
; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,0,0,0]
595-
; AVX1-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
596-
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
597-
; AVX1-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
598-
; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm2
568+
; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
569+
; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
599570
; AVX1-NEXT: vmovdqa %xmm2, (%rdi)
600571
; AVX1-NEXT: vmovdqa %xmm1, 16(%rdi)
601-
; AVX1-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
602-
; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm1
603-
; AVX1-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm2
604-
; AVX1-NEXT: vpcmpeqd %xmm2, %xmm0, %xmm0
572+
; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm1
573+
; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
605574
; AVX1-NEXT: vmovdqa %xmm0, (%rsi)
606575
; AVX1-NEXT: vmovdqa %xmm1, 16(%rsi)
607576
; AVX1-NEXT: .LBB18_2: # %if.end
@@ -614,11 +583,9 @@ define void @PR54171(<4 x i64>* %mask0, <4 x i64>* %mask1, i64 %i) {
614583
; AVX2-NEXT: # %bb.1: # %if.then
615584
; AVX2-NEXT: vmovd %edx, %xmm0
616585
; AVX2-NEXT: vpbroadcastd %xmm0, %ymm0
617-
; AVX2-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
618-
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm1
586+
; AVX2-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
619587
; AVX2-NEXT: vmovdqa %ymm1, (%rdi)
620-
; AVX2-NEXT: vpmaxud {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm1
621-
; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm0
588+
; AVX2-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
622589
; AVX2-NEXT: vmovdqa %ymm0, (%rsi)
623590
; AVX2-NEXT: .LBB18_2: # %if.end
624591
; AVX2-NEXT: vzeroupper

0 commit comments

Comments
 (0)