blob: 687928f0a7c1fe0933131183bbffdaf112e0473a [file] [log] [blame]
Chandler Carruth44deb802014-09-22 20:25:08 +00001; RUN: llc < %s -mcpu=x86-64 -mattr=+avx -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
2; RUN: llc < %s -mcpu=x86-64 -mattr=+avx2 -x86-experimental-vector-shuffle-lowering | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
3
4target triple = "x86_64-unknown-unknown"
5
6define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00007; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +00008; AVX1: # BB#0:
9; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
10; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0
11; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
12; AVX1-NEXT: retq
13;
Chandler Carrutha41dceb2014-09-30 22:04:45 +000014; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000015; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +000016; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +000017; AVX2-NEXT: retq
18 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
19 ret <32 x i8> %shuffle
20}
21
22define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +000023; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000024; AVX1: # BB#0:
25; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
26; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000027; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000028; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
29; AVX1-NEXT: retq
30;
Chandler Carrutha41dceb2014-09-30 22:04:45 +000031; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000032; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +000033; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000034; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000035; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
36; AVX2-NEXT: retq
37 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
38 ret <32 x i8> %shuffle
39}
40
41define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +000042; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000043; AVX1: # BB#0:
44; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
45; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000046; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000047; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
48; AVX1-NEXT: retq
49;
Chandler Carrutha41dceb2014-09-30 22:04:45 +000050; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000051; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +000052; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000053; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000054; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
55; AVX2-NEXT: retq
56 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
57 ret <32 x i8> %shuffle
58}
59
60define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +000061; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000062; AVX1: # BB#0:
63; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
64; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000065; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000066; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
67; AVX1-NEXT: retq
68;
Chandler Carrutha41dceb2014-09-30 22:04:45 +000069; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_03_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000070; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +000071; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000072; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000073; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
74; AVX2-NEXT: retq
75 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 3, i32 0, i32 0, i32 0>
76 ret <32 x i8> %shuffle
77}
78
79define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +000080; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000081; AVX1: # BB#0:
82; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
83; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000084; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000085; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
86; AVX1-NEXT: retq
87;
Chandler Carrutha41dceb2014-09-30 22:04:45 +000088; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_04_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +000089; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +000090; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +000091; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +000092; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
93; AVX2-NEXT: retq
94 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 4, i32 0, i32 0, i32 0, i32 0>
95 ret <32 x i8> %shuffle
96}
97
98define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +000099; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000100; AVX1: # BB#0:
101; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
102; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000103; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000104; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
105; AVX1-NEXT: retq
106;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000107; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_05_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000108; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000109; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000110; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000111; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
112; AVX2-NEXT: retq
113 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 5, i32 0, i32 0, i32 0, i32 0, i32 0>
114 ret <32 x i8> %shuffle
115}
116
117define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000118; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000119; AVX1: # BB#0:
120; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
121; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000122; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000123; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
124; AVX1-NEXT: retq
125;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000126; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_06_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000127; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000128; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000129; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000130; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
131; AVX2-NEXT: retq
132 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 6, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
133 ret <32 x i8> %shuffle
134}
135
136define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000137; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000138; AVX1: # BB#0:
139; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
140; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000141; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000142; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
143; AVX1-NEXT: retq
144;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000145; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000146; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000147; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000148; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000149; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
150; AVX2-NEXT: retq
151 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
152 ret <32 x i8> %shuffle
153}
154
155define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000156; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000157; AVX1: # BB#0:
158; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
159; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000160; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000161; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
162; AVX1-NEXT: retq
163;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000164; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000165; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000166; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000167; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000168; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
169; AVX2-NEXT: retq
170 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
171 ret <32 x i8> %shuffle
172}
173
174define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000175; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000176; AVX1: # BB#0:
177; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
178; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000179; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000180; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
181; AVX1-NEXT: retq
182;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000183; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_09_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000184; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000185; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000186; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000187; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
188; AVX2-NEXT: retq
189 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 9, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
190 ret <32 x i8> %shuffle
191}
192
193define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000194; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000195; AVX1: # BB#0:
196; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
197; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000198; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000199; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
200; AVX1-NEXT: retq
201;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000202; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_10_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000203; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000204; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000205; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000206; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
207; AVX2-NEXT: retq
208 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 10, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
209 ret <32 x i8> %shuffle
210}
211
212define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000213; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000214; AVX1: # BB#0:
215; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
216; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000217; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000218; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
219; AVX1-NEXT: retq
220;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000221; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_11_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000222; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000223; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000224; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000225; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
226; AVX2-NEXT: retq
227 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 11, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
228 ret <32 x i8> %shuffle
229}
230
231define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000232; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000233; AVX1: # BB#0:
234; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
235; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000236; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000237; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
238; AVX1-NEXT: retq
239;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000240; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_12_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000241; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000242; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000243; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000244; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
245; AVX2-NEXT: retq
246 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 12, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
247 ret <32 x i8> %shuffle
248}
249
250define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000251; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000252; AVX1: # BB#0:
253; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
254; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000255; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000256; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
257; AVX1-NEXT: retq
258;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000259; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_13_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000260; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000261; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000262; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000263; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
264; AVX2-NEXT: retq
265 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 13, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
266 ret <32 x i8> %shuffle
267}
268
269define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000270; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000271; AVX1: # BB#0:
272; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
273; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000274; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000275; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
276; AVX1-NEXT: retq
277;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000278; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000279; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000280; AVX2-NEXT: vpbroadcastb %xmm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000281; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000282; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
283; AVX2-NEXT: retq
284 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
285 ret <32 x i8> %shuffle
286}
287
288define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000289; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000290; AVX1: # BB#0:
291; AVX1-NEXT: movl $15, %eax
292; AVX1-NEXT: vmovd %eax, %xmm1
293; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
294; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
295; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
296; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
297; AVX1-NEXT: retq
298;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000299; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000300; AVX2: # BB#0:
301; AVX2-NEXT: movl $15, %eax
302; AVX2-NEXT: vmovd %eax, %xmm1
303; AVX2-NEXT: vpshufb %xmm1, %xmm0, %xmm1
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000304; AVX2-NEXT: vpbroadcastb %xmm0, %xmm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000305; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
306; AVX2-NEXT: retq
307 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
308 ret <32 x i8> %shuffle
309}
310
311define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000312; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000313; AVX1: # BB#0:
314; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
315; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
316; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000317; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
318; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero
Chandler Carruth44deb802014-09-22 20:25:08 +0000319; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
320; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
321; AVX1-NEXT: retq
322;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000323; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000324; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000325; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
326; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
327; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
328; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
329; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
330; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000331; AVX2-NEXT: retq
332 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
333 ret <32 x i8> %shuffle
334}
335
336define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_17_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000337; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_17_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000338; AVX1: # BB#0:
339; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
340; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
341; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000342; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero
343; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000344; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
345; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
346; AVX1-NEXT: retq
347;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000348; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_17_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000349; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000350; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
351; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,u,u,u,u,u,1,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
352; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000353; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000354; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000355; AVX2-NEXT: retq
356 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 17, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
357 ret <32 x i8> %shuffle
358}
359
360define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_18_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000361; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_18_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000362; AVX1: # BB#0:
363; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
364; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
365; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000366; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero
367; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000368; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
369; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
370; AVX1-NEXT: retq
371;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000372; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_18_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000373; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000374; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
375; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,u,u,u,u,2,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
376; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000377; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000378; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000379; AVX2-NEXT: retq
380 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 18, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
381 ret <32 x i8> %shuffle
382}
383
384define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_19_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000385; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_19_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000386; AVX1: # BB#0:
387; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
388; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
389; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000390; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero
391; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000392; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
393; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
394; AVX1-NEXT: retq
395;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000396; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_19_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000397; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000398; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
399; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,u,u,u,3,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
400; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000401; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000402; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000403; AVX2-NEXT: retq
404 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 19, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
405 ret <32 x i8> %shuffle
406}
407
408define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_20_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000409; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_20_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000410; AVX1: # BB#0:
411; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
412; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
413; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000414; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero
415; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000416; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
417; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
418; AVX1-NEXT: retq
419;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000420; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_20_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000421; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000422; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
423; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,u,u,4,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
424; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000425; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000426; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000427; AVX2-NEXT: retq
428 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 20, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
429 ret <32 x i8> %shuffle
430}
431
432define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_21_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000433; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_21_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000434; AVX1: # BB#0:
435; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
436; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
437; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000438; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero
439; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000440; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
441; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
442; AVX1-NEXT: retq
443;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000444; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_21_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000445; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000446; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
447; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,u,5,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
448; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000449; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000450; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000451; AVX2-NEXT: retq
452 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 21, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
453 ret <32 x i8> %shuffle
454}
455
456define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_22_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000457; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_22_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000458; AVX1: # BB#0:
459; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
460; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
461; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000462; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero
463; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000464; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
465; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
466; AVX1-NEXT: retq
467;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000468; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_22_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000469; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000470; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
471; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,u,6,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
472; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000473; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000474; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000475; AVX2-NEXT: retq
476 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 22, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
477 ret <32 x i8> %shuffle
478}
479
480define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_23_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000481; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_23_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000482; AVX1: # BB#0:
483; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
484; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
485; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000486; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
487; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000488; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
489; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
490; AVX1-NEXT: retq
491;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000492; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_23_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000493; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000494; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
495; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,u,7,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
496; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000497; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000498; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000499; AVX2-NEXT: retq
500 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 23, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
501 ret <32 x i8> %shuffle
502}
503
504define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_24_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000505; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_24_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000506; AVX1: # BB#0:
507; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
508; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
509; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000510; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,xmm2[8],zero,zero,zero,zero,zero,zero,zero,zero
511; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000512; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
513; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
514; AVX1-NEXT: retq
515;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000516; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_24_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000517; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000518; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
519; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,u,8,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
520; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000521; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000522; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000523; AVX2-NEXT: retq
524 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 24, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
525 ret <32 x i8> %shuffle
526}
527
528define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_25_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000529; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_25_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000530; AVX1: # BB#0:
531; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
532; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
533; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000534; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,xmm2[9],zero,zero,zero,zero,zero,zero,zero,zero,zero
535; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000536; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
537; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
538; AVX1-NEXT: retq
539;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000540; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_25_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000541; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000542; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
543; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,u,9,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
544; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000545; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000546; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000547; AVX2-NEXT: retq
548 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 25, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
549 ret <32 x i8> %shuffle
550}
551
552define <32 x i8> @shuffle_v32i8_00_00_00_00_00_26_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000553; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_26_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000554; AVX1: # BB#0:
555; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
556; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
557; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000558; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,zero,xmm2[10],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
559; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000560; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
561; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
562; AVX1-NEXT: retq
563;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000564; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_26_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000565; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000566; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
567; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,u,10,u,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
568; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000569; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000570; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000571; AVX2-NEXT: retq
572 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 26, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
573 ret <32 x i8> %shuffle
574}
575
576define <32 x i8> @shuffle_v32i8_00_00_00_00_27_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000577; AVX1-LABEL: shuffle_v32i8_00_00_00_00_27_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000578; AVX1: # BB#0:
579; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
580; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
581; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000582; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,zero,xmm2[11],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
583; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000584; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
585; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
586; AVX1-NEXT: retq
587;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000588; AVX2-LABEL: shuffle_v32i8_00_00_00_00_27_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000589; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000590; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
591; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,u,11,u,u,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
592; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000593; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000594; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000595; AVX2-NEXT: retq
596 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 27, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
597 ret <32 x i8> %shuffle
598}
599
600define <32 x i8> @shuffle_v32i8_00_00_00_28_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000601; AVX1-LABEL: shuffle_v32i8_00_00_00_28_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000602; AVX1: # BB#0:
603; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
604; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
605; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000606; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,zero,xmm2[12],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
607; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000608; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
609; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
610; AVX1-NEXT: retq
611;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000612; AVX2-LABEL: shuffle_v32i8_00_00_00_28_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000613; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000614; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
615; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,u,12,u,u,u,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
616; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000617; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000618; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000619; AVX2-NEXT: retq
620 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 28, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
621 ret <32 x i8> %shuffle
622}
623
624define <32 x i8> @shuffle_v32i8_00_00_29_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000625; AVX1-LABEL: shuffle_v32i8_00_00_29_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000626; AVX1: # BB#0:
627; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
628; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
629; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000630; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,xmm2[13],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
631; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000632; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
633; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
634; AVX1-NEXT: retq
635;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000636; AVX2-LABEL: shuffle_v32i8_00_00_29_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000637; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000638; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
639; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,u,13,u,u,u,u,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
640; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000641; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000642; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000643; AVX2-NEXT: retq
644 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 29, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
645 ret <32 x i8> %shuffle
646}
647
648define <32 x i8> @shuffle_v32i8_00_30_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000649; AVX1-LABEL: shuffle_v32i8_00_30_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000650; AVX1: # BB#0:
651; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
652; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
653; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000654; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,xmm2[14],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
655; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000656; AVX1-NEXT: vpor %xmm2, %xmm0, %xmm0
657; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
658; AVX1-NEXT: retq
659;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000660; AVX2-LABEL: shuffle_v32i8_00_30_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000661; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000662; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
663; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,14,u,u,u,u,u,u,u,u,u,u,u,u,u,u,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
664; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000665; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000666; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000667; AVX2-NEXT: retq
668 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 30, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
669 ret <32 x i8> %shuffle
670}
671
672define <32 x i8> @shuffle_v32i8_31_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000673; AVX1-LABEL: shuffle_v32i8_31_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000674; AVX1: # BB#0:
675; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1
676; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
677; AVX1-NEXT: movl $128, %eax
678; AVX1-NEXT: vmovd %eax, %xmm2
679; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm2
680; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000681; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
Chandler Carruth44deb802014-09-22 20:25:08 +0000682; AVX1-NEXT: vpor %xmm0, %xmm2, %xmm0
683; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
684; AVX1-NEXT: retq
685;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000686; AVX2-LABEL: shuffle_v32i8_31_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000687; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000688; AVX2-NEXT: vperm2i128 {{.*#+}} ymm1 = ymm0[2,3,0,1]
Chandler Carruthe91d68c2014-09-25 10:21:15 +0000689; AVX2-NEXT: movl $15, %eax
Chandler Carruth44deb802014-09-22 20:25:08 +0000690; AVX2-NEXT: vmovd %eax, %xmm2
Chandler Carruthe91d68c2014-09-25 10:21:15 +0000691; AVX2-NEXT: vpxor %ymm3, %ymm3, %ymm3
692; AVX2-NEXT: vinserti128 $0, %xmm2, %ymm3, %ymm2
693; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
Chandler Carruthb9d3fa12014-10-01 00:41:21 +0000694; AVX2-NEXT: vpbroadcastb %xmm0, %ymm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000695; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
Chandler Carruthe91d68c2014-09-25 10:21:15 +0000696; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000697; AVX2-NEXT: retq
698 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 31, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
699 ret <32 x i8> %shuffle
700}
701
702define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000703; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +0000704; AVX1: # BB#0:
705; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
706; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
707; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
708; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
709; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
710; AVX1-NEXT: retq
711;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000712; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +0000713; AVX2: # BB#0:
Chandler Carruthd8f528a2014-09-25 02:52:12 +0000714; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1
715; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000716; AVX2-NEXT: retq
717 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
718 ret <32 x i8> %shuffle
719}
720
721define <32 x i8> @shuffle_v32i8_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000722; AVX1-LABEL: shuffle_v32i8_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000723; AVX1: # BB#0:
724; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000725; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
Chandler Carruth44deb802014-09-22 20:25:08 +0000726; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
727; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
728; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
729; AVX1-NEXT: retq
730;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000731; AVX2-LABEL: shuffle_v32i8_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_15_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000732; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000733; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]
Chandler Carruth44deb802014-09-22 20:25:08 +0000734; AVX2-NEXT: retq
735 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
736 ret <32 x i8> %shuffle
737}
738
739define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000740; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +0000741; AVX1: # BB#0:
742; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000743; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
Chandler Carruth44deb802014-09-22 20:25:08 +0000744; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
745; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
746; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
747; AVX1-NEXT: retq
748;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000749; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_08_08_08_08_08_08_08_08_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +0000750; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000751; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24]
Chandler Carruth44deb802014-09-22 20:25:08 +0000752; AVX2-NEXT: retq
753 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>
754 ret <32 x i8> %shuffle
755}
756
757define <32 x i8> @shuffle_v32i8_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15_23_23_23_23_23_23_23_23_31_31_31_31_31_31_31_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000758; AVX1-LABEL: shuffle_v32i8_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15_23_23_23_23_23_23_23_23_31_31_31_31_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000759; AVX1: # BB#0:
760; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000761; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [7,7,7,7,7,7,7,7,15,15,15,15,15,15,15,15]
Chandler Carruth44deb802014-09-22 20:25:08 +0000762; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
763; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
764; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
765; AVX1-NEXT: retq
766;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000767; AVX2-LABEL: shuffle_v32i8_07_07_07_07_07_07_07_07_15_15_15_15_15_15_15_15_23_23_23_23_23_23_23_23_31_31_31_31_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000768; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000769; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[7,7,7,7,7,7,7,7,15,15,15,15,15,15,15,15,23,23,23,23,23,23,23,23,31,31,31,31,31,31,31,31]
Chandler Carruth44deb802014-09-22 20:25:08 +0000770; AVX2-NEXT: retq
771 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 15, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 23, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
772 ret <32 x i8> %shuffle
773}
774
775define <32 x i8> @shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20_24_24_24_24_28_28_28_28(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000776; AVX1-LABEL: shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20_24_24_24_24_28_28_28_28:
Chandler Carruth44deb802014-09-22 20:25:08 +0000777; AVX1: # BB#0:
778; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000779; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
Chandler Carruth44deb802014-09-22 20:25:08 +0000780; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
781; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
782; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
783; AVX1-NEXT: retq
784;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000785; AVX2-LABEL: shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_16_16_16_16_20_20_20_20_24_24_24_24_28_28_28_28:
Chandler Carruth44deb802014-09-22 20:25:08 +0000786; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000787; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12,16,16,16,16,20,20,20,20,24,24,24,24,28,28,28,28]
Chandler Carruth44deb802014-09-22 20:25:08 +0000788; AVX2-NEXT: retq
789 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12, i32 16, i32 16, i32 16, i32 16, i32 20, i32 20, i32 20, i32 20, i32 24, i32 24, i32 24, i32 24, i32 28, i32 28, i32 28, i32 28>
790 ret <32 x i8> %shuffle
791}
792
793define <32 x i8> @shuffle_v32i8_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15_19_19_19_19_23_23_23_23_27_27_27_27_31_31_31_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000794; AVX1-LABEL: shuffle_v32i8_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15_19_19_19_19_23_23_23_23_27_27_27_27_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000795; AVX1: # BB#0:
796; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000797; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]
Chandler Carruth44deb802014-09-22 20:25:08 +0000798; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
799; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
800; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
801; AVX1-NEXT: retq
802;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000803; AVX2-LABEL: shuffle_v32i8_03_03_03_03_07_07_07_07_11_11_11_11_15_15_15_15_19_19_19_19_23_23_23_23_27_27_27_27_31_31_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000804; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000805; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15,19,19,19,19,23,23,23,23,27,27,27,27,31,31,31,31]
Chandler Carruth44deb802014-09-22 20:25:08 +0000806; AVX2-NEXT: retq
807 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 3, i32 3, i32 3, i32 3, i32 7, i32 7, i32 7, i32 7, i32 11, i32 11, i32 11, i32 11, i32 15, i32 15, i32 15, i32 15, i32 19, i32 19, i32 19, i32 19, i32 23, i32 23, i32 23, i32 23, i32 27, i32 27, i32 27, i32 27, i32 31, i32 31, i32 31, i32 31>
808 ret <32 x i8> %shuffle
809}
810
811define <32 x i8> @shuffle_v32i8_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14_16_16_18_18_20_20_22_22_24_24_26_26_28_28_30_30(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000812; AVX1-LABEL: shuffle_v32i8_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14_16_16_18_18_20_20_22_22_24_24_26_26_28_28_30_30:
Chandler Carruth44deb802014-09-22 20:25:08 +0000813; AVX1: # BB#0:
814; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000815; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
Chandler Carruth44deb802014-09-22 20:25:08 +0000816; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
817; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
818; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
819; AVX1-NEXT: retq
820;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000821; AVX2-LABEL: shuffle_v32i8_00_00_02_02_04_04_06_06_08_08_10_10_12_12_14_14_16_16_18_18_20_20_22_22_24_24_26_26_28_28_30_30:
Chandler Carruth44deb802014-09-22 20:25:08 +0000822; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000823; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,24,26,26,28,28,30,30]
Chandler Carruth44deb802014-09-22 20:25:08 +0000824; AVX2-NEXT: retq
825 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14, i32 16, i32 16, i32 18, i32 18, i32 20, i32 20, i32 22, i32 22, i32 24, i32 24, i32 26, i32 26, i32 28, i32 28, i32 30, i32 30>
826 ret <32 x i8> %shuffle
827}
828
829define <32 x i8> @shuffle_v32i8_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15_17_17_19_19_21_21_23_23_25_25_27_27_29_29_31_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000830; AVX1-LABEL: shuffle_v32i8_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15_17_17_19_19_21_21_23_23_25_25_27_27_29_29_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000831; AVX1: # BB#0:
832; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000833; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
Chandler Carruth44deb802014-09-22 20:25:08 +0000834; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
835; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
836; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
837; AVX1-NEXT: retq
838;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000839; AVX2-LABEL: shuffle_v32i8_01_01_03_03_05_05_07_07_09_09_11_11_13_13_15_15_17_17_19_19_21_21_23_23_25_25_27_27_29_29_31_31:
Chandler Carruth44deb802014-09-22 20:25:08 +0000840; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000841; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15,17,17,19,19,21,21,23,23,25,25,27,27,29,29,31,31]
Chandler Carruth44deb802014-09-22 20:25:08 +0000842; AVX2-NEXT: retq
843 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15, i32 17, i32 17, i32 19, i32 19, i32 21, i32 21, i32 23, i32 23, i32 25, i32 25, i32 27, i32 27, i32 29, i32 29, i32 31, i32 31>
844 ret <32 x i8> %shuffle
845}
846
847define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000848; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000849; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000850; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000851; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
852; AVX1-NEXT: retq
853;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000854; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000855; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000856; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000857; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
858; AVX2-NEXT: retq
859 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0>
860 ret <32 x i8> %shuffle
861}
862
863define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000864; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000865; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000866; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000867; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
868; AVX1-NEXT: retq
869;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000870; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000871; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000872; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000873; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
874; AVX2-NEXT: retq
875 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0>
876 ret <32 x i8> %shuffle
877}
878
879define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000880; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000881; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000882; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000883; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
884; AVX1-NEXT: retq
885;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000886; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000887; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000888; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000889; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
890; AVX2-NEXT: retq
891 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
892 ret <32 x i8> %shuffle
893}
894
895define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000896; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000897; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000898; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000899; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
900; AVX1-NEXT: retq
901;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000902; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000903; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000904; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000905; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
906; AVX2-NEXT: retq
907 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
908 ret <32 x i8> %shuffle
909}
910
911define <32 x i8> @shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000912; AVX1-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000913; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000914; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000915; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
916; AVX1-NEXT: retq
917;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000918; AVX2-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000919; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000920; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +0000921; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
922; AVX2-NEXT: retq
923 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
924 ret <32 x i8> %shuffle
925}
926
927define <32 x i8> @shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000928; AVX1-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000929; AVX1: # BB#0:
930; AVX1-NEXT: movl $15, %eax
931; AVX1-NEXT: vmovd %eax, %xmm1
932; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0
933; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
934; AVX1-NEXT: retq
935;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000936; AVX2-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00:
Chandler Carruth44deb802014-09-22 20:25:08 +0000937; AVX2: # BB#0:
938; AVX2-NEXT: movl $15, %eax
939; AVX2-NEXT: vmovd %eax, %xmm1
940; AVX2-NEXT: vpshufb %xmm1, %xmm0, %xmm0
941; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
942; AVX2-NEXT: retq
943 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>
944 ret <32 x i8> %shuffle
945}
946
Chandler Carruth397d12c2014-09-25 02:44:39 +0000947define <32 x i8> @shuffle_v32i8_00_33_02_35_04_37_06_39_08_41_10_43_12_45_14_47_16_49_18_51_20_53_22_55_24_57_26_59_28_61_30_63(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000948; AVX1-LABEL: shuffle_v32i8_00_33_02_35_04_37_06_39_08_41_10_43_12_45_14_47_16_49_18_51_20_53_22_55_24_57_26_59_28_61_30_63:
Chandler Carruth44deb802014-09-22 20:25:08 +0000949; AVX1: # BB#0:
Chandler Carruth397d12c2014-09-25 02:44:39 +0000950; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000951; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u>
Chandler Carruth44deb802014-09-22 20:25:08 +0000952; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
Chandler Carruth397d12c2014-09-25 02:44:39 +0000953; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000954; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
Chandler Carruth44deb802014-09-22 20:25:08 +0000955; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000956; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
Chandler Carruth397d12c2014-09-25 02:44:39 +0000957; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
958; AVX1-NEXT: vpshufb %xmm5, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000959; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruth44deb802014-09-22 20:25:08 +0000960; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
961; AVX1-NEXT: retq
962;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000963; AVX2-LABEL: shuffle_v32i8_00_33_02_35_04_37_06_39_08_41_10_43_12_45_14_47_16_49_18_51_20_53_22_55_24_57_26_59_28_61_30_63:
Chandler Carruth44deb802014-09-22 20:25:08 +0000964; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000965; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
Chandler Carruthd8f528a2014-09-25 02:52:12 +0000966; AVX2-NEXT: vpblendvb %ymm2, %ymm0, %ymm1, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +0000967; AVX2-NEXT: retq
Chandler Carruth397d12c2014-09-25 02:44:39 +0000968 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 33, i32 2, i32 35, i32 4, i32 37, i32 6, i32 39, i32 8, i32 41, i32 10, i32 43, i32 12, i32 45, i32 14, i32 47, i32 16, i32 49, i32 18, i32 51, i32 20, i32 53, i32 22, i32 55, i32 24, i32 57, i32 26, i32 59, i32 28, i32 61, i32 30, i32 63>
969 ret <32 x i8> %shuffle
970}
971
972define <32 x i8> @shuffle_v32i8_32_01_34_03_36_05_38_07_40_09_42_11_44_13_46_15_48_17_50_19_52_21_54_23_56_25_58_27_60_29_62_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000973; AVX1-LABEL: shuffle_v32i8_32_01_34_03_36_05_38_07_40_09_42_11_44_13_46_15_48_17_50_19_52_21_54_23_56_25_58_27_60_29_62_31:
Chandler Carruth397d12c2014-09-25 02:44:39 +0000974; AVX1: # BB#0:
975; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000976; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u>
Chandler Carruth397d12c2014-09-25 02:44:39 +0000977; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
978; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000979; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
Chandler Carruth397d12c2014-09-25 02:44:39 +0000980; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000981; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
Chandler Carruth397d12c2014-09-25 02:44:39 +0000982; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
983; AVX1-NEXT: vpshufb %xmm5, %xmm1, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000984; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
Chandler Carruth397d12c2014-09-25 02:44:39 +0000985; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
986; AVX1-NEXT: retq
987;
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000988; AVX2-LABEL: shuffle_v32i8_32_01_34_03_36_05_38_07_40_09_42_11_44_13_46_15_48_17_50_19_52_21_54_23_56_25_58_27_60_29_62_31:
Chandler Carruth397d12c2014-09-25 02:44:39 +0000989; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000990; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
Chandler Carruthd8f528a2014-09-25 02:52:12 +0000991; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
Chandler Carruth397d12c2014-09-25 02:44:39 +0000992; AVX2-NEXT: retq
993 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 32, i32 1, i32 34, i32 3, i32 36, i32 5, i32 38, i32 7, i32 40, i32 9, i32 42, i32 11, i32 44, i32 13, i32 46, i32 15, i32 48, i32 17, i32 50, i32 19, i32 52, i32 21, i32 54, i32 23, i32 56, i32 25, i32 58, i32 27, i32 60, i32 29, i32 62, i32 31>
Chandler Carruth44deb802014-09-22 20:25:08 +0000994 ret <32 x i8> %shuffle
995}
996
Chandler Carrutha03011f2014-09-25 02:20:02 +0000997define <32 x i8> @shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +0000998; AVX1-LABEL: shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32:
Chandler Carruth44deb802014-09-22 20:25:08 +0000999; AVX1: # BB#0:
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001000; AVX1-NEXT: vpxor %xmm2, %xmm2, %xmm2
1001; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1002; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001003; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001004; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0
1005; AVX1-NEXT: retq
1006;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001007; AVX2-LABEL: shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32:
Chandler Carruth44deb802014-09-22 20:25:08 +00001008; AVX2: # BB#0:
Chandler Carruthb9d3fa12014-10-01 00:41:21 +00001009; AVX2-NEXT: vpbroadcastb %xmm1, %xmm1
1010; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[1,3,5,7,9,11,13,15,u,u,u,u,u,u,u,u]
1011; AVX2-NEXT: vpbroadcastw %xmm0, %xmm0
1012; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001013; AVX2-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001014; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
1015; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001016 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32>
Chandler Carruth44deb802014-09-22 20:25:08 +00001017 ret <32 x i8> %shuffle
1018}
1019
Chandler Carrutha03011f2014-09-25 02:20:02 +00001020define <32 x i8> @shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_16_48_16_48_16_48_16_48_16_48_16_48_16_48_16_48(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001021; AVX1-LABEL: shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_16_48_16_48_16_48_16_48_16_48_16_48_16_48_16_48:
Chandler Carruth44deb802014-09-22 20:25:08 +00001022; AVX1: # BB#0:
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001023; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1024; AVX1-NEXT: vpxor %xmm3, %xmm3, %xmm3
1025; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1026; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1027; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001028; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001029; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
1030; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001031; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001032; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001033; AVX1-NEXT: retq
1034;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001035; AVX2-LABEL: shuffle_v32i8_00_32_00_32_00_32_00_32_00_32_00_32_00_32_00_32_16_48_16_48_16_48_16_48_16_48_16_48_16_48_16_48:
Chandler Carruth44deb802014-09-22 20:25:08 +00001036; AVX2: # BB#0:
Chandler Carruthd8f528a2014-09-25 02:52:12 +00001037; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
1038; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001039; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17]
1040; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
Chandler Carruthd8f528a2014-09-25 02:52:12 +00001041; AVX2-NEXT: vpblendvb %ymm2, %ymm0, %ymm1, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001042; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001043 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 0, i32 32, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48, i32 16, i32 48>
Chandler Carruth44deb802014-09-22 20:25:08 +00001044 ret <32 x i8> %shuffle
1045}
1046
Chandler Carrutha03011f2014-09-25 02:20:02 +00001047define <32 x i8> @shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001048; AVX1-LABEL: shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31:
Chandler Carruth44deb802014-09-22 20:25:08 +00001049; AVX1: # BB#0:
1050; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha03011f2014-09-25 02:20:02 +00001051; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001052; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1053; AVX1-NEXT: vpshuflw {{.*#+}} xmm3 = xmm3[0,0,0,0,4,5,6,7]
1054; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
1055; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1056; AVX1-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
1057; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001058; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1059; AVX1-NEXT: retq
1060;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001061; AVX2-LABEL: shuffle_v32i8_32_32_32_32_32_32_32_32_08_09_10_11_12_13_14_15_48_48_48_48_48_48_48_48_24_25_26_27_28_29_30_31:
Chandler Carruth44deb802014-09-22 20:25:08 +00001062; AVX2: # BB#0:
Chandler Carruthd8f528a2014-09-25 02:52:12 +00001063; AVX2-NEXT: vpxor %ymm2, %ymm2, %ymm2
1064; AVX2-NEXT: vpshufb %ymm2, %ymm1, %ymm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001065; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001066; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001067 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 48, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>
Chandler Carruth44deb802014-09-22 20:25:08 +00001068 ret <32 x i8> %shuffle
1069}
1070
Chandler Carrutha03011f2014-09-25 02:20:02 +00001071define <32 x i8> @shuffle_v32i8_39_38_37_36_35_34_33_32_15_14_13_12_11_10_09_08_55_54_53_52_51_50_49_48_31_30_29_28_27_26_25_24(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001072; AVX1-LABEL: shuffle_v32i8_39_38_37_36_35_34_33_32_15_14_13_12_11_10_09_08_55_54_53_52_51_50_49_48_31_30_29_28_27_26_25_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001073; AVX1: # BB#0:
1074; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001075; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,u,u,u,15,14,13,12,11,10,9,8>
Chandler Carruth44deb802014-09-22 20:25:08 +00001076; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1077; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001078; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
Chandler Carruth44deb802014-09-22 20:25:08 +00001079; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001080; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001081; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
1082; AVX1-NEXT: vpshufb %xmm5, %xmm1, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001083; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001084; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1085; AVX1-NEXT: retq
1086;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001087; AVX2-LABEL: shuffle_v32i8_39_38_37_36_35_34_33_32_15_14_13_12_11_10_09_08_55_54_53_52_51_50_49_48_31_30_29_28_27_26_25_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001088; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001089; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[u,u,u,u,u,u,u,u,15,14,13,12,11,10,9,8,u,u,u,u,u,u,u,u,31,30,29,28,27,26,25,24]
1090; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u,23,22,21,20,19,18,17,16,u,u,u,u,u,u,u,u]
1091; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001092; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001093 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 39, i32 38, i32 37, i32 36, i32 35, i32 34, i32 33, i32 32, i32 15, i32 14, i32 13, i32 12, i32 11, i32 10, i32 9, i32 8, i32 55, i32 54, i32 53, i32 52, i32 51, i32 50, i32 49, i32 48, i32 31, i32 30, i32 29, i32 28, i32 27, i32 26, i32 25, i32 24>
Chandler Carruth44deb802014-09-22 20:25:08 +00001094 ret <32 x i8> %shuffle
1095}
1096
Chandler Carrutha03011f2014-09-25 02:20:02 +00001097define <32 x i8> @shuffle_v32i8_39_38_37_36_35_34_33_32_07_06_05_04_03_02_01_00_55_54_53_52_51_50_49_48_23_22_21_20_19_18_17_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001098; AVX1-LABEL: shuffle_v32i8_39_38_37_36_35_34_33_32_07_06_05_04_03_02_01_00_55_54_53_52_51_50_49_48_23_22_21_20_19_18_17_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001099; AVX1: # BB#0:
1100; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001101; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <u,u,u,u,u,u,u,u,7,6,5,4,3,2,1,0>
Chandler Carruth44deb802014-09-22 20:25:08 +00001102; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1103; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001104; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
Chandler Carruth44deb802014-09-22 20:25:08 +00001105; AVX1-NEXT: vpshufb %xmm5, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001106; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001107; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
1108; AVX1-NEXT: vpshufb %xmm5, %xmm1, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001109; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001110; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1111; AVX1-NEXT: retq
1112;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001113; AVX2-LABEL: shuffle_v32i8_39_38_37_36_35_34_33_32_07_06_05_04_03_02_01_00_55_54_53_52_51_50_49_48_23_22_21_20_19_18_17_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001114; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001115; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[u,u,u,u,u,u,u,u,7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u,23,22,21,20,19,18,17,16]
1116; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u,23,22,21,20,19,18,17,16,u,u,u,u,u,u,u,u]
1117; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001118; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001119 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 39, i32 38, i32 37, i32 36, i32 35, i32 34, i32 33, i32 32, i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0, i32 55, i32 54, i32 53, i32 52, i32 51, i32 50, i32 49, i32 48, i32 23, i32 22, i32 21, i32 20, i32 19, i32 18, i32 17, i32 16>
Chandler Carruth44deb802014-09-22 20:25:08 +00001120 ret <32 x i8> %shuffle
1121}
1122
1123define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_17_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001124; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_17_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001125; AVX1: # BB#0:
1126; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001127; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001128; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1129; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
1130; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1131; AVX1-NEXT: retq
1132;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001133; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_17_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001134; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001135; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001136; AVX2-NEXT: retq
1137 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 17, i32 16>
1138 ret <32 x i8> %shuffle
1139}
1140
1141define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_18_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001142; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_18_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001143; AVX1: # BB#0:
1144; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001145; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001146; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1147; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
1148; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1149; AVX1-NEXT: retq
1150;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001151; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_18_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001152; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001153; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,18,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001154; AVX2-NEXT: retq
1155 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 18, i32 16, i32 16>
1156 ret <32 x i8> %shuffle
1157}
1158
1159define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001160; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001161; AVX1: # BB#0:
1162; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001163; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001164; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1165; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
1166; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1167; AVX1-NEXT: retq
1168;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001169; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001170; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001171; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,23,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001172; AVX2-NEXT: retq
1173 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 23, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1174 ret <32 x i8> %shuffle
1175}
1176
1177define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001178; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001179; AVX1: # BB#0:
1180; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001181; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001182; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1183; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
1184; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1185; AVX1-NEXT: retq
1186;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001187; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001188; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001189; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,24,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001190; AVX2-NEXT: retq
1191 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 24, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1192 ret <32 x i8> %shuffle
1193}
1194
1195define <32 x i8> @shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_30_16_16_16_16_16_16_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001196; AVX1-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_30_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001197; AVX1: # BB#0:
1198; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001199; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001200; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm1
1201; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm0
1202; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1203; AVX1-NEXT: retq
1204;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001205; AVX2-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_30_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001206; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001207; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,30,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001208; AVX2-NEXT: retq
1209 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 30, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1210 ret <32 x i8> %shuffle
1211}
1212
1213define <32 x i8> @shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_31_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001214; AVX1-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_31_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001215; AVX1: # BB#0:
1216; AVX1-NEXT: movl $15, %eax
1217; AVX1-NEXT: vmovd %eax, %xmm1
1218; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1219; AVX1-NEXT: vpshufb %xmm1, %xmm2, %xmm2
1220; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0
1221; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1222; AVX1-NEXT: retq
1223;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001224; AVX2-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_31_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001225; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001226; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001227; AVX2-NEXT: retq
1228 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 31, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1229 ret <32 x i8> %shuffle
1230}
1231
Chandler Carrutha03011f2014-09-25 02:20:02 +00001232define <32 x i8> @shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001233; AVX1-LABEL: shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55:
Chandler Carruth44deb802014-09-22 20:25:08 +00001234; AVX1: # BB#0:
Chandler Carruth4d03be12014-09-27 04:42:44 +00001235; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1236; AVX1-NEXT: vpmovzxbw %xmm2, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001237; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001238; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
Chandler Carruth4d03be12014-09-27 04:42:44 +00001239; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001240; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
Chandler Carrutha03011f2014-09-25 02:20:02 +00001241; AVX1-NEXT: vpmovzxbw %xmm0, %xmm0
Chandler Carruth4d03be12014-09-27 04:42:44 +00001242; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001243; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001244; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001245; AVX1-NEXT: retq
1246;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001247; AVX2-LABEL: shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55:
Chandler Carruth44deb802014-09-22 20:25:08 +00001248; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001249; AVX2-NEXT: vpunpcklbw {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
Chandler Carruth44deb802014-09-22 20:25:08 +00001250; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001251 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>
Chandler Carruth44deb802014-09-22 20:25:08 +00001252 ret <32 x i8> %shuffle
1253}
1254
Chandler Carrutha03011f2014-09-25 02:20:02 +00001255define <32 x i8> @shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001256; AVX1-LABEL: shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63:
Chandler Carruth44deb802014-09-22 20:25:08 +00001257; AVX1: # BB#0:
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001258; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001259; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u>
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001260; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1261; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1262; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001263; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001264; AVX1-NEXT: vpshufb %xmm3, %xmm1, %xmm1
1265; AVX1-NEXT: vpshufb %xmm3, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001266; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001267; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001268; AVX1-NEXT: retq
1269;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001270; AVX2-LABEL: shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63:
Chandler Carruth44deb802014-09-22 20:25:08 +00001271; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001272; AVX2-NEXT: vpunpckhbw {{.*#+}} ymm0 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
Chandler Carruth44deb802014-09-22 20:25:08 +00001273; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001274 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
Chandler Carruth44deb802014-09-22 20:25:08 +00001275 ret <32 x i8> %shuffle
1276}
1277
Chandler Carrutha03011f2014-09-25 02:20:02 +00001278define <32 x i8> @shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001279; AVX1-LABEL: shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63:
Chandler Carruth44deb802014-09-22 20:25:08 +00001280; AVX1: # BB#0:
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001281; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001282; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = <8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u>
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001283; AVX1-NEXT: vpshufb %xmm3, %xmm2, %xmm2
1284; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1285; AVX1-NEXT: vpshufb %xmm3, %xmm4, %xmm3
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001286; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
Chandler Carrutha03011f2014-09-25 02:20:02 +00001287; AVX1-NEXT: vpmovzxbw %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001288; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1289; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001290; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001291; AVX1-NEXT: retq
1292;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001293; AVX2-LABEL: shuffle_v32i8_00_32_01_33_02_34_03_35_04_36_05_37_06_38_07_39_24_56_25_57_26_58_27_59_28_60_29_61_30_62_31_63:
Chandler Carruth44deb802014-09-22 20:25:08 +00001294; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001295; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,u,1,u,2,u,3,u,4,u,5,u,6,u,7,u,24,u,25,u,26,u,27,u,28,u,29,u,30,u,31,u]
1296; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,0,u,1,u,2,u,3,u,4,u,5,u,6,u,7,u,24,u,25,u,26,u,27,u,28,u,29,u,30,u,31]
1297; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
Chandler Carruthd8f528a2014-09-25 02:52:12 +00001298; AVX2-NEXT: vpblendvb %ymm2, %ymm0, %ymm1, %ymm0
Chandler Carruth44deb802014-09-22 20:25:08 +00001299; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001300 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
1301 ret <32 x i8> %shuffle
1302}
1303
1304define <32 x i8> @shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001305; AVX1-LABEL: shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55:
Chandler Carrutha03011f2014-09-25 02:20:02 +00001306; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001307; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = <8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u>
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001308; AVX1-NEXT: vpshufb %xmm2, %xmm1, %xmm3
1309; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001310; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001311; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001312; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
1313; AVX1-NEXT: vpmovzxbw %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001314; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1315; AVX1-NEXT: vpunpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
Chandler Carruthf572f3b2014-09-26 20:41:45 +00001316; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0
Chandler Carrutha03011f2014-09-25 02:20:02 +00001317; AVX1-NEXT: retq
1318;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001319; AVX2-LABEL: shuffle_v32i8_08_40_09_41_10_42_11_43_12_44_13_45_14_46_15_47_16_48_17_49_18_50_19_51_20_52_21_53_22_54_23_55:
Chandler Carrutha03011f2014-09-25 02:20:02 +00001320; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001321; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[8,u,9,u,10,u,11,u,12,u,13,u,14,u,15,u,16,u,17,u,18,u,19,u,20,u,21,u,22,u,23,u]
1322; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[u,8,u,9,u,10,u,11,u,12,u,13,u,14,u,15,u,16,u,17,u,18,u,19,u,20,u,21,u,22,u,23]
1323; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]
Chandler Carruthd8f528a2014-09-25 02:52:12 +00001324; AVX2-NEXT: vpblendvb %ymm2, %ymm0, %ymm1, %ymm0
Chandler Carrutha03011f2014-09-25 02:20:02 +00001325; AVX2-NEXT: retq
1326 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55>
Chandler Carruth44deb802014-09-22 20:25:08 +00001327 ret <32 x i8> %shuffle
1328}
1329
1330define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_17_16_16_16_16_16_16_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001331; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_17_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001332; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001333; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001334; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001335; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001336; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1337; AVX1-NEXT: retq
1338;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001339; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_00_01_00_16_17_16_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001340; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001341; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,16,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001342; AVX2-NEXT: retq
1343 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 0, i32 16, i32 17, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1344 ret <32 x i8> %shuffle
1345}
1346
1347define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_18_16_16_16_16_16_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001348; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_18_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001349; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001350; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001351; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001352; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001353; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1354; AVX1-NEXT: retq
1355;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001356; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_00_00_00_00_00_02_00_00_16_16_18_16_16_16_16_16_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001357; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001358; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,16,16,18,16,16,16,16,16,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001359; AVX2-NEXT: retq
1360 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 2, i32 0, i32 0, i32 16, i32 16, i32 18, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1361 ret <32 x i8> %shuffle
1362}
1363
1364define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001365; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001366; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001367; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001368; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001369; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001370; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1371; AVX1-NEXT: retq
1372;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001373; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_00_07_00_00_00_00_00_00_00_16_16_16_16_16_16_16_23_16_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001374; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001375; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,16,16,16,16,16,16,16,23,16,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001376; AVX2-NEXT: retq
1377 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 7, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 23, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1378 ret <32 x i8> %shuffle
1379}
1380
1381define <32 x i8> @shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001382; AVX1-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001383; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001384; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001385; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001386; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001387; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1388; AVX1-NEXT: retq
1389;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001390; AVX2-LABEL: shuffle_v32i8_00_00_00_00_00_00_00_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_16_16_16_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001391; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001392; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,24,16,16,16,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001393; AVX2-NEXT: retq
1394 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 24, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
1395 ret <32 x i8> %shuffle
1396}
1397
1398define <32 x i8> @shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_30_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001399; AVX1-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001400; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001401; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001402; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001403; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001404; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1405; AVX1-NEXT: retq
1406;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001407; AVX2-LABEL: shuffle_v32i8_00_14_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001408; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001409; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,30,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001410; AVX2-NEXT: retq
1411 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 14, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 30, i32 16>
1412 ret <32 x i8> %shuffle
1413}
1414
1415define <32 x i8> @shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_31(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001416; AVX1-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_31:
Chandler Carruth44deb802014-09-22 20:25:08 +00001417; AVX1: # BB#0:
1418; AVX1-NEXT: movl $15, %eax
1419; AVX1-NEXT: vmovd %eax, %xmm1
1420; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm1
1421; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001422; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15]
Chandler Carruth44deb802014-09-22 20:25:08 +00001423; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1424; AVX1-NEXT: retq
1425;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001426; AVX2-LABEL: shuffle_v32i8_15_00_00_00_00_00_00_00_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_16_16_16_16_16_16_16_31:
Chandler Carruth44deb802014-09-22 20:25:08 +00001427; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001428; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,31]
Chandler Carruth44deb802014-09-22 20:25:08 +00001429; AVX2-NEXT: retq
1430 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 31>
1431 ret <32 x i8> %shuffle
1432}
1433
1434define <32 x i8> @shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_28_28_28_28_24_24_24_24_20_20_20_20_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001435; AVX1-LABEL: shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_28_28_28_28_24_24_24_24_20_20_20_20_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001436; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001437; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
Chandler Carruth44deb802014-09-22 20:25:08 +00001438; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001439; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,12,12,12,8,8,8,8,4,4,4,4,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001440; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1441; AVX1-NEXT: retq
1442;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001443; AVX2-LABEL: shuffle_v32i8_00_00_00_00_04_04_04_04_08_08_08_08_12_12_12_12_28_28_28_28_24_24_24_24_20_20_20_20_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001444; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001445; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12,28,28,28,28,24,24,24,24,20,20,20,20,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001446; AVX2-NEXT: retq
1447 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 4, i32 4, i32 4, i32 8, i32 8, i32 8, i32 8, i32 12, i32 12, i32 12, i32 12, i32 28, i32 28, i32 28, i32 28, i32 24, i32 24, i32 24, i32 24, i32 20, i32 20, i32 20, i32 20, i32 16, i32 16, i32 16, i32 16>
1448 ret <32 x i8> %shuffle
1449}
1450
1451define <32 x i8> @shuffle_v32i8_08_08_08_08_08_08_08_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001452; AVX1-LABEL: shuffle_v32i8_08_08_08_08_08_08_08_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001453; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001454; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001455; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001456; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
Chandler Carruth44deb802014-09-22 20:25:08 +00001457; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1458; AVX1-NEXT: retq
1459;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001460; AVX2-LABEL: shuffle_v32i8_08_08_08_08_08_08_08_08_00_00_00_00_00_00_00_00_16_16_16_16_16_16_16_16_24_24_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001461; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001462; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24]
Chandler Carruth44deb802014-09-22 20:25:08 +00001463; AVX2-NEXT: retq
1464 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>
1465 ret <32 x i8> %shuffle
1466}
1467
Chandler Carrutha03011f2014-09-25 02:20:02 +00001468define <32 x i8> @shuffle_v32i8_00_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_16_uu_uu_uu_uu_uu_16_16_16_16_16_30_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001469; AVX1-LABEL: shuffle_v32i8_00_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_16_uu_uu_uu_uu_uu_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001470; AVX1: # BB#0:
1471; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001472; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[0,0,0,0,u,u,u,u,u,0,0,0,0,0,14,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001473; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
1474; AVX1-NEXT: retq
1475;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001476; AVX2-LABEL: shuffle_v32i8_00_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_16_uu_uu_uu_uu_uu_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001477; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001478; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,16,16,16,16,u,u,u,u,u,16,16,16,16,16,30,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001479; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001480 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 16, i32 16, i32 16, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 16, i32 16, i32 16, i32 16, i32 16, i32 30, i32 16>
Chandler Carruth44deb802014-09-22 20:25:08 +00001481 ret <32 x i8> %shuffle
1482}
1483
Chandler Carruth397d12c2014-09-25 02:44:39 +00001484define <32 x i8> @shuffle_v32i8_uu_14_uu_uu_00_00_00_00_00_00_00_00_00_00_00_00_16_16_uu_16_uu_uu_uu_uu_16_16_16_16_16_16_30_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001485; AVX1-LABEL: shuffle_v32i8_uu_14_uu_uu_00_00_00_00_00_00_00_00_00_00_00_00_16_16_uu_16_uu_uu_uu_uu_16_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001486; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001487; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[14,14,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001488; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001489; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,u,0,u,u,u,u,0,0,0,0,0,0,14,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001490; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1491; AVX1-NEXT: retq
1492;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001493; AVX2-LABEL: shuffle_v32i8_uu_14_uu_uu_00_00_00_00_00_00_00_00_00_00_00_00_16_16_uu_16_uu_uu_uu_uu_16_16_16_16_16_16_30_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001494; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001495; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[u,14,u,u,0,0,0,0,0,0,0,0,0,0,0,0,16,16,u,16,u,u,u,u,16,16,16,16,16,16,30,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001496; AVX2-NEXT: retq
Chandler Carruth397d12c2014-09-25 02:44:39 +00001497 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 undef, i32 14, i32 undef, i32 undef, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 16, i32 16, i32 undef, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 30, i32 16>
Chandler Carruth44deb802014-09-22 20:25:08 +00001498 ret <32 x i8> %shuffle
1499}
1500
Chandler Carrutha03011f2014-09-25 02:20:02 +00001501define <32 x i8> @shuffle_v32i8_00_00_00_uu_uu_uu_04_uu_08_08_08_08_uu_uu_12_uu_28_28_28_28_uu_uu_uu_24_20_20_20_20_16_16_16_16(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001502; AVX1-LABEL: shuffle_v32i8_00_00_00_uu_uu_uu_04_uu_08_08_08_08_uu_uu_12_uu_28_28_28_28_uu_uu_uu_24_20_20_20_20_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001503; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001504; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
Chandler Carruth44deb802014-09-22 20:25:08 +00001505; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001506; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,12,12,12,8,8,8,8,4,4,4,4,0,0,0,0]
Chandler Carruth44deb802014-09-22 20:25:08 +00001507; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1508; AVX1-NEXT: retq
1509;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001510; AVX2-LABEL: shuffle_v32i8_00_00_00_uu_uu_uu_04_uu_08_08_08_08_uu_uu_12_uu_28_28_28_28_uu_uu_uu_24_20_20_20_20_16_16_16_16:
Chandler Carruth44deb802014-09-22 20:25:08 +00001511; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001512; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,0,0,u,u,u,4,u,8,8,8,8,u,u,12,u,28,28,28,28,u,u,u,24,20,20,20,20,16,16,16,16]
Chandler Carruth44deb802014-09-22 20:25:08 +00001513; AVX2-NEXT: retq
Chandler Carrutha03011f2014-09-25 02:20:02 +00001514 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 0, i32 0, i32 0, i32 undef, i32 undef, i32 undef, i32 4, i32 undef, i32 8, i32 8, i32 8, i32 8, i32 undef, i32 undef, i32 12, i32 undef, i32 28, i32 28, i32 28, i32 28, i32 undef, i32 undef, i32 undef, i32 24, i32 20, i32 20, i32 20, i32 20, i32 16, i32 16, i32 16, i32 16>
Chandler Carruth44deb802014-09-22 20:25:08 +00001515 ret <32 x i8> %shuffle
1516}
1517
1518define <32 x i8> @shuffle_v32i8_08_08_08_08_08_08_08_08_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_uu_uu_uu_uu_uu_uu_uu_24_24_24_24_24_24(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001519; AVX1-LABEL: shuffle_v32i8_08_08_08_08_08_08_08_08_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_uu_uu_uu_uu_uu_uu_uu_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001520; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001521; AVX1-NEXT: vpunpckhbw {{.*#+}} xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1522; AVX1-NEXT: vpshuflw {{.*#+}} xmm1 = xmm1[0,0,0,0,4,5,6,7]
Chandler Carruth44deb802014-09-22 20:25:08 +00001523; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001524; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[0,0,0,0,8,8,9,9,8,8,8,8,8,8,8,8]
Chandler Carruth44deb802014-09-22 20:25:08 +00001525; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1526; AVX1-NEXT: retq
1527;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001528; AVX2-LABEL: shuffle_v32i8_08_08_08_08_08_08_08_08_uu_uu_uu_uu_uu_uu_uu_uu_16_16_16_uu_uu_uu_uu_uu_uu_uu_24_24_24_24_24_24:
Chandler Carruth44deb802014-09-22 20:25:08 +00001529; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001530; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[8,8,8,8,8,8,8,8,u,u,u,u,u,u,u,u,16,16,16,u,u,u,u,u,u,u,24,24,24,24,24,24]
Chandler Carruth44deb802014-09-22 20:25:08 +00001531; AVX2-NEXT: retq
1532 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 16, i32 16, i32 16, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 24, i32 24, i32 24, i32 24, i32 24, i32 24>
1533 ret <32 x i8> %shuffle
1534}
Chandler Carruth4d03be12014-09-27 04:42:44 +00001535
1536define <32 x i8> @shuffle_v32i8_42_45_12_13_35_35_60_40_17_22_29_44_33_12_48_51_20_19_52_19_49_54_37_32_48_42_59_07_36_34_36_39(<32 x i8> %a, <32 x i8> %b) {
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001537; AVX1-LABEL: shuffle_v32i8_42_45_12_13_35_35_60_40_17_22_29_44_33_12_48_51_20_19_52_19_49_54_37_32_48_42_59_07_36_34_36_39:
Chandler Carruth4d03be12014-09-27 04:42:44 +00001538; AVX1: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001539; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = zero,zero,xmm0[u],zero,xmm0[u,u,u,u,u,u,u,7,u,u,u,u]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001540; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001541; AVX1-NEXT: vpshufb {{.*#+}} xmm4 = xmm3[4,3,u,3,u,u,u,u,u,u,u],zero,xmm3[u,u,u,u]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001542; AVX1-NEXT: vpor %xmm2, %xmm4, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001543; AVX1-NEXT: vpshufb {{.*#+}} xmm2 = xmm2[0,1],zero,xmm2[3],zero,zero,zero,zero,zero,zero,zero,xmm2[11],zero,zero,zero,zero
Chandler Carruth4d03be12014-09-27 04:42:44 +00001544; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001545; AVX1-NEXT: vpshufb {{.*#+}} xmm5 = xmm4[u,u,4,u,1,6],zero,zero,xmm4[0],zero,xmm4[11,u],zero,zero,zero,zero
1546; AVX1-NEXT: vpshufb {{.*#+}} xmm6 = xmm1[u,u],zero,xmm1[u],zero,zero,xmm1[5,0],zero,xmm1[10],zero,xmm1[u,4,2,4,7]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001547; AVX1-NEXT: vpor %xmm5, %xmm6, %xmm5
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001548; AVX1-NEXT: vpshufb {{.*#+}} xmm5 = zero,zero,xmm5[2],zero,xmm5[4,5,6,7,8,9,10],zero,xmm5[12,13,14,15]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001549; AVX1-NEXT: vpor %xmm2, %xmm5, %xmm2
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001550; AVX1-NEXT: vpshufb {{.*#+}} xmm3 = xmm3[u,u],zero,zero,xmm3[u,u,u,u,1,6,13,u,u],zero,xmm3[u,u]
1551; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[u,u,12,13,u,u,u,u],zero,zero,zero,xmm0[u,u,12,u,u]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001552; AVX1-NEXT: vpor %xmm3, %xmm0, %xmm0
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001553; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = zero,zero,xmm0[2,3],zero,zero,zero,zero,xmm0[8,9,10],zero,zero,xmm0[13],zero,zero
1554; AVX1-NEXT: vpshufb {{.*#+}} xmm3 = zero,zero,xmm4[u,u],zero,zero,xmm4[12],zero,xmm4[u,u,u],zero,zero,xmm4[u,0,3]
1555; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[10,13,u,u,3,3],zero,xmm1[8,u,u,u,12,1,u],zero,zero
Chandler Carruth4d03be12014-09-27 04:42:44 +00001556; AVX1-NEXT: vpor %xmm3, %xmm1, %xmm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001557; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[0,1],zero,zero,xmm1[4,5,6,7],zero,zero,zero,xmm1[11,12],zero,xmm1[14,15]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001558; AVX1-NEXT: vpor %xmm0, %xmm1, %xmm0
1559; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1560; AVX1-NEXT: retq
1561;
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001562; AVX2-LABEL: shuffle_v32i8_42_45_12_13_35_35_60_40_17_22_29_44_33_12_48_51_20_19_52_19_49_54_37_32_48_42_59_07_36_34_36_39:
Chandler Carruth4d03be12014-09-27 04:42:44 +00001563; AVX2: # BB#0:
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001564; AVX2-NEXT: vperm2i128 {{.*#+}} ymm2 = ymm1[2,3,0,1]
1565; AVX2-NEXT: vpshufb {{.*#+}} ymm2 = ymm2[u,u,u,u,u,u,12,u,u,u,u,u,u,u,0,3,u,u,u,u,u,u,21,16,u,26,u,u,20,18,20,23]
1566; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[10,13,u,u,3,3,u,8,u,u,u,12,1,u,u,u,u,u,20,u,17,22,u,u,16,u,27,u,u,u,u,u]
1567; AVX2-NEXT: vmovdqa {{.*#+}} ymm3 = <255,255,u,u,255,255,0,255,u,u,u,255,255,u,0,0,u,u,255,u,255,255,0,0,255,0,255,u,0,0,0,0>
Chandler Carruth4d03be12014-09-27 04:42:44 +00001568; AVX2-NEXT: vpblendvb %ymm3, %ymm1, %ymm2, %ymm1
Chandler Carrutha41dceb2014-09-30 22:04:45 +00001569; AVX2-NEXT: vperm2i128 {{.*#+}} ymm2 = ymm0[2,3,0,1]
1570; AVX2-NEXT: vpshufb {{.*#+}} ymm2 = ymm2[u,u,u,u,u,u,u,u,1,6,13,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u,23,u,u,u,u]
1571; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[u,u,12,13,u,u,u,u,u,u,u,u,u,12,u,u,20,19,u,19,u,u,u,u,u,u,u,u,u,u,u,u]
1572; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1],ymm2[2],ymm0[3,4,5],ymm2[6],ymm0[7]
1573; AVX2-NEXT: vmovdqa {{.*#+}} ymm2 = [255,255,0,0,255,255,255,255,0,0,0,255,255,0,255,255,0,0,255,0,255,255,255,255,255,255,255,0,255,255,255,255]
Chandler Carruth4d03be12014-09-27 04:42:44 +00001574; AVX2-NEXT: vpblendvb %ymm2, %ymm1, %ymm0, %ymm0
1575; AVX2-NEXT: retq
1576 %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 42, i32 45, i32 12, i32 13, i32 35, i32 35, i32 60, i32 40, i32 17, i32 22, i32 29, i32 44, i32 33, i32 12, i32 48, i32 51, i32 20, i32 19, i32 52, i32 19, i32 49, i32 54, i32 37, i32 32, i32 48, i32 42, i32 59, i32 7, i32 36, i32 34, i32 36, i32 39>
1577 ret <32 x i8> %shuffle
1578}