Lines Matching +full:0 +full:x64

3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=X64
26 ; X86: # %bb.0:
27 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
32 ; X64-LABEL: or_known_nonzero:
33 ; X64: # %bb.0:
34 ; X64-NEXT: orl $1, %edi
35 ; X64-NEXT: rep bsfl %edi, %eax
36 ; X64-NEXT: retq
44 ; X86: # %bb.0:
45 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
46 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
52 ; X64-LABEL: or_maybe_zero:
53 ; X64: # %bb.0:
54 ; X64-NEXT: orl %esi, %edi
55 ; X64-NEXT: movl $32, %eax
56 ; X64-NEXT: rep bsfl %edi, %eax
57 ; X64-NEXT: retq
65 ; X86: # %bb.0:
66 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
68 ; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
74 ; X64-LABEL: select_known_nonzero:
75 ; X64: # %bb.0:
76 ; X64-NEXT: orl $1, %esi
77 ; X64-NEXT: testb $1, %dil
78 ; X64-NEXT: movl $122, %eax
79 ; X64-NEXT: cmovnel %esi, %eax
80 ; X64-NEXT: rep bsfl %eax, %eax
81 ; X64-NEXT: retq
90 ; X86: # %bb.0:
91 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
94 ; X86-NEXT: testb $1, {{[0-9]+}}(%esp)
101 ; X64-LABEL: select_maybe_zero:
102 ; X64: # %bb.0:
103 ; X64-NEXT: orl $1, %esi
104 ; X64-NEXT: xorl %ecx, %ecx
105 ; X64-NEXT: testb $1, %dil
106 ; X64-NEXT: cmovnel %esi, %ecx
107 ; X64-NEXT: movl $32, %eax
108 ; X64-NEXT: rep bsfl %ecx, %eax
109 ; X64-NEXT: retq
111 %z = select i1 %c, i32 %y, i32 0
118 ; X86: # %bb.0:
119 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
125 ; X64-LABEL: shl_known_nonzero_1s_bit_set:
126 ; X64: # %bb.0:
127 ; X64-NEXT: movl %edi, %ecx
128 ; X64-NEXT: movl $123, %eax
129 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
130 ; X64-NEXT: shll %cl, %eax
131 ; X64-NEXT: rep bsfl %eax, %eax
132 ; X64-NEXT: retq
140 ; X86: # %bb.0:
141 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
142 ; X86-NEXT: movl $256, %eax # imm = 0x100
143 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
148 ; X64-LABEL: shl_known_nonzero_nsw:
149 ; X64: # %bb.0:
150 ; X64-NEXT: movl %edi, %ecx
151 ; X64-NEXT: orl $256, %esi # imm = 0x100
152 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
153 ; X64-NEXT: shll %cl, %esi
154 ; X64-NEXT: rep bsfl %esi, %eax
155 ; X64-NEXT: retq
164 ; X86: # %bb.0:
165 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
166 ; X86-NEXT: movl $256, %eax # imm = 0x100
167 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
172 ; X64-LABEL: shl_known_nonzero_nuw:
173 ; X64: # %bb.0:
174 ; X64-NEXT: movl %edi, %ecx
175 ; X64-NEXT: orl $256, %esi # imm = 0x100
176 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
177 ; X64-NEXT: shll %cl, %esi
178 ; X64-NEXT: rep bsfl %esi, %eax
179 ; X64-NEXT: retq
188 ; X86: # %bb.0:
189 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
190 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
197 ; X64-LABEL: shl_maybe_zero:
198 ; X64: # %bb.0:
199 ; X64-NEXT: movl %edi, %ecx
200 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
201 ; X64-NEXT: shll %cl, %esi
202 ; X64-NEXT: movl $32, %eax
203 ; X64-NEXT: rep bsfl %esi, %eax
204 ; X64-NEXT: retq
212 ; X86: # %bb.0:
213 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
220 ; X64-LABEL: uaddsat_known_nonzero:
221 ; X64: # %bb.0:
222 ; X64-NEXT: incl %edi
223 ; X64-NEXT: movl $-1, %eax
224 ; X64-NEXT: cmovnel %edi, %eax
225 ; X64-NEXT: rep bsfl %eax, %eax
226 ; X64-NEXT: retq
234 ; X86: # %bb.0:
235 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
236 ; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
244 ; X64-LABEL: uaddsat_maybe_zero:
245 ; X64: # %bb.0:
246 ; X64-NEXT: addl %esi, %edi
247 ; X64-NEXT: movl $-1, %ecx
248 ; X64-NEXT: cmovael %edi, %ecx
249 ; X64-NEXT: movl $32, %eax
250 ; X64-NEXT: rep bsfl %ecx, %eax
251 ; X64-NEXT: retq
259 ; X86: # %bb.0:
260 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
261 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
269 ; X64-LABEL: umax_known_nonzero:
270 ; X64: # %bb.0:
271 ; X64-NEXT: movl %esi, %ecx
272 ; X64-NEXT: movl $4, %eax
273 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
274 ; X64-NEXT: shll %cl, %eax
275 ; X64-NEXT: cmpl %eax, %edi
276 ; X64-NEXT: cmoval %edi, %eax
277 ; X64-NEXT: rep bsfl %eax, %eax
278 ; X64-NEXT: retq
287 ; X86: # %bb.0:
288 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
289 ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
297 ; X64-LABEL: umax_maybe_zero:
298 ; X64: # %bb.0:
299 ; X64-NEXT: cmpl %esi, %edi
300 ; X64-NEXT: cmoval %edi, %esi
301 ; X64-NEXT: movl $32, %eax
302 ; X64-NEXT: rep bsfl %esi, %eax
303 ; X64-NEXT: retq
311 ; X86: # %bb.0:
312 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
313 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
322 ; X64-LABEL: umin_known_nonzero:
323 ; X64: # %bb.0:
324 ; X64-NEXT: movl %edi, %ecx
325 ; X64-NEXT: movl $4, %eax
326 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
327 ; X64-NEXT: shll %cl, %eax
328 ; X64-NEXT: addl $4, %esi
329 ; X64-NEXT: cmpl %esi, %eax
330 ; X64-NEXT: cmovbl %eax, %esi
331 ; X64-NEXT: rep bsfl %esi, %eax
332 ; X64-NEXT: retq
342 ; X86: # %bb.0:
343 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
352 ; X64-LABEL: umin_maybe_zero:
353 ; X64: # %bb.0:
354 ; X64-NEXT: cmpl $54, %edi
355 ; X64-NEXT: movl $54, %ecx
356 ; X64-NEXT: cmovbl %edi, %ecx
357 ; X64-NEXT: movl $32, %eax
358 ; X64-NEXT: rep bsfl %ecx, %eax
359 ; X64-NEXT: retq
367 ; X86: # %bb.0:
368 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
369 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
378 ; X64-LABEL: smin_known_nonzero:
379 ; X64: # %bb.0:
380 ; X64-NEXT: movl %edi, %ecx
381 ; X64-NEXT: movl $4, %eax
382 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
383 ; X64-NEXT: shll %cl, %eax
384 ; X64-NEXT: addl $4, %esi
385 ; X64-NEXT: cmpl %esi, %eax
386 ; X64-NEXT: cmovll %eax, %esi
387 ; X64-NEXT: rep bsfl %esi, %eax
388 ; X64-NEXT: retq
398 ; X86: # %bb.0:
399 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
406 ; X64-LABEL: smin_known_zero:
407 ; X64: # %bb.0:
408 ; X64-NEXT: cmpl $-54, %edi
409 ; X64-NEXT: movl $-54, %eax
410 ; X64-NEXT: cmovll %edi, %eax
411 ; X64-NEXT: rep bsfl %eax, %eax
412 ; X64-NEXT: retq
420 ; X86: # %bb.0:
435 ; X64-LABEL: smin_known_zero_vec:
436 ; X64: # %bb.0:
437 ; X64-NEXT: vpminsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
438 ; X64-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
439 ; X64-NEXT: vpaddd %xmm1, %xmm0, %xmm1
440 ; X64-NEXT: vpand %xmm1, %xmm0, %xmm0
441 ; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
442 ; X64-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
443 ; X64-NEXT: vpsrld $31, %xmm0, %xmm0
444 ; X64-NEXT: retq
454 ; X86: # %bb.0:
455 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
464 ; X64-LABEL: smin_maybe_zero:
465 ; X64: # %bb.0:
466 ; X64-NEXT: cmpl $54, %edi
467 ; X64-NEXT: movl $54, %ecx
468 ; X64-NEXT: cmovll %edi, %ecx
469 ; X64-NEXT: movl $32, %eax
470 ; X64-NEXT: rep bsfl %ecx, %eax
471 ; X64-NEXT: retq
479 ; X86: # %bb.0:
480 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
481 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
490 ; X64-LABEL: smax_known_nonzero:
491 ; X64: # %bb.0:
492 ; X64-NEXT: movl %edi, %ecx
493 ; X64-NEXT: movl $4, %eax
494 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
495 ; X64-NEXT: shll %cl, %eax
496 ; X64-NEXT: addl $4, %esi
497 ; X64-NEXT: cmpl %esi, %eax
498 ; X64-NEXT: cmovgl %eax, %esi
499 ; X64-NEXT: rep bsfl %esi, %eax
500 ; X64-NEXT: retq
510 ; X86: # %bb.0:
511 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
518 ; X64-LABEL: smax_maybe_zero:
519 ; X64: # %bb.0:
520 ; X64-NEXT: cmpl $55, %edi
521 ; X64-NEXT: movl $54, %eax
522 ; X64-NEXT: cmovgel %edi, %eax
523 ; X64-NEXT: rep bsfl %eax, %eax
524 ; X64-NEXT: retq
532 ; X86: # %bb.0:
547 ; X64-LABEL: smax_known_zero_vec:
548 ; X64: # %bb.0:
549 ; X64-NEXT: vpmaxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
550 ; X64-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
551 ; X64-NEXT: vpaddd %xmm1, %xmm0, %xmm1
552 ; X64-NEXT: vpand %xmm1, %xmm0, %xmm0
553 ; X64-NEXT: vpxor %xmm1, %xmm1, %xmm1
554 ; X64-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
555 ; X64-NEXT: vpsrld $31, %xmm0, %xmm0
556 ; X64-NEXT: retq
566 ; X86: # %bb.0:
567 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
576 ; X64-LABEL: smax_known_zero:
577 ; X64: # %bb.0:
578 ; X64-NEXT: testl %edi, %edi
579 ; X64-NEXT: movl $-1, %ecx
580 ; X64-NEXT: cmovnsl %edi, %ecx
581 ; X64-NEXT: movl $32, %eax
582 ; X64-NEXT: rep bsfl %ecx, %eax
583 ; X64-NEXT: retq
591 ; X86: # %bb.0:
592 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
593 ; X86-NEXT: movl $256, %eax # imm = 0x100
594 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
599 ; X64-LABEL: rotr_known_nonzero:
600 ; X64: # %bb.0:
601 ; X64-NEXT: movl %esi, %ecx
602 ; X64-NEXT: orl $256, %edi # imm = 0x100
603 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
604 ; X64-NEXT: rorl %cl, %edi
605 ; X64-NEXT: rep bsfl %edi, %eax
606 ; X64-NEXT: retq
618 ; X86: # %bb.0:
619 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
620 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
627 ; X64-LABEL: rotr_maybe_zero:
628 ; X64: # %bb.0:
629 ; X64-NEXT: movl %esi, %ecx
630 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
631 ; X64-NEXT: rorl %cl, %edi
632 ; X64-NEXT: movl $32, %eax
633 ; X64-NEXT: rep bsfl %edi, %eax
634 ; X64-NEXT: retq
645 ; X86: # %bb.0:
646 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
647 ; X86-NEXT: movl $256, %eax # imm = 0x100
648 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
653 ; X64-LABEL: rotr_with_fshr_known_nonzero:
654 ; X64: # %bb.0:
655 ; X64-NEXT: movl %esi, %ecx
656 ; X64-NEXT: orl $256, %edi # imm = 0x100
657 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
658 ; X64-NEXT: rorl %cl, %edi
659 ; X64-NEXT: rep bsfl %edi, %eax
660 ; X64-NEXT: retq
669 ; X86: # %bb.0:
670 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
671 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
678 ; X64-LABEL: rotr_with_fshr_maybe_zero:
679 ; X64: # %bb.0:
680 ; X64-NEXT: movl %esi, %ecx
681 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
682 ; X64-NEXT: rorl %cl, %edi
683 ; X64-NEXT: movl $32, %eax
684 ; X64-NEXT: rep bsfl %edi, %eax
685 ; X64-NEXT: retq
693 ; X86: # %bb.0:
694 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
695 ; X86-NEXT: movl $256, %eax # imm = 0x100
696 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
701 ; X64-LABEL: rotl_known_nonzero:
702 ; X64: # %bb.0:
703 ; X64-NEXT: movl %esi, %ecx
704 ; X64-NEXT: orl $256, %edi # imm = 0x100
705 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
706 ; X64-NEXT: roll %cl, %edi
707 ; X64-NEXT: rep bsfl %edi, %eax
708 ; X64-NEXT: retq
720 ; X86: # %bb.0:
721 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
722 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
729 ; X64-LABEL: rotl_maybe_zero:
730 ; X64: # %bb.0:
731 ; X64-NEXT: movl %esi, %ecx
732 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
733 ; X64-NEXT: roll %cl, %edi
734 ; X64-NEXT: movl $32, %eax
735 ; X64-NEXT: rep bsfl %edi, %eax
736 ; X64-NEXT: retq
747 ; X86: # %bb.0:
748 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
749 ; X86-NEXT: movl $256, %eax # imm = 0x100
750 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
755 ; X64-LABEL: rotl_with_fshl_known_nonzero:
756 ; X64: # %bb.0:
757 ; X64-NEXT: movl %esi, %ecx
758 ; X64-NEXT: orl $256, %edi # imm = 0x100
759 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
760 ; X64-NEXT: roll %cl, %edi
761 ; X64-NEXT: rep bsfl %edi, %eax
762 ; X64-NEXT: retq
771 ; X86: # %bb.0:
772 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
773 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
780 ; X64-LABEL: rotl_with_fshl_maybe_zero:
781 ; X64: # %bb.0:
782 ; X64-NEXT: movl %esi, %ecx
783 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
784 ; X64-NEXT: roll %cl, %edi
785 ; X64-NEXT: movl $32, %eax
786 ; X64-NEXT: rep bsfl %edi, %eax
787 ; X64-NEXT: retq
795 ; X86: # %bb.0:
796 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
797 ; X86-NEXT: movl $-2147360405, %eax # imm = 0x8001E16B
802 ; X64-LABEL: sra_known_nonzero_sign_bit_set:
803 ; X64: # %bb.0:
804 ; X64-NEXT: movl %edi, %ecx
805 ; X64-NEXT: movl $-2147360405, %eax # imm = 0x8001E16B
806 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
807 ; X64-NEXT: sarl %cl, %eax
808 ; X64-NEXT: rep bsfl %eax, %eax
809 ; X64-NEXT: retq
817 ; X86: # %bb.0:
818 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
819 ; X86-NEXT: movl $256, %eax # imm = 0x100
820 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
825 ; X64-LABEL: sra_known_nonzero_exact:
826 ; X64: # %bb.0:
827 ; X64-NEXT: movl %edi, %ecx
828 ; X64-NEXT: orl $256, %esi # imm = 0x100
829 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
830 ; X64-NEXT: sarl %cl, %esi
831 ; X64-NEXT: rep bsfl %esi, %eax
832 ; X64-NEXT: retq
841 ; X86: # %bb.0:
842 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
843 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
850 ; X64-LABEL: sra_maybe_zero:
851 ; X64: # %bb.0:
852 ; X64-NEXT: movl %edi, %ecx
853 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
854 ; X64-NEXT: sarl %cl, %esi
855 ; X64-NEXT: movl $32, %eax
856 ; X64-NEXT: rep bsfl %esi, %eax
857 ; X64-NEXT: retq
865 ; X86: # %bb.0:
866 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
867 ; X86-NEXT: movl $-2147360405, %eax # imm = 0x8001E16B
872 ; X64-LABEL: srl_known_nonzero_sign_bit_set:
873 ; X64: # %bb.0:
874 ; X64-NEXT: movl %edi, %ecx
875 ; X64-NEXT: movl $-2147360405, %eax # imm = 0x8001E16B
876 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
877 ; X64-NEXT: shrl %cl, %eax
878 ; X64-NEXT: rep bsfl %eax, %eax
879 ; X64-NEXT: retq
887 ; X86: # %bb.0:
888 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
889 ; X86-NEXT: movl $256, %eax # imm = 0x100
890 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
895 ; X64-LABEL: srl_known_nonzero_exact:
896 ; X64: # %bb.0:
897 ; X64-NEXT: movl %edi, %ecx
898 ; X64-NEXT: orl $256, %esi # imm = 0x100
899 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
900 ; X64-NEXT: shrl %cl, %esi
901 ; X64-NEXT: rep bsfl %esi, %eax
902 ; X64-NEXT: retq
911 ; X86: # %bb.0:
912 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
913 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
920 ; X64-LABEL: srl_maybe_zero:
921 ; X64: # %bb.0:
922 ; X64-NEXT: movl %edi, %ecx
923 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
924 ; X64-NEXT: shrl %cl, %esi
925 ; X64-NEXT: movl $32, %eax
926 ; X64-NEXT: rep bsfl %esi, %eax
927 ; X64-NEXT: retq
935 ; X86: # %bb.0:
936 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
939 ; X86-NEXT: divl {{[0-9]+}}(%esp)
943 ; X64-LABEL: udiv_known_nonzero:
944 ; X64: # %bb.0:
945 ; X64-NEXT: movl %edi, %eax
946 ; X64-NEXT: orl $64, %eax
947 ; X64-NEXT: xorl %edx, %edx
948 ; X64-NEXT: divl %esi
949 ; X64-NEXT: rep bsfl %eax, %eax
950 ; X64-NEXT: retq
959 ; X86: # %bb.0:
960 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
962 ; X86-NEXT: divl {{[0-9]+}}(%esp)
968 ; X64-LABEL: udiv_maybe_zero:
969 ; X64: # %bb.0:
970 ; X64-NEXT: movl %edi, %eax
971 ; X64-NEXT: xorl %edx, %edx
972 ; X64-NEXT: divl %esi
973 ; X64-NEXT: movl $32, %ecx
974 ; X64-NEXT: rep bsfl %eax, %ecx
975 ; X64-NEXT: movl %ecx, %eax
976 ; X64-NEXT: retq
984 ; X86: # %bb.0:
985 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
988 ; X86-NEXT: idivl {{[0-9]+}}(%esp)
992 ; X64-LABEL: sdiv_known_nonzero:
993 ; X64: # %bb.0:
994 ; X64-NEXT: movl %edi, %eax
995 ; X64-NEXT: orl $64, %eax
996 ; X64-NEXT: cltd
997 ; X64-NEXT: idivl %esi
998 ; X64-NEXT: rep bsfl %eax, %eax
999 ; X64-NEXT: retq
1008 ; X86: # %bb.0:
1009 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1011 ; X86-NEXT: idivl {{[0-9]+}}(%esp)
1017 ; X64-LABEL: sdiv_maybe_zero:
1018 ; X64: # %bb.0:
1019 ; X64-NEXT: movl %edi, %eax
1020 ; X64-NEXT: cltd
1021 ; X64-NEXT: idivl %esi
1022 ; X64-NEXT: movl $32, %ecx
1023 ; X64-NEXT: rep bsfl %eax, %ecx
1024 ; X64-NEXT: movl %ecx, %eax
1025 ; X64-NEXT: retq
1033 ; X86: # %bb.0:
1034 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1036 ; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
1040 ; X64-LABEL: add_known_nonzero:
1041 ; X64: # %bb.0:
1042 ; X64-NEXT: orl $1, %edi
1043 ; X64-NEXT: addl %esi, %edi
1044 ; X64-NEXT: rep bsfl %edi, %eax
1045 ; X64-NEXT: retq
1054 ; X86: # %bb.0:
1055 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1057 ; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
1063 ; X64-LABEL: add_maybe_zero:
1064 ; X64: # %bb.0:
1065 ; X64-NEXT: orl $1, %edi
1066 ; X64-NEXT: addl %esi, %edi
1067 ; X64-NEXT: movl $32, %eax
1068 ; X64-NEXT: rep bsfl %edi, %eax
1069 ; X64-NEXT: retq
1078 ; X86: # %bb.0:
1079 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
1080 ; X86-NEXT: movl $256, %eax # imm = 0x100
1086 ; X64-LABEL: sub_known_nonzero_neg_case:
1087 ; X64: # %bb.0:
1088 ; X64-NEXT: movl %edi, %ecx
1089 ; X64-NEXT: movl $256, %eax # imm = 0x100
1090 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
1091 ; X64-NEXT: shll %cl, %eax
1092 ; X64-NEXT: negl %eax
1093 ; X64-NEXT: rep bsfl %eax, %eax
1094 ; X64-NEXT: retq
1096 %z = sub i32 0, %x
1103 ; X86: # %bb.0:
1104 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1112 ; X64-LABEL: sub_known_nonzero_ne_case:
1113 ; X64: # %bb.0:
1114 ; X64-NEXT: movl %edi, %eax
1115 ; X64-NEXT: orl $64, %eax
1116 ; X64-NEXT: andl $-65, %edi
1117 ; X64-NEXT: subl %eax, %edi
1118 ; X64-NEXT: rep bsfl %edi, %eax
1119 ; X64-NEXT: retq
1129 ; X86: # %bb.0:
1130 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1139 ; X64-LABEL: sub_maybe_zero:
1140 ; X64: # %bb.0:
1141 ; X64-NEXT: movl %edi, %ecx
1142 ; X64-NEXT: orl $64, %ecx
1143 ; X64-NEXT: subl %edi, %ecx
1144 ; X64-NEXT: movl $32, %eax
1145 ; X64-NEXT: rep bsfl %ecx, %eax
1146 ; X64-NEXT: retq
1155 ; X86: # %bb.0:
1157 ; X86-NEXT: subl {{[0-9]+}}(%esp), %eax
1163 ; X64-LABEL: sub_maybe_zero2:
1164 ; X64: # %bb.0:
1165 ; X64-NEXT: negl %edi
1166 ; X64-NEXT: movl $32, %eax
1167 ; X64-NEXT: rep bsfl %edi, %eax
1168 ; X64-NEXT: retq
1169 %z = sub i32 0, %x
1176 ; X86: # %bb.0:
1177 ; X86-NEXT: movl $256, %eax # imm = 0x100
1178 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
1179 ; X86-NEXT: imull {{[0-9]+}}(%esp), %eax
1185 ; X64-LABEL: mul_known_nonzero_nsw:
1186 ; X64: # %bb.0:
1187 ; X64-NEXT: orl $256, %esi # imm = 0x100
1188 ; X64-NEXT: imull %edi, %esi
1189 ; X64-NEXT: movl $32, %eax
1190 ; X64-NEXT: rep bsfl %esi, %eax
1191 ; X64-NEXT: retq
1200 ; X86: # %bb.0:
1201 ; X86-NEXT: movl $256, %eax # imm = 0x100
1202 ; X86-NEXT: orl {{[0-9]+}}(%esp), %eax
1203 ; X86-NEXT: imull {{[0-9]+}}(%esp), %eax
1209 ; X64-LABEL: mul_known_nonzero_nuw:
1210 ; X64: # %bb.0:
1211 ; X64-NEXT: orl $256, %esi # imm = 0x100
1212 ; X64-NEXT: imull %edi, %esi
1213 ; X64-NEXT: movl $32, %eax
1214 ; X64-NEXT: rep bsfl %esi, %eax
1215 ; X64-NEXT: retq
1224 ; X86: # %bb.0:
1225 ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
1226 ; X86-NEXT: imull {{[0-9]+}}(%esp), %eax
1232 ; X64-LABEL: mul_maybe_zero:
1233 ; X64: # %bb.0:
1234 ; X64-NEXT: imull %esi, %edi
1235 ; X64-NEXT: movl $32, %eax
1236 ; X64-NEXT: rep bsfl %edi, %eax
1237 ; X64-NEXT: retq
1245 ; X86: # %bb.0:
1246 ; X86-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
1248 ; X86-NEXT: paddd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1250 ; X86-NEXT: pshuflw {{.*#+}} xmm0 = xmm0[0,2,2,3,4,5,6,7]
1251 ; X86-NEXT: pmullw {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0 # [256,256,u,u,u,u,u,u]
1258 ; X64-LABEL: bitcast_known_nonzero:
1259 ; X64: # %bb.0:
1260 ; X64-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1261 ; X64-NEXT: vpslld $23, %xmm0, %xmm0
1262 ; X64-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1263 ; X64-NEXT: vcvttps2dq %xmm0, %xmm0
1264 ; X64-NEXT: vpackusdw %xmm0, %xmm0, %xmm0
1265 ; X64-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0 # [256,256,u,u,u,u,u,u]
1266 ; X64-NEXT: vmovd %xmm0, %ecx
1267 ; X64-NEXT: movl $32, %eax
1268 ; X64-NEXT: rep bsfl %ecx, %eax
1269 ; X64-NEXT: retq
1278 ; X86: # %bb.0:
1285 ; X64-LABEL: bitcast_maybe_zero:
1286 ; X64: # %bb.0:
1287 ; X64-NEXT: vmovd %xmm0, %ecx
1288 ; X64-NEXT: movl $32, %eax
1289 ; X64-NEXT: rep bsfl %ecx, %eax
1290 ; X64-NEXT: retq
1298 ; X86: # %bb.0:
1299 ; X86-NEXT: bsfl {{[0-9]+}}(%esp), %ecx
1304 ; X64-LABEL: bitcast_from_float:
1305 ; X64: # %bb.0:
1306 ; X64-NEXT: vmovd %xmm0, %ecx
1307 ; X64-NEXT: movl $32, %eax
1308 ; X64-NEXT: rep bsfl %ecx, %eax
1309 ; X64-NEXT: retq
1317 ; X86: # %bb.0:
1318 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
1319 ; X86-NEXT: movl $256, %eax # imm = 0x100
1325 ; X64-LABEL: zext_known_nonzero:
1326 ; X64: # %bb.0:
1327 ; X64-NEXT: movl %edi, %ecx
1328 ; X64-NEXT: movl $256, %eax # imm = 0x100
1329 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
1330 ; X64-NEXT: shll %cl, %eax
1331 ; X64-NEXT: movzwl %ax, %eax
1332 ; X64-NEXT: rep bsfl %eax, %eax
1333 ; X64-NEXT: retq
1342 ; X86: # %bb.0:
1343 ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
1349 ; X64-LABEL: zext_maybe_zero:
1350 ; X64: # %bb.0:
1351 ; X64-NEXT: movzwl %di, %ecx
1352 ; X64-NEXT: movl $32, %eax
1353 ; X64-NEXT: rep bsfl %ecx, %eax
1354 ; X64-NEXT: retq
1362 ; X86: # %bb.0:
1363 ; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
1364 ; X86-NEXT: movl $256, %eax # imm = 0x100
1370 ; X64-LABEL: sext_known_nonzero:
1371 ; X64: # %bb.0:
1372 ; X64-NEXT: movl %edi, %ecx
1373 ; X64-NEXT: movl $256, %eax # imm = 0x100
1374 ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
1375 ; X64-NEXT: shll %cl, %eax
1376 ; X64-NEXT: movzwl %ax, %eax
1377 ; X64-NEXT: rep bsfl %eax, %eax
1378 ; X64-NEXT: retq
1387 ; X86: # %bb.0:
1388 ; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax
1394 ; X64-LABEL: sext_maybe_zero:
1395 ; X64: # %bb.0:
1396 ; X64-NEXT: movswl %di, %ecx
1397 ; X64-NEXT: movl $32, %eax
1398 ; X64-NEXT: rep bsfl %ecx, %eax
1399 ; X64-NEXT: retq