1
1
; 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
6
6
7
7
define <8 x double > @test_buildvector_v8f64 (double %a0 , double %a1 , double %a2 , double %a3 , double %a4 , double %a5 , double %a6 , double %a7 ) {
8
8
; 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,
480
480
; build vectors of repeated elements
481
481
482
482
define <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
491
490
;
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
500
514
%v0 = insertelement <8 x double > poison, double %a0 , i32 0
501
515
%v1 = insertelement <8 x double > %v0 , double %a1 , i32 1
502
516
%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) {
509
523
}
510
524
511
525
define <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
522
535
;
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
531
561
%a0 = load double , ptr %p0
532
562
%a1 = load double , ptr %p1
533
563
%v0 = insertelement <8 x double > poison, double %a0 , i32 0
0 commit comments