xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/avx512-ext.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-apple-darwin -mcpu=knl | FileCheck %s --check-prefix=ALL --check-prefix=KNL
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck %s --check-prefix=ALL --check-prefix=SKX
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @zext_8x8mem_to_8x16(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
6*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x8mem_to_8x16:
7*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
8*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
9*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %xmm0, %xmm0
10*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %xmm0, %xmm0
11*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
12*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
13*9880d681SAndroid Build Coastguard Worker;
14*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x8mem_to_8x16:
15*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
16*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
17*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
18*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
19*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
20*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
21*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i8> %a to <8 x i16>
22*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
23*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %ret
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sext_8x8mem_to_8x16(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
27*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x8mem_to_8x16:
28*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
29*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw (%rdi), %xmm1
30*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %xmm0, %xmm0
31*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %xmm0, %xmm0
32*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
33*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
34*9880d681SAndroid Build Coastguard Worker;
35*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x8mem_to_8x16:
36*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
37*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
38*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
39*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw (%rdi), %xmm0 {%k1} {z}
40*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
41*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
42*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i8> %a to <8 x i16>
43*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i16> %x, <8 x i16> zeroinitializer
44*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %ret
45*9880d681SAndroid Build Coastguard Worker}
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @zext_16x8mem_to_16x16(<16 x i8> *%i , <16 x i1> %mask) nounwind readnone {
49*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x8mem_to_16x16:
50*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
51*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
52*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
53*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm0, %ymm0
54*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm0, %ymm0
55*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
56*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
57*9880d681SAndroid Build Coastguard Worker;
58*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x8mem_to_16x16:
59*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
60*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
61*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
62*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
63*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
64*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i8>,<16 x i8> *%i,align 1
65*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i8> %a to <16 x i16>
66*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
67*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %ret
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @sext_16x8mem_to_16x16(<16 x i8> *%i , <16 x i1> %mask) nounwind readnone {
71*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16x8mem_to_16x16:
72*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
73*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
74*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw (%rdi), %ymm1
75*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm0, %ymm0
76*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm0, %ymm0
77*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
78*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
79*9880d681SAndroid Build Coastguard Worker;
80*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16x8mem_to_16x16:
81*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
82*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
83*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
84*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw (%rdi), %ymm0 {%k1} {z}
85*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
86*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i8>,<16 x i8> *%i,align 1
87*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i8> %a to <16 x i16>
88*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
89*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %ret
90*9880d681SAndroid Build Coastguard Worker}
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @zext_16x8_to_16x16(<16 x i8> %a ) nounwind readnone {
93*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16x8_to_16x16:
94*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
95*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
96*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
97*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i8> %a to <16 x i16>
98*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
99*9880d681SAndroid Build Coastguard Worker}
100*9880d681SAndroid Build Coastguard Worker
101*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @zext_16x8_to_16x16_mask(<16 x i8> %a ,<16 x i1> %mask) nounwind readnone {
102*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x8_to_16x16_mask:
103*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
104*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
105*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
106*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm1, %ymm1
107*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm1, %ymm1
108*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm0
109*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
110*9880d681SAndroid Build Coastguard Worker;
111*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x8_to_16x16_mask:
112*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
113*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm1, %xmm1
114*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm1, %k1
115*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
116*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
117*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i8> %a to <16 x i16>
118*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
119*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %ret
120*9880d681SAndroid Build Coastguard Worker}
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @sext_16x8_to_16x16(<16 x i8> %a ) nounwind readnone {
123*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_16x8_to_16x16:
124*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
125*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbw %xmm0, %ymm0
126*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
127*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i8> %a to <16 x i16>
128*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %x
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @sext_16x8_to_16x16_mask(<16 x i8> %a ,<16 x i1> %mask) nounwind readnone {
132*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16x8_to_16x16_mask:
133*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
134*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
135*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw %xmm0, %ymm0
136*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm1, %ymm1
137*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm1, %ymm1
138*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm0
139*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
140*9880d681SAndroid Build Coastguard Worker;
141*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16x8_to_16x16_mask:
142*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
143*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm1, %xmm1
144*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm1, %k1
145*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw %xmm0, %ymm0 {%k1} {z}
146*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
147*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i8> %a to <16 x i16>
148*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i16> %x, <16 x i16> zeroinitializer
149*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %ret
150*9880d681SAndroid Build Coastguard Worker}
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @zext_32x8mem_to_32x16(<32 x i8> *%i , <32 x i1> %mask) nounwind readnone {
153*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_32x8mem_to_32x16:
154*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
155*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
156*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm2 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
157*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
158*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm3, %ymm3
159*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm3, %ymm3
160*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm3, %ymm2
161*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
162*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
163*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm0, %ymm0
164*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm0, %ymm0
165*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm1
166*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovaps %zmm2, %zmm0
167*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
168*9880d681SAndroid Build Coastguard Worker;
169*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_32x8mem_to_32x16:
170*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
171*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %ymm0, %ymm0
172*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %ymm0, %k1
173*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero,mem[16],zero,mem[17],zero,mem[18],zero,mem[19],zero,mem[20],zero,mem[21],zero,mem[22],zero,mem[23],zero,mem[24],zero,mem[25],zero,mem[26],zero,mem[27],zero,mem[28],zero,mem[29],zero,mem[30],zero,mem[31],zero
174*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
175*9880d681SAndroid Build Coastguard Worker  %a   = load <32 x i8>,<32 x i8> *%i,align 1
176*9880d681SAndroid Build Coastguard Worker  %x   = zext <32 x i8> %a to <32 x i16>
177*9880d681SAndroid Build Coastguard Worker  %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer
178*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %ret
179*9880d681SAndroid Build Coastguard Worker}
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @sext_32x8mem_to_32x16(<32 x i8> *%i , <32 x i1> %mask) nounwind readnone {
182*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_32x8mem_to_32x16:
183*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw 16(%rdi), %ymm1
185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw (%rdi), %ymm2
186*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm3 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
187*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm3, %ymm3
188*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm3, %ymm3
189*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm3, %ymm2
190*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
191*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
192*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm0, %ymm0
193*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm0, %ymm0
194*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm1
195*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovaps %zmm2, %zmm0
196*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
197*9880d681SAndroid Build Coastguard Worker;
198*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_32x8mem_to_32x16:
199*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
200*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %ymm0, %ymm0
201*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %ymm0, %k1
202*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw (%rdi), %zmm0 {%k1} {z}
203*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
204*9880d681SAndroid Build Coastguard Worker  %a   = load <32 x i8>,<32 x i8> *%i,align 1
205*9880d681SAndroid Build Coastguard Worker  %x   = sext <32 x i8> %a to <32 x i16>
206*9880d681SAndroid Build Coastguard Worker  %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer
207*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %ret
208*9880d681SAndroid Build Coastguard Worker}
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @zext_32x8_to_32x16(<32 x i8> %a ) nounwind readnone {
211*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_32x8_to_32x16:
212*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
213*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
214*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
215*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
216*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovaps %zmm2, %zmm0
217*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
218*9880d681SAndroid Build Coastguard Worker;
219*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_32x8_to_32x16:
220*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
221*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
222*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
223*9880d681SAndroid Build Coastguard Worker  %x   = zext <32 x i8> %a to <32 x i16>
224*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %x
225*9880d681SAndroid Build Coastguard Worker}
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @zext_32x8_to_32x16_mask(<32 x i8> %a ,<32 x i1> %mask) nounwind readnone {
228*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_32x8_to_32x16_mask:
229*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
230*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm2
231*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm2 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero,xmm2[4],zero,xmm2[5],zero,xmm2[6],zero,xmm2[7],zero,xmm2[8],zero,xmm2[9],zero,xmm2[10],zero,xmm2[11],zero,xmm2[12],zero,xmm2[13],zero,xmm2[14],zero,xmm2[15],zero
232*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
233*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm3 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
234*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm3, %ymm3
235*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm3, %ymm3
236*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm3, %ymm0
237*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
238*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
239*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm1, %ymm1
240*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm1, %ymm1
241*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm1, %ymm1
242*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_32x8_to_32x16_mask:
245*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
246*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %ymm1, %ymm1
247*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %ymm1, %k1
248*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbw {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero,ymm0[16],zero,ymm0[17],zero,ymm0[18],zero,ymm0[19],zero,ymm0[20],zero,ymm0[21],zero,ymm0[22],zero,ymm0[23],zero,ymm0[24],zero,ymm0[25],zero,ymm0[26],zero,ymm0[27],zero,ymm0[28],zero,ymm0[29],zero,ymm0[30],zero,ymm0[31],zero
249*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker  %x   = zext <32 x i8> %a to <32 x i16>
251*9880d681SAndroid Build Coastguard Worker  %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer
252*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %ret
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @sext_32x8_to_32x16(<32 x i8> %a ) nounwind readnone {
256*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_32x8_to_32x16:
257*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
258*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw %xmm0, %ymm2
259*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm0
260*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw %xmm0, %ymm1
261*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovaps %zmm2, %zmm0
262*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
263*9880d681SAndroid Build Coastguard Worker;
264*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_32x8_to_32x16:
265*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
266*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw %ymm0, %zmm0
267*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
268*9880d681SAndroid Build Coastguard Worker  %x   = sext <32 x i8> %a to <32 x i16>
269*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %x
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @sext_32x8_to_32x16_mask(<32 x i8> %a ,<32 x i1> %mask) nounwind readnone {
273*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_32x8_to_32x16_mask:
274*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
275*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm0, %xmm2
276*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw %xmm2, %ymm2
277*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbw %xmm0, %ymm0
278*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm3 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
279*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm3, %ymm3
280*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm3, %ymm3
281*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm3, %ymm0
282*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vextracti128 $1, %ymm1, %xmm1
283*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero,xmm1[8],zero,xmm1[9],zero,xmm1[10],zero,xmm1[11],zero,xmm1[12],zero,xmm1[13],zero,xmm1[14],zero,xmm1[15],zero
284*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm1, %ymm1
285*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm1, %ymm1
286*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm1, %ymm1
287*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
288*9880d681SAndroid Build Coastguard Worker;
289*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_32x8_to_32x16_mask:
290*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
291*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %ymm1, %ymm1
292*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %ymm1, %k1
293*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbw %ymm0, %zmm0 {%k1} {z}
294*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
295*9880d681SAndroid Build Coastguard Worker  %x   = sext <32 x i8> %a to <32 x i16>
296*9880d681SAndroid Build Coastguard Worker  %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer
297*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %ret
298*9880d681SAndroid Build Coastguard Worker}
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @zext_4x8mem_to_4x32(<4 x i8> *%i , <4 x i1> %mask) nounwind readnone {
301*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x8mem_to_4x32:
302*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
303*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
304*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
305*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbd {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
306*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
307*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
308*9880d681SAndroid Build Coastguard Worker;
309*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x8mem_to_4x32:
310*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
311*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
312*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
313*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
314*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
315*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i8>,<4 x i8> *%i,align 1
316*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i8> %a to <4 x i32>
317*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
318*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %ret
319*9880d681SAndroid Build Coastguard Worker}
320*9880d681SAndroid Build Coastguard Worker
321*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sext_4x8mem_to_4x32(<4 x i8> *%i , <4 x i1> %mask) nounwind readnone {
322*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_4x8mem_to_4x32:
323*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
324*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
325*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
326*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd (%rdi), %xmm1
327*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
328*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
329*9880d681SAndroid Build Coastguard Worker;
330*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_4x8mem_to_4x32:
331*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
332*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
333*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
334*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbd (%rdi), %xmm0 {%k1} {z}
335*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
336*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i8>,<4 x i8> *%i,align 1
337*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i8> %a to <4 x i32>
338*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
339*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %ret
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_8x8mem_to_8x32(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
343*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x8mem_to_8x32:
344*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
345*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
346*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
347*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
348*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbd {{.*#+}} ymm0 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero
349*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpxor %ymm1, %ymm1, %ymm1
350*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
351*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
352*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
353*9880d681SAndroid Build Coastguard Worker;
354*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x8mem_to_8x32:
355*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
356*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
357*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
358*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero
359*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
360*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
361*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i8> %a to <8 x i32>
362*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
363*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %ret
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_8x8mem_to_8x32(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
367*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x8mem_to_8x32:
368*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
369*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
370*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
371*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
372*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd (%rdi), %ymm0
373*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpxor %ymm1, %ymm1, %ymm1
374*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
375*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
376*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
377*9880d681SAndroid Build Coastguard Worker;
378*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x8mem_to_8x32:
379*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
380*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
381*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
382*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbd (%rdi), %ymm0 {%k1} {z}
383*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
384*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
385*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i8> %a to <8 x i32>
386*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
387*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %ret
388*9880d681SAndroid Build Coastguard Worker}
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x8mem_to_16x32(<16 x i8> *%i , <16 x i1> %mask) nounwind readnone {
391*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x8mem_to_16x32:
392*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
393*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
394*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
395*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1
396*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
397*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
398*9880d681SAndroid Build Coastguard Worker;
399*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x8mem_to_16x32:
400*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
401*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
402*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
403*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero,mem[8],zero,zero,zero,mem[9],zero,zero,zero,mem[10],zero,zero,zero,mem[11],zero,zero,zero,mem[12],zero,zero,zero,mem[13],zero,zero,zero,mem[14],zero,zero,zero,mem[15],zero,zero,zero
404*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
405*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i8>,<16 x i8> *%i,align 1
406*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i8> %a to <16 x i32>
407*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
408*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
409*9880d681SAndroid Build Coastguard Worker}
410*9880d681SAndroid Build Coastguard Worker
411*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16x8mem_to_16x32(<16 x i8> *%i , <16 x i1> %mask) nounwind readnone {
412*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16x8mem_to_16x32:
413*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
414*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
415*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
416*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1
417*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd (%rdi), %zmm0 {%k1} {z}
418*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
419*9880d681SAndroid Build Coastguard Worker;
420*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16x8mem_to_16x32:
421*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
422*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
423*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
424*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbd (%rdi), %zmm0 {%k1} {z}
425*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
426*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i8>,<16 x i8> *%i,align 1
427*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i8> %a to <16 x i32>
428*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
429*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
430*9880d681SAndroid Build Coastguard Worker}
431*9880d681SAndroid Build Coastguard Worker
432*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x8_to_16x32_mask(<16 x i8> %a , <16 x i1> %mask) nounwind readnone {
433*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x8_to_16x32_mask:
434*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
435*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
436*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm1, %zmm1
437*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k1
438*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
439*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
440*9880d681SAndroid Build Coastguard Worker;
441*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x8_to_16x32_mask:
442*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
443*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm1, %xmm1
444*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm1, %k1
445*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbd {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
446*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
447*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i8> %a to <16 x i32>
448*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
449*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
450*9880d681SAndroid Build Coastguard Worker}
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16x8_to_16x32_mask(<16 x i8> %a , <16 x i1> %mask) nounwind readnone {
453*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16x8_to_16x32_mask:
454*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
455*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
456*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm1, %zmm1
457*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k1
458*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0 {%k1} {z}
459*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
460*9880d681SAndroid Build Coastguard Worker;
461*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16x8_to_16x32_mask:
462*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
463*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm1, %xmm1
464*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm1, %k1
465*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbd %xmm0, %zmm0 {%k1} {z}
466*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
467*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i8> %a to <16 x i32>
468*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
469*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
470*9880d681SAndroid Build Coastguard Worker}
471*9880d681SAndroid Build Coastguard Worker
472*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x8_to_16x32(<16 x i8> %i) nounwind readnone {
473*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16x8_to_16x32:
474*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
475*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
476*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
477*9880d681SAndroid Build Coastguard Worker  %x = zext <16 x i8> %i to <16 x i32>
478*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
479*9880d681SAndroid Build Coastguard Worker}
480*9880d681SAndroid Build Coastguard Worker
481*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16x8_to_16x32(<16 x i8> %i) nounwind readnone {
482*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_16x8_to_16x32:
483*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
484*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbd %xmm0, %zmm0
485*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
486*9880d681SAndroid Build Coastguard Worker  %x = sext <16 x i8> %i to <16 x i32>
487*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
488*9880d681SAndroid Build Coastguard Worker}
489*9880d681SAndroid Build Coastguard Worker
490*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @zext_2x8mem_to_2x64(<2 x i8> *%i , <2 x i1> %mask) nounwind readnone {
491*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_2x8mem_to_2x64:
492*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
493*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
494*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
495*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
496*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbq {{.*#+}} xmm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
497*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
498*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
499*9880d681SAndroid Build Coastguard Worker;
500*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_2x8mem_to_2x64:
501*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
502*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
503*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
504*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero
505*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
506*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i8>,<2 x i8> *%i,align 1
507*9880d681SAndroid Build Coastguard Worker  %x   = zext <2 x i8> %a to <2 x i64>
508*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x  i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
509*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
510*9880d681SAndroid Build Coastguard Worker}
511*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x8mem_to_2x64mask(<2 x i8> *%i , <2 x i1> %mask) nounwind readnone {
512*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_2x8mem_to_2x64mask:
513*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
514*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
515*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
516*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
517*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbq (%rdi), %xmm1
518*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
519*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
520*9880d681SAndroid Build Coastguard Worker;
521*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_2x8mem_to_2x64mask:
522*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
523*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
524*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
525*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbq (%rdi), %xmm0 {%k1} {z}
526*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
527*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i8>,<2 x i8> *%i,align 1
528*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i8> %a to <2 x i64>
529*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
530*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
531*9880d681SAndroid Build Coastguard Worker}
532*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x8mem_to_2x64(<2 x i8> *%i) nounwind readnone {
533*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_2x8mem_to_2x64:
534*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
535*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbq (%rdi), %xmm0
536*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
537*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i8>,<2 x i8> *%i,align 1
538*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i8> %a to <2 x i64>
539*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
540*9880d681SAndroid Build Coastguard Worker}
541*9880d681SAndroid Build Coastguard Worker
542*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_4x8mem_to_4x64(<4 x i8> *%i , <4 x i1> %mask) nounwind readnone {
543*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x8mem_to_4x64:
544*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
545*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
546*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
547*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
548*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbq {{.*#+}} ymm1 = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero
549*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
550*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
551*9880d681SAndroid Build Coastguard Worker;
552*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x8mem_to_4x64:
553*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
554*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
555*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
556*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero
557*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
558*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i8>,<4 x i8> *%i,align 1
559*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i8> %a to <4 x i64>
560*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x  i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
561*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
562*9880d681SAndroid Build Coastguard Worker}
563*9880d681SAndroid Build Coastguard Worker
564*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x8mem_to_4x64mask(<4 x i8> *%i , <4 x i1> %mask) nounwind readnone {
565*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_4x8mem_to_4x64mask:
566*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
567*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
568*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
569*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
570*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbq (%rdi), %ymm1
571*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
572*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
573*9880d681SAndroid Build Coastguard Worker;
574*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_4x8mem_to_4x64mask:
575*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
576*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
577*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
578*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbq (%rdi), %ymm0 {%k1} {z}
579*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
580*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i8>,<4 x i8> *%i,align 1
581*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i8> %a to <4 x i64>
582*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
583*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
584*9880d681SAndroid Build Coastguard Worker}
585*9880d681SAndroid Build Coastguard Worker
586*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x8mem_to_4x64(<4 x i8> *%i) nounwind readnone {
587*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_4x8mem_to_4x64:
588*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
589*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbq (%rdi), %ymm0
590*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
591*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i8>,<4 x i8> *%i,align 1
592*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i8> %a to <4 x i64>
593*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
594*9880d681SAndroid Build Coastguard Worker}
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x8mem_to_8x64(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
597*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x8mem_to_8x64:
598*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
599*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
600*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
601*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
602*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
603*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
604*9880d681SAndroid Build Coastguard Worker;
605*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x8mem_to_8x64:
606*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
607*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
608*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
609*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxbq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,zero,zero,zero,zero,mem[1],zero,zero,zero,zero,zero,zero,zero,mem[2],zero,zero,zero,zero,zero,zero,zero,mem[3],zero,zero,zero,zero,zero,zero,zero,mem[4],zero,zero,zero,zero,zero,zero,zero,mem[5],zero,zero,zero,zero,zero,zero,zero,mem[6],zero,zero,zero,zero,zero,zero,zero,mem[7],zero,zero,zero,zero,zero,zero,zero
610*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
611*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
612*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i8> %a to <8 x i64>
613*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x  i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
614*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
615*9880d681SAndroid Build Coastguard Worker}
616*9880d681SAndroid Build Coastguard Worker
617*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x8mem_to_8x64mask(<8 x i8> *%i , <8 x i1> %mask) nounwind readnone {
618*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x8mem_to_8x64mask:
619*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
622*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
623*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbq (%rdi), %zmm0 {%k1} {z}
624*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
625*9880d681SAndroid Build Coastguard Worker;
626*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x8mem_to_8x64mask:
627*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
628*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
629*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
630*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxbq (%rdi), %zmm0 {%k1} {z}
631*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
632*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
633*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i8> %a to <8 x i64>
634*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
635*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
636*9880d681SAndroid Build Coastguard Worker}
637*9880d681SAndroid Build Coastguard Worker
638*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x8mem_to_8x64(<8 x i8> *%i) nounwind readnone {
639*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_8x8mem_to_8x64:
640*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
641*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbq (%rdi), %zmm0
642*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
643*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i8>,<8 x i8> *%i,align 1
644*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i8> %a to <8 x i64>
645*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
646*9880d681SAndroid Build Coastguard Worker}
647*9880d681SAndroid Build Coastguard Worker
648*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @zext_4x16mem_to_4x32(<4 x i16> *%i , <4 x i1> %mask) nounwind readnone {
649*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x16mem_to_4x32:
650*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
651*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
652*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
653*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwd {{.*#+}} xmm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
654*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
655*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
656*9880d681SAndroid Build Coastguard Worker;
657*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x16mem_to_4x32:
658*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
659*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
660*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
661*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwd {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
662*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
663*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
664*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i16> %a to <4 x i32>
665*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
666*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %ret
667*9880d681SAndroid Build Coastguard Worker}
668*9880d681SAndroid Build Coastguard Worker
669*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sext_4x16mem_to_4x32mask(<4 x i16> *%i , <4 x i1> %mask) nounwind readnone {
670*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_4x16mem_to_4x32mask:
671*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
672*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
673*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
674*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwd (%rdi), %xmm1
675*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
676*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
677*9880d681SAndroid Build Coastguard Worker;
678*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_4x16mem_to_4x32mask:
679*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
680*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
681*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
682*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwd (%rdi), %xmm0 {%k1} {z}
683*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
684*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
685*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i16> %a to <4 x i32>
686*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i32> %x, <4 x i32> zeroinitializer
687*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %ret
688*9880d681SAndroid Build Coastguard Worker}
689*9880d681SAndroid Build Coastguard Worker
690*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @sext_4x16mem_to_4x32(<4 x i16> *%i) nounwind readnone {
691*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_4x16mem_to_4x32:
692*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
693*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwd (%rdi), %xmm0
694*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
695*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
696*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i16> %a to <4 x i32>
697*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %x
698*9880d681SAndroid Build Coastguard Worker}
699*9880d681SAndroid Build Coastguard Worker
700*9880d681SAndroid Build Coastguard Worker
701*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_8x16mem_to_8x32(<8 x i16> *%i , <8 x i1> %mask) nounwind readnone {
702*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x16mem_to_8x32:
703*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
704*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
705*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
706*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
707*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
708*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpxor %ymm1, %ymm1, %ymm1
709*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
710*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
711*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
712*9880d681SAndroid Build Coastguard Worker;
713*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x16mem_to_8x32:
714*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
715*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
716*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
717*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
718*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
719*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
720*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i16> %a to <8 x i32>
721*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
722*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %ret
723*9880d681SAndroid Build Coastguard Worker}
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_8x16mem_to_8x32mask(<8 x i16> *%i , <8 x i1> %mask) nounwind readnone {
726*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x16mem_to_8x32mask:
727*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
728*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
729*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
730*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
731*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwd (%rdi), %ymm0
732*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpxor %ymm1, %ymm1, %ymm1
733*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
734*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
735*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
736*9880d681SAndroid Build Coastguard Worker;
737*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x16mem_to_8x32mask:
738*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
739*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
740*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
741*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwd (%rdi), %ymm0 {%k1} {z}
742*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
743*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
744*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i16> %a to <8 x i32>
745*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
746*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %ret
747*9880d681SAndroid Build Coastguard Worker}
748*9880d681SAndroid Build Coastguard Worker
749*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_8x16mem_to_8x32(<8 x i16> *%i) nounwind readnone {
750*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_8x16mem_to_8x32:
751*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
752*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwd (%rdi), %ymm0
753*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
754*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
755*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i16> %a to <8 x i32>
756*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
757*9880d681SAndroid Build Coastguard Worker}
758*9880d681SAndroid Build Coastguard Worker
759*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_8x16_to_8x32mask(<8 x i16> %a , <8 x i1> %mask) nounwind readnone {
760*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x16_to_8x32mask:
761*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
762*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm1, %zmm1
763*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm1, %zmm1
764*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm1, %zmm1, %k1
765*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
766*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpxor %ymm1, %ymm1, %ymm1
767*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}
768*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<kill>
769*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
770*9880d681SAndroid Build Coastguard Worker;
771*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x16_to_8x32mask:
772*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
773*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm1, %xmm1
774*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm1, %k1
775*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwd {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
776*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
777*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i16> %a to <8 x i32>
778*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i32> %x, <8 x i32> zeroinitializer
779*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %ret
780*9880d681SAndroid Build Coastguard Worker}
781*9880d681SAndroid Build Coastguard Worker
782*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_8x16_to_8x32(<8 x i16> %a ) nounwind readnone {
783*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_8x16_to_8x32:
784*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
785*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
786*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
787*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i16> %a to <8 x i32>
788*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %x
789*9880d681SAndroid Build Coastguard Worker}
790*9880d681SAndroid Build Coastguard Worker
791*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x16mem_to_16x32(<16 x i16> *%i , <16 x i1> %mask) nounwind readnone {
792*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x16mem_to_16x32:
793*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
794*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
795*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
796*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1
797*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
798*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
799*9880d681SAndroid Build Coastguard Worker;
800*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x16mem_to_16x32:
801*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
802*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
803*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
804*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero,mem[8],zero,mem[9],zero,mem[10],zero,mem[11],zero,mem[12],zero,mem[13],zero,mem[14],zero,mem[15],zero
805*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
806*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i16>,<16 x i16> *%i,align 1
807*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i16> %a to <16 x i32>
808*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
809*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
810*9880d681SAndroid Build Coastguard Worker}
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16x16mem_to_16x32mask(<16 x i16> *%i , <16 x i1> %mask) nounwind readnone {
813*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16x16mem_to_16x32mask:
814*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
815*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
816*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
817*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k1
818*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwd (%rdi), %zmm0 {%k1} {z}
819*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
820*9880d681SAndroid Build Coastguard Worker;
821*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16x16mem_to_16x32mask:
822*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
823*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
824*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k1
825*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwd (%rdi), %zmm0 {%k1} {z}
826*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
827*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i16>,<16 x i16> *%i,align 1
828*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i16> %a to <16 x i32>
829*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
830*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
831*9880d681SAndroid Build Coastguard Worker}
832*9880d681SAndroid Build Coastguard Worker
833*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16x16mem_to_16x32(<16 x i16> *%i) nounwind readnone {
834*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_16x16mem_to_16x32:
835*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
836*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwd (%rdi), %zmm0
837*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
838*9880d681SAndroid Build Coastguard Worker  %a   = load <16 x i16>,<16 x i16> *%i,align 1
839*9880d681SAndroid Build Coastguard Worker  %x   = sext <16 x i16> %a to <16 x i32>
840*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
841*9880d681SAndroid Build Coastguard Worker}
842*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x16_to_16x32mask(<16 x i16> %a , <16 x i1> %mask) nounwind readnone {
843*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16x16_to_16x32mask:
844*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
845*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm1, %zmm1
846*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm1, %zmm1
847*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm1, %zmm1, %k1
848*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
849*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
850*9880d681SAndroid Build Coastguard Worker;
851*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16x16_to_16x32mask:
852*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
853*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm1, %xmm1
854*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm1, %k1
855*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwd {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
856*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
857*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i16> %a to <16 x i32>
858*9880d681SAndroid Build Coastguard Worker  %ret = select <16 x i1> %mask, <16 x i32> %x, <16 x i32> zeroinitializer
859*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %ret
860*9880d681SAndroid Build Coastguard Worker}
861*9880d681SAndroid Build Coastguard Worker
862*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @zext_16x16_to_16x32(<16 x i16> %a ) nounwind readnone {
863*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16x16_to_16x32:
864*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
865*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
866*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
867*9880d681SAndroid Build Coastguard Worker  %x   = zext <16 x i16> %a to <16 x i32>
868*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %x
869*9880d681SAndroid Build Coastguard Worker}
870*9880d681SAndroid Build Coastguard Worker
871*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @zext_2x16mem_to_2x64(<2 x i16> *%i , <2 x i1> %mask) nounwind readnone {
872*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_2x16mem_to_2x64:
873*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
874*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
875*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
876*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
877*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwq {{.*#+}} xmm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero
878*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
879*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
880*9880d681SAndroid Build Coastguard Worker;
881*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_2x16mem_to_2x64:
882*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
883*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
884*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
885*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero
886*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
887*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i16>,<2 x i16> *%i,align 1
888*9880d681SAndroid Build Coastguard Worker  %x   = zext <2 x i16> %a to <2 x i64>
889*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x  i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
890*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
891*9880d681SAndroid Build Coastguard Worker}
892*9880d681SAndroid Build Coastguard Worker
893*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x16mem_to_2x64mask(<2 x i16> *%i , <2 x i1> %mask) nounwind readnone {
894*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_2x16mem_to_2x64mask:
895*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
896*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
897*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
898*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
899*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq (%rdi), %xmm1
900*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
901*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
902*9880d681SAndroid Build Coastguard Worker;
903*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_2x16mem_to_2x64mask:
904*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
905*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
906*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
907*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwq (%rdi), %xmm0 {%k1} {z}
908*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
909*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i16>,<2 x i16> *%i,align 1
910*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i16> %a to <2 x i64>
911*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
912*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
913*9880d681SAndroid Build Coastguard Worker}
914*9880d681SAndroid Build Coastguard Worker
915*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x16mem_to_2x64(<2 x i16> *%i) nounwind readnone {
916*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_2x16mem_to_2x64:
917*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
918*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwq (%rdi), %xmm0
919*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
920*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i16>,<2 x i16> *%i,align 1
921*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i16> %a to <2 x i64>
922*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
923*9880d681SAndroid Build Coastguard Worker}
924*9880d681SAndroid Build Coastguard Worker
925*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_4x16mem_to_4x64(<4 x i16> *%i , <4 x i1> %mask) nounwind readnone {
926*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x16mem_to_4x64:
927*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
928*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
929*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
930*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
931*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwq {{.*#+}} ymm1 = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
932*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
933*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
934*9880d681SAndroid Build Coastguard Worker;
935*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x16mem_to_4x64:
936*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
937*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
938*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
939*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero
940*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
941*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
942*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i16> %a to <4 x i64>
943*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x  i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
944*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
945*9880d681SAndroid Build Coastguard Worker}
946*9880d681SAndroid Build Coastguard Worker
947*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x16mem_to_4x64mask(<4 x i16> *%i , <4 x i1> %mask) nounwind readnone {
948*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_4x16mem_to_4x64mask:
949*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
950*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
951*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
952*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
953*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq (%rdi), %ymm1
954*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
955*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
956*9880d681SAndroid Build Coastguard Worker;
957*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_4x16mem_to_4x64mask:
958*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
959*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
960*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
961*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwq (%rdi), %ymm0 {%k1} {z}
962*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
963*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
964*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i16> %a to <4 x i64>
965*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
966*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
967*9880d681SAndroid Build Coastguard Worker}
968*9880d681SAndroid Build Coastguard Worker
969*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x16mem_to_4x64(<4 x i16> *%i) nounwind readnone {
970*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_4x16mem_to_4x64:
971*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
972*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwq (%rdi), %ymm0
973*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
974*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i16>,<4 x i16> *%i,align 1
975*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i16> %a to <4 x i64>
976*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
977*9880d681SAndroid Build Coastguard Worker}
978*9880d681SAndroid Build Coastguard Worker
979*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x16mem_to_8x64(<8 x i16> *%i , <8 x i1> %mask) nounwind readnone {
980*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x16mem_to_8x64:
981*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
982*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
983*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
984*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
985*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero
986*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
987*9880d681SAndroid Build Coastguard Worker;
988*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x16mem_to_8x64:
989*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
990*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
991*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
992*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,zero,zero,mem[1],zero,zero,zero,mem[2],zero,zero,zero,mem[3],zero,zero,zero,mem[4],zero,zero,zero,mem[5],zero,zero,zero,mem[6],zero,zero,zero,mem[7],zero,zero,zero
993*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
994*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
995*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i16> %a to <8 x i64>
996*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x  i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
997*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
998*9880d681SAndroid Build Coastguard Worker}
999*9880d681SAndroid Build Coastguard Worker
1000*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x16mem_to_8x64mask(<8 x i16> *%i , <8 x i1> %mask) nounwind readnone {
1001*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x16mem_to_8x64mask:
1002*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1003*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
1004*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
1005*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
1006*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq (%rdi), %zmm0 {%k1} {z}
1007*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1008*9880d681SAndroid Build Coastguard Worker;
1009*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x16mem_to_8x64mask:
1010*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1011*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
1012*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
1013*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxwq (%rdi), %zmm0 {%k1} {z}
1014*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1015*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
1016*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i16> %a to <8 x i64>
1017*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
1018*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1019*9880d681SAndroid Build Coastguard Worker}
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x16mem_to_8x64(<8 x i16> *%i) nounwind readnone {
1022*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_8x16mem_to_8x64:
1023*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1024*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxwq (%rdi), %zmm0
1025*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1026*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i16>,<8 x i16> *%i,align 1
1027*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i16> %a to <8 x i64>
1028*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
1029*9880d681SAndroid Build Coastguard Worker}
1030*9880d681SAndroid Build Coastguard Worker
1031*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x16_to_8x64mask(<8 x i16> %a , <8 x i1> %mask) nounwind readnone {
1032*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x16_to_8x64mask:
1033*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1034*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm1, %zmm1
1035*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm1, %zmm1
1036*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm1, %zmm1, %k1
1037*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero
1038*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1039*9880d681SAndroid Build Coastguard Worker;
1040*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x16_to_8x64mask:
1041*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1042*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm1, %xmm1
1043*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm1, %k1
1044*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxwq {{.*#+}} zmm0 {%k1} {z} = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero
1045*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1046*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i16> %a to <8 x i64>
1047*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x  i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
1048*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1049*9880d681SAndroid Build Coastguard Worker}
1050*9880d681SAndroid Build Coastguard Worker
1051*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x16_to_8x64(<8 x i16> %a) nounwind readnone {
1052*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_8x16_to_8x64:
1053*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1054*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxwq {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero
1055*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1056*9880d681SAndroid Build Coastguard Worker  %ret   = zext <8 x i16> %a to <8 x i64>
1057*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1058*9880d681SAndroid Build Coastguard Worker}
1059*9880d681SAndroid Build Coastguard Worker
1060*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @zext_2x32mem_to_2x64(<2 x i32> *%i , <2 x i1> %mask) nounwind readnone {
1061*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_2x32mem_to_2x64:
1062*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1063*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
1064*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
1065*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1066*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxdq {{.*#+}} xmm1 = mem[0],zero,mem[1],zero
1067*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
1068*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1069*9880d681SAndroid Build Coastguard Worker;
1070*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_2x32mem_to_2x64:
1071*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1072*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
1073*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
1074*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxdq {{.*#+}} xmm0 {%k1} {z} = mem[0],zero,mem[1],zero
1075*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1076*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i32>,<2 x i32> *%i,align 1
1077*9880d681SAndroid Build Coastguard Worker  %x   = zext <2 x i32> %a to <2 x i64>
1078*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x  i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
1079*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
1080*9880d681SAndroid Build Coastguard Worker}
1081*9880d681SAndroid Build Coastguard Worker
1082*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x32mem_to_2x64mask(<2 x i32> *%i , <2 x i1> %mask) nounwind readnone {
1083*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_2x32mem_to_2x64mask:
1084*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1085*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %xmm0, %xmm0
1086*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
1087*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1088*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq (%rdi), %xmm1
1089*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
1090*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1091*9880d681SAndroid Build Coastguard Worker;
1092*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_2x32mem_to_2x64mask:
1093*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1094*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllq $63, %xmm0, %xmm0
1095*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmq %xmm0, %xmm0, %k1
1096*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxdq (%rdi), %xmm0 {%k1} {z}
1097*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1098*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i32>,<2 x i32> *%i,align 1
1099*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i32> %a to <2 x i64>
1100*9880d681SAndroid Build Coastguard Worker  %ret = select <2 x i1> %mask, <2 x i64> %x, <2 x i64> zeroinitializer
1101*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %ret
1102*9880d681SAndroid Build Coastguard Worker}
1103*9880d681SAndroid Build Coastguard Worker
1104*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @sext_2x32mem_to_2x64(<2 x i32> *%i) nounwind readnone {
1105*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_2x32mem_to_2x64:
1106*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1107*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxdq (%rdi), %xmm0
1108*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1109*9880d681SAndroid Build Coastguard Worker  %a   = load <2 x i32>,<2 x i32> *%i,align 1
1110*9880d681SAndroid Build Coastguard Worker  %x   = sext <2 x i32> %a to <2 x i64>
1111*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %x
1112*9880d681SAndroid Build Coastguard Worker}
1113*9880d681SAndroid Build Coastguard Worker
1114*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_4x32mem_to_4x64(<4 x i32> *%i , <4 x i1> %mask) nounwind readnone {
1115*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x32mem_to_4x64:
1116*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1117*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
1118*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
1119*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
1120*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxdq {{.*#+}} ymm1 = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1121*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
1122*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1123*9880d681SAndroid Build Coastguard Worker;
1124*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x32mem_to_4x64:
1125*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1126*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
1127*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
1128*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxdq {{.*#+}} ymm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero
1129*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1130*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i32>,<4 x i32> *%i,align 1
1131*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i32> %a to <4 x i64>
1132*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x  i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
1133*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
1134*9880d681SAndroid Build Coastguard Worker}
1135*9880d681SAndroid Build Coastguard Worker
1136*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x32mem_to_4x64mask(<4 x i32> *%i , <4 x i1> %mask) nounwind readnone {
1137*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_4x32mem_to_4x64mask:
1138*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1139*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
1140*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
1141*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm0, %ymm0
1142*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq (%rdi), %ymm1
1143*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm0, %ymm0
1144*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1145*9880d681SAndroid Build Coastguard Worker;
1146*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_4x32mem_to_4x64mask:
1147*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1148*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
1149*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
1150*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxdq (%rdi), %ymm0 {%k1} {z}
1151*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1152*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i32>,<4 x i32> *%i,align 1
1153*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i32> %a to <4 x i64>
1154*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
1155*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
1156*9880d681SAndroid Build Coastguard Worker}
1157*9880d681SAndroid Build Coastguard Worker
1158*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x32mem_to_4x64(<4 x i32> *%i) nounwind readnone {
1159*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_4x32mem_to_4x64:
1160*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1161*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxdq (%rdi), %ymm0
1162*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1163*9880d681SAndroid Build Coastguard Worker  %a   = load <4 x i32>,<4 x i32> *%i,align 1
1164*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i32> %a to <4 x i64>
1165*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
1166*9880d681SAndroid Build Coastguard Worker}
1167*9880d681SAndroid Build Coastguard Worker
1168*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @sext_4x32_to_4x64(<4 x i32> %a) nounwind readnone {
1169*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_4x32_to_4x64:
1170*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1171*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxdq %xmm0, %ymm0
1172*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1173*9880d681SAndroid Build Coastguard Worker  %x   = sext <4 x i32> %a to <4 x i64>
1174*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %x
1175*9880d681SAndroid Build Coastguard Worker}
1176*9880d681SAndroid Build Coastguard Worker
1177*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_4x32_to_4x64mask(<4 x i32> %a , <4 x i1> %mask) nounwind readnone {
1178*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4x32_to_4x64mask:
1179*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1180*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm1, %xmm1
1181*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm1, %xmm1
1182*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %xmm1, %ymm1
1183*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1184*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm1, %ymm0
1185*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1186*9880d681SAndroid Build Coastguard Worker;
1187*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4x32_to_4x64mask:
1188*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1189*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm1, %xmm1
1190*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm1, %xmm1, %k1
1191*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxdq {{.*#+}} ymm0 {%k1} {z} = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1192*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1193*9880d681SAndroid Build Coastguard Worker  %x   = zext <4 x i32> %a to <4 x i64>
1194*9880d681SAndroid Build Coastguard Worker  %ret = select <4 x  i1> %mask, <4 x i64> %x, <4 x i64> zeroinitializer
1195*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %ret
1196*9880d681SAndroid Build Coastguard Worker}
1197*9880d681SAndroid Build Coastguard Worker
1198*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x32mem_to_8x64(<8 x i32> *%i , <8 x i1> %mask) nounwind readnone {
1199*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x32mem_to_8x64:
1200*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1201*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
1202*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
1203*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
1204*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
1205*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1206*9880d681SAndroid Build Coastguard Worker;
1207*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x32mem_to_8x64:
1208*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1209*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
1210*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
1211*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = mem[0],zero,mem[1],zero,mem[2],zero,mem[3],zero,mem[4],zero,mem[5],zero,mem[6],zero,mem[7],zero
1212*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1213*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i32>,<8 x i32> *%i,align 1
1214*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i32> %a to <8 x i64>
1215*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x  i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
1216*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1217*9880d681SAndroid Build Coastguard Worker}
1218*9880d681SAndroid Build Coastguard Worker
1219*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x32mem_to_8x64mask(<8 x i32> *%i , <8 x i1> %mask) nounwind readnone {
1220*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8x32mem_to_8x64mask:
1221*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1222*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
1223*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
1224*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k1
1225*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq (%rdi), %zmm0 {%k1} {z}
1226*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1227*9880d681SAndroid Build Coastguard Worker;
1228*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8x32mem_to_8x64mask:
1229*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1230*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
1231*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k1
1232*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovsxdq (%rdi), %zmm0 {%k1} {z}
1233*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1234*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i32>,<8 x i32> *%i,align 1
1235*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i32> %a to <8 x i64>
1236*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
1237*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1238*9880d681SAndroid Build Coastguard Worker}
1239*9880d681SAndroid Build Coastguard Worker
1240*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x32mem_to_8x64(<8 x i32> *%i) nounwind readnone {
1241*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_8x32mem_to_8x64:
1242*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1243*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxdq (%rdi), %zmm0
1244*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1245*9880d681SAndroid Build Coastguard Worker  %a   = load <8 x i32>,<8 x i32> *%i,align 1
1246*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i32> %a to <8 x i64>
1247*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
1248*9880d681SAndroid Build Coastguard Worker}
1249*9880d681SAndroid Build Coastguard Worker
1250*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8x32_to_8x64(<8 x i32> %a) nounwind readnone {
1251*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sext_8x32_to_8x64:
1252*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1253*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxdq %ymm0, %zmm0
1254*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1255*9880d681SAndroid Build Coastguard Worker  %x   = sext <8 x i32> %a to <8 x i64>
1256*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %x
1257*9880d681SAndroid Build Coastguard Worker}
1258*9880d681SAndroid Build Coastguard Worker
1259*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @zext_8x32_to_8x64mask(<8 x i32> %a , <8 x i1> %mask) nounwind readnone {
1260*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8x32_to_8x64mask:
1261*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1262*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm1, %zmm1
1263*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm1, %zmm1
1264*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm1, %zmm1, %k1
1265*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero
1266*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1267*9880d681SAndroid Build Coastguard Worker;
1268*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8x32_to_8x64mask:
1269*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1270*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm1, %xmm1
1271*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm1, %k1
1272*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovzxdq {{.*#+}} zmm0 {%k1} {z} = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero
1273*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1274*9880d681SAndroid Build Coastguard Worker  %x   = zext <8 x i32> %a to <8 x i64>
1275*9880d681SAndroid Build Coastguard Worker  %ret = select <8 x  i1> %mask, <8 x i64> %x, <8 x i64> zeroinitializer
1276*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %ret
1277*9880d681SAndroid Build Coastguard Worker}
1278*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @fptrunc_test(<8 x double> %a) nounwind readnone {
1279*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fptrunc_test:
1280*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1281*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtpd2ps %zmm0, %ymm0
1282*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1283*9880d681SAndroid Build Coastguard Worker  %b = fptrunc <8 x double> %a to <8 x float>
1284*9880d681SAndroid Build Coastguard Worker  ret <8 x float> %b
1285*9880d681SAndroid Build Coastguard Worker}
1286*9880d681SAndroid Build Coastguard Worker
1287*9880d681SAndroid Build Coastguard Workerdefine <8 x double> @fpext_test(<8 x float> %a) nounwind readnone {
1288*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: fpext_test:
1289*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1290*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vcvtps2pd %ymm0, %zmm0
1291*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1292*9880d681SAndroid Build Coastguard Worker  %b = fpext <8 x float> %a to <8 x double>
1293*9880d681SAndroid Build Coastguard Worker  ret <8 x double> %b
1294*9880d681SAndroid Build Coastguard Worker}
1295*9880d681SAndroid Build Coastguard Worker
1296*9880d681SAndroid Build Coastguard Workerdefine   <16 x i32> @zext_16i1_to_16xi32(i16 %b) {
1297*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16i1_to_16xi32:
1298*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1299*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    kmovw %edi, %k1
1300*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpbroadcastd {{.*}}(%rip), %zmm0 {%k1} {z}
1301*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1302*9880d681SAndroid Build Coastguard Worker  %a = bitcast i16 %b to <16 x i1>
1303*9880d681SAndroid Build Coastguard Worker  %c = zext <16 x i1> %a to <16 x i32>
1304*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %c
1305*9880d681SAndroid Build Coastguard Worker}
1306*9880d681SAndroid Build Coastguard Worker
1307*9880d681SAndroid Build Coastguard Workerdefine   <8 x i64> @zext_8i1_to_8xi64(i8 %b) {
1308*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_8i1_to_8xi64:
1309*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1310*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %edi, %k1
1311*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z}
1312*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1313*9880d681SAndroid Build Coastguard Worker;
1314*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_8i1_to_8xi64:
1315*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1316*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovb %edi, %k1
1317*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpbroadcastq {{.*}}(%rip), %zmm0 {%k1} {z}
1318*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1319*9880d681SAndroid Build Coastguard Worker  %a = bitcast i8 %b to <8 x i1>
1320*9880d681SAndroid Build Coastguard Worker  %c = zext <8 x i1> %a to <8 x i64>
1321*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %c
1322*9880d681SAndroid Build Coastguard Worker}
1323*9880d681SAndroid Build Coastguard Worker
1324*9880d681SAndroid Build Coastguard Workerdefine i16 @trunc_16i8_to_16i1(<16 x i8> %a) {
1325*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_16i8_to_16i1:
1326*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1327*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm0, %zmm0
1328*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
1329*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm0, %zmm0, %k0
1330*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
1331*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
1332*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1333*9880d681SAndroid Build Coastguard Worker;
1334*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_16i8_to_16i1:
1335*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1336*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %xmm0, %xmm0
1337*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %xmm0, %k0
1338*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovw %k0, %eax
1339*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
1340*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1341*9880d681SAndroid Build Coastguard Worker  %mask_b = trunc <16 x i8>%a to <16 x i1>
1342*9880d681SAndroid Build Coastguard Worker  %mask = bitcast <16 x i1> %mask_b to i16
1343*9880d681SAndroid Build Coastguard Worker  ret i16 %mask
1344*9880d681SAndroid Build Coastguard Worker}
1345*9880d681SAndroid Build Coastguard Worker
1346*9880d681SAndroid Build Coastguard Workerdefine i16 @trunc_16i32_to_16i1(<16 x i32> %a) {
1347*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_16i32_to_16i1:
1348*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1349*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpslld $31, %zmm0, %zmm0
1350*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vptestmd %zmm0, %zmm0, %k0
1351*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    kmovw %k0, %eax
1352*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
1353*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1354*9880d681SAndroid Build Coastguard Worker  %mask_b = trunc <16 x i32>%a to <16 x i1>
1355*9880d681SAndroid Build Coastguard Worker  %mask = bitcast <16 x i1> %mask_b to i16
1356*9880d681SAndroid Build Coastguard Worker  ret i16 %mask
1357*9880d681SAndroid Build Coastguard Worker}
1358*9880d681SAndroid Build Coastguard Worker
1359*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @trunc_4i32_to_4i1(<4 x i32> %a, <4 x i32> %b) {
1360*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_4i32_to_4i1:
1361*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1362*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm1, %xmm0, %xmm0
1363*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %xmm0, %xmm0
1364*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrad $31, %xmm0, %xmm0
1365*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1366*9880d681SAndroid Build Coastguard Worker;
1367*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_4i32_to_4i1:
1368*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1369*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm0, %xmm0
1370*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k1
1371*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpslld $31, %xmm1, %xmm0
1372*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vptestmd %xmm0, %xmm0, %k0 {%k1}
1373*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovm2d %k0, %xmm0
1374*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1375*9880d681SAndroid Build Coastguard Worker  %mask_a = trunc <4 x i32>%a to <4 x i1>
1376*9880d681SAndroid Build Coastguard Worker  %mask_b = trunc <4 x i32>%b to <4 x i1>
1377*9880d681SAndroid Build Coastguard Worker  %a_and_b = and <4 x i1>%mask_a, %mask_b
1378*9880d681SAndroid Build Coastguard Worker  %res = sext <4 x i1>%a_and_b to <4 x i32>
1379*9880d681SAndroid Build Coastguard Worker  ret <4 x i32>%res
1380*9880d681SAndroid Build Coastguard Worker}
1381*9880d681SAndroid Build Coastguard Worker
1382*9880d681SAndroid Build Coastguard Worker
1383*9880d681SAndroid Build Coastguard Workerdefine i8 @trunc_8i16_to_8i1(<8 x i16> %a) {
1384*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: trunc_8i16_to_8i1:
1385*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1386*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwq %xmm0, %zmm0
1387*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllq $63, %zmm0, %zmm0
1388*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmq %zmm0, %zmm0, %k0
1389*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
1390*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
1391*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1392*9880d681SAndroid Build Coastguard Worker;
1393*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: trunc_8i16_to_8i1:
1394*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1395*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $15, %xmm0, %xmm0
1396*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovw2m %xmm0, %k0
1397*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kmovb %k0, %eax
1398*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    ## kill: %AL<def> %AL<kill> %EAX<kill>
1399*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1400*9880d681SAndroid Build Coastguard Worker  %mask_b = trunc <8 x i16>%a to <8 x i1>
1401*9880d681SAndroid Build Coastguard Worker  %mask = bitcast <8 x i1> %mask_b to i8
1402*9880d681SAndroid Build Coastguard Worker  ret i8 %mask
1403*9880d681SAndroid Build Coastguard Worker}
1404*9880d681SAndroid Build Coastguard Worker
1405*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @sext_8i1_8i32(<8 x i32> %a1, <8 x i32> %a2) nounwind {
1406*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8i1_8i32:
1407*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1408*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM1<def> %YMM1<kill> %ZMM1<def>
1409*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %YMM0<def> %YMM0<kill> %ZMM0<def>
1410*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0
1411*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    knotw %k0, %k1
1412*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1413*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovdqa64 %zmm0, %zmm0 {%k1} {z}
1414*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovqd %zmm0, %ymm0
1415*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1416*9880d681SAndroid Build Coastguard Worker;
1417*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8i1_8i32:
1418*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1419*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtd %ymm0, %ymm1, %k0
1420*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    knotb %k0, %k0
1421*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovm2d %k0, %ymm0
1422*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1423*9880d681SAndroid Build Coastguard Worker  %x = icmp slt <8 x i32> %a1, %a2
1424*9880d681SAndroid Build Coastguard Worker  %x1 = xor <8 x i1>%x, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1425*9880d681SAndroid Build Coastguard Worker  %y = sext <8 x i1> %x1 to <8 x i32>
1426*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %y
1427*9880d681SAndroid Build Coastguard Worker}
1428*9880d681SAndroid Build Coastguard Worker
1429*9880d681SAndroid Build Coastguard Worker
1430*9880d681SAndroid Build Coastguard Workerdefine i16 @trunc_i32_to_i1(i32 %a) {
1431*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: trunc_i32_to_i1:
1432*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1433*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    andl $1, %edi
1434*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    kmovw %edi, %k0
1435*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    movw $-4, %ax
1436*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    kmovw %eax, %k1
1437*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    korw %k0, %k1, %k0
1438*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    kmovw %k0, %eax
1439*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    ## kill: %AX<def> %AX<kill> %EAX<kill>
1440*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1441*9880d681SAndroid Build Coastguard Worker  %a_i = trunc i32 %a to i1
1442*9880d681SAndroid Build Coastguard Worker  %maskv = insertelement <16 x i1> <i1 true, i1 false, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>, i1 %a_i, i32 0
1443*9880d681SAndroid Build Coastguard Worker  %res = bitcast <16 x i1> %maskv to i16
1444*9880d681SAndroid Build Coastguard Worker  ret i16 %res
1445*9880d681SAndroid Build Coastguard Worker}
1446*9880d681SAndroid Build Coastguard Worker
1447*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @sext_8i1_8i16(<8 x i32> %a1, <8 x i32> %a2) nounwind {
1448*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8i1_8i16:
1449*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1450*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
1451*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovdw %zmm0, %ymm0
1452*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    ## kill: %XMM0<def> %XMM0<kill> %YMM0<kill>
1453*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1454*9880d681SAndroid Build Coastguard Worker;
1455*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8i1_8i16:
1456*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1457*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtd %ymm0, %ymm1, %k0
1458*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovm2w %k0, %xmm0
1459*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1460*9880d681SAndroid Build Coastguard Worker  %x = icmp slt <8 x i32> %a1, %a2
1461*9880d681SAndroid Build Coastguard Worker  %y = sext <8 x i1> %x to <8 x i16>
1462*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %y
1463*9880d681SAndroid Build Coastguard Worker}
1464*9880d681SAndroid Build Coastguard Worker
1465*9880d681SAndroid Build Coastguard Workerdefine <16 x i32> @sext_16i1_16i32(<16 x i32> %a1, <16 x i32> %a2) nounwind {
1466*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_16i1_16i32:
1467*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1468*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtd %zmm0, %zmm1, %k1
1469*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
1470*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovdqa32 %zmm0, %zmm0 {%k1} {z}
1471*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1472*9880d681SAndroid Build Coastguard Worker;
1473*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_16i1_16i32:
1474*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1475*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtd %zmm0, %zmm1, %k0
1476*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovm2d %k0, %zmm0
1477*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1478*9880d681SAndroid Build Coastguard Worker  %x = icmp slt <16 x i32> %a1, %a2
1479*9880d681SAndroid Build Coastguard Worker  %y = sext <16 x i1> %x to <16 x i32>
1480*9880d681SAndroid Build Coastguard Worker  ret <16 x i32> %y
1481*9880d681SAndroid Build Coastguard Worker}
1482*9880d681SAndroid Build Coastguard Worker
1483*9880d681SAndroid Build Coastguard Workerdefine <8 x i64> @sext_8i1_8i64(<8 x i32> %a1, <8 x i32> %a2) nounwind {
1484*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: sext_8i1_8i64:
1485*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1486*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpgtd %ymm0, %ymm1, %ymm0
1487*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxdq %ymm0, %zmm0
1488*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1489*9880d681SAndroid Build Coastguard Worker;
1490*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: sext_8i1_8i64:
1491*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1492*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpgtd %ymm0, %ymm1, %k0
1493*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovm2q %k0, %zmm0
1494*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1495*9880d681SAndroid Build Coastguard Worker  %x = icmp slt <8 x i32> %a1, %a2
1496*9880d681SAndroid Build Coastguard Worker  %y = sext <8 x i1> %x to <8 x i64>
1497*9880d681SAndroid Build Coastguard Worker  ret <8 x i64> %y
1498*9880d681SAndroid Build Coastguard Worker}
1499*9880d681SAndroid Build Coastguard Worker
1500*9880d681SAndroid Build Coastguard Workerdefine void @extload_v8i64(<8 x i8>* %a, <8 x i64>* %res) {
1501*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: extload_v8i64:
1502*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1503*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovsxbq (%rdi), %zmm0
1504*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vmovdqa64 %zmm0, (%rsi)
1505*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1506*9880d681SAndroid Build Coastguard Worker  %sign_load = load <8 x i8>, <8 x i8>* %a
1507*9880d681SAndroid Build Coastguard Worker  %c = sext <8 x i8> %sign_load to <8 x i64>
1508*9880d681SAndroid Build Coastguard Worker  store <8 x i64> %c, <8 x i64>* %res
1509*9880d681SAndroid Build Coastguard Worker  ret void
1510*9880d681SAndroid Build Coastguard Worker}
1511*9880d681SAndroid Build Coastguard Worker
1512*9880d681SAndroid Build Coastguard Workerdefine <64 x i16> @test21(<64 x i16> %x , <64 x i1> %mask) nounwind readnone {
1513*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: test21:
1514*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1515*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %rbp
1516*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %r15
1517*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %r14
1518*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %r13
1519*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %r12
1520*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    pushq %rbx
1521*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm7, %zmm7
1522*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm7, %zmm7
1523*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm6, %zmm6
1524*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm6, %zmm6
1525*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm5, %zmm5
1526*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm5, %zmm5
1527*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxbd %xmm4, %zmm4
1528*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpslld $31, %zmm4, %zmm4
1529*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm4, %zmm4, %k0
1530*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $14, %k0, %k1
1531*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1532*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ecx
1533*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $15, %k0, %k1
1534*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1535*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r15d
1536*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $13, %k0, %k1
1537*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1538*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r12d
1539*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $12, %k0, %k1
1540*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1541*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %edx
1542*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k0, %k1
1543*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1544*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r13d
1545*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $10, %k0, %k1
1546*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1547*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %eax
1548*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movl %eax, -{{[0-9]+}}(%rsp) ## 4-byte Spill
1549*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $9, %k0, %k1
1550*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1551*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %esi
1552*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $8, %k0, %k1
1553*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1554*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %edi
1555*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $7, %k0, %k1
1556*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1557*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r8d
1558*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $6, %k0, %k1
1559*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1560*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r9d
1561*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $5, %k0, %k1
1562*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1563*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r10d
1564*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $4, %k0, %k1
1565*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1566*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r11d
1567*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $3, %k0, %k1
1568*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1569*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ebx
1570*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $2, %k0, %k1
1571*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1572*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ebp
1573*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $1, %k0, %k1
1574*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1575*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r14d
1576*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm5, %zmm5, %k2
1577*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $0, %k0, %k0
1578*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1579*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %r15d, %xmm4
1580*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r15d
1581*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $14, %k2, %k0
1582*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1583*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, %ecx, %xmm4, %xmm4
1584*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ecx
1585*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $15, %k2, %k0
1586*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1587*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $2, %r12d, %xmm4, %xmm4
1588*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
1589*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $13, %k2, %k0
1590*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1591*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $3, %edx, %xmm4, %xmm4
1592*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r12d
1593*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $12, %k2, %k0
1594*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1595*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $4, %r13d, %xmm4, %xmm4
1596*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %edx
1597*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k2, %k0
1598*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1599*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $5, -{{[0-9]+}}(%rsp), %xmm4, %xmm4 ## 4-byte Folded Reload
1600*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r13d
1601*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $10, %k2, %k0
1602*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1603*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $6, %esi, %xmm4, %xmm4
1604*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %esi
1605*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movl %esi, -{{[0-9]+}}(%rsp) ## 4-byte Spill
1606*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $9, %k2, %k0
1607*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1608*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $7, %edi, %xmm4, %xmm4
1609*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %esi
1610*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $8, %k2, %k0
1611*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1612*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $8, %r8d, %xmm4, %xmm4
1613*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %edi
1614*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $7, %k2, %k0
1615*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1616*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $9, %r9d, %xmm4, %xmm4
1617*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r8d
1618*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $6, %k2, %k0
1619*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1620*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $10, %r10d, %xmm4, %xmm4
1621*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r9d
1622*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $5, %k2, %k0
1623*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1624*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $11, %r11d, %xmm4, %xmm4
1625*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r10d
1626*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $4, %k2, %k0
1627*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1628*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $12, %ebx, %xmm4, %xmm4
1629*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ebx
1630*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $3, %k2, %k0
1631*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1632*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $13, %ebp, %xmm4, %xmm4
1633*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ebp
1634*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $2, %k2, %k0
1635*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1636*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $14, %r14d, %xmm4, %xmm4
1637*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r11d
1638*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $1, %k2, %k0
1639*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1640*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $15, %r15d, %xmm4, %xmm4
1641*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r14d
1642*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm6, %zmm6, %k1
1643*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $0, %k2, %k0
1644*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1645*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %eax, %xmm5
1646*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r15d
1647*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $14, %k1, %k0
1648*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1649*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, %ecx, %xmm5, %xmm5
1650*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ecx
1651*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $15, %k1, %k0
1652*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1653*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $2, %r12d, %xmm5, %xmm5
1654*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %eax
1655*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $13, %k1, %k0
1656*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1657*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $3, %edx, %xmm5, %xmm5
1658*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r12d
1659*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $12, %k1, %k0
1660*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1661*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $4, %r13d, %xmm5, %xmm5
1662*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %edx
1663*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k1, %k0
1664*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1665*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $5, -{{[0-9]+}}(%rsp), %xmm5, %xmm5 ## 4-byte Folded Reload
1666*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r13d
1667*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $10, %k1, %k0
1668*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1669*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $6, %esi, %xmm5, %xmm5
1670*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %esi
1671*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    movl %esi, -{{[0-9]+}}(%rsp) ## 4-byte Spill
1672*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $9, %k1, %k0
1673*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1674*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $7, %edi, %xmm5, %xmm5
1675*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %esi
1676*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $8, %k1, %k0
1677*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1678*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $8, %r8d, %xmm5, %xmm5
1679*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %edi
1680*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $7, %k1, %k0
1681*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1682*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $9, %r9d, %xmm5, %xmm5
1683*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r8d
1684*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $6, %k1, %k0
1685*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1686*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $10, %r10d, %xmm5, %xmm5
1687*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r9d
1688*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $5, %k1, %k0
1689*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1690*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $11, %ebx, %xmm5, %xmm5
1691*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ebx
1692*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $4, %k1, %k0
1693*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1694*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $12, %ebp, %xmm5, %xmm5
1695*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %ebp
1696*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $3, %k1, %k0
1697*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1698*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $13, %r11d, %xmm5, %xmm5
1699*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r10d
1700*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $2, %k1, %k0
1701*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1702*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $14, %r14d, %xmm5, %xmm5
1703*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r11d
1704*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $1, %k1, %k0
1705*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1706*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $15, %r15d, %xmm5, %xmm5
1707*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r14d
1708*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vptestmd %zmm7, %zmm7, %k0
1709*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $0, %k1, %k1
1710*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1711*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %eax, %xmm6
1712*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r15d
1713*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $14, %k0, %k1
1714*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1715*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, %ecx, %xmm6, %xmm6
1716*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ecx
1717*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $15, %k0, %k1
1718*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1719*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $2, %r12d, %xmm6, %xmm6
1720*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r12d
1721*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $13, %k0, %k1
1722*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1723*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $3, %edx, %xmm6, %xmm6
1724*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %edx
1725*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $12, %k0, %k1
1726*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1727*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $4, %r13d, %xmm6, %xmm6
1728*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r13d
1729*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $11, %k0, %k1
1730*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1731*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $5, -{{[0-9]+}}(%rsp), %xmm6, %xmm6 ## 4-byte Folded Reload
1732*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %eax
1733*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $10, %k0, %k1
1734*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1735*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $6, %esi, %xmm6, %xmm6
1736*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %esi
1737*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $9, %k0, %k1
1738*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1739*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $7, %edi, %xmm6, %xmm6
1740*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %edi
1741*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $8, %k0, %k1
1742*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1743*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $8, %r8d, %xmm6, %xmm6
1744*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r8d
1745*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $7, %k0, %k1
1746*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1747*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $9, %r9d, %xmm6, %xmm6
1748*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r9d
1749*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $6, %k0, %k1
1750*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1751*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $10, %ebx, %xmm6, %xmm6
1752*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ebx
1753*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $5, %k0, %k1
1754*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1755*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $11, %ebp, %xmm6, %xmm6
1756*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %ebp
1757*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $4, %k0, %k1
1758*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1759*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $12, %r10d, %xmm6, %xmm6
1760*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r10d
1761*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $3, %k0, %k1
1762*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1763*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $13, %r11d, %xmm6, %xmm6
1764*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r11d
1765*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $2, %k0, %k1
1766*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1767*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $14, %r14d, %xmm6, %xmm6
1768*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r14d
1769*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $1, %k0, %k1
1770*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k1, %k1
1771*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $15, %r15d, %xmm6, %xmm6
1772*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k1, %r15d
1773*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftlw $0, %k0, %k0
1774*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kshiftrw $15, %k0, %k0
1775*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovd %r12d, %xmm7
1776*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    kmovw %k0, %r12d
1777*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $1, %ecx, %xmm7, %xmm7
1778*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $2, %edx, %xmm7, %xmm7
1779*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $3, %r13d, %xmm7, %xmm7
1780*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $4, %eax, %xmm7, %xmm7
1781*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $5, %esi, %xmm7, %xmm7
1782*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $6, %edi, %xmm7, %xmm7
1783*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $7, %r8d, %xmm7, %xmm7
1784*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $8, %r9d, %xmm7, %xmm7
1785*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $9, %ebx, %xmm7, %xmm7
1786*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $10, %ebp, %xmm7, %xmm7
1787*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $11, %r10d, %xmm7, %xmm7
1788*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $12, %r11d, %xmm7, %xmm7
1789*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $13, %r14d, %xmm7, %xmm7
1790*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero,xmm4[8],zero,xmm4[9],zero,xmm4[10],zero,xmm4[11],zero,xmm4[12],zero,xmm4[13],zero,xmm4[14],zero,xmm4[15],zero
1791*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm4, %ymm4
1792*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm4, %ymm4
1793*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm0, %ymm4, %ymm0
1794*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm4 = xmm5[0],zero,xmm5[1],zero,xmm5[2],zero,xmm5[3],zero,xmm5[4],zero,xmm5[5],zero,xmm5[6],zero,xmm5[7],zero,xmm5[8],zero,xmm5[9],zero,xmm5[10],zero,xmm5[11],zero,xmm5[12],zero,xmm5[13],zero,xmm5[14],zero,xmm5[15],zero
1795*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm4, %ymm4
1796*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm4, %ymm4
1797*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm1, %ymm4, %ymm1
1798*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm4 = xmm6[0],zero,xmm6[1],zero,xmm6[2],zero,xmm6[3],zero,xmm6[4],zero,xmm6[5],zero,xmm6[6],zero,xmm6[7],zero,xmm6[8],zero,xmm6[9],zero,xmm6[10],zero,xmm6[11],zero,xmm6[12],zero,xmm6[13],zero,xmm6[14],zero,xmm6[15],zero
1799*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm4, %ymm4
1800*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm4, %ymm4
1801*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm4, %ymm2
1802*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $14, %r15d, %xmm7, %xmm4
1803*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpinsrb $15, %r12d, %xmm4, %xmm4
1804*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovzxbw {{.*#+}} ymm4 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero,xmm4[4],zero,xmm4[5],zero,xmm4[6],zero,xmm4[7],zero,xmm4[8],zero,xmm4[9],zero,xmm4[10],zero,xmm4[11],zero,xmm4[12],zero,xmm4[13],zero,xmm4[14],zero,xmm4[15],zero
1805*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsllw $15, %ymm4, %ymm4
1806*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsraw $15, %ymm4, %ymm4
1807*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm3, %ymm4, %ymm3
1808*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %rbx
1809*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %r12
1810*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %r13
1811*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %r14
1812*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %r15
1813*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    popq %rbp
1814*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1815*9880d681SAndroid Build Coastguard Worker;
1816*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: test21:
1817*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1818*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpsllw $7, %zmm2, %zmm2
1819*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpmovb2m %zmm2, %k1
1820*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu16 %zmm0, %zmm0 {%k1} {z}
1821*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    kshiftrq $32, %k1, %k1
1822*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu16 %zmm1, %zmm1 {%k1} {z}
1823*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1824*9880d681SAndroid Build Coastguard Worker  %ret = select <64 x i1> %mask, <64 x i16> %x, <64 x i16> zeroinitializer
1825*9880d681SAndroid Build Coastguard Worker  ret <64 x i16> %ret
1826*9880d681SAndroid Build Coastguard Worker}
1827*9880d681SAndroid Build Coastguard Worker
1828*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @shuffle_zext_16x8_to_16x16(<16 x i8> %a) nounwind readnone {
1829*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: shuffle_zext_16x8_to_16x16:
1830*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1831*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
1832*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1833*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i8> %a, <16 x i8> zeroinitializer, <32 x i32> <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, i32 16, i32 8, i32 16, i32 9, i32 16, i32 10, i32 16, i32 11, i32 16, i32 12, i32 16, i32 13, i32 16, i32 14, i32 16, i32 15, i32 16>
1834*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <32 x i8> %1 to <16 x i16>
1835*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %2
1836*9880d681SAndroid Build Coastguard Worker}
1837*9880d681SAndroid Build Coastguard Worker
1838*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @zext_32x8_to_16x16(<32 x i8> %a) {
1839*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_32x8_to_16x16:
1840*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1841*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbw {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero,xmm0[8],zero,xmm0[9],zero,xmm0[10],zero,xmm0[11],zero,xmm0[12],zero,xmm0[13],zero,xmm0[14],zero,xmm0[15],zero
1842*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1843*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 1, i32 32, i32 2, i32 32, i32 3, i32 32, i32 4, i32 32, i32 5, i32 32, i32 6, i32 32, i32 7, i32 32, i32 8, i32 32, i32 9, i32 32, i32 10, i32 32, i32 11, i32 32, i32 12, i32 32, i32 13, i32 32, i32 14, i32 32, i32 15, i32 32>
1844*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <32 x i8> %1 to <16 x i16>
1845*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %2
1846*9880d681SAndroid Build Coastguard Worker}
1847*9880d681SAndroid Build Coastguard Worker
1848*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_32x8_to_8x32(<32 x i8> %a) {
1849*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_32x8_to_8x32:
1850*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1851*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero
1852*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1853*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 32, i32 32, i32 1, i32 32, i32 32, i32 32, i32 2, i32 32, i32 32, i32 32, i32 3, i32 32, i32 32, i32 32, i32 4, i32 32, i32 32, i32 32, i32 5, i32 32, i32 32, i32 32, i32 6, i32 32, i32 32, i32 32, i32 7, i32 32, i32 32, i32 32>
1854*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <32 x i8> %1 to <8 x i32>
1855*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %2
1856*9880d681SAndroid Build Coastguard Worker}
1857*9880d681SAndroid Build Coastguard Worker
1858*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_32x8_to_4x64(<32 x i8> %a) {
1859*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_32x8_to_4x64:
1860*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1861*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxbq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,zero,zero,zero,zero,xmm0[1],zero,zero,zero,zero,zero,zero,zero,xmm0[2],zero,zero,zero,zero,zero,zero,zero,xmm0[3],zero,zero,zero,zero,zero,zero,zero
1862*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1863*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <32 x i8> %a, <32 x i8> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 1, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 2, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 3, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>
1864*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <32 x i8> %1 to <4 x i64>
1865*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %2
1866*9880d681SAndroid Build Coastguard Worker}
1867*9880d681SAndroid Build Coastguard Worker
1868*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @zext_16x16_to_8x32(<16 x i16> %a) {
1869*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16x16_to_8x32:
1870*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1871*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1872*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1873*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <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, i32 16>
1874*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i16> %1 to <8 x i32>
1875*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %2
1876*9880d681SAndroid Build Coastguard Worker}
1877*9880d681SAndroid Build Coastguard Worker
1878*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_16x16_to_4x64(<16 x i16> %a) {
1879*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_16x16_to_4x64:
1880*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1881*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxwq {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero
1882*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1883*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <16 x i16> %a, <16 x i16> zeroinitializer, <16 x i32> <i32 0, i32 16, i32 16, i32 16, i32 1, i32 16, i32 16, i32 16, i32 2, i32 16, i32 16, i32 16, i32 3, i32 16, i32 16, i32 16>
1884*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <16 x i16> %1 to <4 x i64>
1885*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %2
1886*9880d681SAndroid Build Coastguard Worker}
1887*9880d681SAndroid Build Coastguard Worker
1888*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @zext_8x32_to_4x64(<8 x i32> %a) {
1889*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: zext_8x32_to_4x64:
1890*9880d681SAndroid Build Coastguard Worker; ALL:       ## BB#0:
1891*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    vpmovzxdq {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1892*9880d681SAndroid Build Coastguard Worker; ALL-NEXT:    retq
1893*9880d681SAndroid Build Coastguard Worker  %1 = shufflevector <8 x i32> %a, <8 x i32> zeroinitializer, <8 x i32> <i32 0, i32 8, i32 1, i32 8, i32 2, i32 8, i32 3, i32 8>
1894*9880d681SAndroid Build Coastguard Worker  %2 = bitcast <8 x i32> %1 to <4 x i64>
1895*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %2
1896*9880d681SAndroid Build Coastguard Worker}
1897*9880d681SAndroid Build Coastguard Worker
1898*9880d681SAndroid Build Coastguard Workerdefine <64 x i8> @zext_64xi1_to_64xi8(<64 x i8> %x, <64 x i8> %y) #0 {
1899*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_64xi1_to_64xi8:
1900*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1901*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqb %ymm2, %ymm0, %ymm0
1902*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovdqa {{.*#+}} ymm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
1903*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm0, %ymm0
1904*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqb %ymm3, %ymm1, %ymm1
1905*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %ymm2, %ymm1, %ymm1
1906*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1907*9880d681SAndroid Build Coastguard Worker;
1908*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_64xi1_to_64xi8:
1909*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1910*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqb %zmm1, %zmm0, %k1
1911*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu8 {{.*}}(%rip), %zmm0 {%k1} {z}
1912*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1913*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <64 x i8> %x, %y
1914*9880d681SAndroid Build Coastguard Worker  %1 = zext <64 x i1> %mask to <64 x i8>
1915*9880d681SAndroid Build Coastguard Worker  ret <64 x i8> %1
1916*9880d681SAndroid Build Coastguard Worker}
1917*9880d681SAndroid Build Coastguard Worker
1918*9880d681SAndroid Build Coastguard Workerdefine <32 x i16> @zext_32xi1_to_32xi16(<32 x i16> %x, <32 x i16> %y) #0 {
1919*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_32xi1_to_32xi16:
1920*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1921*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
1922*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrlw $15, %ymm0, %ymm0
1923*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
1924*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrlw $15, %ymm1, %ymm1
1925*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1926*9880d681SAndroid Build Coastguard Worker;
1927*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_32xi1_to_32xi16:
1928*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1929*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqw %zmm1, %zmm0, %k1
1930*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu16 {{.*}}(%rip), %zmm0 {%k1} {z}
1931*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1932*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <32 x i16> %x, %y
1933*9880d681SAndroid Build Coastguard Worker  %1 = zext <32 x i1> %mask to <32 x i16>
1934*9880d681SAndroid Build Coastguard Worker  ret <32 x i16> %1
1935*9880d681SAndroid Build Coastguard Worker}
1936*9880d681SAndroid Build Coastguard Worker
1937*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @zext_16xi1_to_16xi16(<16 x i16> %x, <16 x i16> %y) #0 {
1938*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_16xi1_to_16xi16:
1939*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1940*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqw %ymm1, %ymm0, %ymm0
1941*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrlw $15, %ymm0, %ymm0
1942*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1943*9880d681SAndroid Build Coastguard Worker;
1944*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_16xi1_to_16xi16:
1945*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1946*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqw %ymm1, %ymm0, %k1
1947*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu16 {{.*}}(%rip), %ymm0 {%k1} {z}
1948*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1949*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <16 x i16> %x, %y
1950*9880d681SAndroid Build Coastguard Worker  %1 = zext <16 x i1> %mask to <16 x i16>
1951*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %1
1952*9880d681SAndroid Build Coastguard Worker}
1953*9880d681SAndroid Build Coastguard Worker
1954*9880d681SAndroid Build Coastguard Worker
1955*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @zext_32xi1_to_32xi8(<32 x i16> %x, <32 x i16> %y) #0 {
1956*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_32xi1_to_32xi8:
1957*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1958*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
1959*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwd %ymm0, %zmm0
1960*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovdb %zmm0, %xmm0
1961*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
1962*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovsxwd %ymm1, %zmm1
1963*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpmovdb %zmm1, %xmm1
1964*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
1965*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vandps {{.*}}(%rip), %ymm0, %ymm0
1966*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1967*9880d681SAndroid Build Coastguard Worker;
1968*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_32xi1_to_32xi8:
1969*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1970*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqw %zmm1, %zmm0, %k1
1971*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqu8 {{.*}}(%rip), %ymm0 {%k1} {z}
1972*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1973*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <32 x i16> %x, %y
1974*9880d681SAndroid Build Coastguard Worker  %1 = zext <32 x i1> %mask to <32 x i8>
1975*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %1
1976*9880d681SAndroid Build Coastguard Worker}
1977*9880d681SAndroid Build Coastguard Worker
1978*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @zext_4xi1_to_4x32(<4 x i8> %x, <4 x i8> %y) #0 {
1979*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_4xi1_to_4x32:
1980*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
1981*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovdqa {{.*#+}} xmm2 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1982*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm2, %xmm1, %xmm1
1983*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm2, %xmm0, %xmm0
1984*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
1985*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrld $31, %xmm0, %xmm0
1986*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
1987*9880d681SAndroid Build Coastguard Worker;
1988*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_4xi1_to_4x32:
1989*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
1990*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqa64 {{.*#+}} xmm2 = [255,0,0,0,255,0,0,0,255,0,0,0,255,0,0,0]
1991*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %xmm2, %xmm1, %xmm1
1992*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %xmm2, %xmm0, %xmm0
1993*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqd %xmm1, %xmm0, %k1
1994*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm0 {%k1} {z}
1995*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
1996*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <4 x i8> %x, %y
1997*9880d681SAndroid Build Coastguard Worker  %1 = zext <4 x i1> %mask to <4 x i32>
1998*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %1
1999*9880d681SAndroid Build Coastguard Worker}
2000*9880d681SAndroid Build Coastguard Worker
2001*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @zext_2xi1_to_2xi64(<2 x i8> %x, <2 x i8> %y) #0 {
2002*9880d681SAndroid Build Coastguard Worker; KNL-LABEL: zext_2xi1_to_2xi64:
2003*9880d681SAndroid Build Coastguard Worker; KNL:       ## BB#0:
2004*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vmovdqa {{.*#+}} xmm2 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2005*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm2, %xmm1, %xmm1
2006*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpand %xmm2, %xmm0, %xmm0
2007*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
2008*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    vpsrlq $63, %xmm0, %xmm0
2009*9880d681SAndroid Build Coastguard Worker; KNL-NEXT:    retq
2010*9880d681SAndroid Build Coastguard Worker;
2011*9880d681SAndroid Build Coastguard Worker; SKX-LABEL: zext_2xi1_to_2xi64:
2012*9880d681SAndroid Build Coastguard Worker; SKX:       ## BB#0:
2013*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqa64 {{.*#+}} xmm2 = [255,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0]
2014*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %xmm2, %xmm1, %xmm1
2015*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpandq %xmm2, %xmm0, %xmm0
2016*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vpcmpeqq %xmm1, %xmm0, %k1
2017*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    vmovdqa64 {{.*}}(%rip), %xmm0 {%k1} {z}
2018*9880d681SAndroid Build Coastguard Worker; SKX-NEXT:    retq
2019*9880d681SAndroid Build Coastguard Worker  %mask = icmp eq <2 x i8> %x, %y
2020*9880d681SAndroid Build Coastguard Worker  %1 = zext <2 x i1> %mask to <2 x i64>
2021*9880d681SAndroid Build Coastguard Worker  ret <2 x i64> %1
2022*9880d681SAndroid Build Coastguard Worker}
2023