11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2- ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix =AVX-32
3- ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix =AVX-64
4- ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix =AVX-32
5- ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix =AVX-64
2+ ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes =AVX-32,AVX512F -32
3+ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes =AVX-64,AVX512F -64
4+ ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes =AVX-32,AVX512BW -32
5+ ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes =AVX-64,AVX512BW -64
66
77define <8 x double > @test_buildvector_v8f64 (double %a0 , double %a1 , double %a2 , double %a3 , double %a4 , double %a5 , double %a6 , double %a7 ) {
88; AVX-32-LABEL: test_buildvector_v8f64:
@@ -480,23 +480,37 @@ define <64 x i8> @test_buildvector_v64i8(i8 %a0, i8 %a1, i8 %a2, i8 %a3, i8 %a4,
480480; build vectors of repeated elements
481481
482482define <8 x double > @test_buildvector_8f64_2_var (double %a0 , double %a1 ) {
483- ; AVX-32-LABEL: test_buildvector_8f64_2_var:
484- ; AVX-32: # %bb.0:
485- ; AVX-32-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]
486- ; AVX-32-NEXT: vmovups {{[0-9]+}}(%esp), %xmm1
487- ; AVX-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2
488- ; AVX-32-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
489- ; AVX-32-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
490- ; AVX-32-NEXT: retl
483+ ; AVX512F-32-LABEL: test_buildvector_8f64_2_var:
484+ ; AVX512F-32: # %bb.0:
485+ ; AVX512F-32-NEXT: vbroadcastsd {{[0-9]+}}(%esp), %zmm0
486+ ; AVX512F-32-NEXT: movb $-126, %al
487+ ; AVX512F-32-NEXT: kmovw %eax, %k1
488+ ; AVX512F-32-NEXT: vbroadcastsd {{[0-9]+}}(%esp), %zmm0 {%k1}
489+ ; AVX512F-32-NEXT: retl
491490;
492- ; AVX-64-LABEL: test_buildvector_8f64_2_var:
493- ; AVX-64: # %bb.0:
494- ; AVX-64-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]
495- ; AVX-64-NEXT: vmovlhps {{.*#+}} xmm1 = xmm0[0],xmm1[0]
496- ; AVX-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2
497- ; AVX-64-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
498- ; AVX-64-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
499- ; AVX-64-NEXT: retq
491+ ; AVX512F-64-LABEL: test_buildvector_8f64_2_var:
492+ ; AVX512F-64: # %bb.0:
493+ ; AVX512F-64-NEXT: vbroadcastsd %xmm0, %zmm0
494+ ; AVX512F-64-NEXT: movb $-126, %al
495+ ; AVX512F-64-NEXT: kmovw %eax, %k1
496+ ; AVX512F-64-NEXT: vbroadcastsd %xmm1, %zmm0 {%k1}
497+ ; AVX512F-64-NEXT: retq
498+ ;
499+ ; AVX512BW-32-LABEL: test_buildvector_8f64_2_var:
500+ ; AVX512BW-32: # %bb.0:
501+ ; AVX512BW-32-NEXT: vbroadcastsd {{[0-9]+}}(%esp), %zmm0
502+ ; AVX512BW-32-NEXT: movb $-126, %al
503+ ; AVX512BW-32-NEXT: kmovd %eax, %k1
504+ ; AVX512BW-32-NEXT: vbroadcastsd {{[0-9]+}}(%esp), %zmm0 {%k1}
505+ ; AVX512BW-32-NEXT: retl
506+ ;
507+ ; AVX512BW-64-LABEL: test_buildvector_8f64_2_var:
508+ ; AVX512BW-64: # %bb.0:
509+ ; AVX512BW-64-NEXT: vbroadcastsd %xmm0, %zmm0
510+ ; AVX512BW-64-NEXT: movb $-126, %al
511+ ; AVX512BW-64-NEXT: kmovd %eax, %k1
512+ ; AVX512BW-64-NEXT: vbroadcastsd %xmm1, %zmm0 {%k1}
513+ ; AVX512BW-64-NEXT: retq
500514 %v0 = insertelement <8 x double > poison, double %a0 , i32 0
501515 %v1 = insertelement <8 x double > %v0 , double %a1 , i32 1
502516 %v2 = insertelement <8 x double > %v1 , double %a0 , i32 2
@@ -509,25 +523,41 @@ define <8 x double> @test_buildvector_8f64_2_var(double %a0, double %a1) {
509523}
510524
511525define <8 x double > @test_buildvector_8f64_2_load (ptr %p0 , ptr %p1 ) {
512- ; AVX-32-LABEL: test_buildvector_8f64_2_load:
513- ; AVX-32: # %bb.0:
514- ; AVX-32-NEXT: movl {{[0-9]+}}(%esp), %eax
515- ; AVX-32-NEXT: movl {{[0-9]+}}(%esp), %ecx
516- ; AVX-32-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]
517- ; AVX-32-NEXT: vmovhps {{.*#+}} xmm1 = xmm0[0,1],mem[0,1]
518- ; AVX-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2
519- ; AVX-32-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
520- ; AVX-32-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
521- ; AVX-32-NEXT: retl
526+ ; AVX512F-32-LABEL: test_buildvector_8f64_2_load:
527+ ; AVX512F-32: # %bb.0:
528+ ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %eax
529+ ; AVX512F-32-NEXT: movl {{[0-9]+}}(%esp), %ecx
530+ ; AVX512F-32-NEXT: vbroadcastsd (%ecx), %zmm0
531+ ; AVX512F-32-NEXT: movb $-126, %cl
532+ ; AVX512F-32-NEXT: kmovw %ecx, %k1
533+ ; AVX512F-32-NEXT: vbroadcastsd (%eax), %zmm0 {%k1}
534+ ; AVX512F-32-NEXT: retl
522535;
523- ; AVX-64-LABEL: test_buildvector_8f64_2_load:
524- ; AVX-64: # %bb.0:
525- ; AVX-64-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]
526- ; AVX-64-NEXT: vmovhps {{.*#+}} xmm1 = xmm0[0,1],mem[0,1]
527- ; AVX-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm2
528- ; AVX-64-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
529- ; AVX-64-NEXT: vinsertf64x4 $1, %ymm2, %zmm0, %zmm0
530- ; AVX-64-NEXT: retq
536+ ; AVX512F-64-LABEL: test_buildvector_8f64_2_load:
537+ ; AVX512F-64: # %bb.0:
538+ ; AVX512F-64-NEXT: vbroadcastsd (%rdi), %zmm0
539+ ; AVX512F-64-NEXT: movb $-126, %al
540+ ; AVX512F-64-NEXT: kmovw %eax, %k1
541+ ; AVX512F-64-NEXT: vbroadcastsd (%rsi), %zmm0 {%k1}
542+ ; AVX512F-64-NEXT: retq
543+ ;
544+ ; AVX512BW-32-LABEL: test_buildvector_8f64_2_load:
545+ ; AVX512BW-32: # %bb.0:
546+ ; AVX512BW-32-NEXT: movl {{[0-9]+}}(%esp), %eax
547+ ; AVX512BW-32-NEXT: movl {{[0-9]+}}(%esp), %ecx
548+ ; AVX512BW-32-NEXT: vbroadcastsd (%ecx), %zmm0
549+ ; AVX512BW-32-NEXT: movb $-126, %cl
550+ ; AVX512BW-32-NEXT: kmovd %ecx, %k1
551+ ; AVX512BW-32-NEXT: vbroadcastsd (%eax), %zmm0 {%k1}
552+ ; AVX512BW-32-NEXT: retl
553+ ;
554+ ; AVX512BW-64-LABEL: test_buildvector_8f64_2_load:
555+ ; AVX512BW-64: # %bb.0:
556+ ; AVX512BW-64-NEXT: vbroadcastsd (%rdi), %zmm0
557+ ; AVX512BW-64-NEXT: movb $-126, %al
558+ ; AVX512BW-64-NEXT: kmovd %eax, %k1
559+ ; AVX512BW-64-NEXT: vbroadcastsd (%rsi), %zmm0 {%k1}
560+ ; AVX512BW-64-NEXT: retq
531561 %a0 = load double , ptr %p0
532562 %a1 = load double , ptr %p1
533563 %v0 = insertelement <8 x double > poison, double %a0 , i32 0
0 commit comments