[x86] Re-work a bunch of the v32i8 test cases to actually involve byte
[oota-llvm.git] / test / CodeGen / X86 / vector-shuffle-256-v32.ll
1 ; 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
4 target triple = "x86_64-unknown-unknown"
5
6 define <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) {
7 ; 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
8 ; 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 ;
14 ; 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
15 ; AVX2:       # BB#0:
16 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
18 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
19 ; AVX2-NEXT:    retq
20   %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>
21   ret <32 x i8> %shuffle
22 }
23
24 define <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) {
25 ; 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
26 ; AVX1:       # BB#0:
27 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
29 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
30 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
31 ; AVX1-NEXT:    retq
32 ;
33 ; 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
34 ; AVX2:       # BB#0:
35 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
37 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
38 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
39 ; AVX2-NEXT:    retq
40   %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>
41   ret <32 x i8> %shuffle
42 }
43
44 define <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) {
45 ; 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
46 ; AVX1:       # BB#0:
47 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
48 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
49 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
50 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
51 ; AVX1-NEXT:    retq
52 ;
53 ; 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
54 ; AVX2:       # BB#0:
55 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
56 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
57 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
58 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
59 ; AVX2-NEXT:    retq
60   %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>
61   ret <32 x i8> %shuffle
62 }
63
64 define <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) {
65 ; 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
66 ; AVX1:       # BB#0:
67 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
68 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
69 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0]
70 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
71 ; AVX1-NEXT:    retq
72 ;
73 ; 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
74 ; AVX2:       # BB#0:
75 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
76 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
77 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0]
78 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
79 ; AVX2-NEXT:    retq
80   %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>
81   ret <32 x i8> %shuffle
82 }
83
84 define <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) {
85 ; 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
86 ; AVX1:       # BB#0:
87 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
88 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
89 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0]
90 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
91 ; AVX1-NEXT:    retq
92 ;
93 ; 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
94 ; AVX2:       # BB#0:
95 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
96 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
97 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0]
98 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
99 ; AVX2-NEXT:    retq
100   %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>
101   ret <32 x i8> %shuffle
102 }
103
104 define <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) {
105 ; 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
106 ; AVX1:       # BB#0:
107 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
108 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
109 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0]
110 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
111 ; AVX1-NEXT:    retq
112 ;
113 ; 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
114 ; AVX2:       # BB#0:
115 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
116 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
117 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0]
118 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
119 ; AVX2-NEXT:    retq
120   %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>
121   ret <32 x i8> %shuffle
122 }
123
124 define <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) {
125 ; 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
126 ; AVX1:       # BB#0:
127 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
128 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
129 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0]
130 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
131 ; AVX1-NEXT:    retq
132 ;
133 ; 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
134 ; AVX2:       # BB#0:
135 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
136 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
137 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0]
138 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
139 ; AVX2-NEXT:    retq
140   %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>
141   ret <32 x i8> %shuffle
142 }
143
144 define <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) {
145 ; 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
146 ; AVX1:       # BB#0:
147 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
148 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
149 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
150 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
151 ; AVX1-NEXT:    retq
152 ;
153 ; 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
154 ; AVX2:       # BB#0:
155 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
156 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
157 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
158 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
159 ; AVX2-NEXT:    retq
160   %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>
161   ret <32 x i8> %shuffle
162 }
163
164 define <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) {
165 ; 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
166 ; AVX1:       # BB#0:
167 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
168 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
169 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
170 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
171 ; AVX1-NEXT:    retq
172 ;
173 ; 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
174 ; AVX2:       # BB#0:
175 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
176 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
177 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
178 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
179 ; AVX2-NEXT:    retq
180   %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>
181   ret <32 x i8> %shuffle
182 }
183
184 define <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) {
185 ; 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
186 ; AVX1:       # BB#0:
187 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
188 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
189 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0]
190 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
191 ; AVX1-NEXT:    retq
192 ;
193 ; 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
194 ; AVX2:       # BB#0:
195 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
196 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
197 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0]
198 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
199 ; AVX2-NEXT:    retq
200   %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>
201   ret <32 x i8> %shuffle
202 }
203
204 define <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) {
205 ; 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
206 ; AVX1:       # BB#0:
207 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
208 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
209 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0]
210 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
211 ; AVX1-NEXT:    retq
212 ;
213 ; 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
214 ; AVX2:       # BB#0:
215 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
216 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
217 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0]
218 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
219 ; AVX2-NEXT:    retq
220   %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>
221   ret <32 x i8> %shuffle
222 }
223
224 define <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) {
225 ; 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
226 ; AVX1:       # BB#0:
227 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
228 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
229 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0]
230 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
231 ; AVX1-NEXT:    retq
232 ;
233 ; 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
234 ; AVX2:       # BB#0:
235 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
236 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
237 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0]
238 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
239 ; AVX2-NEXT:    retq
240   %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>
241   ret <32 x i8> %shuffle
242 }
243
244 define <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) {
245 ; 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
246 ; AVX1:       # BB#0:
247 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
248 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
249 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0]
250 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
251 ; AVX1-NEXT:    retq
252 ;
253 ; 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
254 ; AVX2:       # BB#0:
255 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
256 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
257 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0]
258 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
259 ; AVX2-NEXT:    retq
260   %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>
261   ret <32 x i8> %shuffle
262 }
263
264 define <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) {
265 ; 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
266 ; AVX1:       # BB#0:
267 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
268 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
269 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0]
270 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
271 ; AVX1-NEXT:    retq
272 ;
273 ; 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
274 ; AVX2:       # BB#0:
275 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
276 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
277 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0]
278 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
279 ; AVX2-NEXT:    retq
280   %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>
281   ret <32 x i8> %shuffle
282 }
283
284 define <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) {
285 ; 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
286 ; AVX1:       # BB#0:
287 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
288 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
289 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
290 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
291 ; AVX1-NEXT:    retq
292 ;
293 ; 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
294 ; AVX2:       # BB#0:
295 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
296 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
297 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
298 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
299 ; AVX2-NEXT:    retq
300   %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>
301   ret <32 x i8> %shuffle
302 }
303
304 define <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) {
305 ; 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
306 ; AVX1:       # BB#0:
307 ; AVX1-NEXT:    movl $15, %eax
308 ; AVX1-NEXT:    vmovd %eax, %xmm1
309 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
310 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
311 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
312 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
313 ; AVX1-NEXT:    retq
314 ;
315 ; 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
316 ; AVX2:       # BB#0:
317 ; AVX2-NEXT:    movl $15, %eax
318 ; AVX2-NEXT:    vmovd %eax, %xmm1
319 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
320 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
321 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
322 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
323 ; AVX2-NEXT:    retq
324   %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>
325   ret <32 x i8> %shuffle
326 }
327
328 define <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) {
329 ; 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
330 ; AVX1:       # BB#0:
331 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
332 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
333 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
334 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
335 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero
336 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
337 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
338 ; AVX1-NEXT:    retq
339 ;
340 ; 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
341 ; AVX2:       # BB#0:
342 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
343 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
344 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
345 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0]
346 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero
347 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
348 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
349 ; AVX2-NEXT:    retq
350   %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>
351   ret <32 x i8> %shuffle
352 }
353
354 define <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) {
355 ; 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
356 ; AVX1:       # BB#0:
357 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
358 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
359 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
360 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero
361 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0]
362 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
363 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
364 ; AVX1-NEXT:    retq
365 ;
366 ; 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
367 ; AVX2:       # BB#0:
368 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
369 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
370 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
371 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[1],zero
372 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0]
373 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
374 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
375 ; AVX2-NEXT:    retq
376   %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>
377   ret <32 x i8> %shuffle
378 }
379
380 define <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) {
381 ; 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
382 ; AVX1:       # BB#0:
383 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
384 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
385 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
386 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero
387 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0]
388 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
389 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
390 ; AVX1-NEXT:    retq
391 ;
392 ; 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
393 ; AVX2:       # BB#0:
394 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
395 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
396 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
397 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[2],zero,zero
398 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0]
399 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
400 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
401 ; AVX2-NEXT:    retq
402   %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>
403   ret <32 x i8> %shuffle
404 }
405
406 define <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) {
407 ; 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
408 ; AVX1:       # BB#0:
409 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
410 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
411 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
412 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero
413 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0]
414 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
415 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
416 ; AVX1-NEXT:    retq
417 ;
418 ; 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
419 ; AVX2:       # BB#0:
420 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
421 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
422 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
423 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[3],zero,zero,zero
424 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0]
425 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
426 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
427 ; 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 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>
429   ret <32 x i8> %shuffle
430 }
431
432 define <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) {
433 ; 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
434 ; AVX1:       # BB#0:
435 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
436 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
437 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
438 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero
439 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0]
440 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
441 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
442 ; AVX1-NEXT:    retq
443 ;
444 ; 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
445 ; AVX2:       # BB#0:
446 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
447 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
448 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
449 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[4],zero,zero,zero,zero
450 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0]
451 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
452 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
453 ; AVX2-NEXT:    retq
454   %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>
455   ret <32 x i8> %shuffle
456 }
457
458 define <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) {
459 ; 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
460 ; AVX1:       # BB#0:
461 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
462 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
463 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
464 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero
465 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0]
466 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
467 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
468 ; AVX1-NEXT:    retq
469 ;
470 ; 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
471 ; AVX2:       # BB#0:
472 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
473 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
474 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
475 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[5],zero,zero,zero,zero,zero
476 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0]
477 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
478 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
479 ; AVX2-NEXT:    retq
480   %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>
481   ret <32 x i8> %shuffle
482 }
483
484 define <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) {
485 ; 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
486 ; AVX1:       # BB#0:
487 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
488 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
489 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
490 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero
491 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0]
492 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
493 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
494 ; AVX1-NEXT:    retq
495 ;
496 ; 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
497 ; AVX2:       # BB#0:
498 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
499 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
500 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
501 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[6],zero,zero,zero,zero,zero,zero
502 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0]
503 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
504 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
505 ; AVX2-NEXT:    retq
506   %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>
507   ret <32 x i8> %shuffle
508 }
509
510 define <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) {
511 ; 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
512 ; AVX1:       # BB#0:
513 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
514 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
515 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
516 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
517 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0]
518 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
519 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
520 ; AVX1-NEXT:    retq
521 ;
522 ; 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
523 ; AVX2:       # BB#0:
524 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
525 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
526 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
527 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,xmm2[7],zero,zero,zero,zero,zero,zero,zero
528 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0]
529 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
530 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
531 ; AVX2-NEXT:    retq
532   %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>
533   ret <32 x i8> %shuffle
534 }
535
536 define <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) {
537 ; 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
538 ; AVX1:       # BB#0:
539 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
540 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
541 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
542 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,xmm2[8],zero,zero,zero,zero,zero,zero,zero,zero
543 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0]
544 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
545 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
546 ; AVX1-NEXT:    retq
547 ;
548 ; 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
549 ; AVX2:       # BB#0:
550 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
551 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
552 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
553 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,zero,xmm2[8],zero,zero,zero,zero,zero,zero,zero,zero
554 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0]
555 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
556 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
557 ; AVX2-NEXT:    retq
558   %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>
559   ret <32 x i8> %shuffle
560 }
561
562 define <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) {
563 ; 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
564 ; AVX1:       # BB#0:
565 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
566 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
567 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
568 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,xmm2[9],zero,zero,zero,zero,zero,zero,zero,zero,zero
569 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0]
570 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
571 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
572 ; AVX1-NEXT:    retq
573 ;
574 ; 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
575 ; AVX2:       # BB#0:
576 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
577 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
578 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
579 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,zero,xmm2[9],zero,zero,zero,zero,zero,zero,zero,zero,zero
580 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0]
581 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
582 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
583 ; AVX2-NEXT:    retq
584   %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>
585   ret <32 x i8> %shuffle
586 }
587
588 define <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) {
589 ; 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
590 ; AVX1:       # BB#0:
591 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
592 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
593 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
594 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,xmm2[10],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
595 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0]
596 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
597 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
598 ; AVX1-NEXT:    retq
599 ;
600 ; 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
601 ; AVX2:       # BB#0:
602 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
603 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
604 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
605 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,zero,xmm2[10],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
606 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0]
607 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
608 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
609 ; AVX2-NEXT:    retq
610   %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>
611   ret <32 x i8> %shuffle
612 }
613
614 define <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) {
615 ; 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
616 ; AVX1:       # BB#0:
617 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
618 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
619 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
620 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,xmm2[11],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
621 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0]
622 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
623 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
624 ; AVX1-NEXT:    retq
625 ;
626 ; 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
627 ; AVX2:       # BB#0:
628 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
629 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
630 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
631 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,zero,xmm2[11],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
632 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0]
633 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
634 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
635 ; AVX2-NEXT:    retq
636   %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>
637   ret <32 x i8> %shuffle
638 }
639
640 define <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) {
641 ; 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
642 ; AVX1:       # BB#0:
643 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
644 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
645 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
646 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,xmm2[12],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
647 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0]
648 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
649 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
650 ; AVX1-NEXT:    retq
651 ;
652 ; 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
653 ; AVX2:       # BB#0:
654 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
655 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
656 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
657 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,zero,xmm2[12],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
658 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0]
659 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
660 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
661 ; AVX2-NEXT:    retq
662   %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>
663   ret <32 x i8> %shuffle
664 }
665
666 define <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) {
667 ; 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
668 ; AVX1:       # BB#0:
669 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
670 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
671 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
672 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,xmm2[13],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
673 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0]
674 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
675 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
676 ; AVX1-NEXT:    retq
677 ;
678 ; 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
679 ; AVX2:       # BB#0:
680 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
681 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
682 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
683 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,zero,xmm2[13],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
684 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0]
685 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
686 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
687 ; AVX2-NEXT:    retq
688   %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>
689   ret <32 x i8> %shuffle
690 }
691
692 define <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) {
693 ; 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
694 ; AVX1:       # BB#0:
695 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
696 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
697 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
698 ; AVX1-NEXT:    vpshufb {{.*}} # xmm2 = zero,xmm2[14],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
699 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
700 ; AVX1-NEXT:    vpor %xmm2, %xmm0, %xmm0
701 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
702 ; AVX1-NEXT:    retq
703 ;
704 ; 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
705 ; AVX2:       # BB#0:
706 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
707 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
708 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
709 ; AVX2-NEXT:    vpshufb {{.*}} # xmm2 = zero,xmm2[14],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
710 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0],zero,xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
711 ; AVX2-NEXT:    vpor %xmm2, %xmm0, %xmm0
712 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
713 ; AVX2-NEXT:    retq
714   %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>
715   ret <32 x i8> %shuffle
716 }
717
718 define <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) {
719 ; 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
720 ; AVX1:       # BB#0:
721 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
722 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
723 ; AVX1-NEXT:    movl $128, %eax
724 ; AVX1-NEXT:    vmovd %eax, %xmm2
725 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm2
726 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
727 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
728 ; AVX1-NEXT:    vpor %xmm0, %xmm2, %xmm0
729 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
730 ; AVX1-NEXT:    retq
731 ;
732 ; 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
733 ; AVX2:       # BB#0:
734 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
735 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
736 ; AVX2-NEXT:    movl $128, %eax
737 ; AVX2-NEXT:    vmovd %eax, %xmm2
738 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm2
739 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
740 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
741 ; AVX2-NEXT:    vpor %xmm0, %xmm2, %xmm0
742 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
743 ; AVX2-NEXT:    retq
744   %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>
745   ret <32 x i8> %shuffle
746 }
747
748 define <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) {
749 ; 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
750 ; AVX1:       # BB#0:
751 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
752 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
753 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
754 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
755 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
756 ; AVX1-NEXT:    retq
757 ;
758 ; 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
759 ; AVX2:       # BB#0:
760 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
761 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
762 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
763 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
764 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
765 ; AVX2-NEXT:    retq
766   %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>
767   ret <32 x i8> %shuffle
768 }
769
770 define <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) {
771 ; 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
772 ; AVX1:       # BB#0:
773 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
774 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
775 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
776 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
777 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
778 ; AVX1-NEXT:    retq
779 ;
780 ; 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
781 ; AVX2:       # BB#0:
782 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
783 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
784 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
785 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
786 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
787 ; AVX2-NEXT:    retq
788   %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>
789   ret <32 x i8> %shuffle
790 }
791
792 define <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) {
793 ; 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
794 ; AVX1:       # BB#0:
795 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
796 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
797 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
798 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
799 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
800 ; AVX1-NEXT:    retq
801 ;
802 ; 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
803 ; AVX2:       # BB#0:
804 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
805 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
806 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
807 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
808 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
809 ; AVX2-NEXT:    retq
810   %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>
811   ret <32 x i8> %shuffle
812 }
813
814 define <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) {
815 ; 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
816 ; AVX1:       # BB#0:
817 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
818 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [7,7,7,7,7,7,7,7,15,15,15,15,15,15,15,15]
819 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
820 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
821 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
822 ; AVX1-NEXT:    retq
823 ;
824 ; 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
825 ; AVX2:       # BB#0:
826 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
827 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [7,7,7,7,7,7,7,7,15,15,15,15,15,15,15,15]
828 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
829 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
830 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
831 ; AVX2-NEXT:    retq
832   %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>
833   ret <32 x i8> %shuffle
834 }
835
836 define <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) {
837 ; 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
838 ; AVX1:       # BB#0:
839 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
840 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
841 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
842 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
843 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
844 ; AVX1-NEXT:    retq
845 ;
846 ; 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
847 ; AVX2:       # BB#0:
848 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
849 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
850 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
851 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
852 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
853 ; AVX2-NEXT:    retq
854   %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>
855   ret <32 x i8> %shuffle
856 }
857
858 define <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) {
859 ; 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
860 ; AVX1:       # BB#0:
861 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
862 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]
863 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
864 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
865 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
866 ; AVX1-NEXT:    retq
867 ;
868 ; 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
869 ; AVX2:       # BB#0:
870 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
871 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [3,3,3,3,7,7,7,7,11,11,11,11,15,15,15,15]
872 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
873 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
874 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
875 ; AVX2-NEXT:    retq
876   %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>
877   ret <32 x i8> %shuffle
878 }
879
880 define <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) {
881 ; 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
882 ; AVX1:       # BB#0:
883 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
884 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
885 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
886 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
887 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
888 ; AVX1-NEXT:    retq
889 ;
890 ; 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
891 ; AVX2:       # BB#0:
892 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
893 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]
894 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
895 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
896 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
897 ; AVX2-NEXT:    retq
898   %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>
899   ret <32 x i8> %shuffle
900 }
901
902 define <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) {
903 ; 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
904 ; AVX1:       # BB#0:
905 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
906 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
907 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
908 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
909 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
910 ; AVX1-NEXT:    retq
911 ;
912 ; 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
913 ; AVX2:       # BB#0:
914 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
915 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]
916 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
917 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
918 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
919 ; AVX2-NEXT:    retq
920   %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>
921   ret <32 x i8> %shuffle
922 }
923
924 define <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) {
925 ; 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
926 ; AVX1:       # BB#0:
927 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
928 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
929 ; AVX1-NEXT:    retq
930 ;
931 ; 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
932 ; AVX2:       # BB#0:
933 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
934 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
935 ; AVX2-NEXT:    retq
936   %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>
937   ret <32 x i8> %shuffle
938 }
939
940 define <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) {
941 ; 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
942 ; AVX1:       # BB#0:
943 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
944 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
945 ; AVX1-NEXT:    retq
946 ;
947 ; 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
948 ; AVX2:       # BB#0:
949 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
950 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
951 ; AVX2-NEXT:    retq
952   %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>
953   ret <32 x i8> %shuffle
954 }
955
956 define <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) {
957 ; 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
958 ; AVX1:       # BB#0:
959 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
960 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
961 ; AVX1-NEXT:    retq
962 ;
963 ; 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
964 ; AVX2:       # BB#0:
965 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
966 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
967 ; AVX2-NEXT:    retq
968   %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>
969   ret <32 x i8> %shuffle
970 }
971
972 define <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) {
973 ; 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
974 ; AVX1:       # BB#0:
975 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
976 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
977 ; AVX1-NEXT:    retq
978 ;
979 ; 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
980 ; AVX2:       # BB#0:
981 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
982 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
983 ; AVX2-NEXT:    retq
984   %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>
985   ret <32 x i8> %shuffle
986 }
987
988 define <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) {
989 ; 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
990 ; AVX1:       # BB#0:
991 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
992 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
993 ; AVX1-NEXT:    retq
994 ;
995 ; 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
996 ; AVX2:       # BB#0:
997 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
998 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
999 ; AVX2-NEXT:    retq
1000   %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>
1001   ret <32 x i8> %shuffle
1002 }
1003
1004 define <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) {
1005 ; 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
1006 ; AVX1:       # BB#0:
1007 ; AVX1-NEXT:    movl $15, %eax
1008 ; AVX1-NEXT:    vmovd %eax, %xmm1
1009 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1010 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1011 ; AVX1-NEXT:    retq
1012 ;
1013 ; 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
1014 ; AVX2:       # BB#0:
1015 ; AVX2-NEXT:    movl $15, %eax
1016 ; AVX2-NEXT:    vmovd %eax, %xmm1
1017 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1018 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
1019 ; AVX2-NEXT:    retq
1020   %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>
1021   ret <32 x i8> %shuffle
1022 }
1023
1024 define <32 x i8> @shuffle_v32i8_32_32_02_02_36_36_06_06_40_40_10_10_44_44_14_14_48_48_18_18_52_52_22_22_56_56_26_26_60_60_30_30(<32 x i8> %a, <32 x i8> %b) {
1025 ; AVX1-LABEL: @shuffle_v32i8_32_32_02_02_36_36_06_06_40_40_10_10_44_44_14_14_48_48_18_18_52_52_22_22_56_56_26_26_60_60_30_30
1026 ; AVX1:       # BB#0:
1027 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1028 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm3 = [6,6,2,2,2,2,6,6,14,14,10,10,10,10,14,14]
1029 ; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1030 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
1031 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm5 = [0,0,1,1,4,4,5,5,8,8,9,9,12,12,13,13]
1032 ; AVX1-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1033 ; AVX1-NEXT:    vpblendw {{.*}} # xmm2 = xmm4[0],xmm2[1],xmm4[2],xmm2[3],xmm4[4],xmm2[5],xmm4[6],xmm2[7]
1034 ; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1035 ; AVX1-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1036 ; AVX1-NEXT:    vpblendw {{.*}} # xmm0 = xmm1[0],xmm0[1],xmm1[2],xmm0[3],xmm1[4],xmm0[5],xmm1[6],xmm0[7]
1037 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1038 ; AVX1-NEXT:    retq
1039 ;
1040 ; AVX2-LABEL: @shuffle_v32i8_32_32_02_02_36_36_06_06_40_40_10_10_44_44_14_14_48_48_18_18_52_52_22_22_56_56_26_26_60_60_30_30
1041 ; AVX2:       # BB#0:
1042 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1043 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm3 = [6,6,2,2,2,2,6,6,14,14,10,10,10,10,14,14]
1044 ; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1045 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
1046 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm5 = [0,0,1,1,4,4,5,5,8,8,9,9,12,12,13,13]
1047 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1048 ; AVX2-NEXT:    vpblendw {{.*}} # xmm2 = xmm4[0],xmm2[1],xmm4[2],xmm2[3],xmm4[4],xmm2[5],xmm4[6],xmm2[7]
1049 ; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1050 ; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1051 ; AVX2-NEXT:    vpblendw {{.*}} # xmm0 = xmm1[0],xmm0[1],xmm1[2],xmm0[3],xmm1[4],xmm0[5],xmm1[6],xmm0[7]
1052 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1053 ; AVX2-NEXT:    retq
1054   %shuffle = shufflevector <32 x i8> %a, <32 x i8> %b, <32 x i32> <i32 32, i32 32, i32 2, i32 2, i32 36, i32 36, i32 6, i32 6, i32 40, i32 40, i32 10, i32 10, i32 44, i32 44, i32 14, i32 14, i32 48, i32 48, i32 18, i32 18, i32 52, i32 52, i32 22, i32 22, i32 56, i32 56, i32 26, i32 26, i32 60, i32 60, i32 30, i32 30>
1055   ret <32 x i8> %shuffle
1056 }
1057
1058 define <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) {
1059 ; 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
1060 ; AVX1:       # BB#0:
1061 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1062 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1063 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1064 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
1065 ; AVX1-NEXT:    retq
1066 ;
1067 ; 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
1068 ; AVX2:       # BB#0:
1069 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1070 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1071 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1072 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm0, %ymm0
1073 ; AVX2-NEXT:    retq
1074   %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>
1075   ret <32 x i8> %shuffle
1076 }
1077
1078 define <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) {
1079 ; 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
1080 ; AVX1:       # BB#0:
1081 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1082 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1083 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1084 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1085 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1086 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1087 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1088 ; AVX1-NEXT:    retq
1089 ;
1090 ; 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
1091 ; AVX2:       # BB#0:
1092 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1093 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1094 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1095 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1096 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1097 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1098 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1099 ; AVX2-NEXT:    retq
1100   %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>
1101   ret <32 x i8> %shuffle
1102 }
1103
1104 define <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) {
1105 ; 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
1106 ; AVX1:       # BB#0:
1107 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1108 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
1109 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1110 ; AVX1-NEXT:    vpshuflw {{.*}} # xmm3 = xmm3[0,0,0,0,4,5,6,7]
1111 ; AVX1-NEXT:    vpblendw {{.*}} # xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
1112 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1113 ; AVX1-NEXT:    vpshuflw {{.*}} # xmm1 = xmm1[0,0,0,0,4,5,6,7]
1114 ; AVX1-NEXT:    vpblendw {{.*}} # xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1115 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1116 ; AVX1-NEXT:    retq
1117 ;
1118 ; 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
1119 ; AVX2:       # BB#0:
1120 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1121 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
1122 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1123 ; AVX2-NEXT:    vpshuflw {{.*}} # xmm3 = xmm3[0,0,0,0,4,5,6,7]
1124 ; AVX2-NEXT:    vpblendd {{.*}} # xmm2 = xmm3[0,1],xmm2[2,3]
1125 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1126 ; AVX2-NEXT:    vpshuflw {{.*}} # xmm1 = xmm1[0,0,0,0,4,5,6,7]
1127 ; AVX2-NEXT:    vpblendd {{.*}} # xmm0 = xmm1[0,1],xmm0[2,3]
1128 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1129 ; AVX2-NEXT:    retq
1130   %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>
1131   ret <32 x i8> %shuffle
1132 }
1133
1134 define <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) {
1135 ; 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
1136 ; AVX1:       # BB#0:
1137 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1138 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm3 = <u,u,u,u,u,u,u,u,15,14,13,12,11,10,9,8>
1139 ; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1140 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
1141 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
1142 ; AVX1-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1143 ; AVX1-NEXT:    vpblendw {{.*}} # xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
1144 ; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1145 ; AVX1-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1146 ; AVX1-NEXT:    vpblendw {{.*}} # xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1147 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1148 ; AVX1-NEXT:    retq
1149 ;
1150 ; 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
1151 ; AVX2:       # BB#0:
1152 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1153 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm3 = <u,u,u,u,u,u,u,u,15,14,13,12,11,10,9,8>
1154 ; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1155 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
1156 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
1157 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1158 ; AVX2-NEXT:    vpblendd {{.*}} # xmm2 = xmm4[0,1],xmm2[2,3]
1159 ; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1160 ; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1161 ; AVX2-NEXT:    vpblendd {{.*}} # xmm0 = xmm1[0,1],xmm0[2,3]
1162 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1163 ; AVX2-NEXT:    retq
1164   %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>
1165   ret <32 x i8> %shuffle
1166 }
1167
1168 define <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) {
1169 ; 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
1170 ; AVX1:       # BB#0:
1171 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1172 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm3 = <u,u,u,u,u,u,u,u,7,6,5,4,3,2,1,0>
1173 ; AVX1-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1174 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
1175 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
1176 ; AVX1-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1177 ; AVX1-NEXT:    vpblendw {{.*}} # xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
1178 ; AVX1-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1179 ; AVX1-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1180 ; AVX1-NEXT:    vpblendw {{.*}} # xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
1181 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1182 ; AVX1-NEXT:    retq
1183 ;
1184 ; 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
1185 ; AVX2:       # BB#0:
1186 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1187 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm3 = <u,u,u,u,u,u,u,u,7,6,5,4,3,2,1,0>
1188 ; AVX2-NEXT:    vpshufb %xmm3, %xmm2, %xmm2
1189 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm4
1190 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm5 = <7,6,5,4,3,2,1,0,u,u,u,u,u,u,u,u>
1191 ; AVX2-NEXT:    vpshufb %xmm5, %xmm4, %xmm4
1192 ; AVX2-NEXT:    vpblendd {{.*}} # xmm2 = xmm4[0,1],xmm2[2,3]
1193 ; AVX2-NEXT:    vpshufb %xmm3, %xmm0, %xmm0
1194 ; AVX2-NEXT:    vpshufb %xmm5, %xmm1, %xmm1
1195 ; AVX2-NEXT:    vpblendd {{.*}} # xmm0 = xmm1[0,1],xmm0[2,3]
1196 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1197 ; AVX2-NEXT:    retq
1198   %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>
1199   ret <32 x i8> %shuffle
1200 }
1201
1202 define <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) {
1203 ; 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
1204 ; AVX1:       # BB#0:
1205 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1206 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
1207 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1208 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1209 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1210 ; AVX1-NEXT:    retq
1211 ;
1212 ; 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
1213 ; AVX2:       # BB#0:
1214 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1215 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
1216 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1217 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1218 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1219 ; AVX2-NEXT:    retq
1220   %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>
1221   ret <32 x i8> %shuffle
1222 }
1223
1224 define <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) {
1225 ; 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
1226 ; AVX1:       # BB#0:
1227 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1228 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
1229 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1230 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1231 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1232 ; AVX1-NEXT:    retq
1233 ;
1234 ; 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
1235 ; AVX2:       # BB#0:
1236 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1237 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
1238 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1239 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1240 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1241 ; AVX2-NEXT:    retq
1242   %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>
1243   ret <32 x i8> %shuffle
1244 }
1245
1246 define <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) {
1247 ; 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
1248 ; AVX1:       # BB#0:
1249 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1250 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
1251 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1252 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1253 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1254 ; AVX1-NEXT:    retq
1255 ;
1256 ; 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
1257 ; AVX2:       # BB#0:
1258 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1259 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
1260 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1261 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1262 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1263 ; AVX2-NEXT:    retq
1264   %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>
1265   ret <32 x i8> %shuffle
1266 }
1267
1268 define <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) {
1269 ; 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
1270 ; AVX1:       # BB#0:
1271 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1272 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
1273 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1274 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1275 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1276 ; AVX1-NEXT:    retq
1277 ;
1278 ; 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
1279 ; AVX2:       # BB#0:
1280 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1281 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
1282 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1283 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1284 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1285 ; AVX2-NEXT:    retq
1286   %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>
1287   ret <32 x i8> %shuffle
1288 }
1289
1290 define <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) {
1291 ; 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
1292 ; AVX1:       # BB#0:
1293 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1294 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = [0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1295 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1296 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1297 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1298 ; AVX1-NEXT:    retq
1299 ;
1300 ; 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
1301 ; AVX2:       # BB#0:
1302 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1303 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = [0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1304 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1305 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1306 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1307 ; AVX2-NEXT:    retq
1308   %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>
1309   ret <32 x i8> %shuffle
1310 }
1311
1312 define <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) {
1313 ; 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
1314 ; AVX1:       # BB#0:
1315 ; AVX1-NEXT:    movl $15, %eax
1316 ; AVX1-NEXT:    vmovd %eax, %xmm1
1317 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1318 ; AVX1-NEXT:    vpshufb %xmm1, %xmm2, %xmm2
1319 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1320 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1321 ; AVX1-NEXT:    retq
1322 ;
1323 ; 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
1324 ; AVX2:       # BB#0:
1325 ; AVX2-NEXT:    movl $15, %eax
1326 ; AVX2-NEXT:    vmovd %eax, %xmm1
1327 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm2
1328 ; AVX2-NEXT:    vpshufb %xmm1, %xmm2, %xmm2
1329 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm0
1330 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
1331 ; AVX2-NEXT:    retq
1332   %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>
1333   ret <32 x i8> %shuffle
1334 }
1335
1336 define <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) {
1337 ; 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
1338 ; AVX1:       # BB#0:
1339 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1340 ; AVX1-NEXT:    vpmovzxbw %xmm1, %xmm1
1341 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1342 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1343 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1344 ; AVX1-NEXT:    vpmovzxbw %xmm0, %xmm0
1345 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1346 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1347 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1348 ; AVX1-NEXT:    retq
1349 ;
1350 ; 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
1351 ; AVX2:       # BB#0:
1352 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1353 ; AVX2-NEXT:    vpmovzxbw %xmm1, %xmm1
1354 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = <0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u>
1355 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1356 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1357 ; AVX2-NEXT:    vpmovzxbw %xmm0, %xmm0
1358 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1359 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1360 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1361 ; AVX2-NEXT:    retq
1362   %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>
1363   ret <32 x i8> %shuffle
1364 }
1365
1366 define <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) {
1367 ; 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
1368 ; AVX1:       # BB#0:
1369 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1370 ; AVX1-NEXT:    vmovdqa {{.*}} # xmm2 = <8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u>
1371 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1372 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1373 ; AVX1-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1374 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1375 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1376 ; AVX1-NEXT:    retq
1377 ;
1378 ; 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
1379 ; AVX2:       # BB#0:
1380 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1381 ; AVX2-NEXT:    vmovdqa {{.*}} # xmm2 = <8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u>
1382 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
1383 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1384 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
1385 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1386 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1387 ; AVX2-NEXT:    retq
1388   %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>
1389   ret <32 x i8> %shuffle
1390 }
1391
1392 define <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) {
1393 ; 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
1394 ; AVX1:       # BB#0:
1395 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1396 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u]
1397 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1398 ; AVX1-NEXT:    vpmovzxbw %xmm0, %xmm0
1399 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1400 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1401 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1402 ; AVX1-NEXT:    retq
1403 ;
1404 ; 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
1405 ; AVX2:       # BB#0:
1406 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1407 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u]
1408 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1409 ; AVX2-NEXT:    vpmovzxbw %xmm0, %xmm0
1410 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1411 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1412 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1413 ; AVX2-NEXT:    retq
1414   %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>
1415   ret <32 x i8> %shuffle
1416 }
1417
1418 define <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) {
1419 ; 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
1420 ; AVX1:       # BB#0:
1421 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1422 ; AVX1-NEXT:    vpmovzxbw %xmm1, %xmm1
1423 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1424 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1425 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u]
1426 ; AVX1-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1427 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1428 ; AVX1-NEXT:    retq
1429 ;
1430 ; 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
1431 ; AVX2:       # BB#0:
1432 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1433 ; AVX2-NEXT:    vpmovzxbw %xmm1, %xmm1
1434 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
1435 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm1 = 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]
1436 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[8,9,10,11,12,13,14,15,u,u,u,u,u,u,u,u]
1437 ; AVX2-NEXT:    vpunpcklbw {{.*}} # xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1438 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1439 ; AVX2-NEXT:    retq
1440   %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>
1441   ret <32 x i8> %shuffle
1442 }
1443
1444 define <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) {
1445 ; 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
1446 ; AVX1:       # BB#0:
1447 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
1448 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1449 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1450 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1451 ; AVX1-NEXT:    retq
1452 ;
1453 ; 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
1454 ; AVX2:       # BB#0:
1455 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
1456 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1457 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1458 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1459 ; AVX2-NEXT:    retq
1460   %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>
1461   ret <32 x i8> %shuffle
1462 }
1463
1464 define <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) {
1465 ; 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
1466 ; AVX1:       # BB#0:
1467 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
1468 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1469 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0]
1470 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1471 ; AVX1-NEXT:    retq
1472 ;
1473 ; 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
1474 ; AVX2:       # BB#0:
1475 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0]
1476 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1477 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0]
1478 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1479 ; AVX2-NEXT:    retq
1480   %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>
1481   ret <32 x i8> %shuffle
1482 }
1483
1484 define <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) {
1485 ; 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
1486 ; AVX1:       # BB#0:
1487 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
1488 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1489 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0]
1490 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1491 ; AVX1-NEXT:    retq
1492 ;
1493 ; 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
1494 ; AVX2:       # BB#0:
1495 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0]
1496 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1497 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0]
1498 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1499 ; AVX2-NEXT:    retq
1500   %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>
1501   ret <32 x i8> %shuffle
1502 }
1503
1504 define <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) {
1505 ; 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
1506 ; AVX1:       # BB#0:
1507 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
1508 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1509 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0]
1510 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1511 ; AVX1-NEXT:    retq
1512 ;
1513 ; 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
1514 ; AVX2:       # BB#0:
1515 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0]
1516 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1517 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0]
1518 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1519 ; AVX2-NEXT:    retq
1520   %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>
1521   ret <32 x i8> %shuffle
1522 }
1523
1524 define <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) {
1525 ; 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
1526 ; AVX1:       # BB#0:
1527 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1528 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1529 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0]
1530 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1531 ; AVX1-NEXT:    retq
1532 ;
1533 ; 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
1534 ; AVX2:       # BB#0:
1535 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
1536 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1537 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0]
1538 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1539 ; AVX2-NEXT:    retq
1540   %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>
1541   ret <32 x i8> %shuffle
1542 }
1543
1544 define <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) {
1545 ; 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
1546 ; AVX1:       # BB#0:
1547 ; AVX1-NEXT:    movl $15, %eax
1548 ; AVX1-NEXT:    vmovd %eax, %xmm1
1549 ; AVX1-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
1550 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1551 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15]
1552 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1553 ; AVX1-NEXT:    retq
1554 ;
1555 ; 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
1556 ; AVX2:       # BB#0:
1557 ; AVX2-NEXT:    movl $15, %eax
1558 ; AVX2-NEXT:    vmovd %eax, %xmm1
1559 ; AVX2-NEXT:    vpshufb %xmm1, %xmm0, %xmm1
1560 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1561 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15]
1562 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1563 ; AVX2-NEXT:    retq
1564   %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>
1565   ret <32 x i8> %shuffle
1566 }
1567
1568 define <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) {
1569 ; 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
1570 ; AVX1:       # BB#0:
1571 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
1572 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1573 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[12,12,12,12,8,8,8,8,4,4,4,4,0,0,0,0]
1574 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1575 ; AVX1-NEXT:    retq
1576 ;
1577 ; 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
1578 ; AVX2:       # BB#0:
1579 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
1580 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1581 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[12,12,12,12,8,8,8,8,4,4,4,4,0,0,0,0]
1582 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1583 ; AVX2-NEXT:    retq
1584   %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>
1585   ret <32 x i8> %shuffle
1586 }
1587
1588 define <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) {
1589 ; 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
1590 ; AVX1:       # BB#0:
1591 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0]
1592 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1593 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
1594 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1595 ; AVX1-NEXT:    retq
1596 ;
1597 ; 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
1598 ; AVX2:       # BB#0:
1599 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[8,8,8,8,8,8,8,8,0,0,0,0,0,0,0,0]
1600 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1601 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,0,0,0,0,8,8,8,8,8,8,8,8]
1602 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1603 ; AVX2-NEXT:    retq
1604   %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>
1605   ret <32 x i8> %shuffle
1606 }
1607
1608 define <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) {
1609 ; 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
1610 ; AVX1:       # BB#0:
1611 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
1612 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[0,0,0,0,u,u,u,u,u,0,0,0,0,0,14,0]
1613 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1614 ; AVX1-NEXT:    retq
1615 ;
1616 ; 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
1617 ; AVX2:       # BB#0:
1618 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
1619 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm1[0,0,0,0,u,u,u,u,u,0,0,0,0,0,14,0]
1620 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
1621 ; AVX2-NEXT:    retq
1622   %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>
1623   ret <32 x i8> %shuffle
1624 }
1625
1626 define <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_16_31(<32 x i8> %a, <32 x i8> %b) {
1627 ; 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_16_31
1628 ; AVX1:       # BB#0:
1629 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
1630 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1631 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,u,0,u,u,u,u,0,0,0,0,0,0,0,15]
1632 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1633 ; AVX1-NEXT:    retq
1634 ;
1635 ; 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_16_31
1636 ; AVX2:       # BB#0:
1637 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0]
1638 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1639 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,u,0,u,u,u,u,0,0,0,0,0,0,0,15]
1640 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1641 ; AVX2-NEXT:    retq
1642   %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 16, i32 31>
1643   ret <32 x i8> %shuffle
1644 }
1645
1646 define <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) {
1647 ; 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
1648 ; AVX1:       # BB#0:
1649 ; AVX1-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
1650 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1651 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[12,12,12,12,12,12,13,13,4,4,4,4,0,0,0,0]
1652 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1653 ; AVX1-NEXT:    retq
1654 ;
1655 ; 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
1656 ; AVX2:       # BB#0:
1657 ; AVX2-NEXT:    vpshufb {{.*}} # xmm1 = xmm0[0,0,0,0,4,4,4,4,8,8,8,8,12,12,12,12]
1658 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1659 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[12,12,12,12,12,12,13,13,4,4,4,4,0,0,0,0]
1660 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1661 ; AVX2-NEXT:    retq
1662   %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>
1663   ret <32 x i8> %shuffle
1664 }
1665
1666 define <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) {
1667 ; 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
1668 ; AVX1:       # BB#0:
1669 ; AVX1-NEXT:    vpunpckhbw {{.*}} # xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1670 ; AVX1-NEXT:    vpshuflw {{.*}} # xmm1 = xmm1[0,0,0,0,4,5,6,7]
1671 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
1672 ; AVX1-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,8,8,9,9,8,8,8,8,8,8,8,8]
1673 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1674 ; AVX1-NEXT:    retq
1675 ;
1676 ; 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
1677 ; AVX2:       # BB#0:
1678 ; AVX2-NEXT:    vpunpckhbw {{.*}} # xmm1 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
1679 ; AVX2-NEXT:    vpshuflw {{.*}} # xmm1 = xmm1[0,0,0,0,4,5,6,7]
1680 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
1681 ; AVX2-NEXT:    vpshufb {{.*}} # xmm0 = xmm0[0,0,0,0,8,8,9,9,8,8,8,8,8,8,8,8]
1682 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
1683 ; AVX2-NEXT:    retq
1684   %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>
1685   ret <32 x i8> %shuffle
1686 }