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