@@ -25,20 +25,18 @@ define <4 x i64> @var_shuffle_v4i64(<4 x i64> %v, <4 x i64> %indices) nounwind {
25
25
;
26
26
; AVX1-LABEL: var_shuffle_v4i64:
27
27
; AVX1: # %bb.0:
28
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
29
- ; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
30
- ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [2,2]
31
- ; AVX1-NEXT: # xmm3 = mem[0,0]
32
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm4
28
+ ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
29
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm3
30
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
33
31
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
34
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm3
35
- ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
36
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3,2,3]
37
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
38
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm4, %ymm2
32
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm4
33
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm2, %ymm2
39
34
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
40
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
41
- ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
35
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm0, %ymm0
36
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3
37
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
38
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
39
+ ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
42
40
; AVX1-NEXT: retq
43
41
;
44
42
; AVX2-LABEL: var_shuffle_v4i64:
@@ -90,16 +88,15 @@ define <8 x i32> @var_shuffle_v8i32(<8 x i32> %v, <8 x i32> %indices) nounwind {
90
88
;
91
89
; AVX1-LABEL: var_shuffle_v8i32:
92
90
; AVX1: # %bb.0:
93
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
94
- ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [3,3,3,3]
95
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
96
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm3
97
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
98
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm0[2,3,2,3]
99
- ; AVX1-NEXT: vpermilps %ymm1, %ymm3, %ymm3
91
+ ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
92
+ ; AVX1-NEXT: vpermilps %ymm1, %ymm2, %ymm2
100
93
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
101
94
; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm0
102
- ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
95
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm3
96
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
97
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
98
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
99
+ ; AVX1-NEXT: vblendvps %ymm1, %ymm2, %ymm0, %ymm0
103
100
; AVX1-NEXT: retq
104
101
;
105
102
; INT256-LABEL: var_shuffle_v8i32:
@@ -448,20 +445,18 @@ define <4 x double> @var_shuffle_v4f64(<4 x double> %v, <4 x i64> %indices) noun
448
445
;
449
446
; AVX1-LABEL: var_shuffle_v4f64:
450
447
; AVX1: # %bb.0:
451
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
452
- ; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
453
- ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [2,2]
454
- ; AVX1-NEXT: # xmm3 = mem[0,0]
455
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm4
448
+ ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
449
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm3
450
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
456
451
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
457
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm3
458
- ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
459
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3,2,3]
460
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
461
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm4, %ymm2
452
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm4
453
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm2, %ymm2
462
454
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
463
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
464
- ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
455
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm0, %ymm0
456
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm3, %xmm3
457
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
458
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
459
+ ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
465
460
; AVX1-NEXT: retq
466
461
;
467
462
; AVX2-LABEL: var_shuffle_v4f64:
@@ -513,16 +508,15 @@ define <8 x float> @var_shuffle_v8f32(<8 x float> %v, <8 x i32> %indices) nounwi
513
508
;
514
509
; AVX1-LABEL: var_shuffle_v8f32:
515
510
; AVX1: # %bb.0:
516
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
517
- ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [3,3,3,3]
518
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
519
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm3
520
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
521
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm0[2,3,2,3]
522
- ; AVX1-NEXT: vpermilps %ymm1, %ymm3, %ymm3
511
+ ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
512
+ ; AVX1-NEXT: vpermilps %ymm1, %ymm2, %ymm2
523
513
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
524
514
; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm0
525
- ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
515
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm3
516
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
517
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
518
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
519
+ ; AVX1-NEXT: vblendvps %ymm1, %ymm2, %ymm0, %ymm0
526
520
; AVX1-NEXT: retq
527
521
;
528
522
; INT256-LABEL: var_shuffle_v8f32:
@@ -575,19 +569,17 @@ define <4 x i64> @var_shuffle_v4i64_from_v2i64(<2 x i64> %v, <4 x i64> %indices)
575
569
; AVX1-LABEL: var_shuffle_v4i64_from_v2i64:
576
570
; AVX1: # %bb.0:
577
571
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
578
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
579
- ; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
580
- ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [2,2]
581
- ; AVX1-NEXT: # xmm3 = mem[0,0]
582
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm4
583
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
584
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm3
585
- ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
586
572
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
587
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
588
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
589
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm1
590
- ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm0, %ymm0
573
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm2
574
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
575
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
576
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm3
577
+ ; AVX1-NEXT: vpermilpd %ymm3, %ymm0, %ymm0
578
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
579
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
580
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
581
+ ; AVX1-NEXT: vpermilpd %ymm3, %ymm0, %ymm2
582
+ ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
591
583
; AVX1-NEXT: retq
592
584
;
593
585
; AVX2-LABEL: var_shuffle_v4i64_from_v2i64:
@@ -641,15 +633,14 @@ define <8 x i32> @var_shuffle_v8i32_from_v4i32(<4 x i32> %v, <8 x i32> %indices)
641
633
; AVX1-LABEL: var_shuffle_v8i32_from_v4i32:
642
634
; AVX1: # %bb.0: # %entry
643
635
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
644
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
645
- ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [3,3,3,3]
646
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
647
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm3
648
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
649
- ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm3
636
+ ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm2
650
637
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
651
638
; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm0
652
- ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
639
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm3
640
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
641
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
642
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
643
+ ; AVX1-NEXT: vblendvps %ymm1, %ymm2, %ymm0, %ymm0
653
644
; AVX1-NEXT: retq
654
645
;
655
646
; INT256-LABEL: var_shuffle_v8i32_from_v4i32:
@@ -999,19 +990,17 @@ define <4 x double> @var_shuffle_v4f64_from_v2f64(<2 x double> %v, <4 x i64> %in
999
990
; AVX1-LABEL: var_shuffle_v4f64_from_v2f64:
1000
991
; AVX1: # %bb.0:
1001
992
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1002
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1003
- ; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
1004
- ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [2,2]
1005
- ; AVX1-NEXT: # xmm3 = mem[0,0]
1006
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm4
1007
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
1008
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm3
1009
- ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1010
993
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1011
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1012
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
1013
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm1
1014
- ; AVX1-NEXT: vblendvpd %ymm3, %ymm1, %ymm0, %ymm0
994
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm2
995
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
996
+ ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
997
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm3
998
+ ; AVX1-NEXT: vpermilpd %ymm3, %ymm0, %ymm0
999
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm2, %xmm2
1000
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
1001
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
1002
+ ; AVX1-NEXT: vpermilpd %ymm3, %ymm0, %ymm2
1003
+ ; AVX1-NEXT: vblendvpd %ymm1, %ymm2, %ymm0, %ymm0
1015
1004
; AVX1-NEXT: retq
1016
1005
;
1017
1006
; AVX2-LABEL: var_shuffle_v4f64_from_v2f64:
@@ -1065,15 +1054,14 @@ define <8 x float> @var_shuffle_v8f32_from_v4f32(<4 x float> %v, <8 x i32> %indi
1065
1054
; AVX1-LABEL: var_shuffle_v8f32_from_v4f32:
1066
1055
; AVX1: # %bb.0: # %entry
1067
1056
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1068
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1069
- ; AVX1-NEXT: vbroadcastss {{.*#+}} xmm3 = [3,3,3,3]
1070
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm2, %xmm2
1071
- ; AVX1-NEXT: vpcmpgtd %xmm3, %xmm1, %xmm3
1072
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1073
- ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm3
1057
+ ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm2
1074
1058
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1075
1059
; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm0
1076
- ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
1060
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm3
1061
+ ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
1062
+ ; AVX1-NEXT: vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm1, %xmm1
1063
+ ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm1
1064
+ ; AVX1-NEXT: vblendvps %ymm1, %ymm2, %ymm0, %ymm0
1077
1065
; AVX1-NEXT: retq
1078
1066
;
1079
1067
; INT256-LABEL: var_shuffle_v8f32_from_v4f32:
@@ -1283,22 +1271,20 @@ define <4 x i64> @var_shuffle_v4i64_with_v16i8_indices(<4 x i64> %v, <16 x i8> %
1283
1271
;
1284
1272
; AVX1-LABEL: var_shuffle_v4i64_with_v16i8_indices:
1285
1273
; AVX1: # %bb.0:
1286
- ; AVX1-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero
1287
- ; AVX1-NEXT: vpsrld $16, %xmm1, %xmm1
1274
+ ; AVX1-NEXT: vpsrld $16, % xmm1, %xmm2
1275
+ ; AVX1-NEXT: vpmovzxbq {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero,zero,zero,zero,zero,zero,zero
1288
1276
; AVX1-NEXT: vpmovzxbq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,zero,zero,zero,zero,xmm1[1],zero,zero,zero,zero,zero,zero,zero
1277
+ ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm3 = ymm0[2,3,2,3]
1289
1278
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
1290
- ; AVX1-NEXT: vmovddup {{.*#+}} xmm3 = [2,2]
1291
- ; AVX1-NEXT: # xmm3 = mem[0,0]
1292
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
1293
1279
; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
1294
- ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm3
1295
- ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm3, %ymm3
1296
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm4 = ymm0[2,3,2,3]
1297
- ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1
1298
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm4, %ymm2
1280
+ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm4
1281
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm3, %ymm3
1299
1282
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1300
- ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
1301
- ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
1283
+ ; AVX1-NEXT: vpermilpd %ymm4, %ymm0, %ymm0
1284
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
1285
+ ; AVX1-NEXT: vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}+16(%rip), %xmm2, %xmm2
1286
+ ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
1287
+ ; AVX1-NEXT: vblendvpd %ymm1, %ymm3, %ymm0, %ymm0
1302
1288
; AVX1-NEXT: retq
1303
1289
;
1304
1290
; AVX2-LABEL: var_shuffle_v4i64_with_v16i8_indices:
0 commit comments