• Home
  • Raw
  • Download

Lines Matching +full:check +full:- +full:x32

1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -verify-machineinstrs | FileCheck %s --check-prefix…
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -verify-machineinstrs | FileCheck %s --check-prefix X…
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=slow-incdec -verify-machineinstrs | FileChec…
5 ; This file checks that atomic (non-seq_cst) stores of immediate values are
18 ; We also check the same patterns:
19 ; - For inc/dec.
20 ; - For register instead of immediate operands.
21 ; - For floating point operations.
23 ; seq_cst stores are left as (lock) xchgl, but we try to check every other
32 ; X64-LABEL: store_atomic_imm_8:
34 ; X64-NOT: movb
35 ; X32-LABEL: store_atomic_imm_8:
36 ; X32: movb
37 ; X32-NOT: movb
43 ; X64-LABEL: store_atomic_imm_16:
45 ; X64-NOT: movw
46 ; X32-LABEL: store_atomic_imm_16:
47 ; X32: movw
48 ; X32-NOT: movw
54 ; X64-LABEL: store_atomic_imm_32:
56 ; X64-NOT: movl
59 ; X32-LABEL: store_atomic_imm_32:
60 ; X32: movl 4(%esp), %eax
61 ; X32: movl
62 ; X32-NOT: movl
68 ; X64-LABEL: store_atomic_imm_64:
70 ; X64-NOT: movq
73 ; X32-LABEL: store_atomic_imm_64:
74 ; X32: cmpxchg8b
82 ; X64-LABEL: store_atomic_imm_64_big:
91 ; X64-LABEL: store_atomic_imm_32_seq_cst:
93 ; X32-LABEL: store_atomic_imm_32_seq_cst:
94 ; X32: xchgl
99 ; ----- ADD -----
102 ; X64-LABEL: add_8i:
103 ; X64-NOT: lock
105 ; X64-NOT: movb
106 ; X32-LABEL: add_8i:
107 ; X32-NOT: lock
108 ; X32: addb
109 ; X32-NOT: movb
117 ; X64-LABEL: add_8r:
118 ; X64-NOT: lock
120 ; X64-NOT: movb
121 ; X32-LABEL: add_8r:
122 ; X32-NOT: lock
123 ; X32: addb
124 ; X32-NOT: movb
134 ; X64-LABEL: add_16i:
135 ; X64-NOT: addw
136 ; X32-LABEL: add_16i:
137 ; X32-NOT: addw
147 ; X64-LABEL: add_16r:
148 ; X64-NOT: addw
149 ; X32-LABEL: add_16r:
150 ; X32-NOT: addw [.*], (
158 ; X64-LABEL: add_32i:
159 ; X64-NOT: lock
161 ; X64-NOT: movl
162 ; X32-LABEL: add_32i:
163 ; X32-NOT: lock
164 ; X32: addl
165 ; X32-NOT: movl
173 ; X64-LABEL: add_32r:
174 ; X64-NOT: lock
176 ; X64-NOT: movl
177 ; X32-LABEL: add_32r:
178 ; X32-NOT: lock
179 ; X32: addl
180 ; X32-NOT: movl
188 ; matching should not fold this. We only test with 32-bit add, but the same
191 ; X64-LABEL: add_32r_self:
192 ; X64-NOT: lock
193 ; X64: movl (%[[M:[a-z]+]]), %[[R:[a-z]+]]
196 ; X32-LABEL: add_32r_self:
197 ; X32-NOT: lock
198 ; X32: movl (%[[M:[a-z]+]]), %[[R:[a-z]+]]
199 ; X32: addl %[[R]], %[[R]]
200 ; X32: movl %[[R]], (%[[M]])
210 ; X64-LABEL: add_32r_ret_load:
211 ; X64-NOT: lock
213 ; X64-NEXT: addl %eax, %esi
214 ; X64-NEXT: movl %esi, (%rdi)
215 ; X64-NEXT: retq
216 ; X32-LABEL: add_32r_ret_load:
217 ; X32-NOT: lock
218 ; X32: movl 4(%esp), %[[P:[a-z]+]]
219 ; X32-NEXT: movl (%[[P]]),
220 ; X32-NOT: %[[P]]
222 ; X32: movl %{{.*}}, (%[[P]])
223 ; X32-NEXT: retl
231 ; X64-LABEL: add_64i:
232 ; X64-NOT: lock
234 ; X64-NOT: movq
235 ; We do not check X86-32 as it cannot do 'addq'.
236 ; X32-LABEL: add_64i:
244 ; X64-LABEL: add_64r:
245 ; X64-NOT: lock
247 ; X64-NOT: movq
248 ; We do not check X86-32 as it cannot do 'addq'.
249 ; X32-LABEL: add_64r:
257 ; X64-LABEL: add_32i_seq_cst:
259 ; X32-LABEL: add_32i_seq_cst:
260 ; X32: xchgl
268 ; X64-LABEL: add_32r_seq_cst:
270 ; X32-LABEL: add_32r_seq_cst:
271 ; X32: xchgl
278 ; ----- AND -----
281 ; X64-LABEL: and_8i:
282 ; X64-NOT: lock
284 ; X64-NOT: movb
285 ; X32-LABEL: and_8i:
286 ; X32-NOT: lock
287 ; X32: andb
288 ; X32-NOT: movb
296 ; X64-LABEL: and_8r:
297 ; X64-NOT: lock
299 ; X64-NOT: movb
300 ; X32-LABEL: and_8r:
301 ; X32-NOT: lock
302 ; X32: andb
303 ; X32-NOT: movb
313 ; X64-LABEL: and_16i:
314 ; X64-NOT: andw
315 ; X32-LABEL: and_16i:
316 ; X32-NOT: andw
326 ; X64-LABEL: and_16r:
327 ; X64-NOT: andw
328 ; X32-LABEL: and_16r:
329 ; X32-NOT: andw [.*], (
337 ; X64-LABEL: and_32i:
338 ; X64-NOT: lock
340 ; X64-NOT: movl
341 ; X32-LABEL: and_32i:
342 ; X32-NOT: lock
343 ; X32: andl
344 ; X32-NOT: movl
352 ; X64-LABEL: and_32r:
353 ; X64-NOT: lock
355 ; X64-NOT: movl
356 ; X32-LABEL: and_32r:
357 ; X32-NOT: lock
358 ; X32: andl
359 ; X32-NOT: movl
367 ; X64-LABEL: and_64i:
368 ; X64-NOT: lock
370 ; X64-NOT: movq
371 ; We do not check X86-32 as it cannot do 'andq'.
372 ; X32-LABEL: and_64i:
380 ; X64-LABEL: and_64r:
381 ; X64-NOT: lock
383 ; X64-NOT: movq
384 ; We do not check X86-32 as it cannot do 'andq'.
385 ; X32-LABEL: and_64r:
393 ; X64-LABEL: and_32i_seq_cst:
395 ; X32-LABEL: and_32i_seq_cst:
396 ; X32: xchgl
404 ; X64-LABEL: and_32r_seq_cst:
406 ; X32-LABEL: and_32r_seq_cst:
407 ; X32: xchgl
414 ; ----- OR -----
417 ; X64-LABEL: or_8i:
418 ; X64-NOT: lock
420 ; X64-NOT: movb
421 ; X32-LABEL: or_8i:
422 ; X32-NOT: lock
423 ; X32: orb
424 ; X32-NOT: movb
432 ; X64-LABEL: or_8r:
433 ; X64-NOT: lock
435 ; X64-NOT: movb
436 ; X32-LABEL: or_8r:
437 ; X32-NOT: lock
438 ; X32: orb
439 ; X32-NOT: movb
447 ; X64-LABEL: or_16i:
448 ; X64-NOT: orw
449 ; X32-LABEL: or_16i:
450 ; X32-NOT: orw
458 ; X64-LABEL: or_16r:
459 ; X64-NOT: orw
460 ; X32-LABEL: or_16r:
461 ; X32-NOT: orw [.*], (
469 ; X64-LABEL: or_32i:
470 ; X64-NOT: lock
472 ; X64-NOT: movl
473 ; X32-LABEL: or_32i:
474 ; X32-NOT: lock
475 ; X32: orl
476 ; X32-NOT: movl
484 ; X64-LABEL: or_32r:
485 ; X64-NOT: lock
487 ; X64-NOT: movl
488 ; X32-LABEL: or_32r:
489 ; X32-NOT: lock
490 ; X32: orl
491 ; X32-NOT: movl
499 ; X64-LABEL: or_64i:
500 ; X64-NOT: lock
502 ; X64-NOT: movq
503 ; We do not check X86-32 as it cannot do 'orq'.
504 ; X32-LABEL: or_64i:
512 ; X64-LABEL: or_64r:
513 ; X64-NOT: lock
515 ; X64-NOT: movq
516 ; We do not check X86-32 as it cannot do 'orq'.
517 ; X32-LABEL: or_64r:
525 ; X64-LABEL: or_32i_seq_cst:
527 ; X32-LABEL: or_32i_seq_cst:
528 ; X32: xchgl
536 ; X64-LABEL: or_32r_seq_cst:
538 ; X32-LABEL: or_32r_seq_cst:
539 ; X32: xchgl
546 ; ----- XOR -----
549 ; X64-LABEL: xor_8i:
550 ; X64-NOT: lock
552 ; X64-NOT: movb
553 ; X32-LABEL: xor_8i:
554 ; X32-NOT: lock
555 ; X32: xorb
556 ; X32-NOT: movb
564 ; X64-LABEL: xor_8r:
565 ; X64-NOT: lock
567 ; X64-NOT: movb
568 ; X32-LABEL: xor_8r:
569 ; X32-NOT: lock
570 ; X32: xorb
571 ; X32-NOT: movb
579 ; X64-LABEL: xor_16i:
580 ; X64-NOT: xorw
581 ; X32-LABEL: xor_16i:
582 ; X32-NOT: xorw
590 ; X64-LABEL: xor_16r:
591 ; X64-NOT: xorw
592 ; X32-LABEL: xor_16r:
593 ; X32-NOT: xorw [.*], (
601 ; X64-LABEL: xor_32i:
602 ; X64-NOT: lock
604 ; X64-NOT: movl
605 ; X32-LABEL: xor_32i:
606 ; X32-NOT: lock
607 ; X32: xorl
608 ; X32-NOT: movl
616 ; X64-LABEL: xor_32r:
617 ; X64-NOT: lock
619 ; X64-NOT: movl
620 ; X32-LABEL: xor_32r:
621 ; X32-NOT: lock
622 ; X32: xorl
623 ; X32-NOT: movl
631 ; X64-LABEL: xor_64i:
632 ; X64-NOT: lock
634 ; X64-NOT: movq
635 ; We do not check X86-32 as it cannot do 'xorq'.
636 ; X32-LABEL: xor_64i:
644 ; X64-LABEL: xor_64r:
645 ; X64-NOT: lock
647 ; X64-NOT: movq
648 ; We do not check X86-32 as it cannot do 'xorq'.
649 ; X32-LABEL: xor_64r:
657 ; X64-LABEL: xor_32i_seq_cst:
659 ; X32-LABEL: xor_32i_seq_cst:
660 ; X32: xchgl
668 ; X64-LABEL: xor_32r_seq_cst:
670 ; X32-LABEL: xor_32r_seq_cst:
671 ; X32: xchgl
678 ; ----- INC -----
681 ; X64-LABEL: inc_8:
682 ; X64-NOT: lock
684 ; X64-NOT: movb
685 ; X32-LABEL: inc_8:
686 ; X32-NOT: lock
687 ; X32: incb
688 ; X32-NOT: movb
689 ; SLOW_INC-LABEL: inc_8:
690 ; SLOW_INC-NOT: incb
691 ; SLOW_INC-NOT: movb
701 ; X64-LABEL: inc_16:
702 ; X64-NOT: incw
703 ; X32-LABEL: inc_16:
704 ; X32-NOT: incw
705 ; SLOW_INC-LABEL: inc_16:
706 ; SLOW_INC-NOT: incw
714 ; X64-LABEL: inc_32:
715 ; X64-NOT: lock
717 ; X64-NOT: movl
718 ; X32-LABEL: inc_32:
719 ; X32-NOT: lock
720 ; X32: incl
721 ; X32-NOT: movl
722 ; SLOW_INC-LABEL: inc_32:
723 ; SLOW_INC-NOT: incl
724 ; SLOW_INC-NOT: movl
732 ; X64-LABEL: inc_64:
733 ; X64-NOT: lock
735 ; X64-NOT: movq
736 ; We do not check X86-32 as it cannot do 'incq'.
737 ; X32-LABEL: inc_64:
738 ; SLOW_INC-LABEL: inc_64:
739 ; SLOW_INC-NOT: incq
740 ; SLOW_INC-NOT: movq
748 ; X64-LABEL: inc_32_seq_cst:
750 ; X32-LABEL: inc_32_seq_cst:
751 ; X32: xchgl
758 ; ----- DEC -----
761 ; X64-LABEL: dec_8:
762 ; X64-NOT: lock
764 ; X64-NOT: movb
765 ; X32-LABEL: dec_8:
766 ; X32-NOT: lock
767 ; X32: decb
768 ; X32-NOT: movb
769 ; SLOW_INC-LABEL: dec_8:
770 ; SLOW_INC-NOT: decb
771 ; SLOW_INC-NOT: movb
781 ; X64-LABEL: dec_16:
782 ; X64-NOT: decw
783 ; X32-LABEL: dec_16:
784 ; X32-NOT: decw
785 ; SLOW_INC-LABEL: dec_16:
786 ; SLOW_INC-NOT: decw
794 ; X64-LABEL: dec_32:
795 ; X64-NOT: lock
797 ; X64-NOT: movl
798 ; X32-LABEL: dec_32:
799 ; X32-NOT: lock
800 ; X32: decl
801 ; X32-NOT: movl
802 ; SLOW_INC-LABEL: dec_32:
803 ; SLOW_INC-NOT: decl
804 ; SLOW_INC-NOT: movl
812 ; X64-LABEL: dec_64:
813 ; X64-NOT: lock
815 ; X64-NOT: movq
816 ; We do not check X86-32 as it cannot do 'decq'.
817 ; X32-LABEL: dec_64:
818 ; SLOW_INC-LABEL: dec_64:
819 ; SLOW_INC-NOT: decq
820 ; SLOW_INC-NOT: movq
828 ; X64-LABEL: dec_32_seq_cst:
830 ; X32-LABEL: dec_32_seq_cst:
831 ; X32: xchgl
838 ; ----- FADD -----
841 ; X64-LABEL: fadd_32r:
842 ; X64-NOT: lock
843 ; X64-NOT: mov
844 ; X64: addss (%[[M:[a-z]+]]), %[[XMM:xmm[0-9]+]]
845 ; X64-NEXT: movss %[[XMM]], (%[[M]])
846 ; X32-LABEL: fadd_32r:
847 ; Don't check x86-32.
848 ; LLVM's SSE handling is conservative on x86-32 even without using atomics.
859 ; X64-LABEL: fadd_64r:
860 ; X64-NOT: lock
861 ; X64-NOT: mov
862 ; X64: addsd (%[[M:[a-z]+]]), %[[XMM:xmm[0-9]+]]
863 ; X64-NEXT: movsd %[[XMM]], (%[[M]])
864 ; X32-LABEL: fadd_64r:
865 ; Don't check x86-32 (see comment above).
878 ; Floating-point add to a global using an immediate.
880 ; X64-LABEL: fadd_32g:
881 ; X64-NOT: lock
882 ; X64: movss .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
883 ; X64-NEXT: addss glob32(%rip), %[[XMM]]
884 ; X64-NEXT: movss %[[XMM]], glob32(%rip)
885 ; X32-LABEL: fadd_32g:
886 ; Don't check x86-32 (see comment above).
896 ; X64-LABEL: fadd_64g:
897 ; X64-NOT: lock
898 ; X64: movsd .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
899 ; X64-NEXT: addsd glob64(%rip), %[[XMM]]
900 ; X64-NEXT: movsd %[[XMM]], glob64(%rip)
901 ; X32-LABEL: fadd_64g:
902 ; Don't check x86-32 (see comment above).
911 ; Floating-point add to a hard-coded immediate location using an immediate.
913 ; X64-LABEL: fadd_32imm:
914 ; X64-NOT: lock
915 ; X64: movl $3735928559, %e[[M:[a-z]+]]
916 ; X64: movss .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
917 ; X64-NEXT: addss (%r[[M]]), %[[XMM]]
918 ; X64-NEXT: movss %[[XMM]], (%r[[M]])
919 ; X32-LABEL: fadd_32imm:
920 ; Don't check x86-32 (see comment above).
930 ; X64-LABEL: fadd_64imm:
931 ; X64-NOT: lock
932 ; X64: movl $3735928559, %e[[M:[a-z]+]]
933 ; X64: movsd .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
934 ; X64-NEXT: addsd (%r[[M]]), %[[XMM]]
935 ; X64-NEXT: movsd %[[XMM]], (%r[[M]])
936 ; X32-LABEL: fadd_64imm:
937 ; Don't check x86-32 (see comment above).
946 ; Floating-point add to a stack location.
948 ; X64-LABEL: fadd_32stack:
949 ; X64-NOT: lock
950 ; X64: movss .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
951 ; X64-NEXT: addss [[STACKOFF:-?[0-9]+]](%rsp), %[[XMM]]
952 ; X64-NEXT: movss %[[XMM]], [[STACKOFF]](%rsp)
953 ; X32-LABEL: fadd_32stack:
954 ; Don't check x86-32 (see comment above).
966 ; X64-LABEL: fadd_64stack:
967 ; X64-NOT: lock
968 ; X64: movsd .{{[A-Z0-9_]+}}(%rip), %[[XMM:xmm[0-9]+]]
969 ; X64-NEXT: addsd [[STACKOFF:-?[0-9]+]](%rsp), %[[XMM]]
970 ; X64-NEXT: movsd %[[XMM]], [[STACKOFF]](%rsp)
971 ; X32-LABEL: fadd_64stack:
972 ; Don't check x86-32 (see comment above).
984 ; X64-LABEL: fadd_array:
985 ; X64-NOT: lock
986 ; X64: addsd ([[ADDR:%r..,%r..,8]]), %[[XMM:xmm[0-9]+]]
987 ; X64-NEXT: movsd %[[XMM]], ([[ADDR]])
988 ; X32-LABEL: fadd_array:
989 ; Don't check x86-32 (see comment above).