Lines Matching refs:O3
3 …O3 < %s -mtriple=x86_64-linux-generic -verify-machineinstrs -mcpu=skylake -x86-experimental-unord…
5 …O3 < %s -mtriple=x86_64-linux-generic -verify-machineinstrs -mcpu=skylake -x86-experimental-unorde…
13 ; CHECK-O3-LABEL: load_i8:
14 ; CHECK-O3: # %bb.0:
15 ; CHECK-O3-NEXT: movzbl (%rdi), %eax
16 ; CHECK-O3-NEXT: retq
28 ; CHECK-O3-LABEL: store_i8:
29 ; CHECK-O3: # %bb.0:
30 ; CHECK-O3-NEXT: movb %sil, (%rdi)
31 ; CHECK-O3-NEXT: retq
42 ; CHECK-O3-LABEL: load_i16:
43 ; CHECK-O3: # %bb.0:
44 ; CHECK-O3-NEXT: movzwl (%rdi), %eax
45 ; CHECK-O3-NEXT: retq
58 ; CHECK-O3-LABEL: store_i16:
59 ; CHECK-O3: # %bb.0:
60 ; CHECK-O3-NEXT: movw %si, (%rdi)
61 ; CHECK-O3-NEXT: retq
117 ; CHECK-O3-LABEL: narrow_writeback_or:
118 ; CHECK-O3: # %bb.0:
119 ; CHECK-O3-NEXT: orq $7, (%rdi)
120 ; CHECK-O3-NEXT: retq
138 ; CHECK-O3-LABEL: narrow_writeback_and:
139 ; CHECK-O3: # %bb.0:
140 ; CHECK-O3-NEXT: movl $4294967040, %eax # imm = 0xFFFFFF00
141 ; CHECK-O3-NEXT: andq %rax, (%rdi)
142 ; CHECK-O3-NEXT: retq
158 ; CHECK-O3-LABEL: narrow_writeback_xor:
159 ; CHECK-O3: # %bb.0:
160 ; CHECK-O3-NEXT: xorq $7, (%rdi)
161 ; CHECK-O3-NEXT: retq
248 ; CHECK-O3-LABEL: load_i128:
249 ; CHECK-O3: # %bb.0:
250 ; CHECK-O3-NEXT: pushq %rbx
251 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 16
252 ; CHECK-O3-NEXT: .cfi_offset %rbx, -16
253 ; CHECK-O3-NEXT: xorl %eax, %eax
254 ; CHECK-O3-NEXT: xorl %edx, %edx
255 ; CHECK-O3-NEXT: xorl %ecx, %ecx
256 ; CHECK-O3-NEXT: xorl %ebx, %ebx
257 ; CHECK-O3-NEXT: lock cmpxchg16b (%rdi)
258 ; CHECK-O3-NEXT: popq %rbx
259 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 8
260 ; CHECK-O3-NEXT: retq
296 ; CHECK-O3-LABEL: store_i128:
297 ; CHECK-O3: # %bb.0:
298 ; CHECK-O3-NEXT: pushq %rbx
299 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 16
300 ; CHECK-O3-NEXT: .cfi_offset %rbx, -16
301 ; CHECK-O3-NEXT: movq %rdx, %rcx
302 ; CHECK-O3-NEXT: movq %rsi, %rbx
303 ; CHECK-O3-NEXT: movq (%rdi), %rax
304 ; CHECK-O3-NEXT: movq 8(%rdi), %rdx
305 ; CHECK-O3-NEXT: .p2align 4, 0x90
306 ; CHECK-O3-NEXT: .LBB16_1: # %atomicrmw.start
307 ; CHECK-O3-NEXT: # =>This Inner Loop Header: Depth=1
308 ; CHECK-O3-NEXT: lock cmpxchg16b (%rdi)
309 ; CHECK-O3-NEXT: jne .LBB16_1
310 ; CHECK-O3-NEXT: # %bb.2: # %atomicrmw.end
311 ; CHECK-O3-NEXT: popq %rbx
312 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 8
313 ; CHECK-O3-NEXT: retq
344 ; CHECK-O3-LABEL: load_i256:
345 ; CHECK-O3: # %bb.0:
346 ; CHECK-O3-NEXT: pushq %rbx
347 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 16
348 ; CHECK-O3-NEXT: subq $32, %rsp
349 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 48
350 ; CHECK-O3-NEXT: .cfi_offset %rbx, -16
351 ; CHECK-O3-NEXT: movq %rdi, %rbx
352 ; CHECK-O3-NEXT: movq %rsp, %rdx
353 ; CHECK-O3-NEXT: movl $32, %edi
354 ; CHECK-O3-NEXT: xorl %ecx, %ecx
355 ; CHECK-O3-NEXT: callq __atomic_load@PLT
356 ; CHECK-O3-NEXT: vmovups (%rsp), %ymm0
357 ; CHECK-O3-NEXT: vmovups %ymm0, (%rbx)
358 ; CHECK-O3-NEXT: movq %rbx, %rax
359 ; CHECK-O3-NEXT: addq $32, %rsp
360 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 16
361 ; CHECK-O3-NEXT: popq %rbx
362 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 8
363 ; CHECK-O3-NEXT: vzeroupper
364 ; CHECK-O3-NEXT: retq
390 ; CHECK-O3-LABEL: store_i256:
391 ; CHECK-O3: # %bb.0:
392 ; CHECK-O3-NEXT: subq $40, %rsp
393 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 48
394 ; CHECK-O3-NEXT: movq %rdi, %rax
395 ; CHECK-O3-NEXT: movq %r8, {{[0-9]+}}(%rsp)
396 ; CHECK-O3-NEXT: movq %rcx, {{[0-9]+}}(%rsp)
397 ; CHECK-O3-NEXT: movq %rdx, {{[0-9]+}}(%rsp)
398 ; CHECK-O3-NEXT: movq %rsi, {{[0-9]+}}(%rsp)
399 ; CHECK-O3-NEXT: leaq {{[0-9]+}}(%rsp), %rdx
400 ; CHECK-O3-NEXT: movl $32, %edi
401 ; CHECK-O3-NEXT: movq %rax, %rsi
402 ; CHECK-O3-NEXT: xorl %ecx, %ecx
403 ; CHECK-O3-NEXT: callq __atomic_store@PLT
404 ; CHECK-O3-NEXT: addq $40, %rsp
405 ; CHECK-O3-NEXT: .cfi_def_cfa_offset 8
406 ; CHECK-O3-NEXT: retq
421 ; CHECK-O3-CUR-LABEL: vec_store:
422 ; CHECK-O3-CUR: # %bb.0:
423 ; CHECK-O3-CUR-NEXT: vmovd %xmm0, %eax
424 ; CHECK-O3-CUR-NEXT: vpextrd $1, %xmm0, %ecx
425 ; CHECK-O3-CUR-NEXT: movl %eax, (%rdi)
426 ; CHECK-O3-CUR-NEXT: movl %ecx, 4(%rdi)
427 ; CHECK-O3-CUR-NEXT: retq
435 ; CHECK-O3-EX-LABEL: vec_store:
436 ; CHECK-O3-EX: # %bb.0:
437 ; CHECK-O3-EX-NEXT: vmovss %xmm0, (%rdi)
438 ; CHECK-O3-EX-NEXT: vextractps $1, %xmm0, 4(%rdi)
439 ; CHECK-O3-EX-NEXT: retq
458 ; CHECK-O3-CUR-LABEL: vec_store_unaligned:
459 ; CHECK-O3-CUR: # %bb.0:
460 ; CHECK-O3-CUR-NEXT: vmovd %xmm0, %eax
461 ; CHECK-O3-CUR-NEXT: vpextrd $1, %xmm0, %ecx
462 ; CHECK-O3-CUR-NEXT: movl %eax, (%rdi)
463 ; CHECK-O3-CUR-NEXT: movl %ecx, 4(%rdi)
464 ; CHECK-O3-CUR-NEXT: retq
472 ; CHECK-O3-EX-LABEL: vec_store_unaligned:
473 ; CHECK-O3-EX: # %bb.0:
474 ; CHECK-O3-EX-NEXT: vmovss %xmm0, (%rdi)
475 ; CHECK-O3-EX-NEXT: vextractps $1, %xmm0, 4(%rdi)
476 ; CHECK-O3-EX-NEXT: retq
497 ; CHECK-O3-CUR-LABEL: widen_broadcast2:
498 ; CHECK-O3-CUR: # %bb.0:
499 ; CHECK-O3-CUR-NEXT: vmovd %xmm0, %eax
500 ; CHECK-O3-CUR-NEXT: movl %eax, (%rdi)
501 ; CHECK-O3-CUR-NEXT: movl %eax, 4(%rdi)
502 ; CHECK-O3-CUR-NEXT: retq
510 ; CHECK-O3-EX-LABEL: widen_broadcast2:
511 ; CHECK-O3-EX: # %bb.0:
512 ; CHECK-O3-EX-NEXT: vmovss %xmm0, (%rdi)
513 ; CHECK-O3-EX-NEXT: vmovss %xmm0, 4(%rdi)
514 ; CHECK-O3-EX-NEXT: retq
531 ; CHECK-O3-CUR-LABEL: widen_broadcast2_unaligned:
532 ; CHECK-O3-CUR: # %bb.0:
533 ; CHECK-O3-CUR-NEXT: vmovd %xmm0, %eax
534 ; CHECK-O3-CUR-NEXT: movl %eax, (%rdi)
535 ; CHECK-O3-CUR-NEXT: movl %eax, 4(%rdi)
536 ; CHECK-O3-CUR-NEXT: retq
544 ; CHECK-O3-EX-LABEL: widen_broadcast2_unaligned:
545 ; CHECK-O3-EX: # %bb.0:
546 ; CHECK-O3-EX-NEXT: vmovss %xmm0, (%rdi)
547 ; CHECK-O3-EX-NEXT: vmovss %xmm0, 4(%rdi)
548 ; CHECK-O3-EX-NEXT: retq
615 ; CHECK-O3-CUR-LABEL: load_fold_add3:
616 ; CHECK-O3-CUR: # %bb.0:
617 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
618 ; CHECK-O3-CUR-NEXT: addq (%rdi), %rax
619 ; CHECK-O3-CUR-NEXT: retq
621 ; CHECK-O3-EX-LABEL: load_fold_add3:
622 ; CHECK-O3-EX: # %bb.0:
623 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
624 ; CHECK-O3-EX-NEXT: addq (%rsi), %rax
625 ; CHECK-O3-EX-NEXT: retq
640 ; CHECK-O3-LABEL: load_fold_sub1:
641 ; CHECK-O3: # %bb.0:
642 ; CHECK-O3-NEXT: movq (%rdi), %rax
643 ; CHECK-O3-NEXT: addq $-15, %rax
644 ; CHECK-O3-NEXT: retq
680 ; CHECK-O3-LABEL: load_fold_mul1:
681 ; CHECK-O3: # %bb.0:
682 ; CHECK-O3-NEXT: movq (%rdi), %rax
683 ; CHECK-O3-NEXT: leaq (%rax,%rax,4), %rax
684 ; CHECK-O3-NEXT: leaq (%rax,%rax,2), %rax
685 ; CHECK-O3-NEXT: retq
709 ; CHECK-O3-CUR-LABEL: load_fold_mul3:
710 ; CHECK-O3-CUR: # %bb.0:
711 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
712 ; CHECK-O3-CUR-NEXT: imulq (%rdi), %rax
713 ; CHECK-O3-CUR-NEXT: retq
715 ; CHECK-O3-EX-LABEL: load_fold_mul3:
716 ; CHECK-O3-EX: # %bb.0:
717 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
718 ; CHECK-O3-EX-NEXT: imulq (%rsi), %rax
719 ; CHECK-O3-EX-NEXT: retq
736 ; CHECK-O3-LABEL: load_fold_sdiv1:
737 ; CHECK-O3: # %bb.0:
738 ; CHECK-O3-NEXT: movq (%rdi), %rcx
739 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
740 ; CHECK-O3-NEXT: movq %rcx, %rax
741 ; CHECK-O3-NEXT: imulq %rdx
742 ; CHECK-O3-NEXT: addq %rdx, %rcx
743 ; CHECK-O3-NEXT: movq %rcx, %rax
744 ; CHECK-O3-NEXT: shrq $63, %rax
745 ; CHECK-O3-NEXT: sarq $3, %rcx
746 ; CHECK-O3-NEXT: addq %rax, %rcx
747 ; CHECK-O3-NEXT: movq %rcx, %rax
748 ; CHECK-O3-NEXT: retq
763 ; CHECK-O3-LABEL: load_fold_sdiv2:
764 ; CHECK-O3: # %bb.0:
765 ; CHECK-O3-NEXT: movq (%rdi), %rax
766 ; CHECK-O3-NEXT: movq %rax, %rcx
767 ; CHECK-O3-NEXT: orq %rsi, %rcx
768 ; CHECK-O3-NEXT: shrq $32, %rcx
769 ; CHECK-O3-NEXT: je .LBB35_1
770 ; CHECK-O3-NEXT: # %bb.2:
771 ; CHECK-O3-NEXT: cqto
772 ; CHECK-O3-NEXT: idivq %rsi
773 ; CHECK-O3-NEXT: retq
774 ; CHECK-O3-NEXT: .LBB35_1:
775 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
776 ; CHECK-O3-NEXT: xorl %edx, %edx
777 ; CHECK-O3-NEXT: divl %esi
778 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
779 ; CHECK-O3-NEXT: retq
793 ; CHECK-O3-LABEL: load_fold_sdiv3:
794 ; CHECK-O3: # %bb.0:
795 ; CHECK-O3-NEXT: movq (%rdi), %rax
796 ; CHECK-O3-NEXT: movq (%rsi), %rcx
797 ; CHECK-O3-NEXT: movq %rax, %rdx
798 ; CHECK-O3-NEXT: orq %rcx, %rdx
799 ; CHECK-O3-NEXT: shrq $32, %rdx
800 ; CHECK-O3-NEXT: je .LBB36_1
801 ; CHECK-O3-NEXT: # %bb.2:
802 ; CHECK-O3-NEXT: cqto
803 ; CHECK-O3-NEXT: idivq %rcx
804 ; CHECK-O3-NEXT: retq
805 ; CHECK-O3-NEXT: .LBB36_1:
806 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
807 ; CHECK-O3-NEXT: xorl %edx, %edx
808 ; CHECK-O3-NEXT: divl %ecx
809 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
810 ; CHECK-O3-NEXT: retq
828 ; CHECK-O3-CUR-LABEL: load_fold_udiv1:
829 ; CHECK-O3-CUR: # %bb.0:
830 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rdx
831 ; CHECK-O3-CUR-NEXT: movabsq $-8608480567731124087, %rax # imm = 0x8888888888888889
832 ; CHECK-O3-CUR-NEXT: mulxq %rax, %rax, %rax
833 ; CHECK-O3-CUR-NEXT: shrq $3, %rax
834 ; CHECK-O3-CUR-NEXT: retq
836 ; CHECK-O3-EX-LABEL: load_fold_udiv1:
837 ; CHECK-O3-EX: # %bb.0:
838 ; CHECK-O3-EX-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
839 ; CHECK-O3-EX-NEXT: mulxq (%rdi), %rax, %rax
840 ; CHECK-O3-EX-NEXT: shrq $3, %rax
841 ; CHECK-O3-EX-NEXT: retq
856 ; CHECK-O3-LABEL: load_fold_udiv2:
857 ; CHECK-O3: # %bb.0:
858 ; CHECK-O3-NEXT: movq (%rdi), %rax
859 ; CHECK-O3-NEXT: movq %rax, %rcx
860 ; CHECK-O3-NEXT: orq %rsi, %rcx
861 ; CHECK-O3-NEXT: shrq $32, %rcx
862 ; CHECK-O3-NEXT: je .LBB38_1
863 ; CHECK-O3-NEXT: # %bb.2:
864 ; CHECK-O3-NEXT: xorl %edx, %edx
865 ; CHECK-O3-NEXT: divq %rsi
866 ; CHECK-O3-NEXT: retq
867 ; CHECK-O3-NEXT: .LBB38_1:
868 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
869 ; CHECK-O3-NEXT: xorl %edx, %edx
870 ; CHECK-O3-NEXT: divl %esi
871 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
872 ; CHECK-O3-NEXT: retq
887 ; CHECK-O3-LABEL: load_fold_udiv3:
888 ; CHECK-O3: # %bb.0:
889 ; CHECK-O3-NEXT: movq (%rdi), %rax
890 ; CHECK-O3-NEXT: movq (%rsi), %rcx
891 ; CHECK-O3-NEXT: movq %rax, %rdx
892 ; CHECK-O3-NEXT: orq %rcx, %rdx
893 ; CHECK-O3-NEXT: shrq $32, %rdx
894 ; CHECK-O3-NEXT: je .LBB39_1
895 ; CHECK-O3-NEXT: # %bb.2:
896 ; CHECK-O3-NEXT: xorl %edx, %edx
897 ; CHECK-O3-NEXT: divq %rcx
898 ; CHECK-O3-NEXT: retq
899 ; CHECK-O3-NEXT: .LBB39_1:
900 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
901 ; CHECK-O3-NEXT: xorl %edx, %edx
902 ; CHECK-O3-NEXT: divl %ecx
903 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
904 ; CHECK-O3-NEXT: retq
922 ; CHECK-O3-LABEL: load_fold_srem1:
923 ; CHECK-O3: # %bb.0:
924 ; CHECK-O3-NEXT: movq (%rdi), %rcx
925 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
926 ; CHECK-O3-NEXT: movq %rcx, %rax
927 ; CHECK-O3-NEXT: imulq %rdx
928 ; CHECK-O3-NEXT: addq %rcx, %rdx
929 ; CHECK-O3-NEXT: movq %rdx, %rax
930 ; CHECK-O3-NEXT: shrq $63, %rax
931 ; CHECK-O3-NEXT: sarq $3, %rdx
932 ; CHECK-O3-NEXT: addq %rax, %rdx
933 ; CHECK-O3-NEXT: leaq (%rdx,%rdx,4), %rax
934 ; CHECK-O3-NEXT: leaq (%rax,%rax,2), %rax
935 ; CHECK-O3-NEXT: subq %rax, %rcx
936 ; CHECK-O3-NEXT: movq %rcx, %rax
937 ; CHECK-O3-NEXT: retq
953 ; CHECK-O3-LABEL: load_fold_srem2:
954 ; CHECK-O3: # %bb.0:
955 ; CHECK-O3-NEXT: movq (%rdi), %rax
956 ; CHECK-O3-NEXT: movq %rax, %rcx
957 ; CHECK-O3-NEXT: orq %rsi, %rcx
958 ; CHECK-O3-NEXT: shrq $32, %rcx
959 ; CHECK-O3-NEXT: je .LBB41_1
960 ; CHECK-O3-NEXT: # %bb.2:
961 ; CHECK-O3-NEXT: cqto
962 ; CHECK-O3-NEXT: idivq %rsi
963 ; CHECK-O3-NEXT: movq %rdx, %rax
964 ; CHECK-O3-NEXT: retq
965 ; CHECK-O3-NEXT: .LBB41_1:
966 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
967 ; CHECK-O3-NEXT: xorl %edx, %edx
968 ; CHECK-O3-NEXT: divl %esi
969 ; CHECK-O3-NEXT: movl %edx, %eax
970 ; CHECK-O3-NEXT: retq
985 ; CHECK-O3-LABEL: load_fold_srem3:
986 ; CHECK-O3: # %bb.0:
987 ; CHECK-O3-NEXT: movq (%rdi), %rax
988 ; CHECK-O3-NEXT: movq (%rsi), %rcx
989 ; CHECK-O3-NEXT: movq %rax, %rdx
990 ; CHECK-O3-NEXT: orq %rcx, %rdx
991 ; CHECK-O3-NEXT: shrq $32, %rdx
992 ; CHECK-O3-NEXT: je .LBB42_1
993 ; CHECK-O3-NEXT: # %bb.2:
994 ; CHECK-O3-NEXT: cqto
995 ; CHECK-O3-NEXT: idivq %rcx
996 ; CHECK-O3-NEXT: movq %rdx, %rax
997 ; CHECK-O3-NEXT: retq
998 ; CHECK-O3-NEXT: .LBB42_1:
999 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1000 ; CHECK-O3-NEXT: xorl %edx, %edx
1001 ; CHECK-O3-NEXT: divl %ecx
1002 ; CHECK-O3-NEXT: movl %edx, %eax
1003 ; CHECK-O3-NEXT: retq
1022 ; CHECK-O3-LABEL: load_fold_urem1:
1023 ; CHECK-O3: # %bb.0:
1024 ; CHECK-O3-NEXT: movq (%rdi), %rax
1025 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rcx # imm = 0x8888888888888889
1026 ; CHECK-O3-NEXT: movq %rax, %rdx
1027 ; CHECK-O3-NEXT: mulxq %rcx, %rcx, %rcx
1028 ; CHECK-O3-NEXT: shrq $3, %rcx
1029 ; CHECK-O3-NEXT: leaq (%rcx,%rcx,4), %rcx
1030 ; CHECK-O3-NEXT: leaq (%rcx,%rcx,2), %rcx
1031 ; CHECK-O3-NEXT: subq %rcx, %rax
1032 ; CHECK-O3-NEXT: retq
1049 ; CHECK-O3-LABEL: load_fold_urem2:
1050 ; CHECK-O3: # %bb.0:
1051 ; CHECK-O3-NEXT: movq (%rdi), %rax
1052 ; CHECK-O3-NEXT: movq %rax, %rcx
1053 ; CHECK-O3-NEXT: orq %rsi, %rcx
1054 ; CHECK-O3-NEXT: shrq $32, %rcx
1055 ; CHECK-O3-NEXT: je .LBB44_1
1056 ; CHECK-O3-NEXT: # %bb.2:
1057 ; CHECK-O3-NEXT: xorl %edx, %edx
1058 ; CHECK-O3-NEXT: divq %rsi
1059 ; CHECK-O3-NEXT: movq %rdx, %rax
1060 ; CHECK-O3-NEXT: retq
1061 ; CHECK-O3-NEXT: .LBB44_1:
1062 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1063 ; CHECK-O3-NEXT: xorl %edx, %edx
1064 ; CHECK-O3-NEXT: divl %esi
1065 ; CHECK-O3-NEXT: movl %edx, %eax
1066 ; CHECK-O3-NEXT: retq
1082 ; CHECK-O3-LABEL: load_fold_urem3:
1083 ; CHECK-O3: # %bb.0:
1084 ; CHECK-O3-NEXT: movq (%rdi), %rax
1085 ; CHECK-O3-NEXT: movq (%rsi), %rcx
1086 ; CHECK-O3-NEXT: movq %rax, %rdx
1087 ; CHECK-O3-NEXT: orq %rcx, %rdx
1088 ; CHECK-O3-NEXT: shrq $32, %rdx
1089 ; CHECK-O3-NEXT: je .LBB45_1
1090 ; CHECK-O3-NEXT: # %bb.2:
1091 ; CHECK-O3-NEXT: xorl %edx, %edx
1092 ; CHECK-O3-NEXT: divq %rcx
1093 ; CHECK-O3-NEXT: movq %rdx, %rax
1094 ; CHECK-O3-NEXT: retq
1095 ; CHECK-O3-NEXT: .LBB45_1:
1096 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1097 ; CHECK-O3-NEXT: xorl %edx, %edx
1098 ; CHECK-O3-NEXT: divl %ecx
1099 ; CHECK-O3-NEXT: movl %edx, %eax
1100 ; CHECK-O3-NEXT: retq
1128 ; CHECK-O3-LABEL: load_fold_shl2:
1129 ; CHECK-O3: # %bb.0:
1130 ; CHECK-O3-NEXT: shlxq %rsi, (%rdi), %rax
1131 ; CHECK-O3-NEXT: retq
1146 ; CHECK-O3-LABEL: load_fold_shl3:
1147 ; CHECK-O3: # %bb.0:
1148 ; CHECK-O3-NEXT: movq (%rsi), %rax
1149 ; CHECK-O3-NEXT: shlxq %rax, (%rdi), %rax
1150 ; CHECK-O3-NEXT: retq
1178 ; CHECK-O3-LABEL: load_fold_lshr2:
1179 ; CHECK-O3: # %bb.0:
1180 ; CHECK-O3-NEXT: shrxq %rsi, (%rdi), %rax
1181 ; CHECK-O3-NEXT: retq
1196 ; CHECK-O3-LABEL: load_fold_lshr3:
1197 ; CHECK-O3: # %bb.0:
1198 ; CHECK-O3-NEXT: movq (%rsi), %rax
1199 ; CHECK-O3-NEXT: shrxq %rax, (%rdi), %rax
1200 ; CHECK-O3-NEXT: retq
1228 ; CHECK-O3-LABEL: load_fold_ashr2:
1229 ; CHECK-O3: # %bb.0:
1230 ; CHECK-O3-NEXT: sarxq %rsi, (%rdi), %rax
1231 ; CHECK-O3-NEXT: retq
1246 ; CHECK-O3-LABEL: load_fold_ashr3:
1247 ; CHECK-O3: # %bb.0:
1248 ; CHECK-O3-NEXT: movq (%rsi), %rax
1249 ; CHECK-O3-NEXT: sarxq %rax, (%rdi), %rax
1250 ; CHECK-O3-NEXT: retq
1265 ; CHECK-O3-LABEL: load_fold_and1:
1266 ; CHECK-O3: # %bb.0:
1267 ; CHECK-O3-NEXT: movq (%rdi), %rax
1268 ; CHECK-O3-NEXT: andl $15, %eax
1269 ; CHECK-O3-NEXT: retq
1293 ; CHECK-O3-CUR-LABEL: load_fold_and3:
1294 ; CHECK-O3-CUR: # %bb.0:
1295 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
1296 ; CHECK-O3-CUR-NEXT: andq (%rdi), %rax
1297 ; CHECK-O3-CUR-NEXT: retq
1299 ; CHECK-O3-EX-LABEL: load_fold_and3:
1300 ; CHECK-O3-EX: # %bb.0:
1301 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
1302 ; CHECK-O3-EX-NEXT: andq (%rsi), %rax
1303 ; CHECK-O3-EX-NEXT: retq
1340 ; CHECK-O3-CUR-LABEL: load_fold_or3:
1341 ; CHECK-O3-CUR: # %bb.0:
1342 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
1343 ; CHECK-O3-CUR-NEXT: orq (%rdi), %rax
1344 ; CHECK-O3-CUR-NEXT: retq
1346 ; CHECK-O3-EX-LABEL: load_fold_or3:
1347 ; CHECK-O3-EX: # %bb.0:
1348 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
1349 ; CHECK-O3-EX-NEXT: orq (%rsi), %rax
1350 ; CHECK-O3-EX-NEXT: retq
1387 ; CHECK-O3-CUR-LABEL: load_fold_xor3:
1388 ; CHECK-O3-CUR: # %bb.0:
1389 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
1390 ; CHECK-O3-CUR-NEXT: xorq (%rdi), %rax
1391 ; CHECK-O3-CUR-NEXT: retq
1393 ; CHECK-O3-EX-LABEL: load_fold_xor3:
1394 ; CHECK-O3-EX: # %bb.0:
1395 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
1396 ; CHECK-O3-EX-NEXT: xorq (%rsi), %rax
1397 ; CHECK-O3-EX-NEXT: retq
1412 ; CHECK-O3-LABEL: load_fold_icmp1:
1413 ; CHECK-O3: # %bb.0:
1414 ; CHECK-O3-NEXT: cmpq $15, (%rdi)
1415 ; CHECK-O3-NEXT: sete %al
1416 ; CHECK-O3-NEXT: retq
1430 ; CHECK-O3-LABEL: load_fold_icmp2:
1431 ; CHECK-O3: # %bb.0:
1432 ; CHECK-O3-NEXT: cmpq %rsi, (%rdi)
1433 ; CHECK-O3-NEXT: sete %al
1434 ; CHECK-O3-NEXT: retq
1449 ; CHECK-O3-CUR-LABEL: load_fold_icmp3:
1450 ; CHECK-O3-CUR: # %bb.0:
1451 ; CHECK-O3-CUR-NEXT: movq (%rsi), %rax
1452 ; CHECK-O3-CUR-NEXT: cmpq %rax, (%rdi)
1453 ; CHECK-O3-CUR-NEXT: sete %al
1454 ; CHECK-O3-CUR-NEXT: retq
1456 ; CHECK-O3-EX-LABEL: load_fold_icmp3:
1457 ; CHECK-O3-EX: # %bb.0:
1458 ; CHECK-O3-EX-NEXT: movq (%rdi), %rax
1459 ; CHECK-O3-EX-NEXT: cmpq (%rsi), %rax
1460 ; CHECK-O3-EX-NEXT: sete %al
1461 ; CHECK-O3-EX-NEXT: retq
1483 ; CHECK-O3-LABEL: rmw_fold_add1:
1484 ; CHECK-O3: # %bb.0:
1485 ; CHECK-O3-NEXT: addq $15, (%rdi)
1486 ; CHECK-O3-NEXT: retq
1502 ; CHECK-O3-LABEL: rmw_fold_add2:
1503 ; CHECK-O3: # %bb.0:
1504 ; CHECK-O3-NEXT: addq %rsi, (%rdi)
1505 ; CHECK-O3-NEXT: retq
1521 ; CHECK-O3-LABEL: rmw_fold_sub1:
1522 ; CHECK-O3: # %bb.0:
1523 ; CHECK-O3-NEXT: addq $-15, (%rdi)
1524 ; CHECK-O3-NEXT: retq
1540 ; CHECK-O3-LABEL: rmw_fold_sub2:
1541 ; CHECK-O3: # %bb.0:
1542 ; CHECK-O3-NEXT: subq %rsi, (%rdi)
1543 ; CHECK-O3-NEXT: retq
1574 ; CHECK-O3-LABEL: rmw_fold_mul2:
1575 ; CHECK-O3: # %bb.0:
1576 ; CHECK-O3-NEXT: imulq (%rdi), %rsi
1577 ; CHECK-O3-NEXT: movq %rsi, (%rdi)
1578 ; CHECK-O3-NEXT: retq
1602 ; CHECK-O3-LABEL: rmw_fold_sdiv1:
1603 ; CHECK-O3: # %bb.0:
1604 ; CHECK-O3-NEXT: movq (%rdi), %rcx
1605 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
1606 ; CHECK-O3-NEXT: movq %rcx, %rax
1607 ; CHECK-O3-NEXT: imulq %rdx
1608 ; CHECK-O3-NEXT: addq %rcx, %rdx
1609 ; CHECK-O3-NEXT: movq %rdx, %rax
1610 ; CHECK-O3-NEXT: shrq $63, %rax
1611 ; CHECK-O3-NEXT: sarq $3, %rdx
1612 ; CHECK-O3-NEXT: addq %rax, %rdx
1613 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1614 ; CHECK-O3-NEXT: retq
1631 ; CHECK-O3-LABEL: rmw_fold_sdiv2:
1632 ; CHECK-O3: # %bb.0:
1633 ; CHECK-O3-NEXT: movq (%rdi), %rax
1634 ; CHECK-O3-NEXT: movq %rax, %rcx
1635 ; CHECK-O3-NEXT: orq %rsi, %rcx
1636 ; CHECK-O3-NEXT: shrq $32, %rcx
1637 ; CHECK-O3-NEXT: je .LBB74_1
1638 ; CHECK-O3-NEXT: # %bb.2:
1639 ; CHECK-O3-NEXT: cqto
1640 ; CHECK-O3-NEXT: idivq %rsi
1641 ; CHECK-O3-NEXT: movq %rax, (%rdi)
1642 ; CHECK-O3-NEXT: retq
1643 ; CHECK-O3-NEXT: .LBB74_1:
1644 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1645 ; CHECK-O3-NEXT: xorl %edx, %edx
1646 ; CHECK-O3-NEXT: divl %esi
1647 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
1648 ; CHECK-O3-NEXT: movq %rax, (%rdi)
1649 ; CHECK-O3-NEXT: retq
1667 ; CHECK-O3-CUR-LABEL: rmw_fold_udiv1:
1668 ; CHECK-O3-CUR: # %bb.0:
1669 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rdx
1670 ; CHECK-O3-CUR-NEXT: movabsq $-8608480567731124087, %rax # imm = 0x8888888888888889
1671 ; CHECK-O3-CUR-NEXT: mulxq %rax, %rax, %rax
1672 ; CHECK-O3-CUR-NEXT: shrq $3, %rax
1673 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1674 ; CHECK-O3-CUR-NEXT: retq
1676 ; CHECK-O3-EX-LABEL: rmw_fold_udiv1:
1677 ; CHECK-O3-EX: # %bb.0:
1678 ; CHECK-O3-EX-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
1679 ; CHECK-O3-EX-NEXT: mulxq (%rdi), %rax, %rax
1680 ; CHECK-O3-EX-NEXT: shrq $3, %rax
1681 ; CHECK-O3-EX-NEXT: movq %rax, (%rdi)
1682 ; CHECK-O3-EX-NEXT: retq
1700 ; CHECK-O3-LABEL: rmw_fold_udiv2:
1701 ; CHECK-O3: # %bb.0:
1702 ; CHECK-O3-NEXT: movq (%rdi), %rax
1703 ; CHECK-O3-NEXT: movq %rax, %rcx
1704 ; CHECK-O3-NEXT: orq %rsi, %rcx
1705 ; CHECK-O3-NEXT: shrq $32, %rcx
1706 ; CHECK-O3-NEXT: je .LBB76_1
1707 ; CHECK-O3-NEXT: # %bb.2:
1708 ; CHECK-O3-NEXT: xorl %edx, %edx
1709 ; CHECK-O3-NEXT: divq %rsi
1710 ; CHECK-O3-NEXT: movq %rax, (%rdi)
1711 ; CHECK-O3-NEXT: retq
1712 ; CHECK-O3-NEXT: .LBB76_1:
1713 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1714 ; CHECK-O3-NEXT: xorl %edx, %edx
1715 ; CHECK-O3-NEXT: divl %esi
1716 ; CHECK-O3-NEXT: # kill: def $eax killed $eax def $rax
1717 ; CHECK-O3-NEXT: movq %rax, (%rdi)
1718 ; CHECK-O3-NEXT: retq
1746 ; CHECK-O3-LABEL: rmw_fold_srem1:
1747 ; CHECK-O3: # %bb.0:
1748 ; CHECK-O3-NEXT: movq (%rdi), %rcx
1749 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rdx # imm = 0x8888888888888889
1750 ; CHECK-O3-NEXT: movq %rcx, %rax
1751 ; CHECK-O3-NEXT: imulq %rdx
1752 ; CHECK-O3-NEXT: addq %rcx, %rdx
1753 ; CHECK-O3-NEXT: movq %rdx, %rax
1754 ; CHECK-O3-NEXT: shrq $63, %rax
1755 ; CHECK-O3-NEXT: sarq $3, %rdx
1756 ; CHECK-O3-NEXT: addq %rax, %rdx
1757 ; CHECK-O3-NEXT: leaq (%rdx,%rdx,4), %rax
1758 ; CHECK-O3-NEXT: leaq (%rax,%rax,2), %rax
1759 ; CHECK-O3-NEXT: subq %rax, %rcx
1760 ; CHECK-O3-NEXT: movq %rcx, (%rdi)
1761 ; CHECK-O3-NEXT: retq
1778 ; CHECK-O3-LABEL: rmw_fold_srem2:
1779 ; CHECK-O3: # %bb.0:
1780 ; CHECK-O3-NEXT: movq (%rdi), %rax
1781 ; CHECK-O3-NEXT: movq %rax, %rcx
1782 ; CHECK-O3-NEXT: orq %rsi, %rcx
1783 ; CHECK-O3-NEXT: shrq $32, %rcx
1784 ; CHECK-O3-NEXT: je .LBB78_1
1785 ; CHECK-O3-NEXT: # %bb.2:
1786 ; CHECK-O3-NEXT: cqto
1787 ; CHECK-O3-NEXT: idivq %rsi
1788 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1789 ; CHECK-O3-NEXT: retq
1790 ; CHECK-O3-NEXT: .LBB78_1:
1791 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1792 ; CHECK-O3-NEXT: xorl %edx, %edx
1793 ; CHECK-O3-NEXT: divl %esi
1794 ; CHECK-O3-NEXT: # kill: def $edx killed $edx def $rdx
1795 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1796 ; CHECK-O3-NEXT: retq
1818 ; CHECK-O3-LABEL: rmw_fold_urem1:
1819 ; CHECK-O3: # %bb.0:
1820 ; CHECK-O3-NEXT: movq (%rdi), %rdx
1821 ; CHECK-O3-NEXT: movabsq $-8608480567731124087, %rax # imm = 0x8888888888888889
1822 ; CHECK-O3-NEXT: mulxq %rax, %rax, %rax
1823 ; CHECK-O3-NEXT: shrq $3, %rax
1824 ; CHECK-O3-NEXT: leaq (%rax,%rax,4), %rax
1825 ; CHECK-O3-NEXT: leaq (%rax,%rax,2), %rax
1826 ; CHECK-O3-NEXT: subq %rax, %rdx
1827 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1828 ; CHECK-O3-NEXT: retq
1846 ; CHECK-O3-LABEL: rmw_fold_urem2:
1847 ; CHECK-O3: # %bb.0:
1848 ; CHECK-O3-NEXT: movq (%rdi), %rax
1849 ; CHECK-O3-NEXT: movq %rax, %rcx
1850 ; CHECK-O3-NEXT: orq %rsi, %rcx
1851 ; CHECK-O3-NEXT: shrq $32, %rcx
1852 ; CHECK-O3-NEXT: je .LBB80_1
1853 ; CHECK-O3-NEXT: # %bb.2:
1854 ; CHECK-O3-NEXT: xorl %edx, %edx
1855 ; CHECK-O3-NEXT: divq %rsi
1856 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1857 ; CHECK-O3-NEXT: retq
1858 ; CHECK-O3-NEXT: .LBB80_1:
1859 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
1860 ; CHECK-O3-NEXT: xorl %edx, %edx
1861 ; CHECK-O3-NEXT: divl %esi
1862 ; CHECK-O3-NEXT: # kill: def $edx killed $edx def $rdx
1863 ; CHECK-O3-NEXT: movq %rdx, (%rdi)
1864 ; CHECK-O3-NEXT: retq
1880 ; CHECK-O3-CUR-LABEL: rmw_fold_shl1:
1881 ; CHECK-O3-CUR: # %bb.0:
1882 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rax
1883 ; CHECK-O3-CUR-NEXT: shlq $15, %rax
1884 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1885 ; CHECK-O3-CUR-NEXT: retq
1887 ; CHECK-O3-EX-LABEL: rmw_fold_shl1:
1888 ; CHECK-O3-EX: # %bb.0:
1889 ; CHECK-O3-EX-NEXT: shlq $15, (%rdi)
1890 ; CHECK-O3-EX-NEXT: retq
1909 ; CHECK-O3-CUR-LABEL: rmw_fold_shl2:
1910 ; CHECK-O3-CUR: # %bb.0:
1911 ; CHECK-O3-CUR-NEXT: shlxq %rsi, (%rdi), %rax
1912 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1913 ; CHECK-O3-CUR-NEXT: retq
1915 ; CHECK-O3-EX-LABEL: rmw_fold_shl2:
1916 ; CHECK-O3-EX: # %bb.0:
1917 ; CHECK-O3-EX-NEXT: movq %rsi, %rcx
1918 ; CHECK-O3-EX-NEXT: # kill: def $cl killed $cl killed $rcx
1919 ; CHECK-O3-EX-NEXT: shlq %cl, (%rdi)
1920 ; CHECK-O3-EX-NEXT: retq
1936 ; CHECK-O3-CUR-LABEL: rmw_fold_lshr1:
1937 ; CHECK-O3-CUR: # %bb.0:
1938 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rax
1939 ; CHECK-O3-CUR-NEXT: shrq $15, %rax
1940 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1941 ; CHECK-O3-CUR-NEXT: retq
1943 ; CHECK-O3-EX-LABEL: rmw_fold_lshr1:
1944 ; CHECK-O3-EX: # %bb.0:
1945 ; CHECK-O3-EX-NEXT: shrq $15, (%rdi)
1946 ; CHECK-O3-EX-NEXT: retq
1965 ; CHECK-O3-CUR-LABEL: rmw_fold_lshr2:
1966 ; CHECK-O3-CUR: # %bb.0:
1967 ; CHECK-O3-CUR-NEXT: shrxq %rsi, (%rdi), %rax
1968 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1969 ; CHECK-O3-CUR-NEXT: retq
1971 ; CHECK-O3-EX-LABEL: rmw_fold_lshr2:
1972 ; CHECK-O3-EX: # %bb.0:
1973 ; CHECK-O3-EX-NEXT: movq %rsi, %rcx
1974 ; CHECK-O3-EX-NEXT: # kill: def $cl killed $cl killed $rcx
1975 ; CHECK-O3-EX-NEXT: shrq %cl, (%rdi)
1976 ; CHECK-O3-EX-NEXT: retq
1992 ; CHECK-O3-CUR-LABEL: rmw_fold_ashr1:
1993 ; CHECK-O3-CUR: # %bb.0:
1994 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rax
1995 ; CHECK-O3-CUR-NEXT: sarq $15, %rax
1996 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
1997 ; CHECK-O3-CUR-NEXT: retq
1999 ; CHECK-O3-EX-LABEL: rmw_fold_ashr1:
2000 ; CHECK-O3-EX: # %bb.0:
2001 ; CHECK-O3-EX-NEXT: sarq $15, (%rdi)
2002 ; CHECK-O3-EX-NEXT: retq
2021 ; CHECK-O3-CUR-LABEL: rmw_fold_ashr2:
2022 ; CHECK-O3-CUR: # %bb.0:
2023 ; CHECK-O3-CUR-NEXT: sarxq %rsi, (%rdi), %rax
2024 ; CHECK-O3-CUR-NEXT: movq %rax, (%rdi)
2025 ; CHECK-O3-CUR-NEXT: retq
2027 ; CHECK-O3-EX-LABEL: rmw_fold_ashr2:
2028 ; CHECK-O3-EX: # %bb.0:
2029 ; CHECK-O3-EX-NEXT: movq %rsi, %rcx
2030 ; CHECK-O3-EX-NEXT: # kill: def $cl killed $cl killed $rcx
2031 ; CHECK-O3-EX-NEXT: sarq %cl, (%rdi)
2032 ; CHECK-O3-EX-NEXT: retq
2050 ; CHECK-O3-LABEL: rmw_fold_and1:
2051 ; CHECK-O3: # %bb.0:
2052 ; CHECK-O3-NEXT: andq $15, (%rdi)
2053 ; CHECK-O3-NEXT: retq
2069 ; CHECK-O3-LABEL: rmw_fold_and2:
2070 ; CHECK-O3: # %bb.0:
2071 ; CHECK-O3-NEXT: andq %rsi, (%rdi)
2072 ; CHECK-O3-NEXT: retq
2088 ; CHECK-O3-LABEL: rmw_fold_or1:
2089 ; CHECK-O3: # %bb.0:
2090 ; CHECK-O3-NEXT: orq $15, (%rdi)
2091 ; CHECK-O3-NEXT: retq
2107 ; CHECK-O3-LABEL: rmw_fold_or2:
2108 ; CHECK-O3: # %bb.0:
2109 ; CHECK-O3-NEXT: orq %rsi, (%rdi)
2110 ; CHECK-O3-NEXT: retq
2126 ; CHECK-O3-LABEL: rmw_fold_xor1:
2127 ; CHECK-O3: # %bb.0:
2128 ; CHECK-O3-NEXT: xorq $15, (%rdi)
2129 ; CHECK-O3-NEXT: retq
2145 ; CHECK-O3-LABEL: rmw_fold_xor2:
2146 ; CHECK-O3: # %bb.0:
2147 ; CHECK-O3-NEXT: xorq %rsi, (%rdi)
2148 ; CHECK-O3-NEXT: retq
2179 ; CHECK-O3-LABEL: fold_trunc_add:
2180 ; CHECK-O3: # %bb.0:
2181 ; CHECK-O3-NEXT: movq (%rdi), %rax
2182 ; CHECK-O3-NEXT: addl %esi, %eax
2183 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
2184 ; CHECK-O3-NEXT: retq
2200 ; CHECK-O3-LABEL: fold_trunc_and:
2201 ; CHECK-O3: # %bb.0:
2202 ; CHECK-O3-NEXT: movq (%rdi), %rax
2203 ; CHECK-O3-NEXT: andl %esi, %eax
2204 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
2205 ; CHECK-O3-NEXT: retq
2221 ; CHECK-O3-LABEL: fold_trunc_or:
2222 ; CHECK-O3: # %bb.0:
2223 ; CHECK-O3-NEXT: movq (%rdi), %rax
2224 ; CHECK-O3-NEXT: orl %esi, %eax
2225 ; CHECK-O3-NEXT: # kill: def $eax killed $eax killed $rax
2226 ; CHECK-O3-NEXT: retq
2246 ; CHECK-O3-LABEL: split_load:
2247 ; CHECK-O3: # %bb.0:
2248 ; CHECK-O3-NEXT: movq (%rdi), %rax
2249 ; CHECK-O3-NEXT: movq %rax, %rcx
2250 ; CHECK-O3-NEXT: shrq $32, %rcx
2251 ; CHECK-O3-NEXT: orl %eax, %ecx
2252 ; CHECK-O3-NEXT: movzbl %cl, %eax
2253 ; CHECK-O3-NEXT: retq
2385 ; CHECK-O3-LABEL: fold_constant:
2386 ; CHECK-O3: # %bb.0:
2387 ; CHECK-O3-NEXT: movq %rdi, %rax
2388 ; CHECK-O3-NEXT: addq Constant(%rip), %rax
2389 ; CHECK-O3-NEXT: retq
2403 ; CHECK-O3-CUR-LABEL: fold_constant_clobber:
2404 ; CHECK-O3-CUR: # %bb.0:
2405 ; CHECK-O3-CUR-NEXT: movq Constant(%rip), %rax
2406 ; CHECK-O3-CUR-NEXT: movq $5, (%rdi)
2407 ; CHECK-O3-CUR-NEXT: addq %rsi, %rax
2408 ; CHECK-O3-CUR-NEXT: retq
2410 ; CHECK-O3-EX-LABEL: fold_constant_clobber:
2411 ; CHECK-O3-EX: # %bb.0:
2412 ; CHECK-O3-EX-NEXT: movq %rsi, %rax
2413 ; CHECK-O3-EX-NEXT: addq Constant(%rip), %rax
2414 ; CHECK-O3-EX-NEXT: movq $5, (%rdi)
2415 ; CHECK-O3-EX-NEXT: retq
2430 ; CHECK-O3-CUR-LABEL: fold_constant_fence:
2431 ; CHECK-O3-CUR: # %bb.0:
2432 ; CHECK-O3-CUR-NEXT: movq Constant(%rip), %rax
2433 ; CHECK-O3-CUR-NEXT: mfence
2434 ; CHECK-O3-CUR-NEXT: addq %rdi, %rax
2435 ; CHECK-O3-CUR-NEXT: retq
2437 ; CHECK-O3-EX-LABEL: fold_constant_fence:
2438 ; CHECK-O3-EX: # %bb.0:
2439 ; CHECK-O3-EX-NEXT: movq %rdi, %rax
2440 ; CHECK-O3-EX-NEXT: addq Constant(%rip), %rax
2441 ; CHECK-O3-EX-NEXT: mfence
2442 ; CHECK-O3-EX-NEXT: retq
2457 ; CHECK-O3-CUR-LABEL: fold_invariant_clobber:
2458 ; CHECK-O3-CUR: # %bb.0:
2459 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rax
2460 ; CHECK-O3-CUR-NEXT: movq $5, (%rdi)
2461 ; CHECK-O3-CUR-NEXT: addq %rsi, %rax
2462 ; CHECK-O3-CUR-NEXT: retq
2464 ; CHECK-O3-EX-LABEL: fold_invariant_clobber:
2465 ; CHECK-O3-EX: # %bb.0:
2466 ; CHECK-O3-EX-NEXT: movq %rsi, %rax
2467 ; CHECK-O3-EX-NEXT: addq (%rdi), %rax
2468 ; CHECK-O3-EX-NEXT: movq $5, (%rdi)
2469 ; CHECK-O3-EX-NEXT: retq
2485 ; CHECK-O3-CUR-LABEL: fold_invariant_fence:
2486 ; CHECK-O3-CUR: # %bb.0:
2487 ; CHECK-O3-CUR-NEXT: movq (%rdi), %rax
2488 ; CHECK-O3-CUR-NEXT: mfence
2489 ; CHECK-O3-CUR-NEXT: addq %rsi, %rax
2490 ; CHECK-O3-CUR-NEXT: retq
2492 ; CHECK-O3-EX-LABEL: fold_invariant_fence:
2493 ; CHECK-O3-EX: # %bb.0:
2494 ; CHECK-O3-EX-NEXT: movq %rsi, %rax
2495 ; CHECK-O3-EX-NEXT: addq (%rdi), %rax
2496 ; CHECK-O3-EX-NEXT: mfence
2497 ; CHECK-O3-EX-NEXT: retq
2515 ; CHECK-O3-CUR-LABEL: load_i8_anyext_i16:
2516 ; CHECK-O3-CUR: # %bb.0:
2517 ; CHECK-O3-CUR-NEXT: movzbl (%rdi), %eax
2518 ; CHECK-O3-CUR-NEXT: # kill: def $ax killed $ax killed $eax
2519 ; CHECK-O3-CUR-NEXT: retq
2528 ; CHECK-O3-EX-LABEL: load_i8_anyext_i16:
2529 ; CHECK-O3-EX: # %bb.0:
2530 ; CHECK-O3-EX-NEXT: vpbroadcastb (%rdi), %xmm0
2531 ; CHECK-O3-EX-NEXT: vmovd %xmm0, %eax
2532 ; CHECK-O3-EX-NEXT: # kill: def $ax killed $ax killed $eax
2533 ; CHECK-O3-EX-NEXT: retq
2547 ; CHECK-O3-CUR-LABEL: load_i8_anyext_i32:
2548 ; CHECK-O3-CUR: # %bb.0:
2549 ; CHECK-O3-CUR-NEXT: movzbl (%rdi), %eax
2550 ; CHECK-O3-CUR-NEXT: retq
2558 ; CHECK-O3-EX-LABEL: load_i8_anyext_i32:
2559 ; CHECK-O3-EX: # %bb.0:
2560 ; CHECK-O3-EX-NEXT: vpbroadcastb (%rdi), %xmm0
2561 ; CHECK-O3-EX-NEXT: vmovd %xmm0, %eax
2562 ; CHECK-O3-EX-NEXT: retq
2577 ; CHECK-O3-CUR-LABEL: load_i16_anyext_i32:
2578 ; CHECK-O3-CUR: # %bb.0:
2579 ; CHECK-O3-CUR-NEXT: movzwl (%rdi), %eax
2580 ; CHECK-O3-CUR-NEXT: retq
2588 ; CHECK-O3-EX-LABEL: load_i16_anyext_i32:
2589 ; CHECK-O3-EX: # %bb.0:
2590 ; CHECK-O3-EX-NEXT: vpbroadcastw (%rdi), %xmm0
2591 ; CHECK-O3-EX-NEXT: vmovd %xmm0, %eax
2592 ; CHECK-O3-EX-NEXT: retq
2609 ; CHECK-O3-CUR-LABEL: load_i16_anyext_i64:
2610 ; CHECK-O3-CUR: # %bb.0:
2611 ; CHECK-O3-CUR-NEXT: movzwl (%rdi), %eax
2612 ; CHECK-O3-CUR-NEXT: vmovd %eax, %xmm0
2613 ; CHECK-O3-CUR-NEXT: vmovq %xmm0, %rax
2614 ; CHECK-O3-CUR-NEXT: retq
2622 ; CHECK-O3-EX-LABEL: load_i16_anyext_i64:
2623 ; CHECK-O3-EX: # %bb.0:
2624 ; CHECK-O3-EX-NEXT: vpbroadcastw (%rdi), %xmm0
2625 ; CHECK-O3-EX-NEXT: vmovq %xmm0, %rax
2626 ; CHECK-O3-EX-NEXT: retq
2647 ; CHECK-O3-LABEL: load_combine:
2648 ; CHECK-O3: # %bb.0:
2649 ; CHECK-O3-NEXT: movzbl (%rdi), %ecx
2650 ; CHECK-O3-NEXT: movzbl 1(%rdi), %eax
2651 ; CHECK-O3-NEXT: shll $8, %eax
2652 ; CHECK-O3-NEXT: orl %ecx, %eax
2653 ; CHECK-O3-NEXT: # kill: def $ax killed $ax killed $eax
2654 ; CHECK-O3-NEXT: retq
2680 ; CHECK-O3-CUR-LABEL: fold_cmp_over_fence:
2681 ; CHECK-O3-CUR: # %bb.0:
2682 ; CHECK-O3-CUR-NEXT: movl (%rdi), %eax
2683 ; CHECK-O3-CUR-NEXT: mfence
2684 ; CHECK-O3-CUR-NEXT: cmpl %eax, %esi
2685 ; CHECK-O3-CUR-NEXT: jne .LBB116_2
2686 ; CHECK-O3-CUR-NEXT: # %bb.1: # %taken
2687 ; CHECK-O3-CUR-NEXT: movb $1, %al
2688 ; CHECK-O3-CUR-NEXT: retq
2689 ; CHECK-O3-CUR-NEXT: .LBB116_2: # %untaken
2690 ; CHECK-O3-CUR-NEXT: xorl %eax, %eax
2691 ; CHECK-O3-CUR-NEXT: retq
2693 ; CHECK-O3-EX-LABEL: fold_cmp_over_fence:
2694 ; CHECK-O3-EX: # %bb.0:
2695 ; CHECK-O3-EX-NEXT: cmpl (%rdi), %esi
2696 ; CHECK-O3-EX-NEXT: mfence
2697 ; CHECK-O3-EX-NEXT: jne .LBB116_2
2698 ; CHECK-O3-EX-NEXT: # %bb.1: # %taken
2699 ; CHECK-O3-EX-NEXT: movb $1, %al
2700 ; CHECK-O3-EX-NEXT: retq
2701 ; CHECK-O3-EX-NEXT: .LBB116_2: # %untaken
2702 ; CHECK-O3-EX-NEXT: xorl %eax, %eax
2703 ; CHECK-O3-EX-NEXT: retq