[X86] Add test case to show missed opportunity to remove an explicit AND on the bit position from BT when it has known zeros. NFC

If the bit position has known zeros in it, then the AND immediate will likely be optimized to remove bits.

This can prevent GetDemandedBits from recognizing that the AND is unnecessary.

llvm-svn: 354501
This commit is contained in:
Craig Topper 2019-02-20 19:02:01 +00:00
parent e4a7a46151
commit b1b2fa35ed
1 changed files with 31 additions and 0 deletions

View File

@ -1144,3 +1144,34 @@ define void @demanded_i32(i32* nocapture readonly, i32* nocapture, i32) nounwind
; <label>:16:
ret void
}
; Make sure we can simplify bt when the shift amount has known zeros in it
; which cause the and mask to have bits removed.
define zeroext i1 @demanded_with_known_zeroes(i32 %bit, i32 %bits) {
; X86-LABEL: demanded_with_known_zeroes:
; X86: # %bb.0: # %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: movb {{[0-9]+}}(%esp), %cl
; X86-NEXT: shlb $2, %cl
; X86-NEXT: andb $28, %cl
; X86-NEXT: movzbl %cl, %ecx
; X86-NEXT: btl %ecx, %eax
; X86-NEXT: setb %al
; X86-NEXT: retl
;
; X64-LABEL: demanded_with_known_zeroes:
; X64: # %bb.0: # %entry
; X64-NEXT: shlb $2, %dil
; X64-NEXT: andb $28, %dil
; X64-NEXT: movzbl %dil, %eax
; X64-NEXT: btl %eax, %esi
; X64-NEXT: setb %al
; X64-NEXT: retq
entry:
%bit2 = shl i32 %bit, 2
%and = and i32 %bit2, 31
%shl = shl i32 1, %and
%and1 = and i32 %shl, %bits
%tobool = icmp ne i32 %and1, 0
ret i1 %tobool
}