@@ -25,18 +25,20 @@ 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: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
29
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm3
30
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
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
31
33
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
32
- ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm4
33
- ; AVX1-NEXT: vpermilpd %ymm4, %ymm2, %ymm2
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
34
39
; AVX1-NEXT: vinsertf128 $1, %xmm0, %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
40
+ ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
41
+ ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
40
42
; AVX1-NEXT: retq
41
43
;
42
44
; AVX2-LABEL: var_shuffle_v4i64:
@@ -88,15 +90,16 @@ define <8 x i32> @var_shuffle_v8i32(<8 x i32> %v, <8 x i32> %indices) nounwind {
88
90
;
89
91
; AVX1-LABEL: var_shuffle_v8i32:
90
92
; AVX1: # %bb.0:
91
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
92
- ; AVX1-NEXT: vpermilps %ymm1, %ymm2, %ymm2
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
93
100
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
94
101
; AVX1-NEXT: vpermilps %ymm1, %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
102
+ ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
100
103
; AVX1-NEXT: retq
101
104
;
102
105
; INT256-LABEL: var_shuffle_v8i32:
@@ -445,18 +448,20 @@ define <4 x double> @var_shuffle_v4f64(<4 x double> %v, <4 x i64> %indices) noun
445
448
;
446
449
; AVX1-LABEL: var_shuffle_v4f64:
447
450
; AVX1: # %bb.0:
448
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
449
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm3
450
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
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
451
456
; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm1
452
- ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm3, %ymm4
453
- ; AVX1-NEXT: vpermilpd %ymm4, %ymm2, %ymm2
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
454
462
; AVX1-NEXT: vinsertf128 $1, %xmm0, %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
463
+ ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
464
+ ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
460
465
; AVX1-NEXT: retq
461
466
;
462
467
; AVX2-LABEL: var_shuffle_v4f64:
@@ -508,15 +513,16 @@ define <8 x float> @var_shuffle_v8f32(<8 x float> %v, <8 x i32> %indices) nounwi
508
513
;
509
514
; AVX1-LABEL: var_shuffle_v8f32:
510
515
; AVX1: # %bb.0:
511
- ; AVX1-NEXT: vperm2f128 {{.*#+}} ymm2 = ymm0[2,3,2,3]
512
- ; AVX1-NEXT: vpermilps %ymm1, %ymm2, %ymm2
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
513
523
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
514
524
; AVX1-NEXT: vpermilps %ymm1, %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
525
+ ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
520
526
; AVX1-NEXT: retq
521
527
;
522
528
; INT256-LABEL: var_shuffle_v8f32:
@@ -569,17 +575,19 @@ define <4 x i64> @var_shuffle_v4i64_from_v2i64(<2 x i64> %v, <4 x i64> %indices)
569
575
; AVX1-LABEL: var_shuffle_v4i64_from_v2i64:
570
576
; AVX1: # %bb.0:
571
577
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
572
- ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
573
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm2
574
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
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
575
583
; 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
584
+ ; AVX1-NEXT: vpcmpgtq %xmm3 , %xmm1, %xmm3
585
+ ; AVX1-NEXT: vinsertf128 $1, %xmm4 , %ymm3 , %ymm3
586
+ ; 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
583
591
; AVX1-NEXT: retq
584
592
;
585
593
; AVX2-LABEL: var_shuffle_v4i64_from_v2i64:
@@ -633,14 +641,15 @@ define <8 x i32> @var_shuffle_v8i32_from_v4i32(<4 x i32> %v, <8 x i32> %indices)
633
641
; AVX1-LABEL: var_shuffle_v8i32_from_v4i32:
634
642
; AVX1: # %bb.0: # %entry
635
643
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
636
- ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm2
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
637
650
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
638
651
; AVX1-NEXT: vpermilps %ymm1, %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
652
+ ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
644
653
; AVX1-NEXT: retq
645
654
;
646
655
; INT256-LABEL: var_shuffle_v8i32_from_v4i32:
@@ -990,17 +999,19 @@ define <4 x double> @var_shuffle_v4f64_from_v2f64(<2 x double> %v, <4 x i64> %in
990
999
; AVX1-LABEL: var_shuffle_v4f64_from_v2f64:
991
1000
; AVX1: # %bb.0:
992
1001
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
993
- ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
994
- ; AVX1-NEXT: vpaddq %xmm1, %xmm1, %xmm2
995
- ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
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
996
1007
; 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
1008
+ ; AVX1-NEXT: vpcmpgtq %xmm3 , %xmm1, %xmm3
1009
+ ; AVX1-NEXT: vinsertf128 $1, %xmm4 , %ymm3 , %ymm3
1010
+ ; 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
1004
1015
; AVX1-NEXT: retq
1005
1016
;
1006
1017
; AVX2-LABEL: var_shuffle_v4f64_from_v2f64:
@@ -1054,14 +1065,15 @@ define <8 x float> @var_shuffle_v8f32_from_v4f32(<4 x float> %v, <8 x i32> %indi
1054
1065
; AVX1-LABEL: var_shuffle_v8f32_from_v4f32:
1055
1066
; AVX1: # %bb.0: # %entry
1056
1067
; AVX1-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1057
- ; AVX1-NEXT: vpermilps %ymm1, %ymm0, %ymm2
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
1058
1074
; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1059
1075
; AVX1-NEXT: vpermilps %ymm1, %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
1076
+ ; AVX1-NEXT: vblendvps %ymm2, %ymm3, %ymm0, %ymm0
1065
1077
; AVX1-NEXT: retq
1066
1078
;
1067
1079
; INT256-LABEL: var_shuffle_v8f32_from_v4f32:
@@ -1271,20 +1283,22 @@ define <4 x i64> @var_shuffle_v4i64_with_v16i8_indices(<4 x i64> %v, <16 x i8> %
1271
1283
;
1272
1284
; AVX1-LABEL: var_shuffle_v4i64_with_v16i8_indices:
1273
1285
; AVX1: # %bb.0:
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
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
1276
1288
; 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]
1278
1289
; 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
1279
1293
; AVX1-NEXT: vpaddq %xmm2, %xmm2, %xmm2
1280
- ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm4
1281
- ; AVX1-NEXT: vpermilpd %ymm4, %ymm3, %ymm3
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
1282
1299
; AVX1-NEXT: vinsertf128 $1, %xmm0, %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
1300
+ ; AVX1-NEXT: vpermilpd %ymm1, %ymm0, %ymm0
1301
+ ; AVX1-NEXT: vblendvpd %ymm3, %ymm2, %ymm0, %ymm0
1288
1302
; AVX1-NEXT: retq
1289
1303
;
1290
1304
; AVX2-LABEL: var_shuffle_v4i64_with_v16i8_indices:
0 commit comments