@@ -860,6 +860,53 @@ define <2 x i32> @atomic_vec2_i32(ptr %x) nounwind {
860860 ret <2 x i32 > %ret
861861}
862862
863+ ; Move td records to AtomicExpand
864+ define <2 x ptr > @atomic_vec2_ptr_align (ptr %x ) nounwind {
865+ ; CHECK-O3-LABEL: atomic_vec2_ptr_align:
866+ ; CHECK-O3: # %bb.0:
867+ ; CHECK-O3-NEXT: pushq %rax
868+ ; CHECK-O3-NEXT: movl $2, %esi
869+ ; CHECK-O3-NEXT: callq __atomic_load_16@PLT
870+ ; CHECK-O3-NEXT: movq %rdx, %xmm1
871+ ; CHECK-O3-NEXT: movq %rax, %xmm0
872+ ; CHECK-O3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
873+ ; CHECK-O3-NEXT: popq %rax
874+ ; CHECK-O3-NEXT: retq
875+ ;
876+ ; CHECK-SSE-O3-LABEL: atomic_vec2_ptr_align:
877+ ; CHECK-SSE-O3: # %bb.0:
878+ ; CHECK-SSE-O3-NEXT: vmovaps (%rdi), %xmm0
879+ ; CHECK-SSE-O3-NEXT: retq
880+ ;
881+ ; CHECK-AVX-O3-LABEL: atomic_vec2_ptr_align:
882+ ; CHECK-AVX-O3: # %bb.0:
883+ ; CHECK-AVX-O3-NEXT: vmovaps (%rdi), %xmm0
884+ ; CHECK-AVX-O3-NEXT: retq
885+ ;
886+ ; CHECK-O0-LABEL: atomic_vec2_ptr_align:
887+ ; CHECK-O0: # %bb.0:
888+ ; CHECK-O0-NEXT: pushq %rax
889+ ; CHECK-O0-NEXT: movl $2, %esi
890+ ; CHECK-O0-NEXT: callq __atomic_load_16@PLT
891+ ; CHECK-O0-NEXT: movq %rdx, %xmm1
892+ ; CHECK-O0-NEXT: movq %rax, %xmm0
893+ ; CHECK-O0-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
894+ ; CHECK-O0-NEXT: popq %rax
895+ ; CHECK-O0-NEXT: retq
896+ ;
897+ ; CHECK-SSE-O0-LABEL: atomic_vec2_ptr_align:
898+ ; CHECK-SSE-O0: # %bb.0:
899+ ; CHECK-SSE-O0-NEXT: vmovapd (%rdi), %xmm0
900+ ; CHECK-SSE-O0-NEXT: retq
901+ ;
902+ ; CHECK-AVX-O0-LABEL: atomic_vec2_ptr_align:
903+ ; CHECK-AVX-O0: # %bb.0:
904+ ; CHECK-AVX-O0-NEXT: vmovapd (%rdi), %xmm0
905+ ; CHECK-AVX-O0-NEXT: retq
906+ %ret = load atomic <2 x ptr >, ptr %x acquire , align 16
907+ ret <2 x ptr > %ret
908+ }
909+
863910define <4 x i8 > @atomic_vec4_i8 (ptr %x ) nounwind {
864911; CHECK-O3-LABEL: atomic_vec4_i8:
865912; CHECK-O3: # %bb.0:
@@ -903,6 +950,52 @@ define <4 x i16> @atomic_vec4_i16(ptr %x) nounwind {
903950 ret <4 x i16 > %ret
904951}
905952
953+ define <4 x ptr addrspace (270 )> @atomic_vec4_ptr270 (ptr %x ) nounwind {
954+ ; CHECK-O3-LABEL: atomic_vec4_ptr270:
955+ ; CHECK-O3: # %bb.0:
956+ ; CHECK-O3-NEXT: pushq %rax
957+ ; CHECK-O3-NEXT: movl $2, %esi
958+ ; CHECK-O3-NEXT: callq __atomic_load_16@PLT
959+ ; CHECK-O3-NEXT: movq %rdx, %xmm1
960+ ; CHECK-O3-NEXT: movq %rax, %xmm0
961+ ; CHECK-O3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
962+ ; CHECK-O3-NEXT: popq %rax
963+ ; CHECK-O3-NEXT: retq
964+ ;
965+ ; CHECK-SSE-O3-LABEL: atomic_vec4_ptr270:
966+ ; CHECK-SSE-O3: # %bb.0:
967+ ; CHECK-SSE-O3-NEXT: vmovaps (%rdi), %xmm0
968+ ; CHECK-SSE-O3-NEXT: retq
969+ ;
970+ ; CHECK-AVX-O3-LABEL: atomic_vec4_ptr270:
971+ ; CHECK-AVX-O3: # %bb.0:
972+ ; CHECK-AVX-O3-NEXT: vmovaps (%rdi), %xmm0
973+ ; CHECK-AVX-O3-NEXT: retq
974+ ;
975+ ; CHECK-O0-LABEL: atomic_vec4_ptr270:
976+ ; CHECK-O0: # %bb.0:
977+ ; CHECK-O0-NEXT: pushq %rax
978+ ; CHECK-O0-NEXT: movl $2, %esi
979+ ; CHECK-O0-NEXT: callq __atomic_load_16@PLT
980+ ; CHECK-O0-NEXT: movq %rdx, %xmm1
981+ ; CHECK-O0-NEXT: movq %rax, %xmm0
982+ ; CHECK-O0-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
983+ ; CHECK-O0-NEXT: popq %rax
984+ ; CHECK-O0-NEXT: retq
985+ ;
986+ ; CHECK-SSE-O0-LABEL: atomic_vec4_ptr270:
987+ ; CHECK-SSE-O0: # %bb.0:
988+ ; CHECK-SSE-O0-NEXT: vmovapd (%rdi), %xmm0
989+ ; CHECK-SSE-O0-NEXT: retq
990+ ;
991+ ; CHECK-AVX-O0-LABEL: atomic_vec4_ptr270:
992+ ; CHECK-AVX-O0: # %bb.0:
993+ ; CHECK-AVX-O0-NEXT: vmovapd (%rdi), %xmm0
994+ ; CHECK-AVX-O0-NEXT: retq
995+ %ret = load atomic <4 x ptr addrspace (270 )>, ptr %x acquire , align 16
996+ ret <4 x ptr addrspace (270 )> %ret
997+ }
998+
906999define <4 x half > @atomic_vec4_half (ptr %x ) nounwind {
9071000; CHECK-LABEL: atomic_vec4_half:
9081001; CHECK: # %bb.0:
0 commit comments