@@ -269,3 +269,120 @@ define <1 x i64> @atomic_vec1_i64_align(ptr %x) nounwind {
269269 %ret = load atomic <1 x i64 >, ptr %x acquire , align 8
270270 ret <1 x i64 > %ret
271271}
272+
273+ define <1 x half > @atomic_vec1_half (ptr %x ) {
274+ ; CHECK-O3-LABEL: atomic_vec1_half:
275+ ; CHECK-O3: # %bb.0:
276+ ; CHECK-O3-NEXT: movzwl (%rdi), %eax
277+ ; CHECK-O3-NEXT: pinsrw $0, %eax, %xmm0
278+ ; CHECK-O3-NEXT: retq
279+ ;
280+ ; CHECK-SSE-O3-LABEL: atomic_vec1_half:
281+ ; CHECK-SSE-O3: # %bb.0:
282+ ; CHECK-SSE-O3-NEXT: movzwl (%rdi), %eax
283+ ; CHECK-SSE-O3-NEXT: pinsrw $0, %eax, %xmm0
284+ ; CHECK-SSE-O3-NEXT: retq
285+ ;
286+ ; CHECK-AVX-O3-LABEL: atomic_vec1_half:
287+ ; CHECK-AVX-O3: # %bb.0:
288+ ; CHECK-AVX-O3-NEXT: movzwl (%rdi), %eax
289+ ; CHECK-AVX-O3-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
290+ ; CHECK-AVX-O3-NEXT: retq
291+ ;
292+ ; CHECK-O0-LABEL: atomic_vec1_half:
293+ ; CHECK-O0: # %bb.0:
294+ ; CHECK-O0-NEXT: movw (%rdi), %cx
295+ ; CHECK-O0-NEXT: # implicit-def: $eax
296+ ; CHECK-O0-NEXT: movw %cx, %ax
297+ ; CHECK-O0-NEXT: # implicit-def: $xmm0
298+ ; CHECK-O0-NEXT: pinsrw $0, %eax, %xmm0
299+ ; CHECK-O0-NEXT: retq
300+ ;
301+ ; CHECK-SSE-O0-LABEL: atomic_vec1_half:
302+ ; CHECK-SSE-O0: # %bb.0:
303+ ; CHECK-SSE-O0-NEXT: movw (%rdi), %cx
304+ ; CHECK-SSE-O0-NEXT: # implicit-def: $eax
305+ ; CHECK-SSE-O0-NEXT: movw %cx, %ax
306+ ; CHECK-SSE-O0-NEXT: # implicit-def: $xmm0
307+ ; CHECK-SSE-O0-NEXT: pinsrw $0, %eax, %xmm0
308+ ; CHECK-SSE-O0-NEXT: retq
309+ ;
310+ ; CHECK-AVX-O0-LABEL: atomic_vec1_half:
311+ ; CHECK-AVX-O0: # %bb.0:
312+ ; CHECK-AVX-O0-NEXT: movw (%rdi), %cx
313+ ; CHECK-AVX-O0-NEXT: # implicit-def: $eax
314+ ; CHECK-AVX-O0-NEXT: movw %cx, %ax
315+ ; CHECK-AVX-O0-NEXT: # implicit-def: $xmm0
316+ ; CHECK-AVX-O0-NEXT: vpinsrw $0, %eax, %xmm0, %xmm0
317+ ; CHECK-AVX-O0-NEXT: retq
318+ %ret = load atomic <1 x half >, ptr %x acquire , align 2
319+ ret <1 x half > %ret
320+ }
321+
322+ define <1 x float > @atomic_vec1_float (ptr %x ) {
323+ ; CHECK-O3-LABEL: atomic_vec1_float:
324+ ; CHECK-O3: # %bb.0:
325+ ; CHECK-O3-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
326+ ; CHECK-O3-NEXT: retq
327+ ;
328+ ; CHECK-SSE-O3-LABEL: atomic_vec1_float:
329+ ; CHECK-SSE-O3: # %bb.0:
330+ ; CHECK-SSE-O3-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
331+ ; CHECK-SSE-O3-NEXT: retq
332+ ;
333+ ; CHECK-AVX-O3-LABEL: atomic_vec1_float:
334+ ; CHECK-AVX-O3: # %bb.0:
335+ ; CHECK-AVX-O3-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
336+ ; CHECK-AVX-O3-NEXT: retq
337+ ;
338+ ; CHECK-O0-LABEL: atomic_vec1_float:
339+ ; CHECK-O0: # %bb.0:
340+ ; CHECK-O0-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
341+ ; CHECK-O0-NEXT: retq
342+ ;
343+ ; CHECK-SSE-O0-LABEL: atomic_vec1_float:
344+ ; CHECK-SSE-O0: # %bb.0:
345+ ; CHECK-SSE-O0-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
346+ ; CHECK-SSE-O0-NEXT: retq
347+ ;
348+ ; CHECK-AVX-O0-LABEL: atomic_vec1_float:
349+ ; CHECK-AVX-O0: # %bb.0:
350+ ; CHECK-AVX-O0-NEXT: vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
351+ ; CHECK-AVX-O0-NEXT: retq
352+ %ret = load atomic <1 x float >, ptr %x acquire , align 4
353+ ret <1 x float > %ret
354+ }
355+
356+ define <1 x double > @atomic_vec1_double_align (ptr %x ) nounwind {
357+ ; CHECK-O3-LABEL: atomic_vec1_double_align:
358+ ; CHECK-O3: # %bb.0:
359+ ; CHECK-O3-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
360+ ; CHECK-O3-NEXT: retq
361+ ;
362+ ; CHECK-SSE-O3-LABEL: atomic_vec1_double_align:
363+ ; CHECK-SSE-O3: # %bb.0:
364+ ; CHECK-SSE-O3-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
365+ ; CHECK-SSE-O3-NEXT: retq
366+ ;
367+ ; CHECK-AVX-O3-LABEL: atomic_vec1_double_align:
368+ ; CHECK-AVX-O3: # %bb.0:
369+ ; CHECK-AVX-O3-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
370+ ; CHECK-AVX-O3-NEXT: retq
371+ ;
372+ ; CHECK-O0-LABEL: atomic_vec1_double_align:
373+ ; CHECK-O0: # %bb.0:
374+ ; CHECK-O0-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
375+ ; CHECK-O0-NEXT: retq
376+ ;
377+ ; CHECK-SSE-O0-LABEL: atomic_vec1_double_align:
378+ ; CHECK-SSE-O0: # %bb.0:
379+ ; CHECK-SSE-O0-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
380+ ; CHECK-SSE-O0-NEXT: retq
381+ ;
382+ ; CHECK-AVX-O0-LABEL: atomic_vec1_double_align:
383+ ; CHECK-AVX-O0: # %bb.0:
384+ ; CHECK-AVX-O0-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
385+ ; CHECK-AVX-O0-NEXT: retq
386+ %ret = load atomic <1 x double >, ptr %x acquire , align 8
387+ ret <1 x double > %ret
388+ }
0 commit comments