Skip to content

Commit d148a1a

Browse files
committed
[X86] Add tests support shifts + and in LowerSELECTWithCmpZero; NFC
1 parent 26b786a commit d148a1a

File tree

1 file changed

+191
-0
lines changed

1 file changed

+191
-0
lines changed

llvm/test/CodeGen/X86/pull-conditional-binop-through-shift.ll

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,3 +697,194 @@ define i32 @add_nosignbit_select_ashr(i32 %x, i1 %cond, ptr %dst) {
697697
store i32 %r, ptr %dst
698698
ret i32 %r
699699
}
700+
701+
define i32 @shl_signbit_select_add(i32 %x, i1 %cond, ptr %dst) {
702+
; X64-LABEL: shl_signbit_select_add:
703+
; X64: # %bb.0:
704+
; X64-NEXT: movl %edi, %eax
705+
; X64-NEXT: shll $4, %eax
706+
; X64-NEXT: testb $1, %sil
707+
; X64-NEXT: cmovel %edi, %eax
708+
; X64-NEXT: addl $123456, %eax # imm = 0x1E240
709+
; X64-NEXT: movl %eax, (%rdx)
710+
; X64-NEXT: retq
711+
;
712+
; X86-LABEL: shl_signbit_select_add:
713+
; X86: # %bb.0:
714+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
715+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
716+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
717+
; X86-NEXT: je .LBB24_2
718+
; X86-NEXT: # %bb.1:
719+
; X86-NEXT: shll $4, %eax
720+
; X86-NEXT: .LBB24_2:
721+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
722+
; X86-NEXT: movl %eax, (%ecx)
723+
; X86-NEXT: retl
724+
%t0 = shl i32 %x, 4
725+
%t1 = select i1 %cond, i32 %t0, i32 %x
726+
%r = add i32 %t1, 123456
727+
store i32 %r, ptr %dst
728+
ret i32 %r
729+
}
730+
731+
define i32 @shl_signbit_select_add_fail(i32 %x, i1 %cond, ptr %dst) {
732+
; X64-LABEL: shl_signbit_select_add_fail:
733+
; X64: # %bb.0:
734+
; X64-NEXT: movl %edi, %eax
735+
; X64-NEXT: shll $4, %eax
736+
; X64-NEXT: testb $1, %sil
737+
; X64-NEXT: cmovnel %edi, %eax
738+
; X64-NEXT: addl $123456, %eax # imm = 0x1E240
739+
; X64-NEXT: movl %eax, (%rdx)
740+
; X64-NEXT: retq
741+
;
742+
; X86-LABEL: shl_signbit_select_add_fail:
743+
; X86: # %bb.0:
744+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
745+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
746+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
747+
; X86-NEXT: jne .LBB25_2
748+
; X86-NEXT: # %bb.1:
749+
; X86-NEXT: shll $4, %eax
750+
; X86-NEXT: .LBB25_2:
751+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
752+
; X86-NEXT: movl %eax, (%ecx)
753+
; X86-NEXT: retl
754+
%t0 = shl i32 %x, 4
755+
%t1 = select i1 %cond, i32 %x, i32 %t0
756+
%r = add i32 %t1, 123456
757+
store i32 %r, ptr %dst
758+
ret i32 %r
759+
}
760+
761+
define i32 @lshr_signbit_select_add(i32 %x, i1 %cond, ptr %dst, i32 %y) {
762+
; X64-LABEL: lshr_signbit_select_add:
763+
; X64: # %bb.0:
764+
; X64-NEXT: movl %edi, %eax
765+
; X64-NEXT: # kill: def $cl killed $cl killed $ecx
766+
; X64-NEXT: shrl %cl, %eax
767+
; X64-NEXT: testb $1, %sil
768+
; X64-NEXT: cmovel %edi, %eax
769+
; X64-NEXT: addl $123456, %eax # imm = 0x1E240
770+
; X64-NEXT: movl %eax, (%rdx)
771+
; X64-NEXT: retq
772+
;
773+
; X86-LABEL: lshr_signbit_select_add:
774+
; X86: # %bb.0:
775+
; X86-NEXT: pushl %esi
776+
; X86-NEXT: .cfi_def_cfa_offset 8
777+
; X86-NEXT: .cfi_offset %esi, -8
778+
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
779+
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
780+
; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
781+
; X86-NEXT: movl %esi, %eax
782+
; X86-NEXT: shrl %cl, %eax
783+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
784+
; X86-NEXT: jne .LBB26_2
785+
; X86-NEXT: # %bb.1:
786+
; X86-NEXT: movl %esi, %eax
787+
; X86-NEXT: .LBB26_2:
788+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
789+
; X86-NEXT: movl %eax, (%edx)
790+
; X86-NEXT: popl %esi
791+
; X86-NEXT: .cfi_def_cfa_offset 4
792+
; X86-NEXT: retl
793+
%t0 = lshr i32 %x, %y
794+
%t1 = select i1 %cond, i32 %t0, i32 %x
795+
%r = add i32 %t1, 123456
796+
store i32 %r, ptr %dst
797+
ret i32 %r
798+
}
799+
800+
define i32 @ashr_signbit_select_add(i32 %x, i1 %cond, ptr %dst) {
801+
; X64-LABEL: ashr_signbit_select_add:
802+
; X64: # %bb.0:
803+
; X64-NEXT: movl %edi, %eax
804+
; X64-NEXT: sarl $4, %eax
805+
; X64-NEXT: testb $1, %sil
806+
; X64-NEXT: cmovel %edi, %eax
807+
; X64-NEXT: addl $123456, %eax # imm = 0x1E240
808+
; X64-NEXT: movl %eax, (%rdx)
809+
; X64-NEXT: retq
810+
;
811+
; X86-LABEL: ashr_signbit_select_add:
812+
; X86: # %bb.0:
813+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
814+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
815+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
816+
; X86-NEXT: je .LBB27_2
817+
; X86-NEXT: # %bb.1:
818+
; X86-NEXT: sarl $4, %eax
819+
; X86-NEXT: .LBB27_2:
820+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
821+
; X86-NEXT: movl %eax, (%ecx)
822+
; X86-NEXT: retl
823+
%t0 = ashr i32 %x, 4
824+
%t1 = select i1 %cond, i32 %t0, i32 %x
825+
%r = add i32 %t1, 123456
826+
store i32 %r, ptr %dst
827+
ret i32 %r
828+
}
829+
830+
define i32 @and_signbit_select_add(i32 %x, i1 %cond, ptr %dst, i32 %y) {
831+
; X64-LABEL: and_signbit_select_add:
832+
; X64: # %bb.0:
833+
; X64-NEXT: # kill: def $ecx killed $ecx def $rcx
834+
; X64-NEXT: andl %edi, %ecx
835+
; X64-NEXT: testb $1, %sil
836+
; X64-NEXT: cmovnel %edi, %ecx
837+
; X64-NEXT: leal 123456(%rcx), %eax
838+
; X64-NEXT: movl %eax, (%rdx)
839+
; X64-NEXT: retq
840+
;
841+
; X86-LABEL: and_signbit_select_add:
842+
; X86: # %bb.0:
843+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
844+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
845+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
846+
; X86-NEXT: jne .LBB28_2
847+
; X86-NEXT: # %bb.1:
848+
; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
849+
; X86-NEXT: .LBB28_2:
850+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
851+
; X86-NEXT: movl %eax, (%ecx)
852+
; X86-NEXT: retl
853+
%t0 = and i32 %x, %y
854+
%t1 = select i1 %cond, i32 %x, i32 %t0
855+
%r = add i32 %t1, 123456
856+
store i32 %r, ptr %dst
857+
ret i32 %r
858+
}
859+
860+
861+
define i32 @and_signbit_select_add_fail(i32 %x, i1 %cond, ptr %dst, i32 %y) {
862+
; X64-LABEL: and_signbit_select_add_fail:
863+
; X64: # %bb.0:
864+
; X64-NEXT: # kill: def $ecx killed $ecx def $rcx
865+
; X64-NEXT: andl %edi, %ecx
866+
; X64-NEXT: testb $1, %sil
867+
; X64-NEXT: cmovel %edi, %ecx
868+
; X64-NEXT: leal 123456(%rcx), %eax
869+
; X64-NEXT: movl %eax, (%rdx)
870+
; X64-NEXT: retq
871+
;
872+
; X86-LABEL: and_signbit_select_add_fail:
873+
; X86: # %bb.0:
874+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
875+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
876+
; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
877+
; X86-NEXT: je .LBB29_2
878+
; X86-NEXT: # %bb.1:
879+
; X86-NEXT: andl {{[0-9]+}}(%esp), %eax
880+
; X86-NEXT: .LBB29_2:
881+
; X86-NEXT: addl $123456, %eax # imm = 0x1E240
882+
; X86-NEXT: movl %eax, (%ecx)
883+
; X86-NEXT: retl
884+
%t0 = and i32 %x, %y
885+
%t1 = select i1 %cond, i32 %t0, i32 %x
886+
%r = add i32 %t1, 123456
887+
store i32 %r, ptr %dst
888+
ret i32 %r
889+
}
890+

0 commit comments

Comments
 (0)