@@ -353,30 +353,37 @@ define void @store_atomic_vec1_double_align(ptr %x, <1 x double> %v) nounwind {
353353}
354354
355355define void @store_atomic_vec2_i8 (ptr %x , <2 x i8 > %v ) {
356- ; CHECK-SSE-O3-LABEL: store_atomic_vec2_i8:
357- ; CHECK-SSE-O3: # %bb.0:
358- ; CHECK-SSE-O3-NEXT: movd %xmm0, %eax
359- ; CHECK-SSE-O3-NEXT: movw %ax, (%rdi)
360- ; CHECK-SSE-O3-NEXT: retq
356+ ; CHECK-SSE2-O3-LABEL: store_atomic_vec2_i8:
357+ ; CHECK-SSE2-O3: # %bb.0:
358+ ; CHECK-SSE2-O3-NEXT: movd %xmm0, %eax
359+ ; CHECK-SSE2-O3-NEXT: movw %ax, (%rdi)
360+ ; CHECK-SSE2-O3-NEXT: retq
361+ ;
362+ ; CHECK-SSE4-O3-LABEL: store_atomic_vec2_i8:
363+ ; CHECK-SSE4-O3: # %bb.0:
364+ ; CHECK-SSE4-O3-NEXT: pextrw $0, %xmm0, (%rdi)
365+ ; CHECK-SSE4-O3-NEXT: retq
361366;
362367; CHECK-AVX-O3-LABEL: store_atomic_vec2_i8:
363368; CHECK-AVX-O3: # %bb.0:
364- ; CHECK-AVX-O3-NEXT: vmovd %xmm0, %eax
365- ; CHECK-AVX-O3-NEXT: movw %ax, (%rdi)
369+ ; CHECK-AVX-O3-NEXT: vpextrw $0, %xmm0, (%rdi)
366370; CHECK-AVX-O3-NEXT: retq
367371;
368- ; CHECK-SSE-O0-LABEL: store_atomic_vec2_i8:
369- ; CHECK-SSE-O0: # %bb.0:
370- ; CHECK-SSE-O0-NEXT: movd %xmm0, %eax
371- ; CHECK-SSE-O0-NEXT: # kill: def $ax killed $ax killed $eax
372- ; CHECK-SSE-O0-NEXT: movw %ax, (%rdi)
373- ; CHECK-SSE-O0-NEXT: retq
372+ ; CHECK-SSE2-O0-LABEL: store_atomic_vec2_i8:
373+ ; CHECK-SSE2-O0: # %bb.0:
374+ ; CHECK-SSE2-O0-NEXT: movd %xmm0, %eax
375+ ; CHECK-SSE2-O0-NEXT: # kill: def $ax killed $ax killed $eax
376+ ; CHECK-SSE2-O0-NEXT: movw %ax, (%rdi)
377+ ; CHECK-SSE2-O0-NEXT: retq
378+ ;
379+ ; CHECK-SSE4-O0-LABEL: store_atomic_vec2_i8:
380+ ; CHECK-SSE4-O0: # %bb.0:
381+ ; CHECK-SSE4-O0-NEXT: pextrw $0, %xmm0, (%rdi)
382+ ; CHECK-SSE4-O0-NEXT: retq
374383;
375384; CHECK-AVX-O0-LABEL: store_atomic_vec2_i8:
376385; CHECK-AVX-O0: # %bb.0:
377- ; CHECK-AVX-O0-NEXT: vmovd %xmm0, %eax
378- ; CHECK-AVX-O0-NEXT: # kill: def $ax killed $ax killed $eax
379- ; CHECK-AVX-O0-NEXT: movw %ax, (%rdi)
386+ ; CHECK-AVX-O0-NEXT: vpextrw $0, %xmm0, (%rdi)
380387; CHECK-AVX-O0-NEXT: retq
381388 store atomic <2 x i8 > %v , ptr %x release , align 4
382389 ret void
@@ -385,26 +392,22 @@ define void @store_atomic_vec2_i8(ptr %x, <2 x i8> %v) {
385392define void @store_atomic_vec2_i16 (ptr %x , <2 x i16 > %v ) {
386393; CHECK-SSE-O3-LABEL: store_atomic_vec2_i16:
387394; CHECK-SSE-O3: # %bb.0:
388- ; CHECK-SSE-O3-NEXT: movd %xmm0, %eax
389- ; CHECK-SSE-O3-NEXT: movl %eax, (%rdi)
395+ ; CHECK-SSE-O3-NEXT: movss %xmm0, (%rdi)
390396; CHECK-SSE-O3-NEXT: retq
391397;
392398; CHECK-AVX-O3-LABEL: store_atomic_vec2_i16:
393399; CHECK-AVX-O3: # %bb.0:
394- ; CHECK-AVX-O3-NEXT: vmovd %xmm0, %eax
395- ; CHECK-AVX-O3-NEXT: movl %eax, (%rdi)
400+ ; CHECK-AVX-O3-NEXT: vmovss %xmm0, (%rdi)
396401; CHECK-AVX-O3-NEXT: retq
397402;
398403; CHECK-SSE-O0-LABEL: store_atomic_vec2_i16:
399404; CHECK-SSE-O0: # %bb.0:
400- ; CHECK-SSE-O0-NEXT: movd %xmm0, %eax
401- ; CHECK-SSE-O0-NEXT: movl %eax, (%rdi)
405+ ; CHECK-SSE-O0-NEXT: movd %xmm0, (%rdi)
402406; CHECK-SSE-O0-NEXT: retq
403407;
404408; CHECK-AVX-O0-LABEL: store_atomic_vec2_i16:
405409; CHECK-AVX-O0: # %bb.0:
406- ; CHECK-AVX-O0-NEXT: vmovd %xmm0, %eax
407- ; CHECK-AVX-O0-NEXT: movl %eax, (%rdi)
410+ ; CHECK-AVX-O0-NEXT: vmovd %xmm0, (%rdi)
408411; CHECK-AVX-O0-NEXT: retq
409412 store atomic <2 x i16 > %v , ptr %x release , align 4
410413 ret void
@@ -413,26 +416,22 @@ define void @store_atomic_vec2_i16(ptr %x, <2 x i16> %v) {
413416define void @store_atomic_vec2_ptr270 (ptr %x , <2 x ptr addrspace (270 )> %v ) {
414417; CHECK-SSE-O3-LABEL: store_atomic_vec2_ptr270:
415418; CHECK-SSE-O3: # %bb.0:
416- ; CHECK-SSE-O3-NEXT: movq %xmm0, %rax
417- ; CHECK-SSE-O3-NEXT: movq %rax, (%rdi)
419+ ; CHECK-SSE-O3-NEXT: movlps %xmm0, (%rdi)
418420; CHECK-SSE-O3-NEXT: retq
419421;
420422; CHECK-AVX-O3-LABEL: store_atomic_vec2_ptr270:
421423; CHECK-AVX-O3: # %bb.0:
422- ; CHECK-AVX-O3-NEXT: vmovq %xmm0, %rax
423- ; CHECK-AVX-O3-NEXT: movq %rax, (%rdi)
424+ ; CHECK-AVX-O3-NEXT: vmovlps %xmm0, (%rdi)
424425; CHECK-AVX-O3-NEXT: retq
425426;
426427; CHECK-SSE-O0-LABEL: store_atomic_vec2_ptr270:
427428; CHECK-SSE-O0: # %bb.0:
428- ; CHECK-SSE-O0-NEXT: movq %xmm0, %rax
429- ; CHECK-SSE-O0-NEXT: movq %rax, (%rdi)
429+ ; CHECK-SSE-O0-NEXT: movq %xmm0, (%rdi)
430430; CHECK-SSE-O0-NEXT: retq
431431;
432432; CHECK-AVX-O0-LABEL: store_atomic_vec2_ptr270:
433433; CHECK-AVX-O0: # %bb.0:
434- ; CHECK-AVX-O0-NEXT: vmovq %xmm0, %rax
435- ; CHECK-AVX-O0-NEXT: movq %rax, (%rdi)
434+ ; CHECK-AVX-O0-NEXT: vmovq %xmm0, (%rdi)
436435; CHECK-AVX-O0-NEXT: retq
437436 store atomic <2 x ptr addrspace (270 )> %v , ptr %x release , align 8
438437 ret void
@@ -441,26 +440,22 @@ define void @store_atomic_vec2_ptr270(ptr %x, <2 x ptr addrspace(270)> %v) {
441440define void @store_atomic_vec2_i32_align (ptr %x , <2 x i32 > %v ) {
442441; CHECK-SSE-O3-LABEL: store_atomic_vec2_i32_align:
443442; CHECK-SSE-O3: # %bb.0:
444- ; CHECK-SSE-O3-NEXT: movq %xmm0, %rax
445- ; CHECK-SSE-O3-NEXT: movq %rax, (%rdi)
443+ ; CHECK-SSE-O3-NEXT: movlps %xmm0, (%rdi)
446444; CHECK-SSE-O3-NEXT: retq
447445;
448446; CHECK-AVX-O3-LABEL: store_atomic_vec2_i32_align:
449447; CHECK-AVX-O3: # %bb.0:
450- ; CHECK-AVX-O3-NEXT: vmovq %xmm0, %rax
451- ; CHECK-AVX-O3-NEXT: movq %rax, (%rdi)
448+ ; CHECK-AVX-O3-NEXT: vmovlps %xmm0, (%rdi)
452449; CHECK-AVX-O3-NEXT: retq
453450;
454451; CHECK-SSE-O0-LABEL: store_atomic_vec2_i32_align:
455452; CHECK-SSE-O0: # %bb.0:
456- ; CHECK-SSE-O0-NEXT: movq %xmm0, %rax
457- ; CHECK-SSE-O0-NEXT: movq %rax, (%rdi)
453+ ; CHECK-SSE-O0-NEXT: movq %xmm0, (%rdi)
458454; CHECK-SSE-O0-NEXT: retq
459455;
460456; CHECK-AVX-O0-LABEL: store_atomic_vec2_i32_align:
461457; CHECK-AVX-O0: # %bb.0:
462- ; CHECK-AVX-O0-NEXT: vmovq %xmm0, %rax
463- ; CHECK-AVX-O0-NEXT: movq %rax, (%rdi)
458+ ; CHECK-AVX-O0-NEXT: vmovq %xmm0, (%rdi)
464459; CHECK-AVX-O0-NEXT: retq
465460 store atomic <2 x i32 > %v , ptr %x release , align 8
466461 ret void
@@ -469,26 +464,22 @@ define void @store_atomic_vec2_i32_align(ptr %x, <2 x i32> %v) {
469464define void @store_atomic_vec2_float_align (ptr %x , <2 x float > %v ) {
470465; CHECK-SSE-O3-LABEL: store_atomic_vec2_float_align:
471466; CHECK-SSE-O3: # %bb.0:
472- ; CHECK-SSE-O3-NEXT: movq %xmm0, %rax
473- ; CHECK-SSE-O3-NEXT: movq %rax, (%rdi)
467+ ; CHECK-SSE-O3-NEXT: movlps %xmm0, (%rdi)
474468; CHECK-SSE-O3-NEXT: retq
475469;
476470; CHECK-AVX-O3-LABEL: store_atomic_vec2_float_align:
477471; CHECK-AVX-O3: # %bb.0:
478- ; CHECK-AVX-O3-NEXT: vmovq %xmm0, %rax
479- ; CHECK-AVX-O3-NEXT: movq %rax, (%rdi)
472+ ; CHECK-AVX-O3-NEXT: vmovlps %xmm0, (%rdi)
480473; CHECK-AVX-O3-NEXT: retq
481474;
482475; CHECK-SSE-O0-LABEL: store_atomic_vec2_float_align:
483476; CHECK-SSE-O0: # %bb.0:
484- ; CHECK-SSE-O0-NEXT: movq %xmm0, %rax
485- ; CHECK-SSE-O0-NEXT: movq %rax, (%rdi)
477+ ; CHECK-SSE-O0-NEXT: movq %xmm0, (%rdi)
486478; CHECK-SSE-O0-NEXT: retq
487479;
488480; CHECK-AVX-O0-LABEL: store_atomic_vec2_float_align:
489481; CHECK-AVX-O0: # %bb.0:
490- ; CHECK-AVX-O0-NEXT: vmovq %xmm0, %rax
491- ; CHECK-AVX-O0-NEXT: movq %rax, (%rdi)
482+ ; CHECK-AVX-O0-NEXT: vmovq %xmm0, (%rdi)
492483; CHECK-AVX-O0-NEXT: retq
493484 store atomic <2 x float > %v , ptr %x release , align 8
494485 ret void
@@ -497,26 +488,22 @@ define void @store_atomic_vec2_float_align(ptr %x, <2 x float> %v) {
497488define void @store_atomic_vec4_i8 (ptr %x , <4 x i8 > %v ) nounwind {
498489; CHECK-SSE-O3-LABEL: store_atomic_vec4_i8:
499490; CHECK-SSE-O3: # %bb.0:
500- ; CHECK-SSE-O3-NEXT: movd %xmm0, %eax
501- ; CHECK-SSE-O3-NEXT: movl %eax, (%rdi)
491+ ; CHECK-SSE-O3-NEXT: movss %xmm0, (%rdi)
502492; CHECK-SSE-O3-NEXT: retq
503493;
504494; CHECK-AVX-O3-LABEL: store_atomic_vec4_i8:
505495; CHECK-AVX-O3: # %bb.0:
506- ; CHECK-AVX-O3-NEXT: vmovd %xmm0, %eax
507- ; CHECK-AVX-O3-NEXT: movl %eax, (%rdi)
496+ ; CHECK-AVX-O3-NEXT: vmovss %xmm0, (%rdi)
508497; CHECK-AVX-O3-NEXT: retq
509498;
510499; CHECK-SSE-O0-LABEL: store_atomic_vec4_i8:
511500; CHECK-SSE-O0: # %bb.0:
512- ; CHECK-SSE-O0-NEXT: movd %xmm0, %eax
513- ; CHECK-SSE-O0-NEXT: movl %eax, (%rdi)
501+ ; CHECK-SSE-O0-NEXT: movd %xmm0, (%rdi)
514502; CHECK-SSE-O0-NEXT: retq
515503;
516504; CHECK-AVX-O0-LABEL: store_atomic_vec4_i8:
517505; CHECK-AVX-O0: # %bb.0:
518- ; CHECK-AVX-O0-NEXT: vmovd %xmm0, %eax
519- ; CHECK-AVX-O0-NEXT: movl %eax, (%rdi)
506+ ; CHECK-AVX-O0-NEXT: vmovd %xmm0, (%rdi)
520507; CHECK-AVX-O0-NEXT: retq
521508 store atomic <4 x i8 > %v , ptr %x release , align 4
522509 ret void
@@ -525,26 +512,22 @@ define void @store_atomic_vec4_i8(ptr %x, <4 x i8> %v) nounwind {
525512define void @store_atomic_vec4_i16 (ptr %x , <4 x i16 > %v ) nounwind {
526513; CHECK-SSE-O3-LABEL: store_atomic_vec4_i16:
527514; CHECK-SSE-O3: # %bb.0:
528- ; CHECK-SSE-O3-NEXT: movq %xmm0, %rax
529- ; CHECK-SSE-O3-NEXT: movq %rax, (%rdi)
515+ ; CHECK-SSE-O3-NEXT: movlps %xmm0, (%rdi)
530516; CHECK-SSE-O3-NEXT: retq
531517;
532518; CHECK-AVX-O3-LABEL: store_atomic_vec4_i16:
533519; CHECK-AVX-O3: # %bb.0:
534- ; CHECK-AVX-O3-NEXT: vmovq %xmm0, %rax
535- ; CHECK-AVX-O3-NEXT: movq %rax, (%rdi)
520+ ; CHECK-AVX-O3-NEXT: vmovlps %xmm0, (%rdi)
536521; CHECK-AVX-O3-NEXT: retq
537522;
538523; CHECK-SSE-O0-LABEL: store_atomic_vec4_i16:
539524; CHECK-SSE-O0: # %bb.0:
540- ; CHECK-SSE-O0-NEXT: movq %xmm0, %rax
541- ; CHECK-SSE-O0-NEXT: movq %rax, (%rdi)
525+ ; CHECK-SSE-O0-NEXT: movq %xmm0, (%rdi)
542526; CHECK-SSE-O0-NEXT: retq
543527;
544528; CHECK-AVX-O0-LABEL: store_atomic_vec4_i16:
545529; CHECK-AVX-O0: # %bb.0:
546- ; CHECK-AVX-O0-NEXT: vmovq %xmm0, %rax
547- ; CHECK-AVX-O0-NEXT: movq %rax, (%rdi)
530+ ; CHECK-AVX-O0-NEXT: vmovq %xmm0, (%rdi)
548531; CHECK-AVX-O0-NEXT: retq
549532 store atomic <4 x i16 > %v , ptr %x release , align 8
550533 ret void
0 commit comments