OSDN Git Service

b5efae10536e6b32765694332cbc16325fbf3868
[android-x86/external-llvm.git] / test / CodeGen / X86 / masked_load.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse2    | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=sse4.2  | FileCheck %s --check-prefixes=SSE,SSE42
4 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx     | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX1
5 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx2    | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX2
6 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLDQ
8 ; RUN: llc < %s -disable-peephole -mtriple=x86_64-apple-darwin -mattr=avx512f,avx512bw,avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512VL,AVX512VLBW
9
10 ;
11 ; vXf64
12 ;
13
14 define <1 x double> @load_v1f64_v1i64(<1 x i64> %trigger, <1 x double>* %addr, <1 x double> %dst) {
15 ; SSE-LABEL: load_v1f64_v1i64:
16 ; SSE:       ## %bb.0:
17 ; SSE-NEXT:    testq %rdi, %rdi
18 ; SSE-NEXT:    jne LBB0_2
19 ; SSE-NEXT:  ## %bb.1: ## %cond.load
20 ; SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
21 ; SSE-NEXT:  LBB0_2: ## %else
22 ; SSE-NEXT:    retq
23 ;
24 ; AVX-LABEL: load_v1f64_v1i64:
25 ; AVX:       ## %bb.0:
26 ; AVX-NEXT:    testq %rdi, %rdi
27 ; AVX-NEXT:    jne LBB0_2
28 ; AVX-NEXT:  ## %bb.1: ## %cond.load
29 ; AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
30 ; AVX-NEXT:  LBB0_2: ## %else
31 ; AVX-NEXT:    retq
32   %mask = icmp eq <1 x i64> %trigger, zeroinitializer
33   %res = call <1 x double> @llvm.masked.load.v1f64.p0v1f64(<1 x double>* %addr, i32 4, <1 x i1> %mask, <1 x double> %dst)
34   ret <1 x double> %res
35 }
36
37 define <2 x double> @load_v2f64_v2i64(<2 x i64> %trigger, <2 x double>* %addr, <2 x double> %dst) {
38 ; SSE2-LABEL: load_v2f64_v2i64:
39 ; SSE2:       ## %bb.0:
40 ; SSE2-NEXT:    pxor %xmm2, %xmm2
41 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
42 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
43 ; SSE2-NEXT:    pand %xmm2, %xmm0
44 ; SSE2-NEXT:    movd %xmm0, %eax
45 ; SSE2-NEXT:    testb $1, %al
46 ; SSE2-NEXT:    je LBB1_2
47 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
48 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
49 ; SSE2-NEXT:  LBB1_2: ## %else
50 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
51 ; SSE2-NEXT:    testb $1, %al
52 ; SSE2-NEXT:    je LBB1_4
53 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
54 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
55 ; SSE2-NEXT:  LBB1_4: ## %else2
56 ; SSE2-NEXT:    movapd %xmm1, %xmm0
57 ; SSE2-NEXT:    retq
58 ;
59 ; SSE42-LABEL: load_v2f64_v2i64:
60 ; SSE42:       ## %bb.0:
61 ; SSE42-NEXT:    pxor %xmm2, %xmm2
62 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm2
63 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
64 ; SSE42-NEXT:    testb $1, %al
65 ; SSE42-NEXT:    je LBB1_2
66 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
67 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
68 ; SSE42-NEXT:  LBB1_2: ## %else
69 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
70 ; SSE42-NEXT:    testb $1, %al
71 ; SSE42-NEXT:    je LBB1_4
72 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
73 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
74 ; SSE42-NEXT:  LBB1_4: ## %else2
75 ; SSE42-NEXT:    movapd %xmm1, %xmm0
76 ; SSE42-NEXT:    retq
77 ;
78 ; AVX1OR2-LABEL: load_v2f64_v2i64:
79 ; AVX1OR2:       ## %bb.0:
80 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
81 ; AVX1OR2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
82 ; AVX1OR2-NEXT:    vmaskmovpd (%rdi), %xmm0, %xmm2
83 ; AVX1OR2-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm0
84 ; AVX1OR2-NEXT:    retq
85 ;
86 ; AVX512F-LABEL: load_v2f64_v2i64:
87 ; AVX512F:       ## %bb.0:
88 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
89 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
90 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
91 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
92 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
93 ; AVX512F-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
94 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
95 ; AVX512F-NEXT:    vzeroupper
96 ; AVX512F-NEXT:    retq
97 ;
98 ; AVX512VL-LABEL: load_v2f64_v2i64:
99 ; AVX512VL:       ## %bb.0:
100 ; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1
101 ; AVX512VL-NEXT:    vblendmpd (%rdi), %xmm1, %xmm0 {%k1}
102 ; AVX512VL-NEXT:    retq
103   %mask = icmp eq <2 x i64> %trigger, zeroinitializer
104   %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %addr, i32 4, <2 x i1> %mask, <2 x double> %dst)
105   ret <2 x double> %res
106 }
107
108 define <4 x double> @load_v4f64_v4i32(<4 x i32> %trigger, <4 x double>* %addr, <4 x double> %dst) {
109 ; SSE2-LABEL: load_v4f64_v4i32:
110 ; SSE2:       ## %bb.0:
111 ; SSE2-NEXT:    pxor %xmm3, %xmm3
112 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
113 ; SSE2-NEXT:    movd %xmm3, %eax
114 ; SSE2-NEXT:    testb $1, %al
115 ; SSE2-NEXT:    je LBB2_2
116 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
117 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
118 ; SSE2-NEXT:  LBB2_2: ## %else
119 ; SSE2-NEXT:    pextrw $2, %xmm3, %eax
120 ; SSE2-NEXT:    testb $1, %al
121 ; SSE2-NEXT:    je LBB2_4
122 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
123 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
124 ; SSE2-NEXT:  LBB2_4: ## %else2
125 ; SSE2-NEXT:    pxor %xmm3, %xmm3
126 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm0
127 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
128 ; SSE2-NEXT:    testb $1, %al
129 ; SSE2-NEXT:    je LBB2_6
130 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
131 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
132 ; SSE2-NEXT:  LBB2_6: ## %else5
133 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
134 ; SSE2-NEXT:    testb $1, %al
135 ; SSE2-NEXT:    je LBB2_8
136 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
137 ; SSE2-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
138 ; SSE2-NEXT:  LBB2_8: ## %else8
139 ; SSE2-NEXT:    movapd %xmm1, %xmm0
140 ; SSE2-NEXT:    movapd %xmm2, %xmm1
141 ; SSE2-NEXT:    retq
142 ;
143 ; SSE42-LABEL: load_v4f64_v4i32:
144 ; SSE42:       ## %bb.0:
145 ; SSE42-NEXT:    pxor %xmm3, %xmm3
146 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm3
147 ; SSE42-NEXT:    pextrb $0, %xmm3, %eax
148 ; SSE42-NEXT:    testb $1, %al
149 ; SSE42-NEXT:    je LBB2_2
150 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
151 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
152 ; SSE42-NEXT:  LBB2_2: ## %else
153 ; SSE42-NEXT:    pextrb $4, %xmm3, %eax
154 ; SSE42-NEXT:    testb $1, %al
155 ; SSE42-NEXT:    je LBB2_4
156 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
157 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
158 ; SSE42-NEXT:  LBB2_4: ## %else2
159 ; SSE42-NEXT:    pxor %xmm3, %xmm3
160 ; SSE42-NEXT:    pcmpeqd %xmm3, %xmm0
161 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
162 ; SSE42-NEXT:    testb $1, %al
163 ; SSE42-NEXT:    je LBB2_6
164 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
165 ; SSE42-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
166 ; SSE42-NEXT:  LBB2_6: ## %else5
167 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
168 ; SSE42-NEXT:    testb $1, %al
169 ; SSE42-NEXT:    je LBB2_8
170 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
171 ; SSE42-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
172 ; SSE42-NEXT:  LBB2_8: ## %else8
173 ; SSE42-NEXT:    movapd %xmm1, %xmm0
174 ; SSE42-NEXT:    movapd %xmm2, %xmm1
175 ; SSE42-NEXT:    retq
176 ;
177 ; AVX1-LABEL: load_v4f64_v4i32:
178 ; AVX1:       ## %bb.0:
179 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
180 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
181 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm2
182 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
183 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
184 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
185 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm2
186 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
187 ; AVX1-NEXT:    retq
188 ;
189 ; AVX2-LABEL: load_v4f64_v4i32:
190 ; AVX2:       ## %bb.0:
191 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
192 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
193 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
194 ; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm2
195 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
196 ; AVX2-NEXT:    retq
197 ;
198 ; AVX512F-LABEL: load_v4f64_v4i32:
199 ; AVX512F:       ## %bb.0:
200 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
201 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
202 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
203 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
204 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
205 ; AVX512F-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
206 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
207 ; AVX512F-NEXT:    retq
208 ;
209 ; AVX512VL-LABEL: load_v4f64_v4i32:
210 ; AVX512VL:       ## %bb.0:
211 ; AVX512VL-NEXT:    vptestnmd %xmm0, %xmm0, %k1
212 ; AVX512VL-NEXT:    vblendmpd (%rdi), %ymm1, %ymm0 {%k1}
213 ; AVX512VL-NEXT:    retq
214   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
215   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 32, <4 x i1> %mask, <4 x double> %dst)
216   ret <4 x double> %res
217 }
218
219 define <4 x double> @load_v4f64_v4i32_zero(<4 x i32> %trigger, <4 x double>* %addr) {
220 ; SSE2-LABEL: load_v4f64_v4i32_zero:
221 ; SSE2:       ## %bb.0:
222 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
223 ; SSE2-NEXT:    pxor %xmm0, %xmm0
224 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
225 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
226 ; SSE2-NEXT:    movd %xmm3, %eax
227 ; SSE2-NEXT:    testb $1, %al
228 ; SSE2-NEXT:    xorpd %xmm1, %xmm1
229 ; SSE2-NEXT:    je LBB3_2
230 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
231 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
232 ; SSE2-NEXT:    xorpd %xmm1, %xmm1
233 ; SSE2-NEXT:  LBB3_2: ## %else
234 ; SSE2-NEXT:    pextrw $2, %xmm3, %eax
235 ; SSE2-NEXT:    testb $1, %al
236 ; SSE2-NEXT:    je LBB3_4
237 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
238 ; SSE2-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
239 ; SSE2-NEXT:  LBB3_4: ## %else2
240 ; SSE2-NEXT:    pxor %xmm3, %xmm3
241 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
242 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
243 ; SSE2-NEXT:    testb $1, %al
244 ; SSE2-NEXT:    je LBB3_6
245 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
246 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
247 ; SSE2-NEXT:  LBB3_6: ## %else5
248 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
249 ; SSE2-NEXT:    testb $1, %al
250 ; SSE2-NEXT:    je LBB3_8
251 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
252 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
253 ; SSE2-NEXT:  LBB3_8: ## %else8
254 ; SSE2-NEXT:    retq
255 ;
256 ; SSE42-LABEL: load_v4f64_v4i32_zero:
257 ; SSE42:       ## %bb.0:
258 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
259 ; SSE42-NEXT:    pxor %xmm0, %xmm0
260 ; SSE42-NEXT:    movdqa %xmm2, %xmm3
261 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm3
262 ; SSE42-NEXT:    pextrb $0, %xmm3, %eax
263 ; SSE42-NEXT:    testb $1, %al
264 ; SSE42-NEXT:    xorpd %xmm1, %xmm1
265 ; SSE42-NEXT:    je LBB3_2
266 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
267 ; SSE42-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
268 ; SSE42-NEXT:    xorpd %xmm1, %xmm1
269 ; SSE42-NEXT:  LBB3_2: ## %else
270 ; SSE42-NEXT:    pextrb $4, %xmm3, %eax
271 ; SSE42-NEXT:    testb $1, %al
272 ; SSE42-NEXT:    je LBB3_4
273 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
274 ; SSE42-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
275 ; SSE42-NEXT:  LBB3_4: ## %else2
276 ; SSE42-NEXT:    pxor %xmm3, %xmm3
277 ; SSE42-NEXT:    pcmpeqd %xmm3, %xmm2
278 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
279 ; SSE42-NEXT:    testb $1, %al
280 ; SSE42-NEXT:    je LBB3_6
281 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
282 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
283 ; SSE42-NEXT:  LBB3_6: ## %else5
284 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
285 ; SSE42-NEXT:    testb $1, %al
286 ; SSE42-NEXT:    je LBB3_8
287 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
288 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
289 ; SSE42-NEXT:  LBB3_8: ## %else8
290 ; SSE42-NEXT:    retq
291 ;
292 ; AVX1-LABEL: load_v4f64_v4i32_zero:
293 ; AVX1:       ## %bb.0:
294 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
295 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
296 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
297 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
298 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
299 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
300 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm0
301 ; AVX1-NEXT:    retq
302 ;
303 ; AVX2-LABEL: load_v4f64_v4i32_zero:
304 ; AVX2:       ## %bb.0:
305 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
306 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
307 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
308 ; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm0
309 ; AVX2-NEXT:    retq
310 ;
311 ; AVX512F-LABEL: load_v4f64_v4i32_zero:
312 ; AVX512F:       ## %bb.0:
313 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
314 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
315 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
316 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
317 ; AVX512F-NEXT:    vmovupd (%rdi), %zmm0 {%k1} {z}
318 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
319 ; AVX512F-NEXT:    retq
320 ;
321 ; AVX512VL-LABEL: load_v4f64_v4i32_zero:
322 ; AVX512VL:       ## %bb.0:
323 ; AVX512VL-NEXT:    vptestnmd %xmm0, %xmm0, %k1
324 ; AVX512VL-NEXT:    vmovapd (%rdi), %ymm0 {%k1} {z}
325 ; AVX512VL-NEXT:    retq
326   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
327   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 32, <4 x i1> %mask, <4 x double>zeroinitializer)
328   ret <4 x double> %res
329 }
330
331 define <4 x double> @load_v4f64_v4i64(<4 x i64> %trigger, <4 x double>* %addr, <4 x double> %dst) {
332 ; SSE2-LABEL: load_v4f64_v4i64:
333 ; SSE2:       ## %bb.0:
334 ; SSE2-NEXT:    pxor %xmm4, %xmm4
335 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
336 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,0,3,2]
337 ; SSE2-NEXT:    pand %xmm4, %xmm0
338 ; SSE2-NEXT:    movd %xmm0, %eax
339 ; SSE2-NEXT:    testb $1, %al
340 ; SSE2-NEXT:    je LBB4_2
341 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
342 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
343 ; SSE2-NEXT:  LBB4_2: ## %else
344 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
345 ; SSE2-NEXT:    testb $1, %al
346 ; SSE2-NEXT:    je LBB4_4
347 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
348 ; SSE2-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
349 ; SSE2-NEXT:  LBB4_4: ## %else2
350 ; SSE2-NEXT:    pxor %xmm0, %xmm0
351 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
352 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]
353 ; SSE2-NEXT:    pand %xmm1, %xmm0
354 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
355 ; SSE2-NEXT:    testb $1, %al
356 ; SSE2-NEXT:    je LBB4_6
357 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
358 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
359 ; SSE2-NEXT:  LBB4_6: ## %else5
360 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
361 ; SSE2-NEXT:    testb $1, %al
362 ; SSE2-NEXT:    je LBB4_8
363 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
364 ; SSE2-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
365 ; SSE2-NEXT:  LBB4_8: ## %else8
366 ; SSE2-NEXT:    movapd %xmm2, %xmm0
367 ; SSE2-NEXT:    movapd %xmm3, %xmm1
368 ; SSE2-NEXT:    retq
369 ;
370 ; SSE42-LABEL: load_v4f64_v4i64:
371 ; SSE42:       ## %bb.0:
372 ; SSE42-NEXT:    pxor %xmm4, %xmm4
373 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm4
374 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
375 ; SSE42-NEXT:    testb $1, %al
376 ; SSE42-NEXT:    je LBB4_2
377 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
378 ; SSE42-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
379 ; SSE42-NEXT:  LBB4_2: ## %else
380 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
381 ; SSE42-NEXT:    testb $1, %al
382 ; SSE42-NEXT:    je LBB4_4
383 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
384 ; SSE42-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
385 ; SSE42-NEXT:  LBB4_4: ## %else2
386 ; SSE42-NEXT:    pxor %xmm0, %xmm0
387 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm1
388 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
389 ; SSE42-NEXT:    testb $1, %al
390 ; SSE42-NEXT:    je LBB4_6
391 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
392 ; SSE42-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
393 ; SSE42-NEXT:  LBB4_6: ## %else5
394 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
395 ; SSE42-NEXT:    testb $1, %al
396 ; SSE42-NEXT:    je LBB4_8
397 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
398 ; SSE42-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
399 ; SSE42-NEXT:  LBB4_8: ## %else8
400 ; SSE42-NEXT:    movapd %xmm2, %xmm0
401 ; SSE42-NEXT:    movapd %xmm3, %xmm1
402 ; SSE42-NEXT:    retq
403 ;
404 ; AVX1-LABEL: load_v4f64_v4i64:
405 ; AVX1:       ## %bb.0:
406 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
407 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
408 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm2, %xmm2
409 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm0, %xmm0
410 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
411 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm2
412 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
413 ; AVX1-NEXT:    retq
414 ;
415 ; AVX2-LABEL: load_v4f64_v4i64:
416 ; AVX2:       ## %bb.0:
417 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
418 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm0, %ymm0
419 ; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm2
420 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
421 ; AVX2-NEXT:    retq
422 ;
423 ; AVX512F-LABEL: load_v4f64_v4i64:
424 ; AVX512F:       ## %bb.0:
425 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
426 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
427 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
428 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
429 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
430 ; AVX512F-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
431 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
432 ; AVX512F-NEXT:    retq
433 ;
434 ; AVX512VL-LABEL: load_v4f64_v4i64:
435 ; AVX512VL:       ## %bb.0:
436 ; AVX512VL-NEXT:    vptestnmq %ymm0, %ymm0, %k1
437 ; AVX512VL-NEXT:    vblendmpd (%rdi), %ymm1, %ymm0 {%k1}
438 ; AVX512VL-NEXT:    retq
439   %mask = icmp eq <4 x i64> %trigger, zeroinitializer
440   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 4, <4 x i1> %mask, <4 x double> %dst)
441   ret <4 x double> %res
442 }
443
444 define <8 x double> @load_v8f64_v8i16(<8 x i16> %trigger, <8 x double>* %addr, <8 x double> %dst) {
445 ; SSE2-LABEL: load_v8f64_v8i16:
446 ; SSE2:       ## %bb.0:
447 ; SSE2-NEXT:    pxor %xmm5, %xmm5
448 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
449 ; SSE2-NEXT:    movd %xmm5, %eax
450 ; SSE2-NEXT:    testb $1, %al
451 ; SSE2-NEXT:    je LBB5_2
452 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
453 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
454 ; SSE2-NEXT:  LBB5_2: ## %else
455 ; SSE2-NEXT:    shrl $16, %eax
456 ; SSE2-NEXT:    testb $1, %al
457 ; SSE2-NEXT:    je LBB5_4
458 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
459 ; SSE2-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
460 ; SSE2-NEXT:  LBB5_4: ## %else2
461 ; SSE2-NEXT:    pxor %xmm5, %xmm5
462 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
463 ; SSE2-NEXT:    pextrw $2, %xmm5, %eax
464 ; SSE2-NEXT:    testb $1, %al
465 ; SSE2-NEXT:    je LBB5_6
466 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
467 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
468 ; SSE2-NEXT:  LBB5_6: ## %else5
469 ; SSE2-NEXT:    pextrw $3, %xmm5, %eax
470 ; SSE2-NEXT:    testb $1, %al
471 ; SSE2-NEXT:    je LBB5_8
472 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
473 ; SSE2-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
474 ; SSE2-NEXT:  LBB5_8: ## %else8
475 ; SSE2-NEXT:    pxor %xmm5, %xmm5
476 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
477 ; SSE2-NEXT:    pextrw $4, %xmm5, %eax
478 ; SSE2-NEXT:    testb $1, %al
479 ; SSE2-NEXT:    je LBB5_10
480 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
481 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
482 ; SSE2-NEXT:  LBB5_10: ## %else11
483 ; SSE2-NEXT:    pextrw $5, %xmm5, %eax
484 ; SSE2-NEXT:    testb $1, %al
485 ; SSE2-NEXT:    je LBB5_12
486 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
487 ; SSE2-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
488 ; SSE2-NEXT:  LBB5_12: ## %else14
489 ; SSE2-NEXT:    pxor %xmm5, %xmm5
490 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm0
491 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
492 ; SSE2-NEXT:    testb $1, %al
493 ; SSE2-NEXT:    je LBB5_14
494 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
495 ; SSE2-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
496 ; SSE2-NEXT:  LBB5_14: ## %else17
497 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
498 ; SSE2-NEXT:    testb $1, %al
499 ; SSE2-NEXT:    je LBB5_16
500 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
501 ; SSE2-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
502 ; SSE2-NEXT:  LBB5_16: ## %else20
503 ; SSE2-NEXT:    movapd %xmm1, %xmm0
504 ; SSE2-NEXT:    movapd %xmm2, %xmm1
505 ; SSE2-NEXT:    movapd %xmm3, %xmm2
506 ; SSE2-NEXT:    movapd %xmm4, %xmm3
507 ; SSE2-NEXT:    retq
508 ;
509 ; SSE42-LABEL: load_v8f64_v8i16:
510 ; SSE42:       ## %bb.0:
511 ; SSE42-NEXT:    pxor %xmm5, %xmm5
512 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
513 ; SSE42-NEXT:    pextrb $0, %xmm5, %eax
514 ; SSE42-NEXT:    testb $1, %al
515 ; SSE42-NEXT:    je LBB5_2
516 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
517 ; SSE42-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
518 ; SSE42-NEXT:  LBB5_2: ## %else
519 ; SSE42-NEXT:    pextrb $2, %xmm5, %eax
520 ; SSE42-NEXT:    testb $1, %al
521 ; SSE42-NEXT:    je LBB5_4
522 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
523 ; SSE42-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
524 ; SSE42-NEXT:  LBB5_4: ## %else2
525 ; SSE42-NEXT:    pxor %xmm5, %xmm5
526 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
527 ; SSE42-NEXT:    pextrb $4, %xmm5, %eax
528 ; SSE42-NEXT:    testb $1, %al
529 ; SSE42-NEXT:    je LBB5_6
530 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
531 ; SSE42-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
532 ; SSE42-NEXT:  LBB5_6: ## %else5
533 ; SSE42-NEXT:    pextrb $6, %xmm5, %eax
534 ; SSE42-NEXT:    testb $1, %al
535 ; SSE42-NEXT:    je LBB5_8
536 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
537 ; SSE42-NEXT:    movhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
538 ; SSE42-NEXT:  LBB5_8: ## %else8
539 ; SSE42-NEXT:    pxor %xmm5, %xmm5
540 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
541 ; SSE42-NEXT:    pextrb $8, %xmm5, %eax
542 ; SSE42-NEXT:    testb $1, %al
543 ; SSE42-NEXT:    je LBB5_10
544 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
545 ; SSE42-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
546 ; SSE42-NEXT:  LBB5_10: ## %else11
547 ; SSE42-NEXT:    pextrb $10, %xmm5, %eax
548 ; SSE42-NEXT:    testb $1, %al
549 ; SSE42-NEXT:    je LBB5_12
550 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
551 ; SSE42-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
552 ; SSE42-NEXT:  LBB5_12: ## %else14
553 ; SSE42-NEXT:    pxor %xmm5, %xmm5
554 ; SSE42-NEXT:    pcmpeqw %xmm5, %xmm0
555 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
556 ; SSE42-NEXT:    testb $1, %al
557 ; SSE42-NEXT:    je LBB5_14
558 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
559 ; SSE42-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
560 ; SSE42-NEXT:  LBB5_14: ## %else17
561 ; SSE42-NEXT:    pextrb $14, %xmm0, %eax
562 ; SSE42-NEXT:    testb $1, %al
563 ; SSE42-NEXT:    je LBB5_16
564 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
565 ; SSE42-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
566 ; SSE42-NEXT:  LBB5_16: ## %else20
567 ; SSE42-NEXT:    movapd %xmm1, %xmm0
568 ; SSE42-NEXT:    movapd %xmm2, %xmm1
569 ; SSE42-NEXT:    movapd %xmm3, %xmm2
570 ; SSE42-NEXT:    movapd %xmm4, %xmm3
571 ; SSE42-NEXT:    retq
572 ;
573 ; AVX1-LABEL: load_v8f64_v8i16:
574 ; AVX1:       ## %bb.0:
575 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
576 ; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
577 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4
578 ; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm5
579 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
580 ; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm4
581 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
582 ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
583 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
584 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm3
585 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
586 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
587 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0
588 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3
589 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0
590 ; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1
591 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1
592 ; AVX1-NEXT:    retq
593 ;
594 ; AVX2-LABEL: load_v8f64_v8i16:
595 ; AVX2:       ## %bb.0:
596 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
597 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
598 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4
599 ; AVX2-NEXT:    vpmovsxdq %xmm4, %ymm4
600 ; AVX2-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
601 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
602 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
603 ; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3
604 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0
605 ; AVX2-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1
606 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1
607 ; AVX2-NEXT:    retq
608 ;
609 ; AVX512F-LABEL: load_v8f64_v8i16:
610 ; AVX512F:       ## %bb.0:
611 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
612 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
613 ; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0
614 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1
615 ; AVX512F-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
616 ; AVX512F-NEXT:    retq
617 ;
618 ; AVX512VLDQ-LABEL: load_v8f64_v8i16:
619 ; AVX512VLDQ:       ## %bb.0:
620 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
621 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
622 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm0, %ymm0
623 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k1
624 ; AVX512VLDQ-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
625 ; AVX512VLDQ-NEXT:    retq
626 ;
627 ; AVX512VLBW-LABEL: load_v8f64_v8i16:
628 ; AVX512VLBW:       ## %bb.0:
629 ; AVX512VLBW-NEXT:    vptestnmw %xmm0, %xmm0, %k1
630 ; AVX512VLBW-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
631 ; AVX512VLBW-NEXT:    retq
632   %mask = icmp eq <8 x i16> %trigger, zeroinitializer
633   %res = call <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %addr, i32 4, <8 x i1> %mask, <8 x double> %dst)
634   ret <8 x double> %res
635 }
636
637 define <8 x double> @load_v8f64_v8i64(<8 x i64> %trigger, <8 x double>* %addr, <8 x double> %dst) {
638 ; SSE2-LABEL: load_v8f64_v8i64:
639 ; SSE2:       ## %bb.0:
640 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
641 ; SSE2-NEXT:    pxor %xmm7, %xmm7
642 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm7
643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,0,3,2]
644 ; SSE2-NEXT:    pand %xmm7, %xmm0
645 ; SSE2-NEXT:    movd %xmm0, %eax
646 ; SSE2-NEXT:    testb $1, %al
647 ; SSE2-NEXT:    je LBB6_2
648 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
649 ; SSE2-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
650 ; SSE2-NEXT:  LBB6_2: ## %else
651 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
652 ; SSE2-NEXT:    movd %xmm0, %eax
653 ; SSE2-NEXT:    shrl $16, %eax
654 ; SSE2-NEXT:    testb $1, %al
655 ; SSE2-NEXT:    je LBB6_4
656 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
657 ; SSE2-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
658 ; SSE2-NEXT:  LBB6_4: ## %else2
659 ; SSE2-NEXT:    pxor %xmm0, %xmm0
660 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
661 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]
662 ; SSE2-NEXT:    pand %xmm1, %xmm0
663 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
664 ; SSE2-NEXT:    testb $1, %al
665 ; SSE2-NEXT:    je LBB6_6
666 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
667 ; SSE2-NEXT:    movlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
668 ; SSE2-NEXT:  LBB6_6: ## %else5
669 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
670 ; SSE2-NEXT:    testb $1, %al
671 ; SSE2-NEXT:    je LBB6_8
672 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
673 ; SSE2-NEXT:    movhpd {{.*#+}} xmm5 = xmm5[0],mem[0]
674 ; SSE2-NEXT:  LBB6_8: ## %else8
675 ; SSE2-NEXT:    pxor %xmm0, %xmm0
676 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
677 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
678 ; SSE2-NEXT:    pand %xmm2, %xmm0
679 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
680 ; SSE2-NEXT:    testb $1, %al
681 ; SSE2-NEXT:    je LBB6_10
682 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
683 ; SSE2-NEXT:    movlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
684 ; SSE2-NEXT:  LBB6_10: ## %else11
685 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
686 ; SSE2-NEXT:    testb $1, %al
687 ; SSE2-NEXT:    je LBB6_12
688 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
689 ; SSE2-NEXT:    movhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
690 ; SSE2-NEXT:  LBB6_12: ## %else14
691 ; SSE2-NEXT:    pxor %xmm0, %xmm0
692 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
693 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,0,3,2]
694 ; SSE2-NEXT:    pand %xmm3, %xmm0
695 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
696 ; SSE2-NEXT:    testb $1, %al
697 ; SSE2-NEXT:    je LBB6_14
698 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
699 ; SSE2-NEXT:    movlpd {{.*#+}} xmm8 = mem[0],xmm8[1]
700 ; SSE2-NEXT:  LBB6_14: ## %else17
701 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
702 ; SSE2-NEXT:    testb $1, %al
703 ; SSE2-NEXT:    je LBB6_16
704 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
705 ; SSE2-NEXT:    movhpd {{.*#+}} xmm8 = xmm8[0],mem[0]
706 ; SSE2-NEXT:  LBB6_16: ## %else20
707 ; SSE2-NEXT:    movapd %xmm4, %xmm0
708 ; SSE2-NEXT:    movapd %xmm5, %xmm1
709 ; SSE2-NEXT:    movapd %xmm6, %xmm2
710 ; SSE2-NEXT:    movapd %xmm8, %xmm3
711 ; SSE2-NEXT:    retq
712 ;
713 ; SSE42-LABEL: load_v8f64_v8i64:
714 ; SSE42:       ## %bb.0:
715 ; SSE42-NEXT:    movdqa %xmm7, %xmm8
716 ; SSE42-NEXT:    pxor %xmm7, %xmm7
717 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm7
718 ; SSE42-NEXT:    pextrb $0, %xmm7, %eax
719 ; SSE42-NEXT:    testb $1, %al
720 ; SSE42-NEXT:    je LBB6_2
721 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
722 ; SSE42-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
723 ; SSE42-NEXT:  LBB6_2: ## %else
724 ; SSE42-NEXT:    pextrb $8, %xmm7, %eax
725 ; SSE42-NEXT:    testb $1, %al
726 ; SSE42-NEXT:    je LBB6_4
727 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
728 ; SSE42-NEXT:    movhpd {{.*#+}} xmm4 = xmm4[0],mem[0]
729 ; SSE42-NEXT:  LBB6_4: ## %else2
730 ; SSE42-NEXT:    pxor %xmm0, %xmm0
731 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm1
732 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
733 ; SSE42-NEXT:    testb $1, %al
734 ; SSE42-NEXT:    je LBB6_6
735 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
736 ; SSE42-NEXT:    movlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
737 ; SSE42-NEXT:  LBB6_6: ## %else5
738 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
739 ; SSE42-NEXT:    testb $1, %al
740 ; SSE42-NEXT:    je LBB6_8
741 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
742 ; SSE42-NEXT:    movhpd {{.*#+}} xmm5 = xmm5[0],mem[0]
743 ; SSE42-NEXT:  LBB6_8: ## %else8
744 ; SSE42-NEXT:    pxor %xmm0, %xmm0
745 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm2
746 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
747 ; SSE42-NEXT:    testb $1, %al
748 ; SSE42-NEXT:    je LBB6_10
749 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
750 ; SSE42-NEXT:    movlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
751 ; SSE42-NEXT:  LBB6_10: ## %else11
752 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
753 ; SSE42-NEXT:    testb $1, %al
754 ; SSE42-NEXT:    je LBB6_12
755 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
756 ; SSE42-NEXT:    movhpd {{.*#+}} xmm6 = xmm6[0],mem[0]
757 ; SSE42-NEXT:  LBB6_12: ## %else14
758 ; SSE42-NEXT:    pxor %xmm0, %xmm0
759 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm3
760 ; SSE42-NEXT:    pextrb $0, %xmm3, %eax
761 ; SSE42-NEXT:    testb $1, %al
762 ; SSE42-NEXT:    je LBB6_14
763 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
764 ; SSE42-NEXT:    movlpd {{.*#+}} xmm8 = mem[0],xmm8[1]
765 ; SSE42-NEXT:  LBB6_14: ## %else17
766 ; SSE42-NEXT:    pextrb $8, %xmm3, %eax
767 ; SSE42-NEXT:    testb $1, %al
768 ; SSE42-NEXT:    je LBB6_16
769 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
770 ; SSE42-NEXT:    movhpd {{.*#+}} xmm8 = xmm8[0],mem[0]
771 ; SSE42-NEXT:  LBB6_16: ## %else20
772 ; SSE42-NEXT:    movapd %xmm4, %xmm0
773 ; SSE42-NEXT:    movapd %xmm5, %xmm1
774 ; SSE42-NEXT:    movapd %xmm6, %xmm2
775 ; SSE42-NEXT:    movapd %xmm8, %xmm3
776 ; SSE42-NEXT:    retq
777 ;
778 ; AVX1-LABEL: load_v8f64_v8i64:
779 ; AVX1:       ## %bb.0:
780 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
781 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
782 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm4, %xmm4
783 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm1, %xmm1
784 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
785 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
786 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm4, %xmm4
787 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm0, %xmm0
788 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
789 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4
790 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm4, %ymm2, %ymm0
791 ; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm1, %ymm2
792 ; AVX1-NEXT:    vblendvpd %ymm1, %ymm2, %ymm3, %ymm1
793 ; AVX1-NEXT:    retq
794 ;
795 ; AVX2-LABEL: load_v8f64_v8i64:
796 ; AVX2:       ## %bb.0:
797 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
798 ; AVX2-NEXT:    vpcmpeqq %ymm4, %ymm1, %ymm1
799 ; AVX2-NEXT:    vpcmpeqq %ymm4, %ymm0, %ymm0
800 ; AVX2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4
801 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm4, %ymm2, %ymm0
802 ; AVX2-NEXT:    vmaskmovpd 32(%rdi), %ymm1, %ymm2
803 ; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm3, %ymm1
804 ; AVX2-NEXT:    retq
805 ;
806 ; AVX512-LABEL: load_v8f64_v8i64:
807 ; AVX512:       ## %bb.0:
808 ; AVX512-NEXT:    vptestnmq %zmm0, %zmm0, %k1
809 ; AVX512-NEXT:    vblendmpd (%rdi), %zmm1, %zmm0 {%k1}
810 ; AVX512-NEXT:    retq
811   %mask = icmp eq <8 x i64> %trigger, zeroinitializer
812   %res = call <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %addr, i32 4, <8 x i1> %mask, <8 x double> %dst)
813   ret <8 x double> %res
814 }
815
816 ;
817 ; vXf32
818 ;
819
820 define <2 x float> @load_v2f32_v2i32(<2 x i32> %trigger, <2 x float>* %addr, <2 x float> %dst) {
821 ; SSE2-LABEL: load_v2f32_v2i32:
822 ; SSE2:       ## %bb.0:
823 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
824 ; SSE2-NEXT:    pxor %xmm2, %xmm2
825 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
826 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
827 ; SSE2-NEXT:    pand %xmm2, %xmm0
828 ; SSE2-NEXT:    movd %xmm0, %eax
829 ; SSE2-NEXT:    testb $1, %al
830 ; SSE2-NEXT:    je LBB7_2
831 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
832 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
833 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3]
834 ; SSE2-NEXT:  LBB7_2: ## %else
835 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
836 ; SSE2-NEXT:    testb $1, %al
837 ; SSE2-NEXT:    je LBB7_4
838 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
839 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
840 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
841 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm1[2,3]
842 ; SSE2-NEXT:    movaps %xmm0, %xmm1
843 ; SSE2-NEXT:  LBB7_4: ## %else2
844 ; SSE2-NEXT:    movaps %xmm1, %xmm0
845 ; SSE2-NEXT:    retq
846 ;
847 ; SSE42-LABEL: load_v2f32_v2i32:
848 ; SSE42:       ## %bb.0:
849 ; SSE42-NEXT:    pxor %xmm2, %xmm2
850 ; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
851 ; SSE42-NEXT:    pcmpeqq %xmm2, %xmm0
852 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
853 ; SSE42-NEXT:    testb $1, %al
854 ; SSE42-NEXT:    je LBB7_2
855 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
856 ; SSE42-NEXT:    movd {{.*#+}} xmm2 = mem[0],zero,zero,zero
857 ; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3,4,5,6,7]
858 ; SSE42-NEXT:  LBB7_2: ## %else
859 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
860 ; SSE42-NEXT:    testb $1, %al
861 ; SSE42-NEXT:    je LBB7_4
862 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
863 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]
864 ; SSE42-NEXT:  LBB7_4: ## %else2
865 ; SSE42-NEXT:    movaps %xmm1, %xmm0
866 ; SSE42-NEXT:    retq
867 ;
868 ; AVX1-LABEL: load_v2f32_v2i32:
869 ; AVX1:       ## %bb.0:
870 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
871 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
872 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
873 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
874 ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2
875 ; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
876 ; AVX1-NEXT:    retq
877 ;
878 ; AVX2-LABEL: load_v2f32_v2i32:
879 ; AVX2:       ## %bb.0:
880 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
881 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
882 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
883 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
884 ; AVX2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2
885 ; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
886 ; AVX2-NEXT:    retq
887 ;
888 ; AVX512F-LABEL: load_v2f32_v2i32:
889 ; AVX512F:       ## %bb.0:
890 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
891 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
892 ; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
893 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
894 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
895 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
896 ; AVX512F-NEXT:    vblendmps (%rdi), %zmm1, %zmm0 {%k1}
897 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
898 ; AVX512F-NEXT:    vzeroupper
899 ; AVX512F-NEXT:    retq
900 ;
901 ; AVX512VL-LABEL: load_v2f32_v2i32:
902 ; AVX512VL:       ## %bb.0:
903 ; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
904 ; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
905 ; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1
906 ; AVX512VL-NEXT:    vblendmps (%rdi), %xmm1, %xmm0 {%k1}
907 ; AVX512VL-NEXT:    retq
908   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
909   %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float> %dst)
910   ret <2 x float> %res
911 }
912
913 define <2 x float> @load_v2f32_v2i32_undef(<2 x i32> %trigger, <2 x float>* %addr) {
914 ; SSE2-LABEL: load_v2f32_v2i32_undef:
915 ; SSE2:       ## %bb.0:
916 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
917 ; SSE2-NEXT:    pxor %xmm2, %xmm2
918 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
919 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,0,3,2]
920 ; SSE2-NEXT:    pand %xmm2, %xmm1
921 ; SSE2-NEXT:    movd %xmm1, %eax
922 ; SSE2-NEXT:    testb $1, %al
923 ; SSE2-NEXT:    ## implicit-def: $xmm0
924 ; SSE2-NEXT:    je LBB8_2
925 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
926 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
927 ; SSE2-NEXT:  LBB8_2: ## %else
928 ; SSE2-NEXT:    pextrw $4, %xmm1, %eax
929 ; SSE2-NEXT:    testb $1, %al
930 ; SSE2-NEXT:    je LBB8_4
931 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
932 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
933 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]
934 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm0[2,3]
935 ; SSE2-NEXT:    movaps %xmm1, %xmm0
936 ; SSE2-NEXT:  LBB8_4: ## %else2
937 ; SSE2-NEXT:    retq
938 ;
939 ; SSE42-LABEL: load_v2f32_v2i32_undef:
940 ; SSE42:       ## %bb.0:
941 ; SSE42-NEXT:    movdqa %xmm0, %xmm1
942 ; SSE42-NEXT:    pxor %xmm0, %xmm0
943 ; SSE42-NEXT:    pblendw {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,3],xmm1[4,5],xmm0[6,7]
944 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm1
945 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
946 ; SSE42-NEXT:    testb $1, %al
947 ; SSE42-NEXT:    ## implicit-def: $xmm0
948 ; SSE42-NEXT:    je LBB8_2
949 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
950 ; SSE42-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
951 ; SSE42-NEXT:  LBB8_2: ## %else
952 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
953 ; SSE42-NEXT:    testb $1, %al
954 ; SSE42-NEXT:    je LBB8_4
955 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
956 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
957 ; SSE42-NEXT:  LBB8_4: ## %else2
958 ; SSE42-NEXT:    retq
959 ;
960 ; AVX1-LABEL: load_v2f32_v2i32_undef:
961 ; AVX1:       ## %bb.0:
962 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
963 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
964 ; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
965 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
966 ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm0
967 ; AVX1-NEXT:    retq
968 ;
969 ; AVX2-LABEL: load_v2f32_v2i32_undef:
970 ; AVX2:       ## %bb.0:
971 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
972 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
973 ; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
974 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
975 ; AVX2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm0
976 ; AVX2-NEXT:    retq
977 ;
978 ; AVX512F-LABEL: load_v2f32_v2i32_undef:
979 ; AVX512F:       ## %bb.0:
980 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
981 ; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
982 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
983 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
984 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
985 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1} {z}
986 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
987 ; AVX512F-NEXT:    vzeroupper
988 ; AVX512F-NEXT:    retq
989 ;
990 ; AVX512VL-LABEL: load_v2f32_v2i32_undef:
991 ; AVX512VL:       ## %bb.0:
992 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
993 ; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3]
994 ; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1
995 ; AVX512VL-NEXT:    vmovups (%rdi), %xmm0 {%k1} {z}
996 ; AVX512VL-NEXT:    retq
997   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
998   %res = call <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>* %addr, i32 4, <2 x i1> %mask, <2 x float>undef)
999   ret <2 x float> %res
1000 }
1001
1002 define <4 x float> @load_v4f32_v4i32(<4 x i32> %trigger, <4 x float>* %addr, <4 x float> %dst) {
1003 ; SSE2-LABEL: load_v4f32_v4i32:
1004 ; SSE2:       ## %bb.0:
1005 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1006 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
1007 ; SSE2-NEXT:    movd %xmm2, %eax
1008 ; SSE2-NEXT:    testb $1, %al
1009 ; SSE2-NEXT:    je LBB9_2
1010 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1011 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1012 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
1013 ; SSE2-NEXT:  LBB9_2: ## %else
1014 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
1015 ; SSE2-NEXT:    testb $1, %al
1016 ; SSE2-NEXT:    je LBB9_4
1017 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1018 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1019 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[0,0]
1020 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm1[2,3]
1021 ; SSE2-NEXT:    movaps %xmm2, %xmm1
1022 ; SSE2-NEXT:  LBB9_4: ## %else2
1023 ; SSE2-NEXT:    xorps %xmm2, %xmm2
1024 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
1025 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1026 ; SSE2-NEXT:    testb $1, %al
1027 ; SSE2-NEXT:    je LBB9_6
1028 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1029 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1030 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
1031 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
1032 ; SSE2-NEXT:  LBB9_6: ## %else5
1033 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
1034 ; SSE2-NEXT:    testb $1, %al
1035 ; SSE2-NEXT:    je LBB9_8
1036 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1037 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1038 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[2,0]
1039 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
1040 ; SSE2-NEXT:  LBB9_8: ## %else8
1041 ; SSE2-NEXT:    movaps %xmm1, %xmm0
1042 ; SSE2-NEXT:    retq
1043 ;
1044 ; SSE42-LABEL: load_v4f32_v4i32:
1045 ; SSE42:       ## %bb.0:
1046 ; SSE42-NEXT:    pxor %xmm2, %xmm2
1047 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm2
1048 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1049 ; SSE42-NEXT:    testb $1, %al
1050 ; SSE42-NEXT:    je LBB9_2
1051 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1052 ; SSE42-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1053 ; SSE42-NEXT:    blendps {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
1054 ; SSE42-NEXT:  LBB9_2: ## %else
1055 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1056 ; SSE42-NEXT:    testb $1, %al
1057 ; SSE42-NEXT:    je LBB9_4
1058 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1059 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]
1060 ; SSE42-NEXT:  LBB9_4: ## %else2
1061 ; SSE42-NEXT:    pxor %xmm2, %xmm2
1062 ; SSE42-NEXT:    pcmpeqd %xmm2, %xmm0
1063 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1064 ; SSE42-NEXT:    testb $1, %al
1065 ; SSE42-NEXT:    je LBB9_6
1066 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1067 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]
1068 ; SSE42-NEXT:  LBB9_6: ## %else5
1069 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1070 ; SSE42-NEXT:    testb $1, %al
1071 ; SSE42-NEXT:    je LBB9_8
1072 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
1073 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]
1074 ; SSE42-NEXT:  LBB9_8: ## %else8
1075 ; SSE42-NEXT:    movaps %xmm1, %xmm0
1076 ; SSE42-NEXT:    retq
1077 ;
1078 ; AVX1OR2-LABEL: load_v4f32_v4i32:
1079 ; AVX1OR2:       ## %bb.0:
1080 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1081 ; AVX1OR2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
1082 ; AVX1OR2-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2
1083 ; AVX1OR2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
1084 ; AVX1OR2-NEXT:    retq
1085 ;
1086 ; AVX512F-LABEL: load_v4f32_v4i32:
1087 ; AVX512F:       ## %bb.0:
1088 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
1089 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1090 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
1091 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1092 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1093 ; AVX512F-NEXT:    vblendmps (%rdi), %zmm1, %zmm0 {%k1}
1094 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
1095 ; AVX512F-NEXT:    vzeroupper
1096 ; AVX512F-NEXT:    retq
1097 ;
1098 ; AVX512VL-LABEL: load_v4f32_v4i32:
1099 ; AVX512VL:       ## %bb.0:
1100 ; AVX512VL-NEXT:    vptestnmd %xmm0, %xmm0, %k1
1101 ; AVX512VL-NEXT:    vblendmps (%rdi), %xmm1, %xmm0 {%k1}
1102 ; AVX512VL-NEXT:    retq
1103   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
1104   %res = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %addr, i32 4, <4 x i1> %mask, <4 x float> %dst)
1105   ret <4 x float> %res
1106 }
1107
1108 define <8 x float> @load_v8f32_v8i1_zero(<8 x i1> %mask, <8 x float>* %addr) {
1109 ; SSE2-LABEL: load_v8f32_v8i1_zero:
1110 ; SSE2:       ## %bb.0:
1111 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1112 ; SSE2-NEXT:    movd %xmm0, %eax
1113 ; SSE2-NEXT:    pxor %xmm0, %xmm0
1114 ; SSE2-NEXT:    testb $1, %al
1115 ; SSE2-NEXT:    xorps %xmm1, %xmm1
1116 ; SSE2-NEXT:    je LBB10_2
1117 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1118 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1119 ; SSE2-NEXT:    xorps %xmm1, %xmm1
1120 ; SSE2-NEXT:  LBB10_2: ## %else
1121 ; SSE2-NEXT:    shrl $16, %eax
1122 ; SSE2-NEXT:    testb $1, %al
1123 ; SSE2-NEXT:    je LBB10_4
1124 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1125 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1126 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[0,0]
1127 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm0[2,3]
1128 ; SSE2-NEXT:    movaps %xmm3, %xmm0
1129 ; SSE2-NEXT:  LBB10_4: ## %else2
1130 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
1131 ; SSE2-NEXT:    testb $1, %al
1132 ; SSE2-NEXT:    je LBB10_6
1133 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1134 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1135 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]
1136 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0,2]
1137 ; SSE2-NEXT:  LBB10_6: ## %else5
1138 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
1139 ; SSE2-NEXT:    testb $1, %al
1140 ; SSE2-NEXT:    je LBB10_8
1141 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1142 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1143 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[2,0]
1144 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,0]
1145 ; SSE2-NEXT:  LBB10_8: ## %else8
1146 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
1147 ; SSE2-NEXT:    testb $1, %al
1148 ; SSE2-NEXT:    je LBB10_10
1149 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
1150 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1151 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
1152 ; SSE2-NEXT:  LBB10_10: ## %else11
1153 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
1154 ; SSE2-NEXT:    testb $1, %al
1155 ; SSE2-NEXT:    je LBB10_12
1156 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
1157 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1158 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[0,0]
1159 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm1[2,3]
1160 ; SSE2-NEXT:    movaps %xmm3, %xmm1
1161 ; SSE2-NEXT:  LBB10_12: ## %else14
1162 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
1163 ; SSE2-NEXT:    testb $1, %al
1164 ; SSE2-NEXT:    je LBB10_14
1165 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
1166 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1167 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[3,0]
1168 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0,2]
1169 ; SSE2-NEXT:  LBB10_14: ## %else17
1170 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
1171 ; SSE2-NEXT:    testb $1, %al
1172 ; SSE2-NEXT:    je LBB10_16
1173 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
1174 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1175 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[2,0]
1176 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,0]
1177 ; SSE2-NEXT:  LBB10_16: ## %else20
1178 ; SSE2-NEXT:    retq
1179 ;
1180 ; SSE42-LABEL: load_v8f32_v8i1_zero:
1181 ; SSE42:       ## %bb.0:
1182 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
1183 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1184 ; SSE42-NEXT:    pxor %xmm0, %xmm0
1185 ; SSE42-NEXT:    testb $1, %al
1186 ; SSE42-NEXT:    xorps %xmm1, %xmm1
1187 ; SSE42-NEXT:    je LBB10_2
1188 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1189 ; SSE42-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1190 ; SSE42-NEXT:    xorps %xmm1, %xmm1
1191 ; SSE42-NEXT:  LBB10_2: ## %else
1192 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
1193 ; SSE42-NEXT:    testb $1, %al
1194 ; SSE42-NEXT:    je LBB10_4
1195 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1196 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
1197 ; SSE42-NEXT:  LBB10_4: ## %else2
1198 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
1199 ; SSE42-NEXT:    testb $1, %al
1200 ; SSE42-NEXT:    je LBB10_6
1201 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1202 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
1203 ; SSE42-NEXT:  LBB10_6: ## %else5
1204 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
1205 ; SSE42-NEXT:    testb $1, %al
1206 ; SSE42-NEXT:    je LBB10_8
1207 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
1208 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
1209 ; SSE42-NEXT:  LBB10_8: ## %else8
1210 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1211 ; SSE42-NEXT:    testb $1, %al
1212 ; SSE42-NEXT:    je LBB10_10
1213 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
1214 ; SSE42-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1215 ; SSE42-NEXT:    blendps {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
1216 ; SSE42-NEXT:  LBB10_10: ## %else11
1217 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
1218 ; SSE42-NEXT:    testb $1, %al
1219 ; SSE42-NEXT:    je LBB10_12
1220 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
1221 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]
1222 ; SSE42-NEXT:  LBB10_12: ## %else14
1223 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
1224 ; SSE42-NEXT:    testb $1, %al
1225 ; SSE42-NEXT:    je LBB10_14
1226 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
1227 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]
1228 ; SSE42-NEXT:  LBB10_14: ## %else17
1229 ; SSE42-NEXT:    pextrb $14, %xmm2, %eax
1230 ; SSE42-NEXT:    testb $1, %al
1231 ; SSE42-NEXT:    je LBB10_16
1232 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
1233 ; SSE42-NEXT:    insertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]
1234 ; SSE42-NEXT:  LBB10_16: ## %else20
1235 ; SSE42-NEXT:    retq
1236 ;
1237 ; AVX1-LABEL: load_v8f32_v8i1_zero:
1238 ; AVX1:       ## %bb.0:
1239 ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1240 ; AVX1-NEXT:    vpslld $31, %xmm1, %xmm1
1241 ; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm1
1242 ; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
1243 ; AVX1-NEXT:    vpslld $31, %xmm0, %xmm0
1244 ; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm0
1245 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
1246 ; AVX1-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm0
1247 ; AVX1-NEXT:    retq
1248 ;
1249 ; AVX2-LABEL: load_v8f32_v8i1_zero:
1250 ; AVX2:       ## %bb.0:
1251 ; AVX2-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
1252 ; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0
1253 ; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0
1254 ; AVX2-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm0
1255 ; AVX2-NEXT:    retq
1256 ;
1257 ; AVX512F-LABEL: load_v8f32_v8i1_zero:
1258 ; AVX512F:       ## %bb.0:
1259 ; AVX512F-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
1260 ; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0
1261 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1
1262 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1} {z}
1263 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
1264 ; AVX512F-NEXT:    retq
1265 ;
1266 ; AVX512VLDQ-LABEL: load_v8f32_v8i1_zero:
1267 ; AVX512VLDQ:       ## %bb.0:
1268 ; AVX512VLDQ-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
1269 ; AVX512VLDQ-NEXT:    vpslld $31, %ymm0, %ymm0
1270 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k1
1271 ; AVX512VLDQ-NEXT:    vmovaps (%rdi), %ymm0 {%k1} {z}
1272 ; AVX512VLDQ-NEXT:    retq
1273 ;
1274 ; AVX512VLBW-LABEL: load_v8f32_v8i1_zero:
1275 ; AVX512VLBW:       ## %bb.0:
1276 ; AVX512VLBW-NEXT:    vpsllw $15, %xmm0, %xmm0
1277 ; AVX512VLBW-NEXT:    vpmovw2m %xmm0, %k1
1278 ; AVX512VLBW-NEXT:    vmovaps (%rdi), %ymm0 {%k1} {z}
1279 ; AVX512VLBW-NEXT:    retq
1280   %res = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* %addr, i32 32, <8 x i1> %mask, <8 x float> zeroinitializer)
1281   ret <8 x float> %res
1282 }
1283
1284 define <8 x float> @load_v8f32_v8i32(<8 x i32> %trigger, <8 x float>* %addr, <8 x float> %dst) {
1285 ; SSE2-LABEL: load_v8f32_v8i32:
1286 ; SSE2:       ## %bb.0:
1287 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1288 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
1289 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
1290 ; SSE2-NEXT:    packssdw %xmm0, %xmm5
1291 ; SSE2-NEXT:    movd %xmm5, %eax
1292 ; SSE2-NEXT:    testb $1, %al
1293 ; SSE2-NEXT:    je LBB11_2
1294 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1295 ; SSE2-NEXT:    movss {{.*#+}} xmm5 = mem[0],zero,zero,zero
1296 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm5[0],xmm2[1,2,3]
1297 ; SSE2-NEXT:  LBB11_2: ## %else
1298 ; SSE2-NEXT:    psrlq $16, %xmm4
1299 ; SSE2-NEXT:    movd %xmm4, %eax
1300 ; SSE2-NEXT:    shrl $16, %eax
1301 ; SSE2-NEXT:    testb $1, %al
1302 ; SSE2-NEXT:    je LBB11_4
1303 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1304 ; SSE2-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1305 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,0],xmm2[0,0]
1306 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[2,0],xmm2[2,3]
1307 ; SSE2-NEXT:    movaps %xmm4, %xmm2
1308 ; SSE2-NEXT:  LBB11_4: ## %else2
1309 ; SSE2-NEXT:    xorps %xmm4, %xmm4
1310 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm0
1311 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1312 ; SSE2-NEXT:    testb $1, %al
1313 ; SSE2-NEXT:    je LBB11_6
1314 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1315 ; SSE2-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1316 ; SSE2-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,0],xmm2[3,0]
1317 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm4[0,2]
1318 ; SSE2-NEXT:  LBB11_6: ## %else5
1319 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
1320 ; SSE2-NEXT:    testb $1, %al
1321 ; SSE2-NEXT:    je LBB11_8
1322 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1323 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1324 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm2[2,0]
1325 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,0]
1326 ; SSE2-NEXT:  LBB11_8: ## %else8
1327 ; SSE2-NEXT:    xorps %xmm0, %xmm0
1328 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
1329 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
1330 ; SSE2-NEXT:    testb $1, %al
1331 ; SSE2-NEXT:    je LBB11_10
1332 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
1333 ; SSE2-NEXT:    movss {{.*#+}} xmm4 = mem[0],zero,zero,zero
1334 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = xmm4[0],xmm3[1,2,3]
1335 ; SSE2-NEXT:  LBB11_10: ## %else11
1336 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
1337 ; SSE2-NEXT:    testb $1, %al
1338 ; SSE2-NEXT:    je LBB11_12
1339 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
1340 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1341 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm3[0,0]
1342 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0],xmm3[2,3]
1343 ; SSE2-NEXT:    movaps %xmm0, %xmm3
1344 ; SSE2-NEXT:  LBB11_12: ## %else14
1345 ; SSE2-NEXT:    xorps %xmm0, %xmm0
1346 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
1347 ; SSE2-NEXT:    pextrw $4, %xmm1, %eax
1348 ; SSE2-NEXT:    testb $1, %al
1349 ; SSE2-NEXT:    je LBB11_14
1350 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
1351 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1352 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm3[3,0]
1353 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm0[0,2]
1354 ; SSE2-NEXT:  LBB11_14: ## %else17
1355 ; SSE2-NEXT:    pextrw $6, %xmm1, %eax
1356 ; SSE2-NEXT:    testb $1, %al
1357 ; SSE2-NEXT:    je LBB11_16
1358 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
1359 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1360 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm3[2,0]
1361 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm0[2,0]
1362 ; SSE2-NEXT:  LBB11_16: ## %else20
1363 ; SSE2-NEXT:    movaps %xmm2, %xmm0
1364 ; SSE2-NEXT:    movaps %xmm3, %xmm1
1365 ; SSE2-NEXT:    retq
1366 ;
1367 ; SSE42-LABEL: load_v8f32_v8i32:
1368 ; SSE42:       ## %bb.0:
1369 ; SSE42-NEXT:    pxor %xmm4, %xmm4
1370 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm4
1371 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
1372 ; SSE42-NEXT:    testb $1, %al
1373 ; SSE42-NEXT:    je LBB11_2
1374 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1375 ; SSE42-NEXT:    movss {{.*#+}} xmm5 = mem[0],zero,zero,zero
1376 ; SSE42-NEXT:    blendps {{.*#+}} xmm2 = xmm5[0],xmm2[1,2,3]
1377 ; SSE42-NEXT:  LBB11_2: ## %else
1378 ; SSE42-NEXT:    pextrb $4, %xmm4, %eax
1379 ; SSE42-NEXT:    testb $1, %al
1380 ; SSE42-NEXT:    je LBB11_4
1381 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1382 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
1383 ; SSE42-NEXT:  LBB11_4: ## %else2
1384 ; SSE42-NEXT:    pxor %xmm4, %xmm4
1385 ; SSE42-NEXT:    pcmpeqd %xmm4, %xmm0
1386 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
1387 ; SSE42-NEXT:    testb $1, %al
1388 ; SSE42-NEXT:    je LBB11_6
1389 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1390 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
1391 ; SSE42-NEXT:  LBB11_6: ## %else5
1392 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1393 ; SSE42-NEXT:    testb $1, %al
1394 ; SSE42-NEXT:    je LBB11_8
1395 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
1396 ; SSE42-NEXT:    insertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
1397 ; SSE42-NEXT:  LBB11_8: ## %else8
1398 ; SSE42-NEXT:    pxor %xmm0, %xmm0
1399 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
1400 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
1401 ; SSE42-NEXT:    testb $1, %al
1402 ; SSE42-NEXT:    je LBB11_10
1403 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
1404 ; SSE42-NEXT:    movd {{.*#+}} xmm4 = mem[0],zero,zero,zero
1405 ; SSE42-NEXT:    pblendw {{.*#+}} xmm3 = xmm4[0,1],xmm3[2,3,4,5,6,7]
1406 ; SSE42-NEXT:  LBB11_10: ## %else11
1407 ; SSE42-NEXT:    pextrb $4, %xmm0, %eax
1408 ; SSE42-NEXT:    testb $1, %al
1409 ; SSE42-NEXT:    je LBB11_12
1410 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
1411 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]
1412 ; SSE42-NEXT:  LBB11_12: ## %else14
1413 ; SSE42-NEXT:    pxor %xmm0, %xmm0
1414 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm1
1415 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1416 ; SSE42-NEXT:    testb $1, %al
1417 ; SSE42-NEXT:    je LBB11_14
1418 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
1419 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]
1420 ; SSE42-NEXT:  LBB11_14: ## %else17
1421 ; SSE42-NEXT:    pextrb $12, %xmm1, %eax
1422 ; SSE42-NEXT:    testb $1, %al
1423 ; SSE42-NEXT:    je LBB11_16
1424 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
1425 ; SSE42-NEXT:    insertps {{.*#+}} xmm3 = xmm3[0,1,2],mem[0]
1426 ; SSE42-NEXT:  LBB11_16: ## %else20
1427 ; SSE42-NEXT:    movaps %xmm2, %xmm0
1428 ; SSE42-NEXT:    movaps %xmm3, %xmm1
1429 ; SSE42-NEXT:    retq
1430 ;
1431 ; AVX1-LABEL: load_v8f32_v8i32:
1432 ; AVX1:       ## %bb.0:
1433 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1434 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1435 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm2, %xmm2
1436 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
1437 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1438 ; AVX1-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm2
1439 ; AVX1-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0
1440 ; AVX1-NEXT:    retq
1441 ;
1442 ; AVX2-LABEL: load_v8f32_v8i32:
1443 ; AVX2:       ## %bb.0:
1444 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1445 ; AVX2-NEXT:    vpcmpeqd %ymm2, %ymm0, %ymm0
1446 ; AVX2-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm2
1447 ; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0
1448 ; AVX2-NEXT:    retq
1449 ;
1450 ; AVX512F-LABEL: load_v8f32_v8i32:
1451 ; AVX512F:       ## %bb.0:
1452 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
1453 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
1454 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
1455 ; AVX512F-NEXT:    kshiftlw $8, %k0, %k0
1456 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
1457 ; AVX512F-NEXT:    vblendmps (%rdi), %zmm1, %zmm0 {%k1}
1458 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
1459 ; AVX512F-NEXT:    retq
1460 ;
1461 ; AVX512VL-LABEL: load_v8f32_v8i32:
1462 ; AVX512VL:       ## %bb.0:
1463 ; AVX512VL-NEXT:    vptestnmd %ymm0, %ymm0, %k1
1464 ; AVX512VL-NEXT:    vblendmps (%rdi), %ymm1, %ymm0 {%k1}
1465 ; AVX512VL-NEXT:    retq
1466   %mask = icmp eq <8 x i32> %trigger, zeroinitializer
1467   %res = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* %addr, i32 32, <8 x i1> %mask, <8 x float> %dst)
1468   ret <8 x float> %res
1469 }
1470
1471
1472 ;
1473 ; vXf64
1474 ;
1475
1476 define <1 x i64> @load_v1i64_v1i64(<1 x i64> %trigger, <1 x i64>* %addr, <1 x i64> %dst) {
1477 ; SSE-LABEL: load_v1i64_v1i64:
1478 ; SSE:       ## %bb.0:
1479 ; SSE-NEXT:    testq %rdi, %rdi
1480 ; SSE-NEXT:    jne LBB12_1
1481 ; SSE-NEXT:  ## %bb.2: ## %cond.load
1482 ; SSE-NEXT:    movq (%rsi), %rax
1483 ; SSE-NEXT:    retq
1484 ; SSE-NEXT:  LBB12_1:
1485 ; SSE-NEXT:    movq %rdx, %rax
1486 ; SSE-NEXT:    retq
1487 ;
1488 ; AVX-LABEL: load_v1i64_v1i64:
1489 ; AVX:       ## %bb.0:
1490 ; AVX-NEXT:    testq %rdi, %rdi
1491 ; AVX-NEXT:    jne LBB12_1
1492 ; AVX-NEXT:  ## %bb.2: ## %cond.load
1493 ; AVX-NEXT:    movq (%rsi), %rax
1494 ; AVX-NEXT:    retq
1495 ; AVX-NEXT:  LBB12_1:
1496 ; AVX-NEXT:    movq %rdx, %rax
1497 ; AVX-NEXT:    retq
1498   %mask = icmp eq <1 x i64> %trigger, zeroinitializer
1499   %res = call <1 x i64> @llvm.masked.load.v1i64.p0v1i64(<1 x i64>* %addr, i32 4, <1 x i1> %mask, <1 x i64> %dst)
1500   ret <1 x i64> %res
1501 }
1502
1503 define <2 x i64> @load_v2i64_v2i64(<2 x i64> %trigger, <2 x i64>* %addr, <2 x i64> %dst) {
1504 ; SSE2-LABEL: load_v2i64_v2i64:
1505 ; SSE2:       ## %bb.0:
1506 ; SSE2-NEXT:    pxor %xmm2, %xmm2
1507 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
1508 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
1509 ; SSE2-NEXT:    pand %xmm2, %xmm0
1510 ; SSE2-NEXT:    movd %xmm0, %eax
1511 ; SSE2-NEXT:    testb $1, %al
1512 ; SSE2-NEXT:    je LBB13_2
1513 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1514 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
1515 ; SSE2-NEXT:  LBB13_2: ## %else
1516 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1517 ; SSE2-NEXT:    testb $1, %al
1518 ; SSE2-NEXT:    je LBB13_4
1519 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1520 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1521 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1522 ; SSE2-NEXT:  LBB13_4: ## %else2
1523 ; SSE2-NEXT:    movapd %xmm1, %xmm0
1524 ; SSE2-NEXT:    retq
1525 ;
1526 ; SSE42-LABEL: load_v2i64_v2i64:
1527 ; SSE42:       ## %bb.0:
1528 ; SSE42-NEXT:    pxor %xmm2, %xmm2
1529 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm2
1530 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
1531 ; SSE42-NEXT:    testb $1, %al
1532 ; SSE42-NEXT:    je LBB13_2
1533 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1534 ; SSE42-NEXT:    pinsrq $0, (%rdi), %xmm1
1535 ; SSE42-NEXT:  LBB13_2: ## %else
1536 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
1537 ; SSE42-NEXT:    testb $1, %al
1538 ; SSE42-NEXT:    je LBB13_4
1539 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1540 ; SSE42-NEXT:    pinsrq $1, 8(%rdi), %xmm1
1541 ; SSE42-NEXT:  LBB13_4: ## %else2
1542 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
1543 ; SSE42-NEXT:    retq
1544 ;
1545 ; AVX1-LABEL: load_v2i64_v2i64:
1546 ; AVX1:       ## %bb.0:
1547 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1548 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
1549 ; AVX1-NEXT:    vmaskmovpd (%rdi), %xmm0, %xmm2
1550 ; AVX1-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm0
1551 ; AVX1-NEXT:    retq
1552 ;
1553 ; AVX2-LABEL: load_v2i64_v2i64:
1554 ; AVX2:       ## %bb.0:
1555 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1556 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
1557 ; AVX2-NEXT:    vpmaskmovq (%rdi), %xmm0, %xmm2
1558 ; AVX2-NEXT:    vblendvpd %xmm0, %xmm2, %xmm1, %xmm0
1559 ; AVX2-NEXT:    retq
1560 ;
1561 ; AVX512F-LABEL: load_v2i64_v2i64:
1562 ; AVX512F:       ## %bb.0:
1563 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
1564 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
1565 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
1566 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
1567 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
1568 ; AVX512F-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
1569 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
1570 ; AVX512F-NEXT:    vzeroupper
1571 ; AVX512F-NEXT:    retq
1572 ;
1573 ; AVX512VL-LABEL: load_v2i64_v2i64:
1574 ; AVX512VL:       ## %bb.0:
1575 ; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1
1576 ; AVX512VL-NEXT:    vpblendmq (%rdi), %xmm1, %xmm0 {%k1}
1577 ; AVX512VL-NEXT:    retq
1578   %mask = icmp eq <2 x i64> %trigger, zeroinitializer
1579   %res = call <2 x i64> @llvm.masked.load.v2i64.p0v2i64(<2 x i64>* %addr, i32 4, <2 x i1> %mask, <2 x i64> %dst)
1580   ret <2 x i64> %res
1581 }
1582
1583 define <4 x i64> @load_v4i64_v4i64(<4 x i64> %trigger, <4 x i64>* %addr, <4 x i64> %dst) {
1584 ; SSE2-LABEL: load_v4i64_v4i64:
1585 ; SSE2:       ## %bb.0:
1586 ; SSE2-NEXT:    pxor %xmm4, %xmm4
1587 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm4
1588 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,0,3,2]
1589 ; SSE2-NEXT:    pand %xmm4, %xmm0
1590 ; SSE2-NEXT:    movd %xmm0, %eax
1591 ; SSE2-NEXT:    testb $1, %al
1592 ; SSE2-NEXT:    je LBB14_2
1593 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1594 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
1595 ; SSE2-NEXT:  LBB14_2: ## %else
1596 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1597 ; SSE2-NEXT:    testb $1, %al
1598 ; SSE2-NEXT:    je LBB14_4
1599 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1600 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1601 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm0[0]
1602 ; SSE2-NEXT:  LBB14_4: ## %else2
1603 ; SSE2-NEXT:    xorpd %xmm0, %xmm0
1604 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
1605 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]
1606 ; SSE2-NEXT:    pand %xmm1, %xmm0
1607 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
1608 ; SSE2-NEXT:    testb $1, %al
1609 ; SSE2-NEXT:    je LBB14_6
1610 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1611 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
1612 ; SSE2-NEXT:  LBB14_6: ## %else5
1613 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1614 ; SSE2-NEXT:    testb $1, %al
1615 ; SSE2-NEXT:    je LBB14_8
1616 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1617 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1618 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm0[0]
1619 ; SSE2-NEXT:  LBB14_8: ## %else8
1620 ; SSE2-NEXT:    movapd %xmm2, %xmm0
1621 ; SSE2-NEXT:    movapd %xmm3, %xmm1
1622 ; SSE2-NEXT:    retq
1623 ;
1624 ; SSE42-LABEL: load_v4i64_v4i64:
1625 ; SSE42:       ## %bb.0:
1626 ; SSE42-NEXT:    pxor %xmm4, %xmm4
1627 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm4
1628 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
1629 ; SSE42-NEXT:    testb $1, %al
1630 ; SSE42-NEXT:    je LBB14_2
1631 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1632 ; SSE42-NEXT:    pinsrq $0, (%rdi), %xmm2
1633 ; SSE42-NEXT:  LBB14_2: ## %else
1634 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
1635 ; SSE42-NEXT:    testb $1, %al
1636 ; SSE42-NEXT:    je LBB14_4
1637 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1638 ; SSE42-NEXT:    pinsrq $1, 8(%rdi), %xmm2
1639 ; SSE42-NEXT:  LBB14_4: ## %else2
1640 ; SSE42-NEXT:    pxor %xmm0, %xmm0
1641 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm1
1642 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1643 ; SSE42-NEXT:    testb $1, %al
1644 ; SSE42-NEXT:    je LBB14_6
1645 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1646 ; SSE42-NEXT:    pinsrq $0, 16(%rdi), %xmm3
1647 ; SSE42-NEXT:  LBB14_6: ## %else5
1648 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
1649 ; SSE42-NEXT:    testb $1, %al
1650 ; SSE42-NEXT:    je LBB14_8
1651 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
1652 ; SSE42-NEXT:    pinsrq $1, 24(%rdi), %xmm3
1653 ; SSE42-NEXT:  LBB14_8: ## %else8
1654 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
1655 ; SSE42-NEXT:    movdqa %xmm3, %xmm1
1656 ; SSE42-NEXT:    retq
1657 ;
1658 ; AVX1-LABEL: load_v4i64_v4i64:
1659 ; AVX1:       ## %bb.0:
1660 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1661 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1662 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm2, %xmm2
1663 ; AVX1-NEXT:    vpcmpeqq %xmm3, %xmm0, %xmm0
1664 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1665 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm2
1666 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
1667 ; AVX1-NEXT:    retq
1668 ;
1669 ; AVX2-LABEL: load_v4i64_v4i64:
1670 ; AVX2:       ## %bb.0:
1671 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1672 ; AVX2-NEXT:    vpcmpeqq %ymm2, %ymm0, %ymm0
1673 ; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm2
1674 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm2, %ymm1, %ymm0
1675 ; AVX2-NEXT:    retq
1676 ;
1677 ; AVX512F-LABEL: load_v4i64_v4i64:
1678 ; AVX512F:       ## %bb.0:
1679 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
1680 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
1681 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
1682 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
1683 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
1684 ; AVX512F-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
1685 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
1686 ; AVX512F-NEXT:    retq
1687 ;
1688 ; AVX512VL-LABEL: load_v4i64_v4i64:
1689 ; AVX512VL:       ## %bb.0:
1690 ; AVX512VL-NEXT:    vptestnmq %ymm0, %ymm0, %k1
1691 ; AVX512VL-NEXT:    vpblendmq (%rdi), %ymm1, %ymm0 {%k1}
1692 ; AVX512VL-NEXT:    retq
1693   %mask = icmp eq <4 x i64> %trigger, zeroinitializer
1694   %res = call <4 x i64> @llvm.masked.load.v4i64.p0v4i64(<4 x i64>* %addr, i32 4, <4 x i1> %mask, <4 x i64> %dst)
1695   ret <4 x i64> %res
1696 }
1697
1698 define <8 x i64> @load_v8i64_v8i16(<8 x i16> %trigger, <8 x i64>* %addr, <8 x i64> %dst) {
1699 ; SSE2-LABEL: load_v8i64_v8i16:
1700 ; SSE2:       ## %bb.0:
1701 ; SSE2-NEXT:    pxor %xmm5, %xmm5
1702 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
1703 ; SSE2-NEXT:    movd %xmm5, %eax
1704 ; SSE2-NEXT:    testb $1, %al
1705 ; SSE2-NEXT:    je LBB15_2
1706 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1707 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
1708 ; SSE2-NEXT:  LBB15_2: ## %else
1709 ; SSE2-NEXT:    shrl $16, %eax
1710 ; SSE2-NEXT:    testb $1, %al
1711 ; SSE2-NEXT:    je LBB15_4
1712 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1713 ; SSE2-NEXT:    movsd {{.*#+}} xmm5 = mem[0],zero
1714 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm5[0]
1715 ; SSE2-NEXT:  LBB15_4: ## %else2
1716 ; SSE2-NEXT:    xorpd %xmm5, %xmm5
1717 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
1718 ; SSE2-NEXT:    pextrw $2, %xmm5, %eax
1719 ; SSE2-NEXT:    testb $1, %al
1720 ; SSE2-NEXT:    je LBB15_6
1721 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1722 ; SSE2-NEXT:    movlpd {{.*#+}} xmm2 = mem[0],xmm2[1]
1723 ; SSE2-NEXT:  LBB15_6: ## %else5
1724 ; SSE2-NEXT:    pextrw $3, %xmm5, %eax
1725 ; SSE2-NEXT:    testb $1, %al
1726 ; SSE2-NEXT:    je LBB15_8
1727 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1728 ; SSE2-NEXT:    movsd {{.*#+}} xmm5 = mem[0],zero
1729 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm2 = xmm2[0],xmm5[0]
1730 ; SSE2-NEXT:  LBB15_8: ## %else8
1731 ; SSE2-NEXT:    xorpd %xmm5, %xmm5
1732 ; SSE2-NEXT:    pcmpeqw %xmm0, %xmm5
1733 ; SSE2-NEXT:    pextrw $4, %xmm5, %eax
1734 ; SSE2-NEXT:    testb $1, %al
1735 ; SSE2-NEXT:    je LBB15_10
1736 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
1737 ; SSE2-NEXT:    movlpd {{.*#+}} xmm3 = mem[0],xmm3[1]
1738 ; SSE2-NEXT:  LBB15_10: ## %else11
1739 ; SSE2-NEXT:    pextrw $5, %xmm5, %eax
1740 ; SSE2-NEXT:    testb $1, %al
1741 ; SSE2-NEXT:    je LBB15_12
1742 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
1743 ; SSE2-NEXT:    movsd {{.*#+}} xmm5 = mem[0],zero
1744 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm3 = xmm3[0],xmm5[0]
1745 ; SSE2-NEXT:  LBB15_12: ## %else14
1746 ; SSE2-NEXT:    xorpd %xmm5, %xmm5
1747 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm0
1748 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
1749 ; SSE2-NEXT:    testb $1, %al
1750 ; SSE2-NEXT:    je LBB15_14
1751 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
1752 ; SSE2-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
1753 ; SSE2-NEXT:  LBB15_14: ## %else17
1754 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
1755 ; SSE2-NEXT:    testb $1, %al
1756 ; SSE2-NEXT:    je LBB15_16
1757 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
1758 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1759 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm0[0]
1760 ; SSE2-NEXT:  LBB15_16: ## %else20
1761 ; SSE2-NEXT:    movapd %xmm1, %xmm0
1762 ; SSE2-NEXT:    movapd %xmm2, %xmm1
1763 ; SSE2-NEXT:    movapd %xmm3, %xmm2
1764 ; SSE2-NEXT:    movapd %xmm4, %xmm3
1765 ; SSE2-NEXT:    retq
1766 ;
1767 ; SSE42-LABEL: load_v8i64_v8i16:
1768 ; SSE42:       ## %bb.0:
1769 ; SSE42-NEXT:    pxor %xmm5, %xmm5
1770 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
1771 ; SSE42-NEXT:    pextrb $0, %xmm5, %eax
1772 ; SSE42-NEXT:    testb $1, %al
1773 ; SSE42-NEXT:    je LBB15_2
1774 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1775 ; SSE42-NEXT:    pinsrq $0, (%rdi), %xmm1
1776 ; SSE42-NEXT:  LBB15_2: ## %else
1777 ; SSE42-NEXT:    pextrb $2, %xmm5, %eax
1778 ; SSE42-NEXT:    testb $1, %al
1779 ; SSE42-NEXT:    je LBB15_4
1780 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1781 ; SSE42-NEXT:    pinsrq $1, 8(%rdi), %xmm1
1782 ; SSE42-NEXT:  LBB15_4: ## %else2
1783 ; SSE42-NEXT:    pxor %xmm5, %xmm5
1784 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
1785 ; SSE42-NEXT:    pextrb $4, %xmm5, %eax
1786 ; SSE42-NEXT:    testb $1, %al
1787 ; SSE42-NEXT:    je LBB15_6
1788 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1789 ; SSE42-NEXT:    pinsrq $0, 16(%rdi), %xmm2
1790 ; SSE42-NEXT:  LBB15_6: ## %else5
1791 ; SSE42-NEXT:    pextrb $6, %xmm5, %eax
1792 ; SSE42-NEXT:    testb $1, %al
1793 ; SSE42-NEXT:    je LBB15_8
1794 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
1795 ; SSE42-NEXT:    pinsrq $1, 24(%rdi), %xmm2
1796 ; SSE42-NEXT:  LBB15_8: ## %else8
1797 ; SSE42-NEXT:    pxor %xmm5, %xmm5
1798 ; SSE42-NEXT:    pcmpeqw %xmm0, %xmm5
1799 ; SSE42-NEXT:    pextrb $8, %xmm5, %eax
1800 ; SSE42-NEXT:    testb $1, %al
1801 ; SSE42-NEXT:    je LBB15_10
1802 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
1803 ; SSE42-NEXT:    pinsrq $0, 32(%rdi), %xmm3
1804 ; SSE42-NEXT:  LBB15_10: ## %else11
1805 ; SSE42-NEXT:    pextrb $10, %xmm5, %eax
1806 ; SSE42-NEXT:    testb $1, %al
1807 ; SSE42-NEXT:    je LBB15_12
1808 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
1809 ; SSE42-NEXT:    pinsrq $1, 40(%rdi), %xmm3
1810 ; SSE42-NEXT:  LBB15_12: ## %else14
1811 ; SSE42-NEXT:    pxor %xmm5, %xmm5
1812 ; SSE42-NEXT:    pcmpeqw %xmm5, %xmm0
1813 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
1814 ; SSE42-NEXT:    testb $1, %al
1815 ; SSE42-NEXT:    je LBB15_14
1816 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
1817 ; SSE42-NEXT:    pinsrq $0, 48(%rdi), %xmm4
1818 ; SSE42-NEXT:  LBB15_14: ## %else17
1819 ; SSE42-NEXT:    pextrb $14, %xmm0, %eax
1820 ; SSE42-NEXT:    testb $1, %al
1821 ; SSE42-NEXT:    je LBB15_16
1822 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
1823 ; SSE42-NEXT:    pinsrq $1, 56(%rdi), %xmm4
1824 ; SSE42-NEXT:  LBB15_16: ## %else20
1825 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
1826 ; SSE42-NEXT:    movdqa %xmm2, %xmm1
1827 ; SSE42-NEXT:    movdqa %xmm3, %xmm2
1828 ; SSE42-NEXT:    movdqa %xmm4, %xmm3
1829 ; SSE42-NEXT:    retq
1830 ;
1831 ; AVX1-LABEL: load_v8i64_v8i16:
1832 ; AVX1:       ## %bb.0:
1833 ; AVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1834 ; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1835 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4
1836 ; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm5
1837 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[2,3,0,1]
1838 ; AVX1-NEXT:    vpmovsxdq %xmm4, %xmm4
1839 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
1840 ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1841 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
1842 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm3
1843 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
1844 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
1845 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm3, %ymm0
1846 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm3
1847 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0
1848 ; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm4, %ymm1
1849 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1
1850 ; AVX1-NEXT:    retq
1851 ;
1852 ; AVX2-LABEL: load_v8i64_v8i16:
1853 ; AVX2:       ## %bb.0:
1854 ; AVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
1855 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1856 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm4, %xmm4
1857 ; AVX2-NEXT:    vpmovsxdq %xmm4, %ymm4
1858 ; AVX2-NEXT:    vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
1859 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm0, %xmm0
1860 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
1861 ; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm3
1862 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm3, %ymm1, %ymm0
1863 ; AVX2-NEXT:    vpmaskmovq 32(%rdi), %ymm4, %ymm1
1864 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm2, %ymm1
1865 ; AVX2-NEXT:    retq
1866 ;
1867 ; AVX512F-LABEL: load_v8i64_v8i16:
1868 ; AVX512F:       ## %bb.0:
1869 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1870 ; AVX512F-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1871 ; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0
1872 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1
1873 ; AVX512F-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
1874 ; AVX512F-NEXT:    retq
1875 ;
1876 ; AVX512VLDQ-LABEL: load_v8i64_v8i16:
1877 ; AVX512VLDQ:       ## %bb.0:
1878 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1879 ; AVX512VLDQ-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1880 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm0, %ymm0
1881 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k1
1882 ; AVX512VLDQ-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
1883 ; AVX512VLDQ-NEXT:    retq
1884 ;
1885 ; AVX512VLBW-LABEL: load_v8i64_v8i16:
1886 ; AVX512VLBW:       ## %bb.0:
1887 ; AVX512VLBW-NEXT:    vptestnmw %xmm0, %xmm0, %k1
1888 ; AVX512VLBW-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
1889 ; AVX512VLBW-NEXT:    retq
1890   %mask = icmp eq <8 x i16> %trigger, zeroinitializer
1891   %res = call <8 x i64> @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %addr, i32 4, <8 x i1> %mask, <8 x i64> %dst)
1892   ret <8 x i64> %res
1893 }
1894
1895 define <8 x i64> @load_v8i64_v8i64(<8 x i64> %trigger, <8 x i64>* %addr, <8 x i64> %dst) {
1896 ; SSE2-LABEL: load_v8i64_v8i64:
1897 ; SSE2:       ## %bb.0:
1898 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
1899 ; SSE2-NEXT:    pxor %xmm7, %xmm7
1900 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm7
1901 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,0,3,2]
1902 ; SSE2-NEXT:    pand %xmm7, %xmm0
1903 ; SSE2-NEXT:    movd %xmm0, %eax
1904 ; SSE2-NEXT:    testb $1, %al
1905 ; SSE2-NEXT:    je LBB16_2
1906 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
1907 ; SSE2-NEXT:    movlpd {{.*#+}} xmm4 = mem[0],xmm4[1]
1908 ; SSE2-NEXT:  LBB16_2: ## %else
1909 ; SSE2-NEXT:    psrldq {{.*#+}} xmm0 = xmm0[6,7,8,9,10,11,12,13,14,15],zero,zero,zero,zero,zero,zero
1910 ; SSE2-NEXT:    movd %xmm0, %eax
1911 ; SSE2-NEXT:    shrl $16, %eax
1912 ; SSE2-NEXT:    testb $1, %al
1913 ; SSE2-NEXT:    je LBB16_4
1914 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
1915 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1916 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm4 = xmm4[0],xmm0[0]
1917 ; SSE2-NEXT:  LBB16_4: ## %else2
1918 ; SSE2-NEXT:    xorpd %xmm0, %xmm0
1919 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
1920 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,0,3,2]
1921 ; SSE2-NEXT:    pand %xmm1, %xmm0
1922 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
1923 ; SSE2-NEXT:    testb $1, %al
1924 ; SSE2-NEXT:    je LBB16_6
1925 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
1926 ; SSE2-NEXT:    movlpd {{.*#+}} xmm5 = mem[0],xmm5[1]
1927 ; SSE2-NEXT:  LBB16_6: ## %else5
1928 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1929 ; SSE2-NEXT:    testb $1, %al
1930 ; SSE2-NEXT:    je LBB16_8
1931 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
1932 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1933 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm5 = xmm5[0],xmm0[0]
1934 ; SSE2-NEXT:  LBB16_8: ## %else8
1935 ; SSE2-NEXT:    xorpd %xmm0, %xmm0
1936 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
1937 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
1938 ; SSE2-NEXT:    pand %xmm2, %xmm0
1939 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
1940 ; SSE2-NEXT:    testb $1, %al
1941 ; SSE2-NEXT:    je LBB16_10
1942 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
1943 ; SSE2-NEXT:    movlpd {{.*#+}} xmm6 = mem[0],xmm6[1]
1944 ; SSE2-NEXT:  LBB16_10: ## %else11
1945 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1946 ; SSE2-NEXT:    testb $1, %al
1947 ; SSE2-NEXT:    je LBB16_12
1948 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
1949 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1950 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm6 = xmm6[0],xmm0[0]
1951 ; SSE2-NEXT:  LBB16_12: ## %else14
1952 ; SSE2-NEXT:    xorpd %xmm0, %xmm0
1953 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm3
1954 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,0,3,2]
1955 ; SSE2-NEXT:    pand %xmm3, %xmm0
1956 ; SSE2-NEXT:    pextrw $0, %xmm0, %eax
1957 ; SSE2-NEXT:    testb $1, %al
1958 ; SSE2-NEXT:    je LBB16_14
1959 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
1960 ; SSE2-NEXT:    movlpd {{.*#+}} xmm8 = mem[0],xmm8[1]
1961 ; SSE2-NEXT:  LBB16_14: ## %else17
1962 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
1963 ; SSE2-NEXT:    testb $1, %al
1964 ; SSE2-NEXT:    je LBB16_16
1965 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
1966 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1967 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm8 = xmm8[0],xmm0[0]
1968 ; SSE2-NEXT:  LBB16_16: ## %else20
1969 ; SSE2-NEXT:    movapd %xmm4, %xmm0
1970 ; SSE2-NEXT:    movapd %xmm5, %xmm1
1971 ; SSE2-NEXT:    movapd %xmm6, %xmm2
1972 ; SSE2-NEXT:    movapd %xmm8, %xmm3
1973 ; SSE2-NEXT:    retq
1974 ;
1975 ; SSE42-LABEL: load_v8i64_v8i64:
1976 ; SSE42:       ## %bb.0:
1977 ; SSE42-NEXT:    movdqa %xmm7, %xmm8
1978 ; SSE42-NEXT:    pxor %xmm7, %xmm7
1979 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm7
1980 ; SSE42-NEXT:    pextrb $0, %xmm7, %eax
1981 ; SSE42-NEXT:    testb $1, %al
1982 ; SSE42-NEXT:    je LBB16_2
1983 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
1984 ; SSE42-NEXT:    pinsrq $0, (%rdi), %xmm4
1985 ; SSE42-NEXT:  LBB16_2: ## %else
1986 ; SSE42-NEXT:    pextrb $8, %xmm7, %eax
1987 ; SSE42-NEXT:    testb $1, %al
1988 ; SSE42-NEXT:    je LBB16_4
1989 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
1990 ; SSE42-NEXT:    pinsrq $1, 8(%rdi), %xmm4
1991 ; SSE42-NEXT:  LBB16_4: ## %else2
1992 ; SSE42-NEXT:    pxor %xmm0, %xmm0
1993 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm1
1994 ; SSE42-NEXT:    pextrb $0, %xmm1, %eax
1995 ; SSE42-NEXT:    testb $1, %al
1996 ; SSE42-NEXT:    je LBB16_6
1997 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
1998 ; SSE42-NEXT:    pinsrq $0, 16(%rdi), %xmm5
1999 ; SSE42-NEXT:  LBB16_6: ## %else5
2000 ; SSE42-NEXT:    pextrb $8, %xmm1, %eax
2001 ; SSE42-NEXT:    testb $1, %al
2002 ; SSE42-NEXT:    je LBB16_8
2003 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
2004 ; SSE42-NEXT:    pinsrq $1, 24(%rdi), %xmm5
2005 ; SSE42-NEXT:  LBB16_8: ## %else8
2006 ; SSE42-NEXT:    pxor %xmm0, %xmm0
2007 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm2
2008 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
2009 ; SSE42-NEXT:    testb $1, %al
2010 ; SSE42-NEXT:    je LBB16_10
2011 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
2012 ; SSE42-NEXT:    pinsrq $0, 32(%rdi), %xmm6
2013 ; SSE42-NEXT:  LBB16_10: ## %else11
2014 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
2015 ; SSE42-NEXT:    testb $1, %al
2016 ; SSE42-NEXT:    je LBB16_12
2017 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
2018 ; SSE42-NEXT:    pinsrq $1, 40(%rdi), %xmm6
2019 ; SSE42-NEXT:  LBB16_12: ## %else14
2020 ; SSE42-NEXT:    pxor %xmm0, %xmm0
2021 ; SSE42-NEXT:    pcmpeqq %xmm0, %xmm3
2022 ; SSE42-NEXT:    pextrb $0, %xmm3, %eax
2023 ; SSE42-NEXT:    testb $1, %al
2024 ; SSE42-NEXT:    je LBB16_14
2025 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
2026 ; SSE42-NEXT:    pinsrq $0, 48(%rdi), %xmm8
2027 ; SSE42-NEXT:  LBB16_14: ## %else17
2028 ; SSE42-NEXT:    pextrb $8, %xmm3, %eax
2029 ; SSE42-NEXT:    testb $1, %al
2030 ; SSE42-NEXT:    je LBB16_16
2031 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
2032 ; SSE42-NEXT:    pinsrq $1, 56(%rdi), %xmm8
2033 ; SSE42-NEXT:  LBB16_16: ## %else20
2034 ; SSE42-NEXT:    movdqa %xmm4, %xmm0
2035 ; SSE42-NEXT:    movdqa %xmm5, %xmm1
2036 ; SSE42-NEXT:    movdqa %xmm6, %xmm2
2037 ; SSE42-NEXT:    movdqa %xmm8, %xmm3
2038 ; SSE42-NEXT:    retq
2039 ;
2040 ; AVX1-LABEL: load_v8i64_v8i64:
2041 ; AVX1:       ## %bb.0:
2042 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
2043 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
2044 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm4, %xmm4
2045 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm1, %xmm1
2046 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm1
2047 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
2048 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm4, %xmm4
2049 ; AVX1-NEXT:    vpcmpeqq %xmm5, %xmm0, %xmm0
2050 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
2051 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm4
2052 ; AVX1-NEXT:    vblendvpd %ymm0, %ymm4, %ymm2, %ymm0
2053 ; AVX1-NEXT:    vmaskmovpd 32(%rdi), %ymm1, %ymm2
2054 ; AVX1-NEXT:    vblendvpd %ymm1, %ymm2, %ymm3, %ymm1
2055 ; AVX1-NEXT:    retq
2056 ;
2057 ; AVX2-LABEL: load_v8i64_v8i64:
2058 ; AVX2:       ## %bb.0:
2059 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
2060 ; AVX2-NEXT:    vpcmpeqq %ymm4, %ymm1, %ymm1
2061 ; AVX2-NEXT:    vpcmpeqq %ymm4, %ymm0, %ymm0
2062 ; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm4
2063 ; AVX2-NEXT:    vblendvpd %ymm0, %ymm4, %ymm2, %ymm0
2064 ; AVX2-NEXT:    vpmaskmovq 32(%rdi), %ymm1, %ymm2
2065 ; AVX2-NEXT:    vblendvpd %ymm1, %ymm2, %ymm3, %ymm1
2066 ; AVX2-NEXT:    retq
2067 ;
2068 ; AVX512-LABEL: load_v8i64_v8i64:
2069 ; AVX512:       ## %bb.0:
2070 ; AVX512-NEXT:    vptestnmq %zmm0, %zmm0, %k1
2071 ; AVX512-NEXT:    vpblendmq (%rdi), %zmm1, %zmm0 {%k1}
2072 ; AVX512-NEXT:    retq
2073   %mask = icmp eq <8 x i64> %trigger, zeroinitializer
2074   %res = call <8 x i64> @llvm.masked.load.v8i64.p0v8i64(<8 x i64>* %addr, i32 4, <8 x i1> %mask, <8 x i64> %dst)
2075   ret <8 x i64> %res
2076 }
2077
2078 ;
2079 ; vXi32
2080 ;
2081
2082 define <2 x i32> @load_v2i32_v2i32(<2 x i32> %trigger, <2 x i32>* %addr, <2 x i32> %dst) {
2083 ; SSE2-LABEL: load_v2i32_v2i32:
2084 ; SSE2:       ## %bb.0:
2085 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm0
2086 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2087 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
2088 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,0,3,2]
2089 ; SSE2-NEXT:    pand %xmm2, %xmm0
2090 ; SSE2-NEXT:    movd %xmm0, %eax
2091 ; SSE2-NEXT:    testb $1, %al
2092 ; SSE2-NEXT:    je LBB17_2
2093 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
2094 ; SSE2-NEXT:    movl (%rdi), %eax
2095 ; SSE2-NEXT:    movq %rax, %xmm2
2096 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = xmm2[0],xmm1[1]
2097 ; SSE2-NEXT:  LBB17_2: ## %else
2098 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
2099 ; SSE2-NEXT:    testb $1, %al
2100 ; SSE2-NEXT:    je LBB17_4
2101 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
2102 ; SSE2-NEXT:    movl 4(%rdi), %eax
2103 ; SSE2-NEXT:    movq %rax, %xmm0
2104 ; SSE2-NEXT:    unpcklpd {{.*#+}} xmm1 = xmm1[0],xmm0[0]
2105 ; SSE2-NEXT:  LBB17_4: ## %else2
2106 ; SSE2-NEXT:    movapd %xmm1, %xmm0
2107 ; SSE2-NEXT:    retq
2108 ;
2109 ; SSE42-LABEL: load_v2i32_v2i32:
2110 ; SSE42:       ## %bb.0:
2111 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2112 ; SSE42-NEXT:    pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
2113 ; SSE42-NEXT:    pcmpeqq %xmm2, %xmm0
2114 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
2115 ; SSE42-NEXT:    testb $1, %al
2116 ; SSE42-NEXT:    je LBB17_2
2117 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
2118 ; SSE42-NEXT:    movl (%rdi), %eax
2119 ; SSE42-NEXT:    pinsrq $0, %rax, %xmm1
2120 ; SSE42-NEXT:  LBB17_2: ## %else
2121 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
2122 ; SSE42-NEXT:    testb $1, %al
2123 ; SSE42-NEXT:    je LBB17_4
2124 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
2125 ; SSE42-NEXT:    movl 4(%rdi), %eax
2126 ; SSE42-NEXT:    pinsrq $1, %rax, %xmm1
2127 ; SSE42-NEXT:  LBB17_4: ## %else2
2128 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
2129 ; SSE42-NEXT:    retq
2130 ;
2131 ; AVX1-LABEL: load_v2i32_v2i32:
2132 ; AVX1:       ## %bb.0:
2133 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2134 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
2135 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
2136 ; AVX1-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
2137 ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2
2138 ; AVX1-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]
2139 ; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
2140 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2141 ; AVX1-NEXT:    retq
2142 ;
2143 ; AVX2-LABEL: load_v2i32_v2i32:
2144 ; AVX2:       ## %bb.0:
2145 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2146 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
2147 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
2148 ; AVX2-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,2],zero,zero
2149 ; AVX2-NEXT:    vpmaskmovd (%rdi), %xmm0, %xmm2
2150 ; AVX2-NEXT:    vpermilps {{.*#+}} xmm1 = xmm1[0,2,2,3]
2151 ; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
2152 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2153 ; AVX2-NEXT:    retq
2154 ;
2155 ; AVX512F-LABEL: load_v2i32_v2i32:
2156 ; AVX512F:       ## %bb.0:
2157 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2158 ; AVX512F-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
2159 ; AVX512F-NEXT:    vptestnmq %zmm0, %zmm0, %k0
2160 ; AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
2161 ; AVX512F-NEXT:    kshiftlw $14, %k0, %k0
2162 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
2163 ; AVX512F-NEXT:    vmovdqu32 (%rdi), %zmm0 {%k1}
2164 ; AVX512F-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2165 ; AVX512F-NEXT:    vzeroupper
2166 ; AVX512F-NEXT:    retq
2167 ;
2168 ; AVX512VL-LABEL: load_v2i32_v2i32:
2169 ; AVX512VL:       ## %bb.0:
2170 ; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2171 ; AVX512VL-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3]
2172 ; AVX512VL-NEXT:    vptestnmq %xmm0, %xmm0, %k1
2173 ; AVX512VL-NEXT:    vpshufd {{.*#+}} xmm0 = xmm1[0,2,2,3]
2174 ; AVX512VL-NEXT:    vmovdqu32 (%rdi), %xmm0 {%k1}
2175 ; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
2176 ; AVX512VL-NEXT:    retq
2177   %mask = icmp eq <2 x i32> %trigger, zeroinitializer
2178   %res = call <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>* %addr, i32 4, <2 x i1> %mask, <2 x i32> %dst)
2179   ret <2 x i32> %res
2180 }
2181
2182 define <4 x i32> @load_v4i32_v4i32(<4 x i32> %trigger, <4 x i32>* %addr, <4 x i32> %dst) {
2183 ; SSE2-LABEL: load_v4i32_v4i32:
2184 ; SSE2:       ## %bb.0:
2185 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2186 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm2
2187 ; SSE2-NEXT:    movd %xmm2, %eax
2188 ; SSE2-NEXT:    testb $1, %al
2189 ; SSE2-NEXT:    je LBB18_2
2190 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
2191 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2192 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
2193 ; SSE2-NEXT:  LBB18_2: ## %else
2194 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
2195 ; SSE2-NEXT:    testb $1, %al
2196 ; SSE2-NEXT:    je LBB18_4
2197 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
2198 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
2199 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[0,0]
2200 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm1[2,3]
2201 ; SSE2-NEXT:    movaps %xmm2, %xmm1
2202 ; SSE2-NEXT:  LBB18_4: ## %else2
2203 ; SSE2-NEXT:    xorps %xmm2, %xmm2
2204 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
2205 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
2206 ; SSE2-NEXT:    testb $1, %al
2207 ; SSE2-NEXT:    je LBB18_6
2208 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
2209 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
2210 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[3,0]
2211 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
2212 ; SSE2-NEXT:  LBB18_6: ## %else5
2213 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
2214 ; SSE2-NEXT:    testb $1, %al
2215 ; SSE2-NEXT:    je LBB18_8
2216 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
2217 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2218 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[2,0]
2219 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
2220 ; SSE2-NEXT:  LBB18_8: ## %else8
2221 ; SSE2-NEXT:    movaps %xmm1, %xmm0
2222 ; SSE2-NEXT:    retq
2223 ;
2224 ; SSE42-LABEL: load_v4i32_v4i32:
2225 ; SSE42:       ## %bb.0:
2226 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2227 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm2
2228 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
2229 ; SSE42-NEXT:    testb $1, %al
2230 ; SSE42-NEXT:    je LBB18_2
2231 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
2232 ; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm1
2233 ; SSE42-NEXT:  LBB18_2: ## %else
2234 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
2235 ; SSE42-NEXT:    testb $1, %al
2236 ; SSE42-NEXT:    je LBB18_4
2237 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
2238 ; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm1
2239 ; SSE42-NEXT:  LBB18_4: ## %else2
2240 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2241 ; SSE42-NEXT:    pcmpeqd %xmm2, %xmm0
2242 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
2243 ; SSE42-NEXT:    testb $1, %al
2244 ; SSE42-NEXT:    je LBB18_6
2245 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
2246 ; SSE42-NEXT:    pinsrd $2, 8(%rdi), %xmm1
2247 ; SSE42-NEXT:  LBB18_6: ## %else5
2248 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
2249 ; SSE42-NEXT:    testb $1, %al
2250 ; SSE42-NEXT:    je LBB18_8
2251 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
2252 ; SSE42-NEXT:    pinsrd $3, 12(%rdi), %xmm1
2253 ; SSE42-NEXT:  LBB18_8: ## %else8
2254 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
2255 ; SSE42-NEXT:    retq
2256 ;
2257 ; AVX1-LABEL: load_v4i32_v4i32:
2258 ; AVX1:       ## %bb.0:
2259 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2260 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
2261 ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm0, %xmm2
2262 ; AVX1-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
2263 ; AVX1-NEXT:    retq
2264 ;
2265 ; AVX2-LABEL: load_v4i32_v4i32:
2266 ; AVX2:       ## %bb.0:
2267 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2268 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
2269 ; AVX2-NEXT:    vpmaskmovd (%rdi), %xmm0, %xmm2
2270 ; AVX2-NEXT:    vblendvps %xmm0, %xmm2, %xmm1, %xmm0
2271 ; AVX2-NEXT:    retq
2272 ;
2273 ; AVX512F-LABEL: load_v4i32_v4i32:
2274 ; AVX512F:       ## %bb.0:
2275 ; AVX512F-NEXT:    ## kill: def $xmm1 killed $xmm1 def $zmm1
2276 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
2277 ; AVX512F-NEXT:    vptestnmd %zmm0, %zmm0, %k0
2278 ; AVX512F-NEXT:    kshiftlw $12, %k0, %k0
2279 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
2280 ; AVX512F-NEXT:    vpblendmd (%rdi), %zmm1, %zmm0 {%k1}
2281 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
2282 ; AVX512F-NEXT:    vzeroupper
2283 ; AVX512F-NEXT:    retq
2284 ;
2285 ; AVX512VL-LABEL: load_v4i32_v4i32:
2286 ; AVX512VL:       ## %bb.0:
2287 ; AVX512VL-NEXT:    vptestnmd %xmm0, %xmm0, %k1
2288 ; AVX512VL-NEXT:    vpblendmd (%rdi), %xmm1, %xmm0 {%k1}
2289 ; AVX512VL-NEXT:    retq
2290   %mask = icmp eq <4 x i32> %trigger, zeroinitializer
2291   %res = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %addr, i32 4, <4 x i1> %mask, <4 x i32> %dst)
2292   ret <4 x i32> %res
2293 }
2294
2295 define <8 x i32> @load_v8i32_v8i1(<8 x i1> %mask, <8 x i32>* %addr, <8 x i32> %dst) {
2296 ; SSE2-LABEL: load_v8i32_v8i1:
2297 ; SSE2:       ## %bb.0:
2298 ; SSE2-NEXT:    movd %xmm0, %eax
2299 ; SSE2-NEXT:    testb $1, %al
2300 ; SSE2-NEXT:    je LBB19_2
2301 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
2302 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2303 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
2304 ; SSE2-NEXT:  LBB19_2: ## %else
2305 ; SSE2-NEXT:    shrl $16, %eax
2306 ; SSE2-NEXT:    testb $1, %al
2307 ; SSE2-NEXT:    je LBB19_4
2308 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
2309 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2310 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[0,0]
2311 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm1[2,3]
2312 ; SSE2-NEXT:    movaps %xmm3, %xmm1
2313 ; SSE2-NEXT:  LBB19_4: ## %else2
2314 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
2315 ; SSE2-NEXT:    testb $1, %al
2316 ; SSE2-NEXT:    je LBB19_6
2317 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
2318 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2319 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[3,0]
2320 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0,2]
2321 ; SSE2-NEXT:  LBB19_6: ## %else5
2322 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
2323 ; SSE2-NEXT:    testb $1, %al
2324 ; SSE2-NEXT:    je LBB19_8
2325 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
2326 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2327 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[2,0]
2328 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,0]
2329 ; SSE2-NEXT:  LBB19_8: ## %else8
2330 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
2331 ; SSE2-NEXT:    testb $1, %al
2332 ; SSE2-NEXT:    je LBB19_10
2333 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
2334 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2335 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = xmm3[0],xmm2[1,2,3]
2336 ; SSE2-NEXT:  LBB19_10: ## %else11
2337 ; SSE2-NEXT:    pextrw $5, %xmm0, %eax
2338 ; SSE2-NEXT:    testb $1, %al
2339 ; SSE2-NEXT:    je LBB19_12
2340 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
2341 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2342 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm2[0,0]
2343 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm2[2,3]
2344 ; SSE2-NEXT:    movaps %xmm3, %xmm2
2345 ; SSE2-NEXT:  LBB19_12: ## %else14
2346 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
2347 ; SSE2-NEXT:    testb $1, %al
2348 ; SSE2-NEXT:    je LBB19_14
2349 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
2350 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2351 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm2[3,0]
2352 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm3[0,2]
2353 ; SSE2-NEXT:  LBB19_14: ## %else17
2354 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
2355 ; SSE2-NEXT:    testb $1, %al
2356 ; SSE2-NEXT:    je LBB19_16
2357 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
2358 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2359 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm2[2,0]
2360 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,0]
2361 ; SSE2-NEXT:  LBB19_16: ## %else20
2362 ; SSE2-NEXT:    movaps %xmm1, %xmm0
2363 ; SSE2-NEXT:    movaps %xmm2, %xmm1
2364 ; SSE2-NEXT:    retq
2365 ;
2366 ; SSE42-LABEL: load_v8i32_v8i1:
2367 ; SSE42:       ## %bb.0:
2368 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
2369 ; SSE42-NEXT:    testb $1, %al
2370 ; SSE42-NEXT:    je LBB19_2
2371 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
2372 ; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm1
2373 ; SSE42-NEXT:  LBB19_2: ## %else
2374 ; SSE42-NEXT:    pextrb $2, %xmm0, %eax
2375 ; SSE42-NEXT:    testb $1, %al
2376 ; SSE42-NEXT:    je LBB19_4
2377 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
2378 ; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm1
2379 ; SSE42-NEXT:  LBB19_4: ## %else2
2380 ; SSE42-NEXT:    pextrb $4, %xmm0, %eax
2381 ; SSE42-NEXT:    testb $1, %al
2382 ; SSE42-NEXT:    je LBB19_6
2383 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
2384 ; SSE42-NEXT:    pinsrd $2, 8(%rdi), %xmm1
2385 ; SSE42-NEXT:  LBB19_6: ## %else5
2386 ; SSE42-NEXT:    pextrb $6, %xmm0, %eax
2387 ; SSE42-NEXT:    testb $1, %al
2388 ; SSE42-NEXT:    je LBB19_8
2389 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
2390 ; SSE42-NEXT:    pinsrd $3, 12(%rdi), %xmm1
2391 ; SSE42-NEXT:  LBB19_8: ## %else8
2392 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
2393 ; SSE42-NEXT:    testb $1, %al
2394 ; SSE42-NEXT:    je LBB19_10
2395 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
2396 ; SSE42-NEXT:    pinsrd $0, 16(%rdi), %xmm2
2397 ; SSE42-NEXT:  LBB19_10: ## %else11
2398 ; SSE42-NEXT:    pextrb $10, %xmm0, %eax
2399 ; SSE42-NEXT:    testb $1, %al
2400 ; SSE42-NEXT:    je LBB19_12
2401 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
2402 ; SSE42-NEXT:    pinsrd $1, 20(%rdi), %xmm2
2403 ; SSE42-NEXT:  LBB19_12: ## %else14
2404 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
2405 ; SSE42-NEXT:    testb $1, %al
2406 ; SSE42-NEXT:    je LBB19_14
2407 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
2408 ; SSE42-NEXT:    pinsrd $2, 24(%rdi), %xmm2
2409 ; SSE42-NEXT:  LBB19_14: ## %else17
2410 ; SSE42-NEXT:    pextrb $14, %xmm0, %eax
2411 ; SSE42-NEXT:    testb $1, %al
2412 ; SSE42-NEXT:    je LBB19_16
2413 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
2414 ; SSE42-NEXT:    pinsrd $3, 28(%rdi), %xmm2
2415 ; SSE42-NEXT:  LBB19_16: ## %else20
2416 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
2417 ; SSE42-NEXT:    movdqa %xmm2, %xmm1
2418 ; SSE42-NEXT:    retq
2419 ;
2420 ; AVX1-LABEL: load_v8i32_v8i1:
2421 ; AVX1:       ## %bb.0:
2422 ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2423 ; AVX1-NEXT:    vpslld $31, %xmm2, %xmm2
2424 ; AVX1-NEXT:    vpsrad $31, %xmm2, %xmm2
2425 ; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
2426 ; AVX1-NEXT:    vpslld $31, %xmm0, %xmm0
2427 ; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm0
2428 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
2429 ; AVX1-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm2
2430 ; AVX1-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0
2431 ; AVX1-NEXT:    retq
2432 ;
2433 ; AVX2-LABEL: load_v8i32_v8i1:
2434 ; AVX2:       ## %bb.0:
2435 ; AVX2-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
2436 ; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0
2437 ; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0
2438 ; AVX2-NEXT:    vpmaskmovd (%rdi), %ymm0, %ymm2
2439 ; AVX2-NEXT:    vblendvps %ymm0, %ymm2, %ymm1, %ymm0
2440 ; AVX2-NEXT:    retq
2441 ;
2442 ; AVX512F-LABEL: load_v8i32_v8i1:
2443 ; AVX512F:       ## %bb.0:
2444 ; AVX512F-NEXT:    ## kill: def $ymm1 killed $ymm1 def $zmm1
2445 ; AVX512F-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
2446 ; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0
2447 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1
2448 ; AVX512F-NEXT:    vpblendmd (%rdi), %zmm1, %zmm0 {%k1}
2449 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
2450 ; AVX512F-NEXT:    retq
2451 ;
2452 ; AVX512VLDQ-LABEL: load_v8i32_v8i1:
2453 ; AVX512VLDQ:       ## %bb.0:
2454 ; AVX512VLDQ-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
2455 ; AVX512VLDQ-NEXT:    vpslld $31, %ymm0, %ymm0
2456 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k1
2457 ; AVX512VLDQ-NEXT:    vpblendmd (%rdi), %ymm1, %ymm0 {%k1}
2458 ; AVX512VLDQ-NEXT:    retq
2459 ;
2460 ; AVX512VLBW-LABEL: load_v8i32_v8i1:
2461 ; AVX512VLBW:       ## %bb.0:
2462 ; AVX512VLBW-NEXT:    vpsllw $15, %xmm0, %xmm0
2463 ; AVX512VLBW-NEXT:    vpmovw2m %xmm0, %k1
2464 ; AVX512VLBW-NEXT:    vpblendmd (%rdi), %ymm1, %ymm0 {%k1}
2465 ; AVX512VLBW-NEXT:    retq
2466   %res = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %addr, i32 4, <8 x i1> %mask, <8 x i32> %dst)
2467   ret <8 x i32> %res
2468 }
2469
2470 define <8 x i32> @load_v8i32_v8i1_zero(<8 x i1> %mask, <8 x i32>* %addr) {
2471 ; SSE2-LABEL: load_v8i32_v8i1_zero:
2472 ; SSE2:       ## %bb.0:
2473 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2474 ; SSE2-NEXT:    movd %xmm0, %eax
2475 ; SSE2-NEXT:    pxor %xmm0, %xmm0
2476 ; SSE2-NEXT:    testb $1, %al
2477 ; SSE2-NEXT:    xorps %xmm1, %xmm1
2478 ; SSE2-NEXT:    je LBB20_2
2479 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
2480 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2481 ; SSE2-NEXT:    xorps %xmm1, %xmm1
2482 ; SSE2-NEXT:  LBB20_2: ## %else
2483 ; SSE2-NEXT:    shrl $16, %eax
2484 ; SSE2-NEXT:    testb $1, %al
2485 ; SSE2-NEXT:    je LBB20_4
2486 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
2487 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2488 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[0,0]
2489 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm0[2,3]
2490 ; SSE2-NEXT:    movaps %xmm3, %xmm0
2491 ; SSE2-NEXT:  LBB20_4: ## %else2
2492 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
2493 ; SSE2-NEXT:    testb $1, %al
2494 ; SSE2-NEXT:    je LBB20_6
2495 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
2496 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2497 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]
2498 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[0,2]
2499 ; SSE2-NEXT:  LBB20_6: ## %else5
2500 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
2501 ; SSE2-NEXT:    testb $1, %al
2502 ; SSE2-NEXT:    je LBB20_8
2503 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
2504 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2505 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[2,0]
2506 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,0]
2507 ; SSE2-NEXT:  LBB20_8: ## %else8
2508 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
2509 ; SSE2-NEXT:    testb $1, %al
2510 ; SSE2-NEXT:    je LBB20_10
2511 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
2512 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2513 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = xmm3[0],xmm1[1,2,3]
2514 ; SSE2-NEXT:  LBB20_10: ## %else11
2515 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
2516 ; SSE2-NEXT:    testb $1, %al
2517 ; SSE2-NEXT:    je LBB20_12
2518 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
2519 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2520 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[0,0]
2521 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm1[2,3]
2522 ; SSE2-NEXT:    movaps %xmm3, %xmm1
2523 ; SSE2-NEXT:  LBB20_12: ## %else14
2524 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
2525 ; SSE2-NEXT:    testb $1, %al
2526 ; SSE2-NEXT:    je LBB20_14
2527 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
2528 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
2529 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm1[3,0]
2530 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm3[0,2]
2531 ; SSE2-NEXT:  LBB20_14: ## %else17
2532 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
2533 ; SSE2-NEXT:    testb $1, %al
2534 ; SSE2-NEXT:    je LBB20_16
2535 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
2536 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
2537 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[2,0]
2538 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,0]
2539 ; SSE2-NEXT:  LBB20_16: ## %else20
2540 ; SSE2-NEXT:    retq
2541 ;
2542 ; SSE42-LABEL: load_v8i32_v8i1_zero:
2543 ; SSE42:       ## %bb.0:
2544 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
2545 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
2546 ; SSE42-NEXT:    pxor %xmm0, %xmm0
2547 ; SSE42-NEXT:    testb $1, %al
2548 ; SSE42-NEXT:    pxor %xmm1, %xmm1
2549 ; SSE42-NEXT:    je LBB20_2
2550 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
2551 ; SSE42-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
2552 ; SSE42-NEXT:    pxor %xmm1, %xmm1
2553 ; SSE42-NEXT:  LBB20_2: ## %else
2554 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
2555 ; SSE42-NEXT:    testb $1, %al
2556 ; SSE42-NEXT:    je LBB20_4
2557 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
2558 ; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm0
2559 ; SSE42-NEXT:  LBB20_4: ## %else2
2560 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
2561 ; SSE42-NEXT:    testb $1, %al
2562 ; SSE42-NEXT:    je LBB20_6
2563 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
2564 ; SSE42-NEXT:    pinsrd $2, 8(%rdi), %xmm0
2565 ; SSE42-NEXT:  LBB20_6: ## %else5
2566 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
2567 ; SSE42-NEXT:    testb $1, %al
2568 ; SSE42-NEXT:    je LBB20_8
2569 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
2570 ; SSE42-NEXT:    pinsrd $3, 12(%rdi), %xmm0
2571 ; SSE42-NEXT:  LBB20_8: ## %else8
2572 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
2573 ; SSE42-NEXT:    testb $1, %al
2574 ; SSE42-NEXT:    je LBB20_10
2575 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
2576 ; SSE42-NEXT:    pinsrd $0, 16(%rdi), %xmm1
2577 ; SSE42-NEXT:  LBB20_10: ## %else11
2578 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
2579 ; SSE42-NEXT:    testb $1, %al
2580 ; SSE42-NEXT:    je LBB20_12
2581 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
2582 ; SSE42-NEXT:    pinsrd $1, 20(%rdi), %xmm1
2583 ; SSE42-NEXT:  LBB20_12: ## %else14
2584 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
2585 ; SSE42-NEXT:    testb $1, %al
2586 ; SSE42-NEXT:    je LBB20_14
2587 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
2588 ; SSE42-NEXT:    pinsrd $2, 24(%rdi), %xmm1
2589 ; SSE42-NEXT:  LBB20_14: ## %else17
2590 ; SSE42-NEXT:    pextrb $14, %xmm2, %eax
2591 ; SSE42-NEXT:    testb $1, %al
2592 ; SSE42-NEXT:    je LBB20_16
2593 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
2594 ; SSE42-NEXT:    pinsrd $3, 28(%rdi), %xmm1
2595 ; SSE42-NEXT:  LBB20_16: ## %else20
2596 ; SSE42-NEXT:    retq
2597 ;
2598 ; AVX1-LABEL: load_v8i32_v8i1_zero:
2599 ; AVX1:       ## %bb.0:
2600 ; AVX1-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero
2601 ; AVX1-NEXT:    vpslld $31, %xmm1, %xmm1
2602 ; AVX1-NEXT:    vpsrad $31, %xmm1, %xmm1
2603 ; AVX1-NEXT:    vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]
2604 ; AVX1-NEXT:    vpslld $31, %xmm0, %xmm0
2605 ; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm0
2606 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
2607 ; AVX1-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm0
2608 ; AVX1-NEXT:    retq
2609 ;
2610 ; AVX2-LABEL: load_v8i32_v8i1_zero:
2611 ; AVX2:       ## %bb.0:
2612 ; AVX2-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
2613 ; AVX2-NEXT:    vpslld $31, %ymm0, %ymm0
2614 ; AVX2-NEXT:    vpsrad $31, %ymm0, %ymm0
2615 ; AVX2-NEXT:    vpmaskmovd (%rdi), %ymm0, %ymm0
2616 ; AVX2-NEXT:    retq
2617 ;
2618 ; AVX512F-LABEL: load_v8i32_v8i1_zero:
2619 ; AVX512F:       ## %bb.0:
2620 ; AVX512F-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
2621 ; AVX512F-NEXT:    vpsllq $63, %zmm0, %zmm0
2622 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k1
2623 ; AVX512F-NEXT:    vmovdqu32 (%rdi), %zmm0 {%k1} {z}
2624 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
2625 ; AVX512F-NEXT:    retq
2626 ;
2627 ; AVX512VLDQ-LABEL: load_v8i32_v8i1_zero:
2628 ; AVX512VLDQ:       ## %bb.0:
2629 ; AVX512VLDQ-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
2630 ; AVX512VLDQ-NEXT:    vpslld $31, %ymm0, %ymm0
2631 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k1
2632 ; AVX512VLDQ-NEXT:    vmovdqu32 (%rdi), %ymm0 {%k1} {z}
2633 ; AVX512VLDQ-NEXT:    retq
2634 ;
2635 ; AVX512VLBW-LABEL: load_v8i32_v8i1_zero:
2636 ; AVX512VLBW:       ## %bb.0:
2637 ; AVX512VLBW-NEXT:    vpsllw $15, %xmm0, %xmm0
2638 ; AVX512VLBW-NEXT:    vpmovw2m %xmm0, %k1
2639 ; AVX512VLBW-NEXT:    vmovdqu32 (%rdi), %ymm0 {%k1} {z}
2640 ; AVX512VLBW-NEXT:    retq
2641   %res = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %addr, i32 4, <8 x i1> %mask, <8 x i32> zeroinitializer)
2642   ret <8 x i32> %res
2643 }
2644
2645 ;
2646 ; vXi16
2647 ;
2648
2649 define <8 x i16> @load_v8i16_v8i16(<8 x i16> %trigger, <8 x i16>* %addr, <8 x i16> %dst) {
2650 ; SSE2-LABEL: load_v8i16_v8i16:
2651 ; SSE2:       ## %bb.0:
2652 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2653 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm2
2654 ; SSE2-NEXT:    movd %xmm2, %eax
2655 ; SSE2-NEXT:    testb $1, %al
2656 ; SSE2-NEXT:    je LBB21_2
2657 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
2658 ; SSE2-NEXT:    pinsrw $0, (%rdi), %xmm1
2659 ; SSE2-NEXT:  LBB21_2: ## %else
2660 ; SSE2-NEXT:    shrl $16, %eax
2661 ; SSE2-NEXT:    testb $1, %al
2662 ; SSE2-NEXT:    je LBB21_4
2663 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
2664 ; SSE2-NEXT:    pinsrw $1, 2(%rdi), %xmm1
2665 ; SSE2-NEXT:  LBB21_4: ## %else2
2666 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2667 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm2
2668 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
2669 ; SSE2-NEXT:    testb $1, %al
2670 ; SSE2-NEXT:    je LBB21_6
2671 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
2672 ; SSE2-NEXT:    pinsrw $2, 4(%rdi), %xmm1
2673 ; SSE2-NEXT:  LBB21_6: ## %else5
2674 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
2675 ; SSE2-NEXT:    testb $1, %al
2676 ; SSE2-NEXT:    je LBB21_8
2677 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
2678 ; SSE2-NEXT:    pinsrw $3, 6(%rdi), %xmm1
2679 ; SSE2-NEXT:  LBB21_8: ## %else8
2680 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2681 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm2
2682 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
2683 ; SSE2-NEXT:    testb $1, %al
2684 ; SSE2-NEXT:    je LBB21_10
2685 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
2686 ; SSE2-NEXT:    pinsrw $4, 8(%rdi), %xmm1
2687 ; SSE2-NEXT:  LBB21_10: ## %else11
2688 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
2689 ; SSE2-NEXT:    testb $1, %al
2690 ; SSE2-NEXT:    je LBB21_12
2691 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
2692 ; SSE2-NEXT:    pinsrw $5, 10(%rdi), %xmm1
2693 ; SSE2-NEXT:  LBB21_12: ## %else14
2694 ; SSE2-NEXT:    pxor %xmm2, %xmm2
2695 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm2
2696 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
2697 ; SSE2-NEXT:    testb $1, %al
2698 ; SSE2-NEXT:    je LBB21_14
2699 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
2700 ; SSE2-NEXT:    pinsrw $6, 12(%rdi), %xmm1
2701 ; SSE2-NEXT:  LBB21_14: ## %else17
2702 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
2703 ; SSE2-NEXT:    testb $1, %al
2704 ; SSE2-NEXT:    je LBB21_16
2705 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
2706 ; SSE2-NEXT:    pinsrw $7, 14(%rdi), %xmm1
2707 ; SSE2-NEXT:  LBB21_16: ## %else20
2708 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
2709 ; SSE2-NEXT:    retq
2710 ;
2711 ; SSE42-LABEL: load_v8i16_v8i16:
2712 ; SSE42:       ## %bb.0:
2713 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2714 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm2
2715 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
2716 ; SSE42-NEXT:    testb $1, %al
2717 ; SSE42-NEXT:    je LBB21_2
2718 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
2719 ; SSE42-NEXT:    pinsrw $0, (%rdi), %xmm1
2720 ; SSE42-NEXT:  LBB21_2: ## %else
2721 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
2722 ; SSE42-NEXT:    testb $1, %al
2723 ; SSE42-NEXT:    je LBB21_4
2724 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
2725 ; SSE42-NEXT:    pinsrw $1, 2(%rdi), %xmm1
2726 ; SSE42-NEXT:  LBB21_4: ## %else2
2727 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2728 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm2
2729 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
2730 ; SSE42-NEXT:    testb $1, %al
2731 ; SSE42-NEXT:    je LBB21_6
2732 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
2733 ; SSE42-NEXT:    pinsrw $2, 4(%rdi), %xmm1
2734 ; SSE42-NEXT:  LBB21_6: ## %else5
2735 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
2736 ; SSE42-NEXT:    testb $1, %al
2737 ; SSE42-NEXT:    je LBB21_8
2738 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
2739 ; SSE42-NEXT:    pinsrw $3, 6(%rdi), %xmm1
2740 ; SSE42-NEXT:  LBB21_8: ## %else8
2741 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2742 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm2
2743 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
2744 ; SSE42-NEXT:    testb $1, %al
2745 ; SSE42-NEXT:    je LBB21_10
2746 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
2747 ; SSE42-NEXT:    pinsrw $4, 8(%rdi), %xmm1
2748 ; SSE42-NEXT:  LBB21_10: ## %else11
2749 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
2750 ; SSE42-NEXT:    testb $1, %al
2751 ; SSE42-NEXT:    je LBB21_12
2752 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
2753 ; SSE42-NEXT:    pinsrw $5, 10(%rdi), %xmm1
2754 ; SSE42-NEXT:  LBB21_12: ## %else14
2755 ; SSE42-NEXT:    pxor %xmm2, %xmm2
2756 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm2
2757 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
2758 ; SSE42-NEXT:    testb $1, %al
2759 ; SSE42-NEXT:    je LBB21_14
2760 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
2761 ; SSE42-NEXT:    pinsrw $6, 12(%rdi), %xmm1
2762 ; SSE42-NEXT:  LBB21_14: ## %else17
2763 ; SSE42-NEXT:    pextrb $14, %xmm2, %eax
2764 ; SSE42-NEXT:    testb $1, %al
2765 ; SSE42-NEXT:    je LBB21_16
2766 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
2767 ; SSE42-NEXT:    pinsrw $7, 14(%rdi), %xmm1
2768 ; SSE42-NEXT:  LBB21_16: ## %else20
2769 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
2770 ; SSE42-NEXT:    retq
2771 ;
2772 ; AVX1OR2-LABEL: load_v8i16_v8i16:
2773 ; AVX1OR2:       ## %bb.0:
2774 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2775 ; AVX1OR2-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2776 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
2777 ; AVX1OR2-NEXT:    testb $1, %al
2778 ; AVX1OR2-NEXT:    je LBB21_2
2779 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
2780 ; AVX1OR2-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm1
2781 ; AVX1OR2-NEXT:  LBB21_2: ## %else
2782 ; AVX1OR2-NEXT:    vpextrb $2, %xmm2, %eax
2783 ; AVX1OR2-NEXT:    testb $1, %al
2784 ; AVX1OR2-NEXT:    je LBB21_4
2785 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
2786 ; AVX1OR2-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm1
2787 ; AVX1OR2-NEXT:  LBB21_4: ## %else2
2788 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2789 ; AVX1OR2-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2790 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
2791 ; AVX1OR2-NEXT:    testb $1, %al
2792 ; AVX1OR2-NEXT:    je LBB21_6
2793 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load4
2794 ; AVX1OR2-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm1
2795 ; AVX1OR2-NEXT:  LBB21_6: ## %else5
2796 ; AVX1OR2-NEXT:    vpextrb $6, %xmm2, %eax
2797 ; AVX1OR2-NEXT:    testb $1, %al
2798 ; AVX1OR2-NEXT:    je LBB21_8
2799 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load7
2800 ; AVX1OR2-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm1
2801 ; AVX1OR2-NEXT:  LBB21_8: ## %else8
2802 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2803 ; AVX1OR2-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2804 ; AVX1OR2-NEXT:    vpextrb $8, %xmm2, %eax
2805 ; AVX1OR2-NEXT:    testb $1, %al
2806 ; AVX1OR2-NEXT:    je LBB21_10
2807 ; AVX1OR2-NEXT:  ## %bb.9: ## %cond.load10
2808 ; AVX1OR2-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm1
2809 ; AVX1OR2-NEXT:  LBB21_10: ## %else11
2810 ; AVX1OR2-NEXT:    vpextrb $10, %xmm2, %eax
2811 ; AVX1OR2-NEXT:    testb $1, %al
2812 ; AVX1OR2-NEXT:    je LBB21_12
2813 ; AVX1OR2-NEXT:  ## %bb.11: ## %cond.load13
2814 ; AVX1OR2-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm1
2815 ; AVX1OR2-NEXT:  LBB21_12: ## %else14
2816 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2817 ; AVX1OR2-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm0
2818 ; AVX1OR2-NEXT:    vpextrb $12, %xmm0, %eax
2819 ; AVX1OR2-NEXT:    testb $1, %al
2820 ; AVX1OR2-NEXT:    je LBB21_14
2821 ; AVX1OR2-NEXT:  ## %bb.13: ## %cond.load16
2822 ; AVX1OR2-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm1
2823 ; AVX1OR2-NEXT:  LBB21_14: ## %else17
2824 ; AVX1OR2-NEXT:    vpextrb $14, %xmm0, %eax
2825 ; AVX1OR2-NEXT:    testb $1, %al
2826 ; AVX1OR2-NEXT:    je LBB21_16
2827 ; AVX1OR2-NEXT:  ## %bb.15: ## %cond.load19
2828 ; AVX1OR2-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm1
2829 ; AVX1OR2-NEXT:  LBB21_16: ## %else20
2830 ; AVX1OR2-NEXT:    vmovdqa %xmm1, %xmm0
2831 ; AVX1OR2-NEXT:    retq
2832 ;
2833 ; AVX512F-LABEL: load_v8i16_v8i16:
2834 ; AVX512F:       ## %bb.0:
2835 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2836 ; AVX512F-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2837 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
2838 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
2839 ; AVX512F-NEXT:    kmovw %k0, %eax
2840 ; AVX512F-NEXT:    testb $1, %al
2841 ; AVX512F-NEXT:    je LBB21_2
2842 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
2843 ; AVX512F-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm1
2844 ; AVX512F-NEXT:  LBB21_2: ## %else
2845 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
2846 ; AVX512F-NEXT:    kmovw %k0, %eax
2847 ; AVX512F-NEXT:    testb $1, %al
2848 ; AVX512F-NEXT:    je LBB21_4
2849 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
2850 ; AVX512F-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm1
2851 ; AVX512F-NEXT:  LBB21_4: ## %else2
2852 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2853 ; AVX512F-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2854 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
2855 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
2856 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
2857 ; AVX512F-NEXT:    kmovw %k1, %eax
2858 ; AVX512F-NEXT:    testb $1, %al
2859 ; AVX512F-NEXT:    je LBB21_6
2860 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load4
2861 ; AVX512F-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm1
2862 ; AVX512F-NEXT:  LBB21_6: ## %else5
2863 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
2864 ; AVX512F-NEXT:    kmovw %k0, %eax
2865 ; AVX512F-NEXT:    testb $1, %al
2866 ; AVX512F-NEXT:    je LBB21_8
2867 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load7
2868 ; AVX512F-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm1
2869 ; AVX512F-NEXT:  LBB21_8: ## %else8
2870 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2871 ; AVX512F-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2872 ; AVX512F-NEXT:    vpmovsxwq %xmm2, %zmm2
2873 ; AVX512F-NEXT:    vptestmq %zmm2, %zmm2, %k0
2874 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
2875 ; AVX512F-NEXT:    kmovw %k1, %eax
2876 ; AVX512F-NEXT:    testb $1, %al
2877 ; AVX512F-NEXT:    je LBB21_10
2878 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load10
2879 ; AVX512F-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm1
2880 ; AVX512F-NEXT:  LBB21_10: ## %else11
2881 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
2882 ; AVX512F-NEXT:    kmovw %k0, %eax
2883 ; AVX512F-NEXT:    testb $1, %al
2884 ; AVX512F-NEXT:    je LBB21_12
2885 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load13
2886 ; AVX512F-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm1
2887 ; AVX512F-NEXT:  LBB21_12: ## %else14
2888 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2889 ; AVX512F-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm0
2890 ; AVX512F-NEXT:    vpmovsxwq %xmm0, %zmm0
2891 ; AVX512F-NEXT:    vptestmq %zmm0, %zmm0, %k0
2892 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
2893 ; AVX512F-NEXT:    kmovw %k1, %eax
2894 ; AVX512F-NEXT:    testb $1, %al
2895 ; AVX512F-NEXT:    je LBB21_14
2896 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load16
2897 ; AVX512F-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm1
2898 ; AVX512F-NEXT:  LBB21_14: ## %else17
2899 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
2900 ; AVX512F-NEXT:    kmovw %k0, %eax
2901 ; AVX512F-NEXT:    testb $1, %al
2902 ; AVX512F-NEXT:    je LBB21_16
2903 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load19
2904 ; AVX512F-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm1
2905 ; AVX512F-NEXT:  LBB21_16: ## %else20
2906 ; AVX512F-NEXT:    vmovdqa %xmm1, %xmm0
2907 ; AVX512F-NEXT:    vzeroupper
2908 ; AVX512F-NEXT:    retq
2909 ;
2910 ; AVX512VLDQ-LABEL: load_v8i16_v8i16:
2911 ; AVX512VLDQ:       ## %bb.0:
2912 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2913 ; AVX512VLDQ-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2914 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
2915 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
2916 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2917 ; AVX512VLDQ-NEXT:    testb $1, %al
2918 ; AVX512VLDQ-NEXT:    je LBB21_2
2919 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
2920 ; AVX512VLDQ-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm1
2921 ; AVX512VLDQ-NEXT:  LBB21_2: ## %else
2922 ; AVX512VLDQ-NEXT:    kshiftrb $1, %k0, %k0
2923 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2924 ; AVX512VLDQ-NEXT:    testb $1, %al
2925 ; AVX512VLDQ-NEXT:    je LBB21_4
2926 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
2927 ; AVX512VLDQ-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm1
2928 ; AVX512VLDQ-NEXT:  LBB21_4: ## %else2
2929 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2930 ; AVX512VLDQ-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2931 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
2932 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
2933 ; AVX512VLDQ-NEXT:    kshiftrb $2, %k0, %k1
2934 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
2935 ; AVX512VLDQ-NEXT:    testb $1, %al
2936 ; AVX512VLDQ-NEXT:    je LBB21_6
2937 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load4
2938 ; AVX512VLDQ-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm1
2939 ; AVX512VLDQ-NEXT:  LBB21_6: ## %else5
2940 ; AVX512VLDQ-NEXT:    kshiftrb $3, %k0, %k0
2941 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2942 ; AVX512VLDQ-NEXT:    testb $1, %al
2943 ; AVX512VLDQ-NEXT:    je LBB21_8
2944 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load7
2945 ; AVX512VLDQ-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm1
2946 ; AVX512VLDQ-NEXT:  LBB21_8: ## %else8
2947 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2948 ; AVX512VLDQ-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
2949 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm2, %ymm2
2950 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm2, %k0
2951 ; AVX512VLDQ-NEXT:    kshiftrb $4, %k0, %k1
2952 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
2953 ; AVX512VLDQ-NEXT:    testb $1, %al
2954 ; AVX512VLDQ-NEXT:    je LBB21_10
2955 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load10
2956 ; AVX512VLDQ-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm1
2957 ; AVX512VLDQ-NEXT:  LBB21_10: ## %else11
2958 ; AVX512VLDQ-NEXT:    kshiftrb $5, %k0, %k0
2959 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2960 ; AVX512VLDQ-NEXT:    testb $1, %al
2961 ; AVX512VLDQ-NEXT:    je LBB21_12
2962 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load13
2963 ; AVX512VLDQ-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm1
2964 ; AVX512VLDQ-NEXT:  LBB21_12: ## %else14
2965 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
2966 ; AVX512VLDQ-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm0
2967 ; AVX512VLDQ-NEXT:    vpmovsxwd %xmm0, %ymm0
2968 ; AVX512VLDQ-NEXT:    vpmovd2m %ymm0, %k0
2969 ; AVX512VLDQ-NEXT:    kshiftrb $6, %k0, %k1
2970 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
2971 ; AVX512VLDQ-NEXT:    testb $1, %al
2972 ; AVX512VLDQ-NEXT:    je LBB21_14
2973 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load16
2974 ; AVX512VLDQ-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm1
2975 ; AVX512VLDQ-NEXT:  LBB21_14: ## %else17
2976 ; AVX512VLDQ-NEXT:    kshiftrb $7, %k0, %k0
2977 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
2978 ; AVX512VLDQ-NEXT:    testb $1, %al
2979 ; AVX512VLDQ-NEXT:    je LBB21_16
2980 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load19
2981 ; AVX512VLDQ-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm1
2982 ; AVX512VLDQ-NEXT:  LBB21_16: ## %else20
2983 ; AVX512VLDQ-NEXT:    vmovdqa %xmm1, %xmm0
2984 ; AVX512VLDQ-NEXT:    vzeroupper
2985 ; AVX512VLDQ-NEXT:    retq
2986 ;
2987 ; AVX512VLBW-LABEL: load_v8i16_v8i16:
2988 ; AVX512VLBW:       ## %bb.0:
2989 ; AVX512VLBW-NEXT:    vpmovw2m %xmm0, %k1
2990 ; AVX512VLBW-NEXT:    vpblendmw (%rdi), %xmm1, %xmm0 {%k1}
2991 ; AVX512VLBW-NEXT:    retq
2992   %mask = icmp slt <8 x i16> %trigger, zeroinitializer
2993   %res = call <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>* %addr, i32 4, <8 x i1> %mask, <8 x i16> %dst)
2994   ret <8 x i16> %res
2995 }
2996
2997 define <16 x i16> @load_v16i16_v16i16(<16 x i16> %trigger, <16 x i16>* %addr, <16 x i16> %dst) {
2998 ; SSE2-LABEL: load_v16i16_v16i16:
2999 ; SSE2:       ## %bb.0:
3000 ; SSE2-NEXT:    pxor %xmm4, %xmm4
3001 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm4
3002 ; SSE2-NEXT:    movd %xmm4, %eax
3003 ; SSE2-NEXT:    testb $1, %al
3004 ; SSE2-NEXT:    je LBB22_2
3005 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
3006 ; SSE2-NEXT:    pinsrw $0, (%rdi), %xmm2
3007 ; SSE2-NEXT:  LBB22_2: ## %else
3008 ; SSE2-NEXT:    shrl $16, %eax
3009 ; SSE2-NEXT:    testb $1, %al
3010 ; SSE2-NEXT:    je LBB22_4
3011 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
3012 ; SSE2-NEXT:    pinsrw $1, 2(%rdi), %xmm2
3013 ; SSE2-NEXT:  LBB22_4: ## %else2
3014 ; SSE2-NEXT:    pxor %xmm4, %xmm4
3015 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm4
3016 ; SSE2-NEXT:    pextrw $2, %xmm4, %eax
3017 ; SSE2-NEXT:    testb $1, %al
3018 ; SSE2-NEXT:    je LBB22_6
3019 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
3020 ; SSE2-NEXT:    pinsrw $2, 4(%rdi), %xmm2
3021 ; SSE2-NEXT:  LBB22_6: ## %else5
3022 ; SSE2-NEXT:    pextrw $3, %xmm4, %eax
3023 ; SSE2-NEXT:    testb $1, %al
3024 ; SSE2-NEXT:    je LBB22_8
3025 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
3026 ; SSE2-NEXT:    pinsrw $3, 6(%rdi), %xmm2
3027 ; SSE2-NEXT:  LBB22_8: ## %else8
3028 ; SSE2-NEXT:    pxor %xmm4, %xmm4
3029 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm4
3030 ; SSE2-NEXT:    pextrw $4, %xmm4, %eax
3031 ; SSE2-NEXT:    testb $1, %al
3032 ; SSE2-NEXT:    je LBB22_10
3033 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
3034 ; SSE2-NEXT:    pinsrw $4, 8(%rdi), %xmm2
3035 ; SSE2-NEXT:  LBB22_10: ## %else11
3036 ; SSE2-NEXT:    pextrw $5, %xmm4, %eax
3037 ; SSE2-NEXT:    testb $1, %al
3038 ; SSE2-NEXT:    je LBB22_12
3039 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
3040 ; SSE2-NEXT:    pinsrw $5, 10(%rdi), %xmm2
3041 ; SSE2-NEXT:  LBB22_12: ## %else14
3042 ; SSE2-NEXT:    pxor %xmm4, %xmm4
3043 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm4
3044 ; SSE2-NEXT:    pextrw $6, %xmm4, %eax
3045 ; SSE2-NEXT:    testb $1, %al
3046 ; SSE2-NEXT:    je LBB22_14
3047 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
3048 ; SSE2-NEXT:    pinsrw $6, 12(%rdi), %xmm2
3049 ; SSE2-NEXT:  LBB22_14: ## %else17
3050 ; SSE2-NEXT:    pextrw $7, %xmm4, %eax
3051 ; SSE2-NEXT:    testb $1, %al
3052 ; SSE2-NEXT:    je LBB22_16
3053 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
3054 ; SSE2-NEXT:    pinsrw $7, 14(%rdi), %xmm2
3055 ; SSE2-NEXT:  LBB22_16: ## %else20
3056 ; SSE2-NEXT:    pxor %xmm0, %xmm0
3057 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0
3058 ; SSE2-NEXT:    movd %xmm0, %eax
3059 ; SSE2-NEXT:    testb $1, %al
3060 ; SSE2-NEXT:    je LBB22_18
3061 ; SSE2-NEXT:  ## %bb.17: ## %cond.load22
3062 ; SSE2-NEXT:    pinsrw $0, 16(%rdi), %xmm3
3063 ; SSE2-NEXT:  LBB22_18: ## %else23
3064 ; SSE2-NEXT:    shrl $16, %eax
3065 ; SSE2-NEXT:    testb $1, %al
3066 ; SSE2-NEXT:    je LBB22_20
3067 ; SSE2-NEXT:  ## %bb.19: ## %cond.load25
3068 ; SSE2-NEXT:    pinsrw $1, 18(%rdi), %xmm3
3069 ; SSE2-NEXT:  LBB22_20: ## %else26
3070 ; SSE2-NEXT:    pxor %xmm0, %xmm0
3071 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0
3072 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
3073 ; SSE2-NEXT:    testb $1, %al
3074 ; SSE2-NEXT:    je LBB22_22
3075 ; SSE2-NEXT:  ## %bb.21: ## %cond.load28
3076 ; SSE2-NEXT:    pinsrw $2, 20(%rdi), %xmm3
3077 ; SSE2-NEXT:  LBB22_22: ## %else29
3078 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
3079 ; SSE2-NEXT:    testb $1, %al
3080 ; SSE2-NEXT:    je LBB22_24
3081 ; SSE2-NEXT:  ## %bb.23: ## %cond.load31
3082 ; SSE2-NEXT:    pinsrw $3, 22(%rdi), %xmm3
3083 ; SSE2-NEXT:  LBB22_24: ## %else32
3084 ; SSE2-NEXT:    pxor %xmm0, %xmm0
3085 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0
3086 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
3087 ; SSE2-NEXT:    testb $1, %al
3088 ; SSE2-NEXT:    je LBB22_26
3089 ; SSE2-NEXT:  ## %bb.25: ## %cond.load34
3090 ; SSE2-NEXT:    pinsrw $4, 24(%rdi), %xmm3
3091 ; SSE2-NEXT:  LBB22_26: ## %else35
3092 ; SSE2-NEXT:    pextrw $5, %xmm0, %eax
3093 ; SSE2-NEXT:    testb $1, %al
3094 ; SSE2-NEXT:    je LBB22_28
3095 ; SSE2-NEXT:  ## %bb.27: ## %cond.load37
3096 ; SSE2-NEXT:    pinsrw $5, 26(%rdi), %xmm3
3097 ; SSE2-NEXT:  LBB22_28: ## %else38
3098 ; SSE2-NEXT:    pxor %xmm0, %xmm0
3099 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0
3100 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
3101 ; SSE2-NEXT:    testb $1, %al
3102 ; SSE2-NEXT:    je LBB22_30
3103 ; SSE2-NEXT:  ## %bb.29: ## %cond.load40
3104 ; SSE2-NEXT:    pinsrw $6, 28(%rdi), %xmm3
3105 ; SSE2-NEXT:  LBB22_30: ## %else41
3106 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
3107 ; SSE2-NEXT:    testb $1, %al
3108 ; SSE2-NEXT:    je LBB22_32
3109 ; SSE2-NEXT:  ## %bb.31: ## %cond.load43
3110 ; SSE2-NEXT:    pinsrw $7, 30(%rdi), %xmm3
3111 ; SSE2-NEXT:  LBB22_32: ## %else44
3112 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
3113 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
3114 ; SSE2-NEXT:    retq
3115 ;
3116 ; SSE42-LABEL: load_v16i16_v16i16:
3117 ; SSE42:       ## %bb.0:
3118 ; SSE42-NEXT:    pxor %xmm4, %xmm4
3119 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm4
3120 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
3121 ; SSE42-NEXT:    testb $1, %al
3122 ; SSE42-NEXT:    je LBB22_2
3123 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
3124 ; SSE42-NEXT:    pinsrw $0, (%rdi), %xmm2
3125 ; SSE42-NEXT:  LBB22_2: ## %else
3126 ; SSE42-NEXT:    pextrb $2, %xmm4, %eax
3127 ; SSE42-NEXT:    testb $1, %al
3128 ; SSE42-NEXT:    je LBB22_4
3129 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
3130 ; SSE42-NEXT:    pinsrw $1, 2(%rdi), %xmm2
3131 ; SSE42-NEXT:  LBB22_4: ## %else2
3132 ; SSE42-NEXT:    pxor %xmm4, %xmm4
3133 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm4
3134 ; SSE42-NEXT:    pextrb $4, %xmm4, %eax
3135 ; SSE42-NEXT:    testb $1, %al
3136 ; SSE42-NEXT:    je LBB22_6
3137 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
3138 ; SSE42-NEXT:    pinsrw $2, 4(%rdi), %xmm2
3139 ; SSE42-NEXT:  LBB22_6: ## %else5
3140 ; SSE42-NEXT:    pextrb $6, %xmm4, %eax
3141 ; SSE42-NEXT:    testb $1, %al
3142 ; SSE42-NEXT:    je LBB22_8
3143 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
3144 ; SSE42-NEXT:    pinsrw $3, 6(%rdi), %xmm2
3145 ; SSE42-NEXT:  LBB22_8: ## %else8
3146 ; SSE42-NEXT:    pxor %xmm4, %xmm4
3147 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm4
3148 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
3149 ; SSE42-NEXT:    testb $1, %al
3150 ; SSE42-NEXT:    je LBB22_10
3151 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
3152 ; SSE42-NEXT:    pinsrw $4, 8(%rdi), %xmm2
3153 ; SSE42-NEXT:  LBB22_10: ## %else11
3154 ; SSE42-NEXT:    pextrb $10, %xmm4, %eax
3155 ; SSE42-NEXT:    testb $1, %al
3156 ; SSE42-NEXT:    je LBB22_12
3157 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
3158 ; SSE42-NEXT:    pinsrw $5, 10(%rdi), %xmm2
3159 ; SSE42-NEXT:  LBB22_12: ## %else14
3160 ; SSE42-NEXT:    pxor %xmm4, %xmm4
3161 ; SSE42-NEXT:    pcmpgtw %xmm0, %xmm4
3162 ; SSE42-NEXT:    pextrb $12, %xmm4, %eax
3163 ; SSE42-NEXT:    testb $1, %al
3164 ; SSE42-NEXT:    je LBB22_14
3165 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
3166 ; SSE42-NEXT:    pinsrw $6, 12(%rdi), %xmm2
3167 ; SSE42-NEXT:  LBB22_14: ## %else17
3168 ; SSE42-NEXT:    pextrb $14, %xmm4, %eax
3169 ; SSE42-NEXT:    testb $1, %al
3170 ; SSE42-NEXT:    je LBB22_16
3171 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
3172 ; SSE42-NEXT:    pinsrw $7, 14(%rdi), %xmm2
3173 ; SSE42-NEXT:  LBB22_16: ## %else20
3174 ; SSE42-NEXT:    pxor %xmm0, %xmm0
3175 ; SSE42-NEXT:    pcmpgtw %xmm1, %xmm0
3176 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
3177 ; SSE42-NEXT:    testb $1, %al
3178 ; SSE42-NEXT:    je LBB22_18
3179 ; SSE42-NEXT:  ## %bb.17: ## %cond.load22
3180 ; SSE42-NEXT:    pinsrw $0, 16(%rdi), %xmm3
3181 ; SSE42-NEXT:  LBB22_18: ## %else23
3182 ; SSE42-NEXT:    pextrb $2, %xmm0, %eax
3183 ; SSE42-NEXT:    testb $1, %al
3184 ; SSE42-NEXT:    je LBB22_20
3185 ; SSE42-NEXT:  ## %bb.19: ## %cond.load25
3186 ; SSE42-NEXT:    pinsrw $1, 18(%rdi), %xmm3
3187 ; SSE42-NEXT:  LBB22_20: ## %else26
3188 ; SSE42-NEXT:    pxor %xmm0, %xmm0
3189 ; SSE42-NEXT:    pcmpgtw %xmm1, %xmm0
3190 ; SSE42-NEXT:    pextrb $4, %xmm0, %eax
3191 ; SSE42-NEXT:    testb $1, %al
3192 ; SSE42-NEXT:    je LBB22_22
3193 ; SSE42-NEXT:  ## %bb.21: ## %cond.load28
3194 ; SSE42-NEXT:    pinsrw $2, 20(%rdi), %xmm3
3195 ; SSE42-NEXT:  LBB22_22: ## %else29
3196 ; SSE42-NEXT:    pextrb $6, %xmm0, %eax
3197 ; SSE42-NEXT:    testb $1, %al
3198 ; SSE42-NEXT:    je LBB22_24
3199 ; SSE42-NEXT:  ## %bb.23: ## %cond.load31
3200 ; SSE42-NEXT:    pinsrw $3, 22(%rdi), %xmm3
3201 ; SSE42-NEXT:  LBB22_24: ## %else32
3202 ; SSE42-NEXT:    pxor %xmm0, %xmm0
3203 ; SSE42-NEXT:    pcmpgtw %xmm1, %xmm0
3204 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
3205 ; SSE42-NEXT:    testb $1, %al
3206 ; SSE42-NEXT:    je LBB22_26
3207 ; SSE42-NEXT:  ## %bb.25: ## %cond.load34
3208 ; SSE42-NEXT:    pinsrw $4, 24(%rdi), %xmm3
3209 ; SSE42-NEXT:  LBB22_26: ## %else35
3210 ; SSE42-NEXT:    pextrb $10, %xmm0, %eax
3211 ; SSE42-NEXT:    testb $1, %al
3212 ; SSE42-NEXT:    je LBB22_28
3213 ; SSE42-NEXT:  ## %bb.27: ## %cond.load37
3214 ; SSE42-NEXT:    pinsrw $5, 26(%rdi), %xmm3
3215 ; SSE42-NEXT:  LBB22_28: ## %else38
3216 ; SSE42-NEXT:    pxor %xmm0, %xmm0
3217 ; SSE42-NEXT:    pcmpgtw %xmm1, %xmm0
3218 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
3219 ; SSE42-NEXT:    testb $1, %al
3220 ; SSE42-NEXT:    je LBB22_30
3221 ; SSE42-NEXT:  ## %bb.29: ## %cond.load40
3222 ; SSE42-NEXT:    pinsrw $6, 28(%rdi), %xmm3
3223 ; SSE42-NEXT:  LBB22_30: ## %else41
3224 ; SSE42-NEXT:    pextrb $14, %xmm0, %eax
3225 ; SSE42-NEXT:    testb $1, %al
3226 ; SSE42-NEXT:    je LBB22_32
3227 ; SSE42-NEXT:  ## %bb.31: ## %cond.load43
3228 ; SSE42-NEXT:    pinsrw $7, 30(%rdi), %xmm3
3229 ; SSE42-NEXT:  LBB22_32: ## %else44
3230 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
3231 ; SSE42-NEXT:    movdqa %xmm3, %xmm1
3232 ; SSE42-NEXT:    retq
3233 ;
3234 ; AVX1-LABEL: load_v16i16_v16i16:
3235 ; AVX1:       ## %bb.0:
3236 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3237 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm3
3238 ; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
3239 ; AVX1-NEXT:    testb $1, %al
3240 ; AVX1-NEXT:    je LBB22_2
3241 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
3242 ; AVX1-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm3
3243 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3244 ; AVX1-NEXT:  LBB22_2: ## %else
3245 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3246 ; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
3247 ; AVX1-NEXT:    testb $1, %al
3248 ; AVX1-NEXT:    je LBB22_4
3249 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
3250 ; AVX1-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm2
3251 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3252 ; AVX1-NEXT:  LBB22_4: ## %else2
3253 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3254 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm3
3255 ; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
3256 ; AVX1-NEXT:    testb $1, %al
3257 ; AVX1-NEXT:    je LBB22_6
3258 ; AVX1-NEXT:  ## %bb.5: ## %cond.load4
3259 ; AVX1-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm3
3260 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3261 ; AVX1-NEXT:  LBB22_6: ## %else5
3262 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3263 ; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
3264 ; AVX1-NEXT:    testb $1, %al
3265 ; AVX1-NEXT:    je LBB22_8
3266 ; AVX1-NEXT:  ## %bb.7: ## %cond.load7
3267 ; AVX1-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm2
3268 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3269 ; AVX1-NEXT:  LBB22_8: ## %else8
3270 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3271 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm3
3272 ; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
3273 ; AVX1-NEXT:    testb $1, %al
3274 ; AVX1-NEXT:    je LBB22_10
3275 ; AVX1-NEXT:  ## %bb.9: ## %cond.load10
3276 ; AVX1-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm3
3277 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3278 ; AVX1-NEXT:  LBB22_10: ## %else11
3279 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3280 ; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
3281 ; AVX1-NEXT:    testb $1, %al
3282 ; AVX1-NEXT:    je LBB22_12
3283 ; AVX1-NEXT:  ## %bb.11: ## %cond.load13
3284 ; AVX1-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm2
3285 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3286 ; AVX1-NEXT:  LBB22_12: ## %else14
3287 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3288 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm3
3289 ; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
3290 ; AVX1-NEXT:    testb $1, %al
3291 ; AVX1-NEXT:    je LBB22_14
3292 ; AVX1-NEXT:  ## %bb.13: ## %cond.load16
3293 ; AVX1-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm3
3294 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3295 ; AVX1-NEXT:  LBB22_14: ## %else17
3296 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3297 ; AVX1-NEXT:    vpextrb $14, %xmm2, %eax
3298 ; AVX1-NEXT:    testb $1, %al
3299 ; AVX1-NEXT:    je LBB22_16
3300 ; AVX1-NEXT:  ## %bb.15: ## %cond.load19
3301 ; AVX1-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm2
3302 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3303 ; AVX1-NEXT:  LBB22_16: ## %else20
3304 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
3305 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3306 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3307 ; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
3308 ; AVX1-NEXT:    testb $1, %al
3309 ; AVX1-NEXT:    je LBB22_18
3310 ; AVX1-NEXT:  ## %bb.17: ## %cond.load22
3311 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3312 ; AVX1-NEXT:    vpinsrw $0, 16(%rdi), %xmm3, %xmm3
3313 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
3314 ; AVX1-NEXT:  LBB22_18: ## %else23
3315 ; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
3316 ; AVX1-NEXT:    testb $1, %al
3317 ; AVX1-NEXT:    je LBB22_20
3318 ; AVX1-NEXT:  ## %bb.19: ## %cond.load25
3319 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3320 ; AVX1-NEXT:    vpinsrw $1, 18(%rdi), %xmm2, %xmm2
3321 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3322 ; AVX1-NEXT:  LBB22_20: ## %else26
3323 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3324 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3325 ; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
3326 ; AVX1-NEXT:    testb $1, %al
3327 ; AVX1-NEXT:    je LBB22_22
3328 ; AVX1-NEXT:  ## %bb.21: ## %cond.load28
3329 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3330 ; AVX1-NEXT:    vpinsrw $2, 20(%rdi), %xmm3, %xmm3
3331 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
3332 ; AVX1-NEXT:  LBB22_22: ## %else29
3333 ; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
3334 ; AVX1-NEXT:    testb $1, %al
3335 ; AVX1-NEXT:    je LBB22_24
3336 ; AVX1-NEXT:  ## %bb.23: ## %cond.load31
3337 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3338 ; AVX1-NEXT:    vpinsrw $3, 22(%rdi), %xmm2, %xmm2
3339 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3340 ; AVX1-NEXT:  LBB22_24: ## %else32
3341 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3342 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm2
3343 ; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
3344 ; AVX1-NEXT:    testb $1, %al
3345 ; AVX1-NEXT:    je LBB22_26
3346 ; AVX1-NEXT:  ## %bb.25: ## %cond.load34
3347 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
3348 ; AVX1-NEXT:    vpinsrw $4, 24(%rdi), %xmm3, %xmm3
3349 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
3350 ; AVX1-NEXT:  LBB22_26: ## %else35
3351 ; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
3352 ; AVX1-NEXT:    testb $1, %al
3353 ; AVX1-NEXT:    je LBB22_28
3354 ; AVX1-NEXT:  ## %bb.27: ## %cond.load37
3355 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3356 ; AVX1-NEXT:    vpinsrw $5, 26(%rdi), %xmm2, %xmm2
3357 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3358 ; AVX1-NEXT:  LBB22_28: ## %else38
3359 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3360 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm2, %xmm0
3361 ; AVX1-NEXT:    vpextrb $12, %xmm0, %eax
3362 ; AVX1-NEXT:    testb $1, %al
3363 ; AVX1-NEXT:    je LBB22_30
3364 ; AVX1-NEXT:  ## %bb.29: ## %cond.load40
3365 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3366 ; AVX1-NEXT:    vpinsrw $6, 28(%rdi), %xmm2, %xmm2
3367 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3368 ; AVX1-NEXT:  LBB22_30: ## %else41
3369 ; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
3370 ; AVX1-NEXT:    testb $1, %al
3371 ; AVX1-NEXT:    je LBB22_32
3372 ; AVX1-NEXT:  ## %bb.31: ## %cond.load43
3373 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
3374 ; AVX1-NEXT:    vpinsrw $7, 30(%rdi), %xmm0, %xmm0
3375 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
3376 ; AVX1-NEXT:  LBB22_32: ## %else44
3377 ; AVX1-NEXT:    vmovaps %ymm1, %ymm0
3378 ; AVX1-NEXT:    retq
3379 ;
3380 ; AVX2-LABEL: load_v16i16_v16i16:
3381 ; AVX2:       ## %bb.0:
3382 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3383 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3384 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
3385 ; AVX2-NEXT:    testb $1, %al
3386 ; AVX2-NEXT:    je LBB22_2
3387 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
3388 ; AVX2-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm3
3389 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3390 ; AVX2-NEXT:  LBB22_2: ## %else
3391 ; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
3392 ; AVX2-NEXT:    testb $1, %al
3393 ; AVX2-NEXT:    je LBB22_4
3394 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
3395 ; AVX2-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm2
3396 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3397 ; AVX2-NEXT:  LBB22_4: ## %else2
3398 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3399 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3400 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
3401 ; AVX2-NEXT:    testb $1, %al
3402 ; AVX2-NEXT:    je LBB22_6
3403 ; AVX2-NEXT:  ## %bb.5: ## %cond.load4
3404 ; AVX2-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm3
3405 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3406 ; AVX2-NEXT:  LBB22_6: ## %else5
3407 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
3408 ; AVX2-NEXT:    testb $1, %al
3409 ; AVX2-NEXT:    je LBB22_8
3410 ; AVX2-NEXT:  ## %bb.7: ## %cond.load7
3411 ; AVX2-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm2
3412 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3413 ; AVX2-NEXT:  LBB22_8: ## %else8
3414 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3415 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3416 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
3417 ; AVX2-NEXT:    testb $1, %al
3418 ; AVX2-NEXT:    je LBB22_10
3419 ; AVX2-NEXT:  ## %bb.9: ## %cond.load10
3420 ; AVX2-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm3
3421 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3422 ; AVX2-NEXT:  LBB22_10: ## %else11
3423 ; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
3424 ; AVX2-NEXT:    testb $1, %al
3425 ; AVX2-NEXT:    je LBB22_12
3426 ; AVX2-NEXT:  ## %bb.11: ## %cond.load13
3427 ; AVX2-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm2
3428 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3429 ; AVX2-NEXT:  LBB22_12: ## %else14
3430 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3431 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3432 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
3433 ; AVX2-NEXT:    testb $1, %al
3434 ; AVX2-NEXT:    je LBB22_14
3435 ; AVX2-NEXT:  ## %bb.13: ## %cond.load16
3436 ; AVX2-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm3
3437 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
3438 ; AVX2-NEXT:  LBB22_14: ## %else17
3439 ; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
3440 ; AVX2-NEXT:    testb $1, %al
3441 ; AVX2-NEXT:    je LBB22_16
3442 ; AVX2-NEXT:  ## %bb.15: ## %cond.load19
3443 ; AVX2-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm2
3444 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3445 ; AVX2-NEXT:  LBB22_16: ## %else20
3446 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3447 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3448 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
3449 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
3450 ; AVX2-NEXT:    testb $1, %al
3451 ; AVX2-NEXT:    je LBB22_18
3452 ; AVX2-NEXT:  ## %bb.17: ## %cond.load22
3453 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
3454 ; AVX2-NEXT:    vpinsrw $0, 16(%rdi), %xmm3, %xmm3
3455 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
3456 ; AVX2-NEXT:  LBB22_18: ## %else23
3457 ; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
3458 ; AVX2-NEXT:    testb $1, %al
3459 ; AVX2-NEXT:    je LBB22_20
3460 ; AVX2-NEXT:  ## %bb.19: ## %cond.load25
3461 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3462 ; AVX2-NEXT:    vpinsrw $1, 18(%rdi), %xmm2, %xmm2
3463 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3464 ; AVX2-NEXT:  LBB22_20: ## %else26
3465 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3466 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3467 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
3468 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
3469 ; AVX2-NEXT:    testb $1, %al
3470 ; AVX2-NEXT:    je LBB22_22
3471 ; AVX2-NEXT:  ## %bb.21: ## %cond.load28
3472 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
3473 ; AVX2-NEXT:    vpinsrw $2, 20(%rdi), %xmm3, %xmm3
3474 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
3475 ; AVX2-NEXT:  LBB22_22: ## %else29
3476 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
3477 ; AVX2-NEXT:    testb $1, %al
3478 ; AVX2-NEXT:    je LBB22_24
3479 ; AVX2-NEXT:  ## %bb.23: ## %cond.load31
3480 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3481 ; AVX2-NEXT:    vpinsrw $3, 22(%rdi), %xmm2, %xmm2
3482 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3483 ; AVX2-NEXT:  LBB22_24: ## %else32
3484 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3485 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3486 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
3487 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
3488 ; AVX2-NEXT:    testb $1, %al
3489 ; AVX2-NEXT:    je LBB22_26
3490 ; AVX2-NEXT:  ## %bb.25: ## %cond.load34
3491 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
3492 ; AVX2-NEXT:    vpinsrw $4, 24(%rdi), %xmm3, %xmm3
3493 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
3494 ; AVX2-NEXT:  LBB22_26: ## %else35
3495 ; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
3496 ; AVX2-NEXT:    testb $1, %al
3497 ; AVX2-NEXT:    je LBB22_28
3498 ; AVX2-NEXT:  ## %bb.27: ## %cond.load37
3499 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3500 ; AVX2-NEXT:    vpinsrw $5, 26(%rdi), %xmm2, %xmm2
3501 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3502 ; AVX2-NEXT:  LBB22_28: ## %else38
3503 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3504 ; AVX2-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm0
3505 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
3506 ; AVX2-NEXT:    vpextrb $12, %xmm0, %eax
3507 ; AVX2-NEXT:    testb $1, %al
3508 ; AVX2-NEXT:    je LBB22_30
3509 ; AVX2-NEXT:  ## %bb.29: ## %cond.load40
3510 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
3511 ; AVX2-NEXT:    vpinsrw $6, 28(%rdi), %xmm2, %xmm2
3512 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3513 ; AVX2-NEXT:  LBB22_30: ## %else41
3514 ; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
3515 ; AVX2-NEXT:    testb $1, %al
3516 ; AVX2-NEXT:    je LBB22_32
3517 ; AVX2-NEXT:  ## %bb.31: ## %cond.load43
3518 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
3519 ; AVX2-NEXT:    vpinsrw $7, 30(%rdi), %xmm0, %xmm0
3520 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
3521 ; AVX2-NEXT:  LBB22_32: ## %else44
3522 ; AVX2-NEXT:    vmovdqa %ymm1, %ymm0
3523 ; AVX2-NEXT:    retq
3524 ;
3525 ; AVX512F-LABEL: load_v16i16_v16i16:
3526 ; AVX512F:       ## %bb.0:
3527 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3528 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3529 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3530 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3531 ; AVX512F-NEXT:    kmovw %k0, %eax
3532 ; AVX512F-NEXT:    testb $1, %al
3533 ; AVX512F-NEXT:    je LBB22_2
3534 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
3535 ; AVX512F-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm2
3536 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3537 ; AVX512F-NEXT:  LBB22_2: ## %else
3538 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
3539 ; AVX512F-NEXT:    kmovw %k0, %eax
3540 ; AVX512F-NEXT:    testb $1, %al
3541 ; AVX512F-NEXT:    je LBB22_4
3542 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
3543 ; AVX512F-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm2
3544 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3545 ; AVX512F-NEXT:  LBB22_4: ## %else2
3546 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3547 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3548 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3549 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3550 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
3551 ; AVX512F-NEXT:    kmovw %k1, %eax
3552 ; AVX512F-NEXT:    testb $1, %al
3553 ; AVX512F-NEXT:    je LBB22_6
3554 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load4
3555 ; AVX512F-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm2
3556 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3557 ; AVX512F-NEXT:  LBB22_6: ## %else5
3558 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
3559 ; AVX512F-NEXT:    kmovw %k0, %eax
3560 ; AVX512F-NEXT:    testb $1, %al
3561 ; AVX512F-NEXT:    je LBB22_8
3562 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load7
3563 ; AVX512F-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm2
3564 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3565 ; AVX512F-NEXT:  LBB22_8: ## %else8
3566 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3567 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3568 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3569 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3570 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
3571 ; AVX512F-NEXT:    kmovw %k1, %eax
3572 ; AVX512F-NEXT:    testb $1, %al
3573 ; AVX512F-NEXT:    je LBB22_10
3574 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load10
3575 ; AVX512F-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm2
3576 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3577 ; AVX512F-NEXT:  LBB22_10: ## %else11
3578 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
3579 ; AVX512F-NEXT:    kmovw %k0, %eax
3580 ; AVX512F-NEXT:    testb $1, %al
3581 ; AVX512F-NEXT:    je LBB22_12
3582 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load13
3583 ; AVX512F-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm2
3584 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3585 ; AVX512F-NEXT:  LBB22_12: ## %else14
3586 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3587 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3588 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3589 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3590 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
3591 ; AVX512F-NEXT:    kmovw %k1, %eax
3592 ; AVX512F-NEXT:    testb $1, %al
3593 ; AVX512F-NEXT:    je LBB22_14
3594 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load16
3595 ; AVX512F-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm2
3596 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3597 ; AVX512F-NEXT:  LBB22_14: ## %else17
3598 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
3599 ; AVX512F-NEXT:    kmovw %k0, %eax
3600 ; AVX512F-NEXT:    testb $1, %al
3601 ; AVX512F-NEXT:    je LBB22_16
3602 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load19
3603 ; AVX512F-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm2
3604 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3605 ; AVX512F-NEXT:  LBB22_16: ## %else20
3606 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3607 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3608 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3609 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3610 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
3611 ; AVX512F-NEXT:    kmovw %k1, %eax
3612 ; AVX512F-NEXT:    testb $1, %al
3613 ; AVX512F-NEXT:    je LBB22_18
3614 ; AVX512F-NEXT:  ## %bb.17: ## %cond.load22
3615 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3616 ; AVX512F-NEXT:    vpinsrw $0, 16(%rdi), %xmm2, %xmm2
3617 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3618 ; AVX512F-NEXT:  LBB22_18: ## %else23
3619 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
3620 ; AVX512F-NEXT:    kmovw %k0, %eax
3621 ; AVX512F-NEXT:    testb $1, %al
3622 ; AVX512F-NEXT:    je LBB22_20
3623 ; AVX512F-NEXT:  ## %bb.19: ## %cond.load25
3624 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3625 ; AVX512F-NEXT:    vpinsrw $1, 18(%rdi), %xmm2, %xmm2
3626 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3627 ; AVX512F-NEXT:  LBB22_20: ## %else26
3628 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3629 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3630 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3631 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3632 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k1
3633 ; AVX512F-NEXT:    kmovw %k1, %eax
3634 ; AVX512F-NEXT:    testb $1, %al
3635 ; AVX512F-NEXT:    je LBB22_22
3636 ; AVX512F-NEXT:  ## %bb.21: ## %cond.load28
3637 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3638 ; AVX512F-NEXT:    vpinsrw $2, 20(%rdi), %xmm2, %xmm2
3639 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3640 ; AVX512F-NEXT:  LBB22_22: ## %else29
3641 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
3642 ; AVX512F-NEXT:    kmovw %k0, %eax
3643 ; AVX512F-NEXT:    testb $1, %al
3644 ; AVX512F-NEXT:    je LBB22_24
3645 ; AVX512F-NEXT:  ## %bb.23: ## %cond.load31
3646 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3647 ; AVX512F-NEXT:    vpinsrw $3, 22(%rdi), %xmm2, %xmm2
3648 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3649 ; AVX512F-NEXT:  LBB22_24: ## %else32
3650 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3651 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3652 ; AVX512F-NEXT:    vpmovsxwd %ymm2, %zmm2
3653 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
3654 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
3655 ; AVX512F-NEXT:    kmovw %k1, %eax
3656 ; AVX512F-NEXT:    testb $1, %al
3657 ; AVX512F-NEXT:    je LBB22_26
3658 ; AVX512F-NEXT:  ## %bb.25: ## %cond.load34
3659 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3660 ; AVX512F-NEXT:    vpinsrw $4, 24(%rdi), %xmm2, %xmm2
3661 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3662 ; AVX512F-NEXT:  LBB22_26: ## %else35
3663 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
3664 ; AVX512F-NEXT:    kmovw %k0, %eax
3665 ; AVX512F-NEXT:    testb $1, %al
3666 ; AVX512F-NEXT:    je LBB22_28
3667 ; AVX512F-NEXT:  ## %bb.27: ## %cond.load37
3668 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
3669 ; AVX512F-NEXT:    vpinsrw $5, 26(%rdi), %xmm2, %xmm2
3670 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3671 ; AVX512F-NEXT:  LBB22_28: ## %else38
3672 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3673 ; AVX512F-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm0
3674 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
3675 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
3676 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
3677 ; AVX512F-NEXT:    kmovw %k1, %eax
3678 ; AVX512F-NEXT:    testb $1, %al
3679 ; AVX512F-NEXT:    je LBB22_30
3680 ; AVX512F-NEXT:  ## %bb.29: ## %cond.load40
3681 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
3682 ; AVX512F-NEXT:    vpinsrw $6, 28(%rdi), %xmm0, %xmm0
3683 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
3684 ; AVX512F-NEXT:  LBB22_30: ## %else41
3685 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
3686 ; AVX512F-NEXT:    kmovw %k0, %eax
3687 ; AVX512F-NEXT:    testb $1, %al
3688 ; AVX512F-NEXT:    je LBB22_32
3689 ; AVX512F-NEXT:  ## %bb.31: ## %cond.load43
3690 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
3691 ; AVX512F-NEXT:    vpinsrw $7, 30(%rdi), %xmm0, %xmm0
3692 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
3693 ; AVX512F-NEXT:  LBB22_32: ## %else44
3694 ; AVX512F-NEXT:    vmovdqa %ymm1, %ymm0
3695 ; AVX512F-NEXT:    retq
3696 ;
3697 ; AVX512VLDQ-LABEL: load_v16i16_v16i16:
3698 ; AVX512VLDQ:       ## %bb.0:
3699 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3700 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3701 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3702 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3703 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3704 ; AVX512VLDQ-NEXT:    testb $1, %al
3705 ; AVX512VLDQ-NEXT:    je LBB22_2
3706 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
3707 ; AVX512VLDQ-NEXT:    vpinsrw $0, (%rdi), %xmm1, %xmm2
3708 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3709 ; AVX512VLDQ-NEXT:  LBB22_2: ## %else
3710 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
3711 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3712 ; AVX512VLDQ-NEXT:    testb $1, %al
3713 ; AVX512VLDQ-NEXT:    je LBB22_4
3714 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
3715 ; AVX512VLDQ-NEXT:    vpinsrw $1, 2(%rdi), %xmm1, %xmm2
3716 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3717 ; AVX512VLDQ-NEXT:  LBB22_4: ## %else2
3718 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3719 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3720 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3721 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3722 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k1
3723 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3724 ; AVX512VLDQ-NEXT:    testb $1, %al
3725 ; AVX512VLDQ-NEXT:    je LBB22_6
3726 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load4
3727 ; AVX512VLDQ-NEXT:    vpinsrw $2, 4(%rdi), %xmm1, %xmm2
3728 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3729 ; AVX512VLDQ-NEXT:  LBB22_6: ## %else5
3730 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
3731 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3732 ; AVX512VLDQ-NEXT:    testb $1, %al
3733 ; AVX512VLDQ-NEXT:    je LBB22_8
3734 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load7
3735 ; AVX512VLDQ-NEXT:    vpinsrw $3, 6(%rdi), %xmm1, %xmm2
3736 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3737 ; AVX512VLDQ-NEXT:  LBB22_8: ## %else8
3738 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3739 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3740 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3741 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3742 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k1
3743 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3744 ; AVX512VLDQ-NEXT:    testb $1, %al
3745 ; AVX512VLDQ-NEXT:    je LBB22_10
3746 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load10
3747 ; AVX512VLDQ-NEXT:    vpinsrw $4, 8(%rdi), %xmm1, %xmm2
3748 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3749 ; AVX512VLDQ-NEXT:  LBB22_10: ## %else11
3750 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
3751 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3752 ; AVX512VLDQ-NEXT:    testb $1, %al
3753 ; AVX512VLDQ-NEXT:    je LBB22_12
3754 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load13
3755 ; AVX512VLDQ-NEXT:    vpinsrw $5, 10(%rdi), %xmm1, %xmm2
3756 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3757 ; AVX512VLDQ-NEXT:  LBB22_12: ## %else14
3758 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3759 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3760 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3761 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3762 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k1
3763 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3764 ; AVX512VLDQ-NEXT:    testb $1, %al
3765 ; AVX512VLDQ-NEXT:    je LBB22_14
3766 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load16
3767 ; AVX512VLDQ-NEXT:    vpinsrw $6, 12(%rdi), %xmm1, %xmm2
3768 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3769 ; AVX512VLDQ-NEXT:  LBB22_14: ## %else17
3770 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
3771 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3772 ; AVX512VLDQ-NEXT:    testb $1, %al
3773 ; AVX512VLDQ-NEXT:    je LBB22_16
3774 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load19
3775 ; AVX512VLDQ-NEXT:    vpinsrw $7, 14(%rdi), %xmm1, %xmm2
3776 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
3777 ; AVX512VLDQ-NEXT:  LBB22_16: ## %else20
3778 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3779 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3780 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3781 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3782 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k1
3783 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3784 ; AVX512VLDQ-NEXT:    testb $1, %al
3785 ; AVX512VLDQ-NEXT:    je LBB22_18
3786 ; AVX512VLDQ-NEXT:  ## %bb.17: ## %cond.load22
3787 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3788 ; AVX512VLDQ-NEXT:    vpinsrw $0, 16(%rdi), %xmm2, %xmm2
3789 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3790 ; AVX512VLDQ-NEXT:  LBB22_18: ## %else23
3791 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
3792 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3793 ; AVX512VLDQ-NEXT:    testb $1, %al
3794 ; AVX512VLDQ-NEXT:    je LBB22_20
3795 ; AVX512VLDQ-NEXT:  ## %bb.19: ## %cond.load25
3796 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3797 ; AVX512VLDQ-NEXT:    vpinsrw $1, 18(%rdi), %xmm2, %xmm2
3798 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3799 ; AVX512VLDQ-NEXT:  LBB22_20: ## %else26
3800 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3801 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3802 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3803 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3804 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k1
3805 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3806 ; AVX512VLDQ-NEXT:    testb $1, %al
3807 ; AVX512VLDQ-NEXT:    je LBB22_22
3808 ; AVX512VLDQ-NEXT:  ## %bb.21: ## %cond.load28
3809 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3810 ; AVX512VLDQ-NEXT:    vpinsrw $2, 20(%rdi), %xmm2, %xmm2
3811 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3812 ; AVX512VLDQ-NEXT:  LBB22_22: ## %else29
3813 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
3814 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3815 ; AVX512VLDQ-NEXT:    testb $1, %al
3816 ; AVX512VLDQ-NEXT:    je LBB22_24
3817 ; AVX512VLDQ-NEXT:  ## %bb.23: ## %cond.load31
3818 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3819 ; AVX512VLDQ-NEXT:    vpinsrw $3, 22(%rdi), %xmm2, %xmm2
3820 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3821 ; AVX512VLDQ-NEXT:  LBB22_24: ## %else32
3822 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3823 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm2
3824 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm2, %zmm2
3825 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
3826 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k1
3827 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3828 ; AVX512VLDQ-NEXT:    testb $1, %al
3829 ; AVX512VLDQ-NEXT:    je LBB22_26
3830 ; AVX512VLDQ-NEXT:  ## %bb.25: ## %cond.load34
3831 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3832 ; AVX512VLDQ-NEXT:    vpinsrw $4, 24(%rdi), %xmm2, %xmm2
3833 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3834 ; AVX512VLDQ-NEXT:  LBB22_26: ## %else35
3835 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
3836 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3837 ; AVX512VLDQ-NEXT:    testb $1, %al
3838 ; AVX512VLDQ-NEXT:    je LBB22_28
3839 ; AVX512VLDQ-NEXT:  ## %bb.27: ## %cond.load37
3840 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
3841 ; AVX512VLDQ-NEXT:    vpinsrw $5, 26(%rdi), %xmm2, %xmm2
3842 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
3843 ; AVX512VLDQ-NEXT:  LBB22_28: ## %else38
3844 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
3845 ; AVX512VLDQ-NEXT:    vpcmpgtw %ymm0, %ymm2, %ymm0
3846 ; AVX512VLDQ-NEXT:    vpmovsxwd %ymm0, %zmm0
3847 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
3848 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k1
3849 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
3850 ; AVX512VLDQ-NEXT:    testb $1, %al
3851 ; AVX512VLDQ-NEXT:    je LBB22_30
3852 ; AVX512VLDQ-NEXT:  ## %bb.29: ## %cond.load40
3853 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
3854 ; AVX512VLDQ-NEXT:    vpinsrw $6, 28(%rdi), %xmm0, %xmm0
3855 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
3856 ; AVX512VLDQ-NEXT:  LBB22_30: ## %else41
3857 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
3858 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
3859 ; AVX512VLDQ-NEXT:    testb $1, %al
3860 ; AVX512VLDQ-NEXT:    je LBB22_32
3861 ; AVX512VLDQ-NEXT:  ## %bb.31: ## %cond.load43
3862 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
3863 ; AVX512VLDQ-NEXT:    vpinsrw $7, 30(%rdi), %xmm0, %xmm0
3864 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
3865 ; AVX512VLDQ-NEXT:  LBB22_32: ## %else44
3866 ; AVX512VLDQ-NEXT:    vmovdqa %ymm1, %ymm0
3867 ; AVX512VLDQ-NEXT:    retq
3868 ;
3869 ; AVX512VLBW-LABEL: load_v16i16_v16i16:
3870 ; AVX512VLBW:       ## %bb.0:
3871 ; AVX512VLBW-NEXT:    vpmovw2m %ymm0, %k1
3872 ; AVX512VLBW-NEXT:    vpblendmw (%rdi), %ymm1, %ymm0 {%k1}
3873 ; AVX512VLBW-NEXT:    retq
3874   %mask = icmp slt <16 x i16> %trigger, zeroinitializer
3875   %res = call <16 x i16> @llvm.masked.load.v16i16.p0v16i16(<16 x i16>* %addr, i32 4, <16 x i1> %mask, <16 x i16> %dst)
3876   ret <16 x i16> %res
3877 }
3878
3879 ;
3880 ; vXi8
3881 ;
3882
3883 define <16 x i8> @load_v16i8_v16i8(<16 x i8> %trigger, <16 x i8>* %addr, <16 x i8> %dst) {
3884 ; SSE2-LABEL: load_v16i8_v16i8:
3885 ; SSE2:       ## %bb.0:
3886 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3887 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
3888 ; SSE2-NEXT:    movd %xmm2, %eax
3889 ; SSE2-NEXT:    testb $1, %al
3890 ; SSE2-NEXT:    je LBB23_2
3891 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
3892 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3893 ; SSE2-NEXT:    pand %xmm2, %xmm1
3894 ; SSE2-NEXT:    movzbl (%rdi), %ecx
3895 ; SSE2-NEXT:    movd %ecx, %xmm3
3896 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3897 ; SSE2-NEXT:    por %xmm2, %xmm1
3898 ; SSE2-NEXT:  LBB23_2: ## %else
3899 ; SSE2-NEXT:    shrl $8, %eax
3900 ; SSE2-NEXT:    testb $1, %al
3901 ; SSE2-NEXT:    je LBB23_4
3902 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
3903 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
3904 ; SSE2-NEXT:    pand %xmm2, %xmm1
3905 ; SSE2-NEXT:    movzbl 1(%rdi), %eax
3906 ; SSE2-NEXT:    movd %eax, %xmm3
3907 ; SSE2-NEXT:    psllw $8, %xmm3
3908 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3909 ; SSE2-NEXT:    por %xmm2, %xmm1
3910 ; SSE2-NEXT:  LBB23_4: ## %else2
3911 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3912 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
3913 ; SSE2-NEXT:    movd %xmm2, %eax
3914 ; SSE2-NEXT:    movl %eax, %ecx
3915 ; SSE2-NEXT:    shrl $16, %ecx
3916 ; SSE2-NEXT:    testb $1, %cl
3917 ; SSE2-NEXT:    je LBB23_6
3918 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
3919 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
3920 ; SSE2-NEXT:    pand %xmm2, %xmm1
3921 ; SSE2-NEXT:    movzbl 2(%rdi), %ecx
3922 ; SSE2-NEXT:    movd %ecx, %xmm3
3923 ; SSE2-NEXT:    pslld $16, %xmm3
3924 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3925 ; SSE2-NEXT:    por %xmm2, %xmm1
3926 ; SSE2-NEXT:  LBB23_6: ## %else5
3927 ; SSE2-NEXT:    shrl $24, %eax
3928 ; SSE2-NEXT:    testb $1, %al
3929 ; SSE2-NEXT:    je LBB23_8
3930 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
3931 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
3932 ; SSE2-NEXT:    pand %xmm2, %xmm1
3933 ; SSE2-NEXT:    movzbl 3(%rdi), %eax
3934 ; SSE2-NEXT:    movd %eax, %xmm3
3935 ; SSE2-NEXT:    pslld $24, %xmm3
3936 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3937 ; SSE2-NEXT:    por %xmm2, %xmm1
3938 ; SSE2-NEXT:  LBB23_8: ## %else8
3939 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3940 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
3941 ; SSE2-NEXT:    pextrw $2, %xmm2, %eax
3942 ; SSE2-NEXT:    testb $1, %al
3943 ; SSE2-NEXT:    je LBB23_10
3944 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
3945 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
3946 ; SSE2-NEXT:    pand %xmm2, %xmm1
3947 ; SSE2-NEXT:    movzbl 4(%rdi), %ecx
3948 ; SSE2-NEXT:    movd %ecx, %xmm3
3949 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,0,1,1]
3950 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3951 ; SSE2-NEXT:    por %xmm2, %xmm1
3952 ; SSE2-NEXT:  LBB23_10: ## %else11
3953 ; SSE2-NEXT:    shrl $8, %eax
3954 ; SSE2-NEXT:    testb $1, %al
3955 ; SSE2-NEXT:    je LBB23_12
3956 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
3957 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
3958 ; SSE2-NEXT:    pand %xmm2, %xmm1
3959 ; SSE2-NEXT:    movzbl 5(%rdi), %eax
3960 ; SSE2-NEXT:    movd %eax, %xmm3
3961 ; SSE2-NEXT:    psllq $40, %xmm3
3962 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3963 ; SSE2-NEXT:    por %xmm2, %xmm1
3964 ; SSE2-NEXT:  LBB23_12: ## %else14
3965 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3966 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
3967 ; SSE2-NEXT:    pextrw $3, %xmm2, %eax
3968 ; SSE2-NEXT:    testb $1, %al
3969 ; SSE2-NEXT:    je LBB23_14
3970 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
3971 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
3972 ; SSE2-NEXT:    pand %xmm2, %xmm1
3973 ; SSE2-NEXT:    movzbl 6(%rdi), %ecx
3974 ; SSE2-NEXT:    movd %ecx, %xmm3
3975 ; SSE2-NEXT:    psllq $48, %xmm3
3976 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3977 ; SSE2-NEXT:    por %xmm2, %xmm1
3978 ; SSE2-NEXT:  LBB23_14: ## %else17
3979 ; SSE2-NEXT:    shrl $8, %eax
3980 ; SSE2-NEXT:    testb $1, %al
3981 ; SSE2-NEXT:    je LBB23_16
3982 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
3983 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
3984 ; SSE2-NEXT:    pand %xmm2, %xmm1
3985 ; SSE2-NEXT:    movzbl 7(%rdi), %eax
3986 ; SSE2-NEXT:    movd %eax, %xmm3
3987 ; SSE2-NEXT:    psllq $56, %xmm3
3988 ; SSE2-NEXT:    pandn %xmm3, %xmm2
3989 ; SSE2-NEXT:    por %xmm2, %xmm1
3990 ; SSE2-NEXT:  LBB23_16: ## %else20
3991 ; SSE2-NEXT:    pxor %xmm2, %xmm2
3992 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
3993 ; SSE2-NEXT:    pextrw $4, %xmm2, %eax
3994 ; SSE2-NEXT:    testb $1, %al
3995 ; SSE2-NEXT:    je LBB23_18
3996 ; SSE2-NEXT:  ## %bb.17: ## %cond.load22
3997 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
3998 ; SSE2-NEXT:    pand %xmm2, %xmm1
3999 ; SSE2-NEXT:    movzbl 8(%rdi), %ecx
4000 ; SSE2-NEXT:    movd %ecx, %xmm3
4001 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,0,1]
4002 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4003 ; SSE2-NEXT:    por %xmm2, %xmm1
4004 ; SSE2-NEXT:  LBB23_18: ## %else23
4005 ; SSE2-NEXT:    shrl $8, %eax
4006 ; SSE2-NEXT:    testb $1, %al
4007 ; SSE2-NEXT:    je LBB23_20
4008 ; SSE2-NEXT:  ## %bb.19: ## %cond.load25
4009 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
4010 ; SSE2-NEXT:    pand %xmm2, %xmm1
4011 ; SSE2-NEXT:    movzbl 9(%rdi), %eax
4012 ; SSE2-NEXT:    movd %eax, %xmm3
4013 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4,5,6]
4014 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4015 ; SSE2-NEXT:    por %xmm2, %xmm1
4016 ; SSE2-NEXT:  LBB23_20: ## %else26
4017 ; SSE2-NEXT:    pxor %xmm2, %xmm2
4018 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
4019 ; SSE2-NEXT:    pextrw $5, %xmm2, %eax
4020 ; SSE2-NEXT:    testb $1, %al
4021 ; SSE2-NEXT:    je LBB23_22
4022 ; SSE2-NEXT:  ## %bb.21: ## %cond.load28
4023 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
4024 ; SSE2-NEXT:    pand %xmm2, %xmm1
4025 ; SSE2-NEXT:    movzbl 10(%rdi), %ecx
4026 ; SSE2-NEXT:    movd %ecx, %xmm3
4027 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4,5]
4028 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4029 ; SSE2-NEXT:    por %xmm2, %xmm1
4030 ; SSE2-NEXT:  LBB23_22: ## %else29
4031 ; SSE2-NEXT:    shrl $8, %eax
4032 ; SSE2-NEXT:    testb $1, %al
4033 ; SSE2-NEXT:    je LBB23_24
4034 ; SSE2-NEXT:  ## %bb.23: ## %cond.load31
4035 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
4036 ; SSE2-NEXT:    pand %xmm2, %xmm1
4037 ; SSE2-NEXT:    movzbl 11(%rdi), %eax
4038 ; SSE2-NEXT:    movd %eax, %xmm3
4039 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2,3,4]
4040 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4041 ; SSE2-NEXT:    por %xmm2, %xmm1
4042 ; SSE2-NEXT:  LBB23_24: ## %else32
4043 ; SSE2-NEXT:    pxor %xmm2, %xmm2
4044 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
4045 ; SSE2-NEXT:    pextrw $6, %xmm2, %eax
4046 ; SSE2-NEXT:    testb $1, %al
4047 ; SSE2-NEXT:    je LBB23_26
4048 ; SSE2-NEXT:  ## %bb.25: ## %cond.load34
4049 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
4050 ; SSE2-NEXT:    pand %xmm2, %xmm1
4051 ; SSE2-NEXT:    movzbl 12(%rdi), %ecx
4052 ; SSE2-NEXT:    movd %ecx, %xmm3
4053 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[0,1,2,0]
4054 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4055 ; SSE2-NEXT:    por %xmm2, %xmm1
4056 ; SSE2-NEXT:  LBB23_26: ## %else35
4057 ; SSE2-NEXT:    shrl $8, %eax
4058 ; SSE2-NEXT:    testb $1, %al
4059 ; SSE2-NEXT:    je LBB23_28
4060 ; SSE2-NEXT:  ## %bb.27: ## %cond.load37
4061 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
4062 ; SSE2-NEXT:    pand %xmm2, %xmm1
4063 ; SSE2-NEXT:    movzbl 13(%rdi), %eax
4064 ; SSE2-NEXT:    movd %eax, %xmm3
4065 ; SSE2-NEXT:    pslldq {{.*#+}} xmm3 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm3[0,1,2]
4066 ; SSE2-NEXT:    pandn %xmm3, %xmm2
4067 ; SSE2-NEXT:    por %xmm2, %xmm1
4068 ; SSE2-NEXT:  LBB23_28: ## %else38
4069 ; SSE2-NEXT:    pxor %xmm2, %xmm2
4070 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
4071 ; SSE2-NEXT:    pextrw $7, %xmm2, %eax
4072 ; SSE2-NEXT:    testb $1, %al
4073 ; SSE2-NEXT:    je LBB23_30
4074 ; SSE2-NEXT:  ## %bb.29: ## %cond.load40
4075 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
4076 ; SSE2-NEXT:    pand %xmm0, %xmm1
4077 ; SSE2-NEXT:    movzbl 14(%rdi), %ecx
4078 ; SSE2-NEXT:    movd %ecx, %xmm2
4079 ; SSE2-NEXT:    pslldq {{.*#+}} xmm2 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm2[0,1]
4080 ; SSE2-NEXT:    pandn %xmm2, %xmm0
4081 ; SSE2-NEXT:    por %xmm0, %xmm1
4082 ; SSE2-NEXT:  LBB23_30: ## %else41
4083 ; SSE2-NEXT:    shrl $8, %eax
4084 ; SSE2-NEXT:    testb $1, %al
4085 ; SSE2-NEXT:    je LBB23_32
4086 ; SSE2-NEXT:  ## %bb.31: ## %cond.load43
4087 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm1
4088 ; SSE2-NEXT:    movzbl 15(%rdi), %eax
4089 ; SSE2-NEXT:    movd %eax, %xmm0
4090 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
4091 ; SSE2-NEXT:    por %xmm0, %xmm1
4092 ; SSE2-NEXT:  LBB23_32: ## %else44
4093 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
4094 ; SSE2-NEXT:    retq
4095 ;
4096 ; SSE42-LABEL: load_v16i8_v16i8:
4097 ; SSE42:       ## %bb.0:
4098 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4099 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4100 ; SSE42-NEXT:    pextrb $0, %xmm2, %eax
4101 ; SSE42-NEXT:    testb $1, %al
4102 ; SSE42-NEXT:    je LBB23_2
4103 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
4104 ; SSE42-NEXT:    pinsrb $0, (%rdi), %xmm1
4105 ; SSE42-NEXT:  LBB23_2: ## %else
4106 ; SSE42-NEXT:    pextrb $1, %xmm2, %eax
4107 ; SSE42-NEXT:    testb $1, %al
4108 ; SSE42-NEXT:    je LBB23_4
4109 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
4110 ; SSE42-NEXT:    pinsrb $1, 1(%rdi), %xmm1
4111 ; SSE42-NEXT:  LBB23_4: ## %else2
4112 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4113 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4114 ; SSE42-NEXT:    pextrb $2, %xmm2, %eax
4115 ; SSE42-NEXT:    testb $1, %al
4116 ; SSE42-NEXT:    je LBB23_6
4117 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
4118 ; SSE42-NEXT:    pinsrb $2, 2(%rdi), %xmm1
4119 ; SSE42-NEXT:  LBB23_6: ## %else5
4120 ; SSE42-NEXT:    pextrb $3, %xmm2, %eax
4121 ; SSE42-NEXT:    testb $1, %al
4122 ; SSE42-NEXT:    je LBB23_8
4123 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
4124 ; SSE42-NEXT:    pinsrb $3, 3(%rdi), %xmm1
4125 ; SSE42-NEXT:  LBB23_8: ## %else8
4126 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4127 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4128 ; SSE42-NEXT:    pextrb $4, %xmm2, %eax
4129 ; SSE42-NEXT:    testb $1, %al
4130 ; SSE42-NEXT:    je LBB23_10
4131 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
4132 ; SSE42-NEXT:    pinsrb $4, 4(%rdi), %xmm1
4133 ; SSE42-NEXT:  LBB23_10: ## %else11
4134 ; SSE42-NEXT:    pextrb $5, %xmm2, %eax
4135 ; SSE42-NEXT:    testb $1, %al
4136 ; SSE42-NEXT:    je LBB23_12
4137 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
4138 ; SSE42-NEXT:    pinsrb $5, 5(%rdi), %xmm1
4139 ; SSE42-NEXT:  LBB23_12: ## %else14
4140 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4141 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4142 ; SSE42-NEXT:    pextrb $6, %xmm2, %eax
4143 ; SSE42-NEXT:    testb $1, %al
4144 ; SSE42-NEXT:    je LBB23_14
4145 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
4146 ; SSE42-NEXT:    pinsrb $6, 6(%rdi), %xmm1
4147 ; SSE42-NEXT:  LBB23_14: ## %else17
4148 ; SSE42-NEXT:    pextrb $7, %xmm2, %eax
4149 ; SSE42-NEXT:    testb $1, %al
4150 ; SSE42-NEXT:    je LBB23_16
4151 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
4152 ; SSE42-NEXT:    pinsrb $7, 7(%rdi), %xmm1
4153 ; SSE42-NEXT:  LBB23_16: ## %else20
4154 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4155 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4156 ; SSE42-NEXT:    pextrb $8, %xmm2, %eax
4157 ; SSE42-NEXT:    testb $1, %al
4158 ; SSE42-NEXT:    je LBB23_18
4159 ; SSE42-NEXT:  ## %bb.17: ## %cond.load22
4160 ; SSE42-NEXT:    pinsrb $8, 8(%rdi), %xmm1
4161 ; SSE42-NEXT:  LBB23_18: ## %else23
4162 ; SSE42-NEXT:    pextrb $9, %xmm2, %eax
4163 ; SSE42-NEXT:    testb $1, %al
4164 ; SSE42-NEXT:    je LBB23_20
4165 ; SSE42-NEXT:  ## %bb.19: ## %cond.load25
4166 ; SSE42-NEXT:    pinsrb $9, 9(%rdi), %xmm1
4167 ; SSE42-NEXT:  LBB23_20: ## %else26
4168 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4169 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4170 ; SSE42-NEXT:    pextrb $10, %xmm2, %eax
4171 ; SSE42-NEXT:    testb $1, %al
4172 ; SSE42-NEXT:    je LBB23_22
4173 ; SSE42-NEXT:  ## %bb.21: ## %cond.load28
4174 ; SSE42-NEXT:    pinsrb $10, 10(%rdi), %xmm1
4175 ; SSE42-NEXT:  LBB23_22: ## %else29
4176 ; SSE42-NEXT:    pextrb $11, %xmm2, %eax
4177 ; SSE42-NEXT:    testb $1, %al
4178 ; SSE42-NEXT:    je LBB23_24
4179 ; SSE42-NEXT:  ## %bb.23: ## %cond.load31
4180 ; SSE42-NEXT:    pinsrb $11, 11(%rdi), %xmm1
4181 ; SSE42-NEXT:  LBB23_24: ## %else32
4182 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4183 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4184 ; SSE42-NEXT:    pextrb $12, %xmm2, %eax
4185 ; SSE42-NEXT:    testb $1, %al
4186 ; SSE42-NEXT:    je LBB23_26
4187 ; SSE42-NEXT:  ## %bb.25: ## %cond.load34
4188 ; SSE42-NEXT:    pinsrb $12, 12(%rdi), %xmm1
4189 ; SSE42-NEXT:  LBB23_26: ## %else35
4190 ; SSE42-NEXT:    pextrb $13, %xmm2, %eax
4191 ; SSE42-NEXT:    testb $1, %al
4192 ; SSE42-NEXT:    je LBB23_28
4193 ; SSE42-NEXT:  ## %bb.27: ## %cond.load37
4194 ; SSE42-NEXT:    pinsrb $13, 13(%rdi), %xmm1
4195 ; SSE42-NEXT:  LBB23_28: ## %else38
4196 ; SSE42-NEXT:    pxor %xmm2, %xmm2
4197 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm2
4198 ; SSE42-NEXT:    pextrb $14, %xmm2, %eax
4199 ; SSE42-NEXT:    testb $1, %al
4200 ; SSE42-NEXT:    je LBB23_30
4201 ; SSE42-NEXT:  ## %bb.29: ## %cond.load40
4202 ; SSE42-NEXT:    pinsrb $14, 14(%rdi), %xmm1
4203 ; SSE42-NEXT:  LBB23_30: ## %else41
4204 ; SSE42-NEXT:    pextrb $15, %xmm2, %eax
4205 ; SSE42-NEXT:    testb $1, %al
4206 ; SSE42-NEXT:    je LBB23_32
4207 ; SSE42-NEXT:  ## %bb.31: ## %cond.load43
4208 ; SSE42-NEXT:    pinsrb $15, 15(%rdi), %xmm1
4209 ; SSE42-NEXT:  LBB23_32: ## %else44
4210 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
4211 ; SSE42-NEXT:    retq
4212 ;
4213 ; AVX1OR2-LABEL: load_v16i8_v16i8:
4214 ; AVX1OR2:       ## %bb.0:
4215 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4216 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4217 ; AVX1OR2-NEXT:    vpextrb $0, %xmm2, %eax
4218 ; AVX1OR2-NEXT:    testb $1, %al
4219 ; AVX1OR2-NEXT:    je LBB23_2
4220 ; AVX1OR2-NEXT:  ## %bb.1: ## %cond.load
4221 ; AVX1OR2-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm1
4222 ; AVX1OR2-NEXT:  LBB23_2: ## %else
4223 ; AVX1OR2-NEXT:    vpextrb $1, %xmm2, %eax
4224 ; AVX1OR2-NEXT:    testb $1, %al
4225 ; AVX1OR2-NEXT:    je LBB23_4
4226 ; AVX1OR2-NEXT:  ## %bb.3: ## %cond.load1
4227 ; AVX1OR2-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm1
4228 ; AVX1OR2-NEXT:  LBB23_4: ## %else2
4229 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4230 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4231 ; AVX1OR2-NEXT:    vpextrb $2, %xmm2, %eax
4232 ; AVX1OR2-NEXT:    testb $1, %al
4233 ; AVX1OR2-NEXT:    je LBB23_6
4234 ; AVX1OR2-NEXT:  ## %bb.5: ## %cond.load4
4235 ; AVX1OR2-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm1
4236 ; AVX1OR2-NEXT:  LBB23_6: ## %else5
4237 ; AVX1OR2-NEXT:    vpextrb $3, %xmm2, %eax
4238 ; AVX1OR2-NEXT:    testb $1, %al
4239 ; AVX1OR2-NEXT:    je LBB23_8
4240 ; AVX1OR2-NEXT:  ## %bb.7: ## %cond.load7
4241 ; AVX1OR2-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm1
4242 ; AVX1OR2-NEXT:  LBB23_8: ## %else8
4243 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4244 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4245 ; AVX1OR2-NEXT:    vpextrb $4, %xmm2, %eax
4246 ; AVX1OR2-NEXT:    testb $1, %al
4247 ; AVX1OR2-NEXT:    je LBB23_10
4248 ; AVX1OR2-NEXT:  ## %bb.9: ## %cond.load10
4249 ; AVX1OR2-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm1
4250 ; AVX1OR2-NEXT:  LBB23_10: ## %else11
4251 ; AVX1OR2-NEXT:    vpextrb $5, %xmm2, %eax
4252 ; AVX1OR2-NEXT:    testb $1, %al
4253 ; AVX1OR2-NEXT:    je LBB23_12
4254 ; AVX1OR2-NEXT:  ## %bb.11: ## %cond.load13
4255 ; AVX1OR2-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm1
4256 ; AVX1OR2-NEXT:  LBB23_12: ## %else14
4257 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4258 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4259 ; AVX1OR2-NEXT:    vpextrb $6, %xmm2, %eax
4260 ; AVX1OR2-NEXT:    testb $1, %al
4261 ; AVX1OR2-NEXT:    je LBB23_14
4262 ; AVX1OR2-NEXT:  ## %bb.13: ## %cond.load16
4263 ; AVX1OR2-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm1
4264 ; AVX1OR2-NEXT:  LBB23_14: ## %else17
4265 ; AVX1OR2-NEXT:    vpextrb $7, %xmm2, %eax
4266 ; AVX1OR2-NEXT:    testb $1, %al
4267 ; AVX1OR2-NEXT:    je LBB23_16
4268 ; AVX1OR2-NEXT:  ## %bb.15: ## %cond.load19
4269 ; AVX1OR2-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm1
4270 ; AVX1OR2-NEXT:  LBB23_16: ## %else20
4271 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4272 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4273 ; AVX1OR2-NEXT:    vpextrb $8, %xmm2, %eax
4274 ; AVX1OR2-NEXT:    testb $1, %al
4275 ; AVX1OR2-NEXT:    je LBB23_18
4276 ; AVX1OR2-NEXT:  ## %bb.17: ## %cond.load22
4277 ; AVX1OR2-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm1
4278 ; AVX1OR2-NEXT:  LBB23_18: ## %else23
4279 ; AVX1OR2-NEXT:    vpextrb $9, %xmm2, %eax
4280 ; AVX1OR2-NEXT:    testb $1, %al
4281 ; AVX1OR2-NEXT:    je LBB23_20
4282 ; AVX1OR2-NEXT:  ## %bb.19: ## %cond.load25
4283 ; AVX1OR2-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm1
4284 ; AVX1OR2-NEXT:  LBB23_20: ## %else26
4285 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4286 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4287 ; AVX1OR2-NEXT:    vpextrb $10, %xmm2, %eax
4288 ; AVX1OR2-NEXT:    testb $1, %al
4289 ; AVX1OR2-NEXT:    je LBB23_22
4290 ; AVX1OR2-NEXT:  ## %bb.21: ## %cond.load28
4291 ; AVX1OR2-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm1
4292 ; AVX1OR2-NEXT:  LBB23_22: ## %else29
4293 ; AVX1OR2-NEXT:    vpextrb $11, %xmm2, %eax
4294 ; AVX1OR2-NEXT:    testb $1, %al
4295 ; AVX1OR2-NEXT:    je LBB23_24
4296 ; AVX1OR2-NEXT:  ## %bb.23: ## %cond.load31
4297 ; AVX1OR2-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm1
4298 ; AVX1OR2-NEXT:  LBB23_24: ## %else32
4299 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4300 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4301 ; AVX1OR2-NEXT:    vpextrb $12, %xmm2, %eax
4302 ; AVX1OR2-NEXT:    testb $1, %al
4303 ; AVX1OR2-NEXT:    je LBB23_26
4304 ; AVX1OR2-NEXT:  ## %bb.25: ## %cond.load34
4305 ; AVX1OR2-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm1
4306 ; AVX1OR2-NEXT:  LBB23_26: ## %else35
4307 ; AVX1OR2-NEXT:    vpextrb $13, %xmm2, %eax
4308 ; AVX1OR2-NEXT:    testb $1, %al
4309 ; AVX1OR2-NEXT:    je LBB23_28
4310 ; AVX1OR2-NEXT:  ## %bb.27: ## %cond.load37
4311 ; AVX1OR2-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm1
4312 ; AVX1OR2-NEXT:  LBB23_28: ## %else38
4313 ; AVX1OR2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4314 ; AVX1OR2-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
4315 ; AVX1OR2-NEXT:    vpextrb $14, %xmm0, %eax
4316 ; AVX1OR2-NEXT:    testb $1, %al
4317 ; AVX1OR2-NEXT:    je LBB23_30
4318 ; AVX1OR2-NEXT:  ## %bb.29: ## %cond.load40
4319 ; AVX1OR2-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm1
4320 ; AVX1OR2-NEXT:  LBB23_30: ## %else41
4321 ; AVX1OR2-NEXT:    vpextrb $15, %xmm0, %eax
4322 ; AVX1OR2-NEXT:    testb $1, %al
4323 ; AVX1OR2-NEXT:    je LBB23_32
4324 ; AVX1OR2-NEXT:  ## %bb.31: ## %cond.load43
4325 ; AVX1OR2-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm1
4326 ; AVX1OR2-NEXT:  LBB23_32: ## %else44
4327 ; AVX1OR2-NEXT:    vmovdqa %xmm1, %xmm0
4328 ; AVX1OR2-NEXT:    retq
4329 ;
4330 ; AVX512F-LABEL: load_v16i8_v16i8:
4331 ; AVX512F:       ## %bb.0:
4332 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4333 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4334 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4335 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4336 ; AVX512F-NEXT:    kmovw %k0, %eax
4337 ; AVX512F-NEXT:    testb $1, %al
4338 ; AVX512F-NEXT:    je LBB23_2
4339 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
4340 ; AVX512F-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm1
4341 ; AVX512F-NEXT:  LBB23_2: ## %else
4342 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
4343 ; AVX512F-NEXT:    kmovw %k0, %eax
4344 ; AVX512F-NEXT:    testb $1, %al
4345 ; AVX512F-NEXT:    je LBB23_4
4346 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
4347 ; AVX512F-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm1
4348 ; AVX512F-NEXT:  LBB23_4: ## %else2
4349 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4350 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4351 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4352 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4353 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
4354 ; AVX512F-NEXT:    kmovw %k1, %eax
4355 ; AVX512F-NEXT:    testb $1, %al
4356 ; AVX512F-NEXT:    je LBB23_6
4357 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load4
4358 ; AVX512F-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm1
4359 ; AVX512F-NEXT:  LBB23_6: ## %else5
4360 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
4361 ; AVX512F-NEXT:    kmovw %k0, %eax
4362 ; AVX512F-NEXT:    testb $1, %al
4363 ; AVX512F-NEXT:    je LBB23_8
4364 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load7
4365 ; AVX512F-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm1
4366 ; AVX512F-NEXT:  LBB23_8: ## %else8
4367 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4368 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4369 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4370 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4371 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
4372 ; AVX512F-NEXT:    kmovw %k1, %eax
4373 ; AVX512F-NEXT:    testb $1, %al
4374 ; AVX512F-NEXT:    je LBB23_10
4375 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load10
4376 ; AVX512F-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm1
4377 ; AVX512F-NEXT:  LBB23_10: ## %else11
4378 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
4379 ; AVX512F-NEXT:    kmovw %k0, %eax
4380 ; AVX512F-NEXT:    testb $1, %al
4381 ; AVX512F-NEXT:    je LBB23_12
4382 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load13
4383 ; AVX512F-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm1
4384 ; AVX512F-NEXT:  LBB23_12: ## %else14
4385 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4386 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4387 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4388 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4389 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
4390 ; AVX512F-NEXT:    kmovw %k1, %eax
4391 ; AVX512F-NEXT:    testb $1, %al
4392 ; AVX512F-NEXT:    je LBB23_14
4393 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load16
4394 ; AVX512F-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm1
4395 ; AVX512F-NEXT:  LBB23_14: ## %else17
4396 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
4397 ; AVX512F-NEXT:    kmovw %k0, %eax
4398 ; AVX512F-NEXT:    testb $1, %al
4399 ; AVX512F-NEXT:    je LBB23_16
4400 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load19
4401 ; AVX512F-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm1
4402 ; AVX512F-NEXT:  LBB23_16: ## %else20
4403 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4404 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4405 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4406 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4407 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
4408 ; AVX512F-NEXT:    kmovw %k1, %eax
4409 ; AVX512F-NEXT:    testb $1, %al
4410 ; AVX512F-NEXT:    je LBB23_18
4411 ; AVX512F-NEXT:  ## %bb.17: ## %cond.load22
4412 ; AVX512F-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm1
4413 ; AVX512F-NEXT:  LBB23_18: ## %else23
4414 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
4415 ; AVX512F-NEXT:    kmovw %k0, %eax
4416 ; AVX512F-NEXT:    testb $1, %al
4417 ; AVX512F-NEXT:    je LBB23_20
4418 ; AVX512F-NEXT:  ## %bb.19: ## %cond.load25
4419 ; AVX512F-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm1
4420 ; AVX512F-NEXT:  LBB23_20: ## %else26
4421 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4422 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4423 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4424 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4425 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k1
4426 ; AVX512F-NEXT:    kmovw %k1, %eax
4427 ; AVX512F-NEXT:    testb $1, %al
4428 ; AVX512F-NEXT:    je LBB23_22
4429 ; AVX512F-NEXT:  ## %bb.21: ## %cond.load28
4430 ; AVX512F-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm1
4431 ; AVX512F-NEXT:  LBB23_22: ## %else29
4432 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
4433 ; AVX512F-NEXT:    kmovw %k0, %eax
4434 ; AVX512F-NEXT:    testb $1, %al
4435 ; AVX512F-NEXT:    je LBB23_24
4436 ; AVX512F-NEXT:  ## %bb.23: ## %cond.load31
4437 ; AVX512F-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm1
4438 ; AVX512F-NEXT:  LBB23_24: ## %else32
4439 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4440 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4441 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
4442 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
4443 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
4444 ; AVX512F-NEXT:    kmovw %k1, %eax
4445 ; AVX512F-NEXT:    testb $1, %al
4446 ; AVX512F-NEXT:    je LBB23_26
4447 ; AVX512F-NEXT:  ## %bb.25: ## %cond.load34
4448 ; AVX512F-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm1
4449 ; AVX512F-NEXT:  LBB23_26: ## %else35
4450 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
4451 ; AVX512F-NEXT:    kmovw %k0, %eax
4452 ; AVX512F-NEXT:    testb $1, %al
4453 ; AVX512F-NEXT:    je LBB23_28
4454 ; AVX512F-NEXT:  ## %bb.27: ## %cond.load37
4455 ; AVX512F-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm1
4456 ; AVX512F-NEXT:  LBB23_28: ## %else38
4457 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4458 ; AVX512F-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
4459 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
4460 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
4461 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
4462 ; AVX512F-NEXT:    kmovw %k1, %eax
4463 ; AVX512F-NEXT:    testb $1, %al
4464 ; AVX512F-NEXT:    je LBB23_30
4465 ; AVX512F-NEXT:  ## %bb.29: ## %cond.load40
4466 ; AVX512F-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm1
4467 ; AVX512F-NEXT:  LBB23_30: ## %else41
4468 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
4469 ; AVX512F-NEXT:    kmovw %k0, %eax
4470 ; AVX512F-NEXT:    testb $1, %al
4471 ; AVX512F-NEXT:    je LBB23_32
4472 ; AVX512F-NEXT:  ## %bb.31: ## %cond.load43
4473 ; AVX512F-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm1
4474 ; AVX512F-NEXT:  LBB23_32: ## %else44
4475 ; AVX512F-NEXT:    vmovdqa %xmm1, %xmm0
4476 ; AVX512F-NEXT:    vzeroupper
4477 ; AVX512F-NEXT:    retq
4478 ;
4479 ; AVX512VLDQ-LABEL: load_v16i8_v16i8:
4480 ; AVX512VLDQ:       ## %bb.0:
4481 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4482 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4483 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4484 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4485 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4486 ; AVX512VLDQ-NEXT:    testb $1, %al
4487 ; AVX512VLDQ-NEXT:    je LBB23_2
4488 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
4489 ; AVX512VLDQ-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm1
4490 ; AVX512VLDQ-NEXT:  LBB23_2: ## %else
4491 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
4492 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4493 ; AVX512VLDQ-NEXT:    testb $1, %al
4494 ; AVX512VLDQ-NEXT:    je LBB23_4
4495 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
4496 ; AVX512VLDQ-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm1
4497 ; AVX512VLDQ-NEXT:  LBB23_4: ## %else2
4498 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4499 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4500 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4501 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4502 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k1
4503 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4504 ; AVX512VLDQ-NEXT:    testb $1, %al
4505 ; AVX512VLDQ-NEXT:    je LBB23_6
4506 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load4
4507 ; AVX512VLDQ-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm1
4508 ; AVX512VLDQ-NEXT:  LBB23_6: ## %else5
4509 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
4510 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4511 ; AVX512VLDQ-NEXT:    testb $1, %al
4512 ; AVX512VLDQ-NEXT:    je LBB23_8
4513 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load7
4514 ; AVX512VLDQ-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm1
4515 ; AVX512VLDQ-NEXT:  LBB23_8: ## %else8
4516 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4517 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4518 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4519 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4520 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k1
4521 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4522 ; AVX512VLDQ-NEXT:    testb $1, %al
4523 ; AVX512VLDQ-NEXT:    je LBB23_10
4524 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load10
4525 ; AVX512VLDQ-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm1
4526 ; AVX512VLDQ-NEXT:  LBB23_10: ## %else11
4527 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
4528 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4529 ; AVX512VLDQ-NEXT:    testb $1, %al
4530 ; AVX512VLDQ-NEXT:    je LBB23_12
4531 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load13
4532 ; AVX512VLDQ-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm1
4533 ; AVX512VLDQ-NEXT:  LBB23_12: ## %else14
4534 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4535 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4536 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4537 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4538 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k1
4539 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4540 ; AVX512VLDQ-NEXT:    testb $1, %al
4541 ; AVX512VLDQ-NEXT:    je LBB23_14
4542 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load16
4543 ; AVX512VLDQ-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm1
4544 ; AVX512VLDQ-NEXT:  LBB23_14: ## %else17
4545 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
4546 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4547 ; AVX512VLDQ-NEXT:    testb $1, %al
4548 ; AVX512VLDQ-NEXT:    je LBB23_16
4549 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load19
4550 ; AVX512VLDQ-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm1
4551 ; AVX512VLDQ-NEXT:  LBB23_16: ## %else20
4552 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4553 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4554 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4555 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4556 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k1
4557 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4558 ; AVX512VLDQ-NEXT:    testb $1, %al
4559 ; AVX512VLDQ-NEXT:    je LBB23_18
4560 ; AVX512VLDQ-NEXT:  ## %bb.17: ## %cond.load22
4561 ; AVX512VLDQ-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm1
4562 ; AVX512VLDQ-NEXT:  LBB23_18: ## %else23
4563 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
4564 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4565 ; AVX512VLDQ-NEXT:    testb $1, %al
4566 ; AVX512VLDQ-NEXT:    je LBB23_20
4567 ; AVX512VLDQ-NEXT:  ## %bb.19: ## %cond.load25
4568 ; AVX512VLDQ-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm1
4569 ; AVX512VLDQ-NEXT:  LBB23_20: ## %else26
4570 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4571 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4572 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4573 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4574 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k1
4575 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4576 ; AVX512VLDQ-NEXT:    testb $1, %al
4577 ; AVX512VLDQ-NEXT:    je LBB23_22
4578 ; AVX512VLDQ-NEXT:  ## %bb.21: ## %cond.load28
4579 ; AVX512VLDQ-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm1
4580 ; AVX512VLDQ-NEXT:  LBB23_22: ## %else29
4581 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
4582 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4583 ; AVX512VLDQ-NEXT:    testb $1, %al
4584 ; AVX512VLDQ-NEXT:    je LBB23_24
4585 ; AVX512VLDQ-NEXT:  ## %bb.23: ## %cond.load31
4586 ; AVX512VLDQ-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm1
4587 ; AVX512VLDQ-NEXT:  LBB23_24: ## %else32
4588 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4589 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
4590 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
4591 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
4592 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k1
4593 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4594 ; AVX512VLDQ-NEXT:    testb $1, %al
4595 ; AVX512VLDQ-NEXT:    je LBB23_26
4596 ; AVX512VLDQ-NEXT:  ## %bb.25: ## %cond.load34
4597 ; AVX512VLDQ-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm1
4598 ; AVX512VLDQ-NEXT:  LBB23_26: ## %else35
4599 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
4600 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4601 ; AVX512VLDQ-NEXT:    testb $1, %al
4602 ; AVX512VLDQ-NEXT:    je LBB23_28
4603 ; AVX512VLDQ-NEXT:  ## %bb.27: ## %cond.load37
4604 ; AVX512VLDQ-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm1
4605 ; AVX512VLDQ-NEXT:  LBB23_28: ## %else38
4606 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
4607 ; AVX512VLDQ-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
4608 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm0, %zmm0
4609 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
4610 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k1
4611 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
4612 ; AVX512VLDQ-NEXT:    testb $1, %al
4613 ; AVX512VLDQ-NEXT:    je LBB23_30
4614 ; AVX512VLDQ-NEXT:  ## %bb.29: ## %cond.load40
4615 ; AVX512VLDQ-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm1
4616 ; AVX512VLDQ-NEXT:  LBB23_30: ## %else41
4617 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
4618 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
4619 ; AVX512VLDQ-NEXT:    testb $1, %al
4620 ; AVX512VLDQ-NEXT:    je LBB23_32
4621 ; AVX512VLDQ-NEXT:  ## %bb.31: ## %cond.load43
4622 ; AVX512VLDQ-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm1
4623 ; AVX512VLDQ-NEXT:  LBB23_32: ## %else44
4624 ; AVX512VLDQ-NEXT:    vmovdqa %xmm1, %xmm0
4625 ; AVX512VLDQ-NEXT:    vzeroupper
4626 ; AVX512VLDQ-NEXT:    retq
4627 ;
4628 ; AVX512VLBW-LABEL: load_v16i8_v16i8:
4629 ; AVX512VLBW:       ## %bb.0:
4630 ; AVX512VLBW-NEXT:    vpmovb2m %xmm0, %k1
4631 ; AVX512VLBW-NEXT:    vpblendmb (%rdi), %xmm1, %xmm0 {%k1}
4632 ; AVX512VLBW-NEXT:    retq
4633   %mask = icmp slt <16 x i8> %trigger, zeroinitializer
4634   %res = call <16 x i8> @llvm.masked.load.v16i8.p0v16i8(<16 x i8>* %addr, i32 4, <16 x i1> %mask, <16 x i8> %dst)
4635   ret <16 x i8> %res
4636 }
4637
4638 define <32 x i8> @load_v32i8_v32i8(<32 x i8> %trigger, <32 x i8>* %addr, <32 x i8> %dst) {
4639 ; SSE2-LABEL: load_v32i8_v32i8:
4640 ; SSE2:       ## %bb.0:
4641 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4642 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4643 ; SSE2-NEXT:    movd %xmm4, %eax
4644 ; SSE2-NEXT:    testb $1, %al
4645 ; SSE2-NEXT:    je LBB24_2
4646 ; SSE2-NEXT:  ## %bb.1: ## %cond.load
4647 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
4648 ; SSE2-NEXT:    pand %xmm4, %xmm2
4649 ; SSE2-NEXT:    movzbl (%rdi), %ecx
4650 ; SSE2-NEXT:    movd %ecx, %xmm5
4651 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4652 ; SSE2-NEXT:    por %xmm4, %xmm2
4653 ; SSE2-NEXT:  LBB24_2: ## %else
4654 ; SSE2-NEXT:    shrl $8, %eax
4655 ; SSE2-NEXT:    testb $1, %al
4656 ; SSE2-NEXT:    je LBB24_4
4657 ; SSE2-NEXT:  ## %bb.3: ## %cond.load1
4658 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
4659 ; SSE2-NEXT:    pand %xmm4, %xmm2
4660 ; SSE2-NEXT:    movzbl 1(%rdi), %eax
4661 ; SSE2-NEXT:    movd %eax, %xmm5
4662 ; SSE2-NEXT:    psllw $8, %xmm5
4663 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4664 ; SSE2-NEXT:    por %xmm4, %xmm2
4665 ; SSE2-NEXT:  LBB24_4: ## %else2
4666 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4667 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4668 ; SSE2-NEXT:    movd %xmm4, %eax
4669 ; SSE2-NEXT:    movl %eax, %ecx
4670 ; SSE2-NEXT:    shrl $16, %ecx
4671 ; SSE2-NEXT:    testb $1, %cl
4672 ; SSE2-NEXT:    je LBB24_6
4673 ; SSE2-NEXT:  ## %bb.5: ## %cond.load4
4674 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
4675 ; SSE2-NEXT:    pand %xmm4, %xmm2
4676 ; SSE2-NEXT:    movzbl 2(%rdi), %ecx
4677 ; SSE2-NEXT:    movd %ecx, %xmm5
4678 ; SSE2-NEXT:    pslld $16, %xmm5
4679 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4680 ; SSE2-NEXT:    por %xmm4, %xmm2
4681 ; SSE2-NEXT:  LBB24_6: ## %else5
4682 ; SSE2-NEXT:    shrl $24, %eax
4683 ; SSE2-NEXT:    testb $1, %al
4684 ; SSE2-NEXT:    je LBB24_8
4685 ; SSE2-NEXT:  ## %bb.7: ## %cond.load7
4686 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
4687 ; SSE2-NEXT:    pand %xmm4, %xmm2
4688 ; SSE2-NEXT:    movzbl 3(%rdi), %eax
4689 ; SSE2-NEXT:    movd %eax, %xmm5
4690 ; SSE2-NEXT:    pslld $24, %xmm5
4691 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4692 ; SSE2-NEXT:    por %xmm4, %xmm2
4693 ; SSE2-NEXT:  LBB24_8: ## %else8
4694 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4695 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4696 ; SSE2-NEXT:    pextrw $2, %xmm4, %eax
4697 ; SSE2-NEXT:    testb $1, %al
4698 ; SSE2-NEXT:    je LBB24_10
4699 ; SSE2-NEXT:  ## %bb.9: ## %cond.load10
4700 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
4701 ; SSE2-NEXT:    pand %xmm4, %xmm2
4702 ; SSE2-NEXT:    movzbl 4(%rdi), %ecx
4703 ; SSE2-NEXT:    movd %ecx, %xmm5
4704 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,0,1,1]
4705 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4706 ; SSE2-NEXT:    por %xmm4, %xmm2
4707 ; SSE2-NEXT:  LBB24_10: ## %else11
4708 ; SSE2-NEXT:    shrl $8, %eax
4709 ; SSE2-NEXT:    testb $1, %al
4710 ; SSE2-NEXT:    je LBB24_12
4711 ; SSE2-NEXT:  ## %bb.11: ## %cond.load13
4712 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
4713 ; SSE2-NEXT:    pand %xmm4, %xmm2
4714 ; SSE2-NEXT:    movzbl 5(%rdi), %eax
4715 ; SSE2-NEXT:    movd %eax, %xmm5
4716 ; SSE2-NEXT:    psllq $40, %xmm5
4717 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4718 ; SSE2-NEXT:    por %xmm4, %xmm2
4719 ; SSE2-NEXT:  LBB24_12: ## %else14
4720 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4721 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4722 ; SSE2-NEXT:    pextrw $3, %xmm4, %eax
4723 ; SSE2-NEXT:    testb $1, %al
4724 ; SSE2-NEXT:    je LBB24_14
4725 ; SSE2-NEXT:  ## %bb.13: ## %cond.load16
4726 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
4727 ; SSE2-NEXT:    pand %xmm4, %xmm2
4728 ; SSE2-NEXT:    movzbl 6(%rdi), %ecx
4729 ; SSE2-NEXT:    movd %ecx, %xmm5
4730 ; SSE2-NEXT:    psllq $48, %xmm5
4731 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4732 ; SSE2-NEXT:    por %xmm4, %xmm2
4733 ; SSE2-NEXT:  LBB24_14: ## %else17
4734 ; SSE2-NEXT:    shrl $8, %eax
4735 ; SSE2-NEXT:    testb $1, %al
4736 ; SSE2-NEXT:    je LBB24_16
4737 ; SSE2-NEXT:  ## %bb.15: ## %cond.load19
4738 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
4739 ; SSE2-NEXT:    pand %xmm4, %xmm2
4740 ; SSE2-NEXT:    movzbl 7(%rdi), %eax
4741 ; SSE2-NEXT:    movd %eax, %xmm5
4742 ; SSE2-NEXT:    psllq $56, %xmm5
4743 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4744 ; SSE2-NEXT:    por %xmm4, %xmm2
4745 ; SSE2-NEXT:  LBB24_16: ## %else20
4746 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4747 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4748 ; SSE2-NEXT:    pextrw $4, %xmm4, %eax
4749 ; SSE2-NEXT:    testb $1, %al
4750 ; SSE2-NEXT:    je LBB24_18
4751 ; SSE2-NEXT:  ## %bb.17: ## %cond.load22
4752 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
4753 ; SSE2-NEXT:    pand %xmm4, %xmm2
4754 ; SSE2-NEXT:    movzbl 8(%rdi), %ecx
4755 ; SSE2-NEXT:    movd %ecx, %xmm5
4756 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,1,0,1]
4757 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4758 ; SSE2-NEXT:    por %xmm4, %xmm2
4759 ; SSE2-NEXT:  LBB24_18: ## %else23
4760 ; SSE2-NEXT:    shrl $8, %eax
4761 ; SSE2-NEXT:    testb $1, %al
4762 ; SSE2-NEXT:    je LBB24_20
4763 ; SSE2-NEXT:  ## %bb.19: ## %cond.load25
4764 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
4765 ; SSE2-NEXT:    pand %xmm4, %xmm2
4766 ; SSE2-NEXT:    movzbl 9(%rdi), %eax
4767 ; SSE2-NEXT:    movd %eax, %xmm5
4768 ; SSE2-NEXT:    pslldq {{.*#+}} xmm5 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm5[0,1,2,3,4,5,6]
4769 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4770 ; SSE2-NEXT:    por %xmm4, %xmm2
4771 ; SSE2-NEXT:  LBB24_20: ## %else26
4772 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4773 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4774 ; SSE2-NEXT:    pextrw $5, %xmm4, %eax
4775 ; SSE2-NEXT:    testb $1, %al
4776 ; SSE2-NEXT:    je LBB24_22
4777 ; SSE2-NEXT:  ## %bb.21: ## %cond.load28
4778 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
4779 ; SSE2-NEXT:    pand %xmm4, %xmm2
4780 ; SSE2-NEXT:    movzbl 10(%rdi), %ecx
4781 ; SSE2-NEXT:    movd %ecx, %xmm5
4782 ; SSE2-NEXT:    pslldq {{.*#+}} xmm5 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm5[0,1,2,3,4,5]
4783 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4784 ; SSE2-NEXT:    por %xmm4, %xmm2
4785 ; SSE2-NEXT:  LBB24_22: ## %else29
4786 ; SSE2-NEXT:    shrl $8, %eax
4787 ; SSE2-NEXT:    testb $1, %al
4788 ; SSE2-NEXT:    je LBB24_24
4789 ; SSE2-NEXT:  ## %bb.23: ## %cond.load31
4790 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
4791 ; SSE2-NEXT:    pand %xmm4, %xmm2
4792 ; SSE2-NEXT:    movzbl 11(%rdi), %eax
4793 ; SSE2-NEXT:    movd %eax, %xmm5
4794 ; SSE2-NEXT:    pslldq {{.*#+}} xmm5 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm5[0,1,2,3,4]
4795 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4796 ; SSE2-NEXT:    por %xmm4, %xmm2
4797 ; SSE2-NEXT:  LBB24_24: ## %else32
4798 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4799 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4800 ; SSE2-NEXT:    pextrw $6, %xmm4, %eax
4801 ; SSE2-NEXT:    testb $1, %al
4802 ; SSE2-NEXT:    je LBB24_26
4803 ; SSE2-NEXT:  ## %bb.25: ## %cond.load34
4804 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
4805 ; SSE2-NEXT:    pand %xmm4, %xmm2
4806 ; SSE2-NEXT:    movzbl 12(%rdi), %ecx
4807 ; SSE2-NEXT:    movd %ecx, %xmm5
4808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[0,1,2,0]
4809 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4810 ; SSE2-NEXT:    por %xmm4, %xmm2
4811 ; SSE2-NEXT:  LBB24_26: ## %else35
4812 ; SSE2-NEXT:    shrl $8, %eax
4813 ; SSE2-NEXT:    testb $1, %al
4814 ; SSE2-NEXT:    je LBB24_28
4815 ; SSE2-NEXT:  ## %bb.27: ## %cond.load37
4816 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
4817 ; SSE2-NEXT:    pand %xmm4, %xmm2
4818 ; SSE2-NEXT:    movzbl 13(%rdi), %eax
4819 ; SSE2-NEXT:    movd %eax, %xmm5
4820 ; SSE2-NEXT:    pslldq {{.*#+}} xmm5 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm5[0,1,2]
4821 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4822 ; SSE2-NEXT:    por %xmm4, %xmm2
4823 ; SSE2-NEXT:  LBB24_28: ## %else38
4824 ; SSE2-NEXT:    pxor %xmm4, %xmm4
4825 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
4826 ; SSE2-NEXT:    pextrw $7, %xmm4, %eax
4827 ; SSE2-NEXT:    testb $1, %al
4828 ; SSE2-NEXT:    je LBB24_30
4829 ; SSE2-NEXT:  ## %bb.29: ## %cond.load40
4830 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
4831 ; SSE2-NEXT:    pand %xmm0, %xmm2
4832 ; SSE2-NEXT:    movzbl 14(%rdi), %ecx
4833 ; SSE2-NEXT:    movd %ecx, %xmm4
4834 ; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1]
4835 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4836 ; SSE2-NEXT:    por %xmm0, %xmm2
4837 ; SSE2-NEXT:  LBB24_30: ## %else41
4838 ; SSE2-NEXT:    shrl $8, %eax
4839 ; SSE2-NEXT:    testb $1, %al
4840 ; SSE2-NEXT:    je LBB24_32
4841 ; SSE2-NEXT:  ## %bb.31: ## %cond.load43
4842 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
4843 ; SSE2-NEXT:    movzbl 15(%rdi), %eax
4844 ; SSE2-NEXT:    movd %eax, %xmm0
4845 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
4846 ; SSE2-NEXT:    por %xmm0, %xmm2
4847 ; SSE2-NEXT:  LBB24_32: ## %else44
4848 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4849 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4850 ; SSE2-NEXT:    movd %xmm0, %eax
4851 ; SSE2-NEXT:    testb $1, %al
4852 ; SSE2-NEXT:    je LBB24_34
4853 ; SSE2-NEXT:  ## %bb.33: ## %cond.load46
4854 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
4855 ; SSE2-NEXT:    pand %xmm0, %xmm3
4856 ; SSE2-NEXT:    movzbl 16(%rdi), %ecx
4857 ; SSE2-NEXT:    movd %ecx, %xmm4
4858 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4859 ; SSE2-NEXT:    por %xmm0, %xmm3
4860 ; SSE2-NEXT:  LBB24_34: ## %else47
4861 ; SSE2-NEXT:    shrl $8, %eax
4862 ; SSE2-NEXT:    testb $1, %al
4863 ; SSE2-NEXT:    je LBB24_36
4864 ; SSE2-NEXT:  ## %bb.35: ## %cond.load49
4865 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
4866 ; SSE2-NEXT:    pand %xmm0, %xmm3
4867 ; SSE2-NEXT:    movzbl 17(%rdi), %eax
4868 ; SSE2-NEXT:    movd %eax, %xmm4
4869 ; SSE2-NEXT:    psllw $8, %xmm4
4870 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4871 ; SSE2-NEXT:    por %xmm0, %xmm3
4872 ; SSE2-NEXT:  LBB24_36: ## %else50
4873 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4874 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4875 ; SSE2-NEXT:    movd %xmm0, %eax
4876 ; SSE2-NEXT:    movl %eax, %ecx
4877 ; SSE2-NEXT:    shrl $16, %ecx
4878 ; SSE2-NEXT:    testb $1, %cl
4879 ; SSE2-NEXT:    je LBB24_38
4880 ; SSE2-NEXT:  ## %bb.37: ## %cond.load52
4881 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255]
4882 ; SSE2-NEXT:    pand %xmm0, %xmm3
4883 ; SSE2-NEXT:    movzbl 18(%rdi), %ecx
4884 ; SSE2-NEXT:    movd %ecx, %xmm4
4885 ; SSE2-NEXT:    pslld $16, %xmm4
4886 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4887 ; SSE2-NEXT:    por %xmm0, %xmm3
4888 ; SSE2-NEXT:  LBB24_38: ## %else53
4889 ; SSE2-NEXT:    shrl $24, %eax
4890 ; SSE2-NEXT:    testb $1, %al
4891 ; SSE2-NEXT:    je LBB24_40
4892 ; SSE2-NEXT:  ## %bb.39: ## %cond.load55
4893 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255]
4894 ; SSE2-NEXT:    pand %xmm0, %xmm3
4895 ; SSE2-NEXT:    movzbl 19(%rdi), %eax
4896 ; SSE2-NEXT:    movd %eax, %xmm4
4897 ; SSE2-NEXT:    pslld $24, %xmm4
4898 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4899 ; SSE2-NEXT:    por %xmm0, %xmm3
4900 ; SSE2-NEXT:  LBB24_40: ## %else56
4901 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4902 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4903 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
4904 ; SSE2-NEXT:    testb $1, %al
4905 ; SSE2-NEXT:    je LBB24_42
4906 ; SSE2-NEXT:  ## %bb.41: ## %cond.load58
4907 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255]
4908 ; SSE2-NEXT:    pand %xmm0, %xmm3
4909 ; SSE2-NEXT:    movzbl 20(%rdi), %ecx
4910 ; SSE2-NEXT:    movd %ecx, %xmm4
4911 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,0,1,1]
4912 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4913 ; SSE2-NEXT:    por %xmm0, %xmm3
4914 ; SSE2-NEXT:  LBB24_42: ## %else59
4915 ; SSE2-NEXT:    shrl $8, %eax
4916 ; SSE2-NEXT:    testb $1, %al
4917 ; SSE2-NEXT:    je LBB24_44
4918 ; SSE2-NEXT:  ## %bb.43: ## %cond.load61
4919 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255]
4920 ; SSE2-NEXT:    pand %xmm0, %xmm3
4921 ; SSE2-NEXT:    movzbl 21(%rdi), %eax
4922 ; SSE2-NEXT:    movd %eax, %xmm4
4923 ; SSE2-NEXT:    psllq $40, %xmm4
4924 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4925 ; SSE2-NEXT:    por %xmm0, %xmm3
4926 ; SSE2-NEXT:  LBB24_44: ## %else62
4927 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4928 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4929 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
4930 ; SSE2-NEXT:    testb $1, %al
4931 ; SSE2-NEXT:    je LBB24_46
4932 ; SSE2-NEXT:  ## %bb.45: ## %cond.load64
4933 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255]
4934 ; SSE2-NEXT:    pand %xmm0, %xmm3
4935 ; SSE2-NEXT:    movzbl 22(%rdi), %ecx
4936 ; SSE2-NEXT:    movd %ecx, %xmm4
4937 ; SSE2-NEXT:    psllq $48, %xmm4
4938 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4939 ; SSE2-NEXT:    por %xmm0, %xmm3
4940 ; SSE2-NEXT:  LBB24_46: ## %else65
4941 ; SSE2-NEXT:    shrl $8, %eax
4942 ; SSE2-NEXT:    testb $1, %al
4943 ; SSE2-NEXT:    je LBB24_48
4944 ; SSE2-NEXT:  ## %bb.47: ## %cond.load67
4945 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255]
4946 ; SSE2-NEXT:    pand %xmm0, %xmm3
4947 ; SSE2-NEXT:    movzbl 23(%rdi), %eax
4948 ; SSE2-NEXT:    movd %eax, %xmm4
4949 ; SSE2-NEXT:    psllq $56, %xmm4
4950 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4951 ; SSE2-NEXT:    por %xmm0, %xmm3
4952 ; SSE2-NEXT:  LBB24_48: ## %else68
4953 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4954 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4955 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
4956 ; SSE2-NEXT:    testb $1, %al
4957 ; SSE2-NEXT:    je LBB24_50
4958 ; SSE2-NEXT:  ## %bb.49: ## %cond.load70
4959 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255]
4960 ; SSE2-NEXT:    pand %xmm0, %xmm3
4961 ; SSE2-NEXT:    movzbl 24(%rdi), %ecx
4962 ; SSE2-NEXT:    movd %ecx, %xmm4
4963 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,1,0,1]
4964 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4965 ; SSE2-NEXT:    por %xmm0, %xmm3
4966 ; SSE2-NEXT:  LBB24_50: ## %else71
4967 ; SSE2-NEXT:    shrl $8, %eax
4968 ; SSE2-NEXT:    testb $1, %al
4969 ; SSE2-NEXT:    je LBB24_52
4970 ; SSE2-NEXT:  ## %bb.51: ## %cond.load73
4971 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255]
4972 ; SSE2-NEXT:    pand %xmm0, %xmm3
4973 ; SSE2-NEXT:    movzbl 25(%rdi), %eax
4974 ; SSE2-NEXT:    movd %eax, %xmm4
4975 ; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5,6]
4976 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4977 ; SSE2-NEXT:    por %xmm0, %xmm3
4978 ; SSE2-NEXT:  LBB24_52: ## %else74
4979 ; SSE2-NEXT:    pxor %xmm0, %xmm0
4980 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
4981 ; SSE2-NEXT:    pextrw $5, %xmm0, %eax
4982 ; SSE2-NEXT:    testb $1, %al
4983 ; SSE2-NEXT:    je LBB24_54
4984 ; SSE2-NEXT:  ## %bb.53: ## %cond.load76
4985 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255]
4986 ; SSE2-NEXT:    pand %xmm0, %xmm3
4987 ; SSE2-NEXT:    movzbl 26(%rdi), %ecx
4988 ; SSE2-NEXT:    movd %ecx, %xmm4
4989 ; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4,5]
4990 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4991 ; SSE2-NEXT:    por %xmm0, %xmm3
4992 ; SSE2-NEXT:  LBB24_54: ## %else77
4993 ; SSE2-NEXT:    shrl $8, %eax
4994 ; SSE2-NEXT:    testb $1, %al
4995 ; SSE2-NEXT:    je LBB24_56
4996 ; SSE2-NEXT:  ## %bb.55: ## %cond.load79
4997 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255]
4998 ; SSE2-NEXT:    pand %xmm0, %xmm3
4999 ; SSE2-NEXT:    movzbl 27(%rdi), %eax
5000 ; SSE2-NEXT:    movd %eax, %xmm4
5001 ; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2,3,4]
5002 ; SSE2-NEXT:    pandn %xmm4, %xmm0
5003 ; SSE2-NEXT:    por %xmm0, %xmm3
5004 ; SSE2-NEXT:  LBB24_56: ## %else80
5005 ; SSE2-NEXT:    pxor %xmm0, %xmm0
5006 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
5007 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
5008 ; SSE2-NEXT:    testb $1, %al
5009 ; SSE2-NEXT:    je LBB24_58
5010 ; SSE2-NEXT:  ## %bb.57: ## %cond.load82
5011 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255]
5012 ; SSE2-NEXT:    pand %xmm0, %xmm3
5013 ; SSE2-NEXT:    movzbl 28(%rdi), %ecx
5014 ; SSE2-NEXT:    movd %ecx, %xmm4
5015 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[0,1,2,0]
5016 ; SSE2-NEXT:    pandn %xmm4, %xmm0
5017 ; SSE2-NEXT:    por %xmm0, %xmm3
5018 ; SSE2-NEXT:  LBB24_58: ## %else83
5019 ; SSE2-NEXT:    shrl $8, %eax
5020 ; SSE2-NEXT:    testb $1, %al
5021 ; SSE2-NEXT:    je LBB24_60
5022 ; SSE2-NEXT:  ## %bb.59: ## %cond.load85
5023 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255]
5024 ; SSE2-NEXT:    pand %xmm0, %xmm3
5025 ; SSE2-NEXT:    movzbl 29(%rdi), %eax
5026 ; SSE2-NEXT:    movd %eax, %xmm4
5027 ; SSE2-NEXT:    pslldq {{.*#+}} xmm4 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm4[0,1,2]
5028 ; SSE2-NEXT:    pandn %xmm4, %xmm0
5029 ; SSE2-NEXT:    por %xmm0, %xmm3
5030 ; SSE2-NEXT:  LBB24_60: ## %else86
5031 ; SSE2-NEXT:    pxor %xmm0, %xmm0
5032 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
5033 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
5034 ; SSE2-NEXT:    testb $1, %al
5035 ; SSE2-NEXT:    je LBB24_62
5036 ; SSE2-NEXT:  ## %bb.61: ## %cond.load88
5037 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255]
5038 ; SSE2-NEXT:    pand %xmm0, %xmm3
5039 ; SSE2-NEXT:    movzbl 30(%rdi), %ecx
5040 ; SSE2-NEXT:    movd %ecx, %xmm1
5041 ; SSE2-NEXT:    pslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0,1]
5042 ; SSE2-NEXT:    pandn %xmm1, %xmm0
5043 ; SSE2-NEXT:    por %xmm0, %xmm3
5044 ; SSE2-NEXT:  LBB24_62: ## %else89
5045 ; SSE2-NEXT:    shrl $8, %eax
5046 ; SSE2-NEXT:    testb $1, %al
5047 ; SSE2-NEXT:    je LBB24_64
5048 ; SSE2-NEXT:  ## %bb.63: ## %cond.load91
5049 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm3
5050 ; SSE2-NEXT:    movzbl 31(%rdi), %eax
5051 ; SSE2-NEXT:    movd %eax, %xmm0
5052 ; SSE2-NEXT:    pslldq {{.*#+}} xmm0 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm0[0]
5053 ; SSE2-NEXT:    por %xmm0, %xmm3
5054 ; SSE2-NEXT:  LBB24_64: ## %else92
5055 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
5056 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
5057 ; SSE2-NEXT:    retq
5058 ;
5059 ; SSE42-LABEL: load_v32i8_v32i8:
5060 ; SSE42:       ## %bb.0:
5061 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5062 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5063 ; SSE42-NEXT:    pextrb $0, %xmm4, %eax
5064 ; SSE42-NEXT:    testb $1, %al
5065 ; SSE42-NEXT:    je LBB24_2
5066 ; SSE42-NEXT:  ## %bb.1: ## %cond.load
5067 ; SSE42-NEXT:    pinsrb $0, (%rdi), %xmm2
5068 ; SSE42-NEXT:  LBB24_2: ## %else
5069 ; SSE42-NEXT:    pextrb $1, %xmm4, %eax
5070 ; SSE42-NEXT:    testb $1, %al
5071 ; SSE42-NEXT:    je LBB24_4
5072 ; SSE42-NEXT:  ## %bb.3: ## %cond.load1
5073 ; SSE42-NEXT:    pinsrb $1, 1(%rdi), %xmm2
5074 ; SSE42-NEXT:  LBB24_4: ## %else2
5075 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5076 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5077 ; SSE42-NEXT:    pextrb $2, %xmm4, %eax
5078 ; SSE42-NEXT:    testb $1, %al
5079 ; SSE42-NEXT:    je LBB24_6
5080 ; SSE42-NEXT:  ## %bb.5: ## %cond.load4
5081 ; SSE42-NEXT:    pinsrb $2, 2(%rdi), %xmm2
5082 ; SSE42-NEXT:  LBB24_6: ## %else5
5083 ; SSE42-NEXT:    pextrb $3, %xmm4, %eax
5084 ; SSE42-NEXT:    testb $1, %al
5085 ; SSE42-NEXT:    je LBB24_8
5086 ; SSE42-NEXT:  ## %bb.7: ## %cond.load7
5087 ; SSE42-NEXT:    pinsrb $3, 3(%rdi), %xmm2
5088 ; SSE42-NEXT:  LBB24_8: ## %else8
5089 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5090 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5091 ; SSE42-NEXT:    pextrb $4, %xmm4, %eax
5092 ; SSE42-NEXT:    testb $1, %al
5093 ; SSE42-NEXT:    je LBB24_10
5094 ; SSE42-NEXT:  ## %bb.9: ## %cond.load10
5095 ; SSE42-NEXT:    pinsrb $4, 4(%rdi), %xmm2
5096 ; SSE42-NEXT:  LBB24_10: ## %else11
5097 ; SSE42-NEXT:    pextrb $5, %xmm4, %eax
5098 ; SSE42-NEXT:    testb $1, %al
5099 ; SSE42-NEXT:    je LBB24_12
5100 ; SSE42-NEXT:  ## %bb.11: ## %cond.load13
5101 ; SSE42-NEXT:    pinsrb $5, 5(%rdi), %xmm2
5102 ; SSE42-NEXT:  LBB24_12: ## %else14
5103 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5104 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5105 ; SSE42-NEXT:    pextrb $6, %xmm4, %eax
5106 ; SSE42-NEXT:    testb $1, %al
5107 ; SSE42-NEXT:    je LBB24_14
5108 ; SSE42-NEXT:  ## %bb.13: ## %cond.load16
5109 ; SSE42-NEXT:    pinsrb $6, 6(%rdi), %xmm2
5110 ; SSE42-NEXT:  LBB24_14: ## %else17
5111 ; SSE42-NEXT:    pextrb $7, %xmm4, %eax
5112 ; SSE42-NEXT:    testb $1, %al
5113 ; SSE42-NEXT:    je LBB24_16
5114 ; SSE42-NEXT:  ## %bb.15: ## %cond.load19
5115 ; SSE42-NEXT:    pinsrb $7, 7(%rdi), %xmm2
5116 ; SSE42-NEXT:  LBB24_16: ## %else20
5117 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5118 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5119 ; SSE42-NEXT:    pextrb $8, %xmm4, %eax
5120 ; SSE42-NEXT:    testb $1, %al
5121 ; SSE42-NEXT:    je LBB24_18
5122 ; SSE42-NEXT:  ## %bb.17: ## %cond.load22
5123 ; SSE42-NEXT:    pinsrb $8, 8(%rdi), %xmm2
5124 ; SSE42-NEXT:  LBB24_18: ## %else23
5125 ; SSE42-NEXT:    pextrb $9, %xmm4, %eax
5126 ; SSE42-NEXT:    testb $1, %al
5127 ; SSE42-NEXT:    je LBB24_20
5128 ; SSE42-NEXT:  ## %bb.19: ## %cond.load25
5129 ; SSE42-NEXT:    pinsrb $9, 9(%rdi), %xmm2
5130 ; SSE42-NEXT:  LBB24_20: ## %else26
5131 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5132 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5133 ; SSE42-NEXT:    pextrb $10, %xmm4, %eax
5134 ; SSE42-NEXT:    testb $1, %al
5135 ; SSE42-NEXT:    je LBB24_22
5136 ; SSE42-NEXT:  ## %bb.21: ## %cond.load28
5137 ; SSE42-NEXT:    pinsrb $10, 10(%rdi), %xmm2
5138 ; SSE42-NEXT:  LBB24_22: ## %else29
5139 ; SSE42-NEXT:    pextrb $11, %xmm4, %eax
5140 ; SSE42-NEXT:    testb $1, %al
5141 ; SSE42-NEXT:    je LBB24_24
5142 ; SSE42-NEXT:  ## %bb.23: ## %cond.load31
5143 ; SSE42-NEXT:    pinsrb $11, 11(%rdi), %xmm2
5144 ; SSE42-NEXT:  LBB24_24: ## %else32
5145 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5146 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5147 ; SSE42-NEXT:    pextrb $12, %xmm4, %eax
5148 ; SSE42-NEXT:    testb $1, %al
5149 ; SSE42-NEXT:    je LBB24_26
5150 ; SSE42-NEXT:  ## %bb.25: ## %cond.load34
5151 ; SSE42-NEXT:    pinsrb $12, 12(%rdi), %xmm2
5152 ; SSE42-NEXT:  LBB24_26: ## %else35
5153 ; SSE42-NEXT:    pextrb $13, %xmm4, %eax
5154 ; SSE42-NEXT:    testb $1, %al
5155 ; SSE42-NEXT:    je LBB24_28
5156 ; SSE42-NEXT:  ## %bb.27: ## %cond.load37
5157 ; SSE42-NEXT:    pinsrb $13, 13(%rdi), %xmm2
5158 ; SSE42-NEXT:  LBB24_28: ## %else38
5159 ; SSE42-NEXT:    pxor %xmm4, %xmm4
5160 ; SSE42-NEXT:    pcmpgtb %xmm0, %xmm4
5161 ; SSE42-NEXT:    pextrb $14, %xmm4, %eax
5162 ; SSE42-NEXT:    testb $1, %al
5163 ; SSE42-NEXT:    je LBB24_30
5164 ; SSE42-NEXT:  ## %bb.29: ## %cond.load40
5165 ; SSE42-NEXT:    pinsrb $14, 14(%rdi), %xmm2
5166 ; SSE42-NEXT:  LBB24_30: ## %else41
5167 ; SSE42-NEXT:    pextrb $15, %xmm4, %eax
5168 ; SSE42-NEXT:    testb $1, %al
5169 ; SSE42-NEXT:    je LBB24_32
5170 ; SSE42-NEXT:  ## %bb.31: ## %cond.load43
5171 ; SSE42-NEXT:    pinsrb $15, 15(%rdi), %xmm2
5172 ; SSE42-NEXT:  LBB24_32: ## %else44
5173 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5174 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5175 ; SSE42-NEXT:    pextrb $0, %xmm0, %eax
5176 ; SSE42-NEXT:    testb $1, %al
5177 ; SSE42-NEXT:    je LBB24_34
5178 ; SSE42-NEXT:  ## %bb.33: ## %cond.load46
5179 ; SSE42-NEXT:    pinsrb $0, 16(%rdi), %xmm3
5180 ; SSE42-NEXT:  LBB24_34: ## %else47
5181 ; SSE42-NEXT:    pextrb $1, %xmm0, %eax
5182 ; SSE42-NEXT:    testb $1, %al
5183 ; SSE42-NEXT:    je LBB24_36
5184 ; SSE42-NEXT:  ## %bb.35: ## %cond.load49
5185 ; SSE42-NEXT:    pinsrb $1, 17(%rdi), %xmm3
5186 ; SSE42-NEXT:  LBB24_36: ## %else50
5187 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5188 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5189 ; SSE42-NEXT:    pextrb $2, %xmm0, %eax
5190 ; SSE42-NEXT:    testb $1, %al
5191 ; SSE42-NEXT:    je LBB24_38
5192 ; SSE42-NEXT:  ## %bb.37: ## %cond.load52
5193 ; SSE42-NEXT:    pinsrb $2, 18(%rdi), %xmm3
5194 ; SSE42-NEXT:  LBB24_38: ## %else53
5195 ; SSE42-NEXT:    pextrb $3, %xmm0, %eax
5196 ; SSE42-NEXT:    testb $1, %al
5197 ; SSE42-NEXT:    je LBB24_40
5198 ; SSE42-NEXT:  ## %bb.39: ## %cond.load55
5199 ; SSE42-NEXT:    pinsrb $3, 19(%rdi), %xmm3
5200 ; SSE42-NEXT:  LBB24_40: ## %else56
5201 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5202 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5203 ; SSE42-NEXT:    pextrb $4, %xmm0, %eax
5204 ; SSE42-NEXT:    testb $1, %al
5205 ; SSE42-NEXT:    je LBB24_42
5206 ; SSE42-NEXT:  ## %bb.41: ## %cond.load58
5207 ; SSE42-NEXT:    pinsrb $4, 20(%rdi), %xmm3
5208 ; SSE42-NEXT:  LBB24_42: ## %else59
5209 ; SSE42-NEXT:    pextrb $5, %xmm0, %eax
5210 ; SSE42-NEXT:    testb $1, %al
5211 ; SSE42-NEXT:    je LBB24_44
5212 ; SSE42-NEXT:  ## %bb.43: ## %cond.load61
5213 ; SSE42-NEXT:    pinsrb $5, 21(%rdi), %xmm3
5214 ; SSE42-NEXT:  LBB24_44: ## %else62
5215 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5216 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5217 ; SSE42-NEXT:    pextrb $6, %xmm0, %eax
5218 ; SSE42-NEXT:    testb $1, %al
5219 ; SSE42-NEXT:    je LBB24_46
5220 ; SSE42-NEXT:  ## %bb.45: ## %cond.load64
5221 ; SSE42-NEXT:    pinsrb $6, 22(%rdi), %xmm3
5222 ; SSE42-NEXT:  LBB24_46: ## %else65
5223 ; SSE42-NEXT:    pextrb $7, %xmm0, %eax
5224 ; SSE42-NEXT:    testb $1, %al
5225 ; SSE42-NEXT:    je LBB24_48
5226 ; SSE42-NEXT:  ## %bb.47: ## %cond.load67
5227 ; SSE42-NEXT:    pinsrb $7, 23(%rdi), %xmm3
5228 ; SSE42-NEXT:  LBB24_48: ## %else68
5229 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5230 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5231 ; SSE42-NEXT:    pextrb $8, %xmm0, %eax
5232 ; SSE42-NEXT:    testb $1, %al
5233 ; SSE42-NEXT:    je LBB24_50
5234 ; SSE42-NEXT:  ## %bb.49: ## %cond.load70
5235 ; SSE42-NEXT:    pinsrb $8, 24(%rdi), %xmm3
5236 ; SSE42-NEXT:  LBB24_50: ## %else71
5237 ; SSE42-NEXT:    pextrb $9, %xmm0, %eax
5238 ; SSE42-NEXT:    testb $1, %al
5239 ; SSE42-NEXT:    je LBB24_52
5240 ; SSE42-NEXT:  ## %bb.51: ## %cond.load73
5241 ; SSE42-NEXT:    pinsrb $9, 25(%rdi), %xmm3
5242 ; SSE42-NEXT:  LBB24_52: ## %else74
5243 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5244 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5245 ; SSE42-NEXT:    pextrb $10, %xmm0, %eax
5246 ; SSE42-NEXT:    testb $1, %al
5247 ; SSE42-NEXT:    je LBB24_54
5248 ; SSE42-NEXT:  ## %bb.53: ## %cond.load76
5249 ; SSE42-NEXT:    pinsrb $10, 26(%rdi), %xmm3
5250 ; SSE42-NEXT:  LBB24_54: ## %else77
5251 ; SSE42-NEXT:    pextrb $11, %xmm0, %eax
5252 ; SSE42-NEXT:    testb $1, %al
5253 ; SSE42-NEXT:    je LBB24_56
5254 ; SSE42-NEXT:  ## %bb.55: ## %cond.load79
5255 ; SSE42-NEXT:    pinsrb $11, 27(%rdi), %xmm3
5256 ; SSE42-NEXT:  LBB24_56: ## %else80
5257 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5258 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5259 ; SSE42-NEXT:    pextrb $12, %xmm0, %eax
5260 ; SSE42-NEXT:    testb $1, %al
5261 ; SSE42-NEXT:    je LBB24_58
5262 ; SSE42-NEXT:  ## %bb.57: ## %cond.load82
5263 ; SSE42-NEXT:    pinsrb $12, 28(%rdi), %xmm3
5264 ; SSE42-NEXT:  LBB24_58: ## %else83
5265 ; SSE42-NEXT:    pextrb $13, %xmm0, %eax
5266 ; SSE42-NEXT:    testb $1, %al
5267 ; SSE42-NEXT:    je LBB24_60
5268 ; SSE42-NEXT:  ## %bb.59: ## %cond.load85
5269 ; SSE42-NEXT:    pinsrb $13, 29(%rdi), %xmm3
5270 ; SSE42-NEXT:  LBB24_60: ## %else86
5271 ; SSE42-NEXT:    pxor %xmm0, %xmm0
5272 ; SSE42-NEXT:    pcmpgtb %xmm1, %xmm0
5273 ; SSE42-NEXT:    pextrb $14, %xmm0, %eax
5274 ; SSE42-NEXT:    testb $1, %al
5275 ; SSE42-NEXT:    je LBB24_62
5276 ; SSE42-NEXT:  ## %bb.61: ## %cond.load88
5277 ; SSE42-NEXT:    pinsrb $14, 30(%rdi), %xmm3
5278 ; SSE42-NEXT:  LBB24_62: ## %else89
5279 ; SSE42-NEXT:    pextrb $15, %xmm0, %eax
5280 ; SSE42-NEXT:    testb $1, %al
5281 ; SSE42-NEXT:    je LBB24_64
5282 ; SSE42-NEXT:  ## %bb.63: ## %cond.load91
5283 ; SSE42-NEXT:    pinsrb $15, 31(%rdi), %xmm3
5284 ; SSE42-NEXT:  LBB24_64: ## %else92
5285 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
5286 ; SSE42-NEXT:    movdqa %xmm3, %xmm1
5287 ; SSE42-NEXT:    retq
5288 ;
5289 ; AVX1-LABEL: load_v32i8_v32i8:
5290 ; AVX1:       ## %bb.0:
5291 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5292 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5293 ; AVX1-NEXT:    vpextrb $0, %xmm3, %eax
5294 ; AVX1-NEXT:    testb $1, %al
5295 ; AVX1-NEXT:    je LBB24_2
5296 ; AVX1-NEXT:  ## %bb.1: ## %cond.load
5297 ; AVX1-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm3
5298 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5299 ; AVX1-NEXT:  LBB24_2: ## %else
5300 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5301 ; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5302 ; AVX1-NEXT:    testb $1, %al
5303 ; AVX1-NEXT:    je LBB24_4
5304 ; AVX1-NEXT:  ## %bb.3: ## %cond.load1
5305 ; AVX1-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm2
5306 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5307 ; AVX1-NEXT:  LBB24_4: ## %else2
5308 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5309 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5310 ; AVX1-NEXT:    vpextrb $2, %xmm3, %eax
5311 ; AVX1-NEXT:    testb $1, %al
5312 ; AVX1-NEXT:    je LBB24_6
5313 ; AVX1-NEXT:  ## %bb.5: ## %cond.load4
5314 ; AVX1-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm3
5315 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5316 ; AVX1-NEXT:  LBB24_6: ## %else5
5317 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5318 ; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5319 ; AVX1-NEXT:    testb $1, %al
5320 ; AVX1-NEXT:    je LBB24_8
5321 ; AVX1-NEXT:  ## %bb.7: ## %cond.load7
5322 ; AVX1-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm2
5323 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5324 ; AVX1-NEXT:  LBB24_8: ## %else8
5325 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5326 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5327 ; AVX1-NEXT:    vpextrb $4, %xmm3, %eax
5328 ; AVX1-NEXT:    testb $1, %al
5329 ; AVX1-NEXT:    je LBB24_10
5330 ; AVX1-NEXT:  ## %bb.9: ## %cond.load10
5331 ; AVX1-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm3
5332 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5333 ; AVX1-NEXT:  LBB24_10: ## %else11
5334 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5335 ; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5336 ; AVX1-NEXT:    testb $1, %al
5337 ; AVX1-NEXT:    je LBB24_12
5338 ; AVX1-NEXT:  ## %bb.11: ## %cond.load13
5339 ; AVX1-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm2
5340 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5341 ; AVX1-NEXT:  LBB24_12: ## %else14
5342 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5343 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5344 ; AVX1-NEXT:    vpextrb $6, %xmm3, %eax
5345 ; AVX1-NEXT:    testb $1, %al
5346 ; AVX1-NEXT:    je LBB24_14
5347 ; AVX1-NEXT:  ## %bb.13: ## %cond.load16
5348 ; AVX1-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm3
5349 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5350 ; AVX1-NEXT:  LBB24_14: ## %else17
5351 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5352 ; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5353 ; AVX1-NEXT:    testb $1, %al
5354 ; AVX1-NEXT:    je LBB24_16
5355 ; AVX1-NEXT:  ## %bb.15: ## %cond.load19
5356 ; AVX1-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm2
5357 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5358 ; AVX1-NEXT:  LBB24_16: ## %else20
5359 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5360 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5361 ; AVX1-NEXT:    vpextrb $8, %xmm3, %eax
5362 ; AVX1-NEXT:    testb $1, %al
5363 ; AVX1-NEXT:    je LBB24_18
5364 ; AVX1-NEXT:  ## %bb.17: ## %cond.load22
5365 ; AVX1-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm3
5366 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5367 ; AVX1-NEXT:  LBB24_18: ## %else23
5368 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5369 ; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5370 ; AVX1-NEXT:    testb $1, %al
5371 ; AVX1-NEXT:    je LBB24_20
5372 ; AVX1-NEXT:  ## %bb.19: ## %cond.load25
5373 ; AVX1-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm2
5374 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5375 ; AVX1-NEXT:  LBB24_20: ## %else26
5376 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5377 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5378 ; AVX1-NEXT:    vpextrb $10, %xmm3, %eax
5379 ; AVX1-NEXT:    testb $1, %al
5380 ; AVX1-NEXT:    je LBB24_22
5381 ; AVX1-NEXT:  ## %bb.21: ## %cond.load28
5382 ; AVX1-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm3
5383 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5384 ; AVX1-NEXT:  LBB24_22: ## %else29
5385 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5386 ; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5387 ; AVX1-NEXT:    testb $1, %al
5388 ; AVX1-NEXT:    je LBB24_24
5389 ; AVX1-NEXT:  ## %bb.23: ## %cond.load31
5390 ; AVX1-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm2
5391 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5392 ; AVX1-NEXT:  LBB24_24: ## %else32
5393 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5394 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5395 ; AVX1-NEXT:    vpextrb $12, %xmm3, %eax
5396 ; AVX1-NEXT:    testb $1, %al
5397 ; AVX1-NEXT:    je LBB24_26
5398 ; AVX1-NEXT:  ## %bb.25: ## %cond.load34
5399 ; AVX1-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm3
5400 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5401 ; AVX1-NEXT:  LBB24_26: ## %else35
5402 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5403 ; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5404 ; AVX1-NEXT:    testb $1, %al
5405 ; AVX1-NEXT:    je LBB24_28
5406 ; AVX1-NEXT:  ## %bb.27: ## %cond.load37
5407 ; AVX1-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm2
5408 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5409 ; AVX1-NEXT:  LBB24_28: ## %else38
5410 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5411 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm3
5412 ; AVX1-NEXT:    vpextrb $14, %xmm3, %eax
5413 ; AVX1-NEXT:    testb $1, %al
5414 ; AVX1-NEXT:    je LBB24_30
5415 ; AVX1-NEXT:  ## %bb.29: ## %cond.load40
5416 ; AVX1-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm3
5417 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5418 ; AVX1-NEXT:  LBB24_30: ## %else41
5419 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5420 ; AVX1-NEXT:    vpextrb $15, %xmm2, %eax
5421 ; AVX1-NEXT:    testb $1, %al
5422 ; AVX1-NEXT:    je LBB24_32
5423 ; AVX1-NEXT:  ## %bb.31: ## %cond.load43
5424 ; AVX1-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm2
5425 ; AVX1-NEXT:    vblendps {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5426 ; AVX1-NEXT:  LBB24_32: ## %else44
5427 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
5428 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5429 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5430 ; AVX1-NEXT:    vpextrb $0, %xmm2, %eax
5431 ; AVX1-NEXT:    testb $1, %al
5432 ; AVX1-NEXT:    je LBB24_34
5433 ; AVX1-NEXT:  ## %bb.33: ## %cond.load46
5434 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5435 ; AVX1-NEXT:    vpinsrb $0, 16(%rdi), %xmm3, %xmm3
5436 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5437 ; AVX1-NEXT:  LBB24_34: ## %else47
5438 ; AVX1-NEXT:    vpextrb $1, %xmm2, %eax
5439 ; AVX1-NEXT:    testb $1, %al
5440 ; AVX1-NEXT:    je LBB24_36
5441 ; AVX1-NEXT:  ## %bb.35: ## %cond.load49
5442 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5443 ; AVX1-NEXT:    vpinsrb $1, 17(%rdi), %xmm2, %xmm2
5444 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5445 ; AVX1-NEXT:  LBB24_36: ## %else50
5446 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5447 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5448 ; AVX1-NEXT:    vpextrb $2, %xmm2, %eax
5449 ; AVX1-NEXT:    testb $1, %al
5450 ; AVX1-NEXT:    je LBB24_38
5451 ; AVX1-NEXT:  ## %bb.37: ## %cond.load52
5452 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5453 ; AVX1-NEXT:    vpinsrb $2, 18(%rdi), %xmm3, %xmm3
5454 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5455 ; AVX1-NEXT:  LBB24_38: ## %else53
5456 ; AVX1-NEXT:    vpextrb $3, %xmm2, %eax
5457 ; AVX1-NEXT:    testb $1, %al
5458 ; AVX1-NEXT:    je LBB24_40
5459 ; AVX1-NEXT:  ## %bb.39: ## %cond.load55
5460 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5461 ; AVX1-NEXT:    vpinsrb $3, 19(%rdi), %xmm2, %xmm2
5462 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5463 ; AVX1-NEXT:  LBB24_40: ## %else56
5464 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5465 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5466 ; AVX1-NEXT:    vpextrb $4, %xmm2, %eax
5467 ; AVX1-NEXT:    testb $1, %al
5468 ; AVX1-NEXT:    je LBB24_42
5469 ; AVX1-NEXT:  ## %bb.41: ## %cond.load58
5470 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5471 ; AVX1-NEXT:    vpinsrb $4, 20(%rdi), %xmm3, %xmm3
5472 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5473 ; AVX1-NEXT:  LBB24_42: ## %else59
5474 ; AVX1-NEXT:    vpextrb $5, %xmm2, %eax
5475 ; AVX1-NEXT:    testb $1, %al
5476 ; AVX1-NEXT:    je LBB24_44
5477 ; AVX1-NEXT:  ## %bb.43: ## %cond.load61
5478 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5479 ; AVX1-NEXT:    vpinsrb $5, 21(%rdi), %xmm2, %xmm2
5480 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5481 ; AVX1-NEXT:  LBB24_44: ## %else62
5482 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5483 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5484 ; AVX1-NEXT:    vpextrb $6, %xmm2, %eax
5485 ; AVX1-NEXT:    testb $1, %al
5486 ; AVX1-NEXT:    je LBB24_46
5487 ; AVX1-NEXT:  ## %bb.45: ## %cond.load64
5488 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5489 ; AVX1-NEXT:    vpinsrb $6, 22(%rdi), %xmm3, %xmm3
5490 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5491 ; AVX1-NEXT:  LBB24_46: ## %else65
5492 ; AVX1-NEXT:    vpextrb $7, %xmm2, %eax
5493 ; AVX1-NEXT:    testb $1, %al
5494 ; AVX1-NEXT:    je LBB24_48
5495 ; AVX1-NEXT:  ## %bb.47: ## %cond.load67
5496 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5497 ; AVX1-NEXT:    vpinsrb $7, 23(%rdi), %xmm2, %xmm2
5498 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5499 ; AVX1-NEXT:  LBB24_48: ## %else68
5500 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5501 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5502 ; AVX1-NEXT:    vpextrb $8, %xmm2, %eax
5503 ; AVX1-NEXT:    testb $1, %al
5504 ; AVX1-NEXT:    je LBB24_50
5505 ; AVX1-NEXT:  ## %bb.49: ## %cond.load70
5506 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5507 ; AVX1-NEXT:    vpinsrb $8, 24(%rdi), %xmm3, %xmm3
5508 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5509 ; AVX1-NEXT:  LBB24_50: ## %else71
5510 ; AVX1-NEXT:    vpextrb $9, %xmm2, %eax
5511 ; AVX1-NEXT:    testb $1, %al
5512 ; AVX1-NEXT:    je LBB24_52
5513 ; AVX1-NEXT:  ## %bb.51: ## %cond.load73
5514 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5515 ; AVX1-NEXT:    vpinsrb $9, 25(%rdi), %xmm2, %xmm2
5516 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5517 ; AVX1-NEXT:  LBB24_52: ## %else74
5518 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5519 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5520 ; AVX1-NEXT:    vpextrb $10, %xmm2, %eax
5521 ; AVX1-NEXT:    testb $1, %al
5522 ; AVX1-NEXT:    je LBB24_54
5523 ; AVX1-NEXT:  ## %bb.53: ## %cond.load76
5524 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5525 ; AVX1-NEXT:    vpinsrb $10, 26(%rdi), %xmm3, %xmm3
5526 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5527 ; AVX1-NEXT:  LBB24_54: ## %else77
5528 ; AVX1-NEXT:    vpextrb $11, %xmm2, %eax
5529 ; AVX1-NEXT:    testb $1, %al
5530 ; AVX1-NEXT:    je LBB24_56
5531 ; AVX1-NEXT:  ## %bb.55: ## %cond.load79
5532 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5533 ; AVX1-NEXT:    vpinsrb $11, 27(%rdi), %xmm2, %xmm2
5534 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5535 ; AVX1-NEXT:  LBB24_56: ## %else80
5536 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5537 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm2
5538 ; AVX1-NEXT:    vpextrb $12, %xmm2, %eax
5539 ; AVX1-NEXT:    testb $1, %al
5540 ; AVX1-NEXT:    je LBB24_58
5541 ; AVX1-NEXT:  ## %bb.57: ## %cond.load82
5542 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
5543 ; AVX1-NEXT:    vpinsrb $12, 28(%rdi), %xmm3, %xmm3
5544 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm1, %ymm1
5545 ; AVX1-NEXT:  LBB24_58: ## %else83
5546 ; AVX1-NEXT:    vpextrb $13, %xmm2, %eax
5547 ; AVX1-NEXT:    testb $1, %al
5548 ; AVX1-NEXT:    je LBB24_60
5549 ; AVX1-NEXT:  ## %bb.59: ## %cond.load85
5550 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5551 ; AVX1-NEXT:    vpinsrb $13, 29(%rdi), %xmm2, %xmm2
5552 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5553 ; AVX1-NEXT:  LBB24_60: ## %else86
5554 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5555 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm2, %xmm0
5556 ; AVX1-NEXT:    vpextrb $14, %xmm0, %eax
5557 ; AVX1-NEXT:    testb $1, %al
5558 ; AVX1-NEXT:    je LBB24_62
5559 ; AVX1-NEXT:  ## %bb.61: ## %cond.load88
5560 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5561 ; AVX1-NEXT:    vpinsrb $14, 30(%rdi), %xmm2, %xmm2
5562 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5563 ; AVX1-NEXT:  LBB24_62: ## %else89
5564 ; AVX1-NEXT:    vpextrb $15, %xmm0, %eax
5565 ; AVX1-NEXT:    testb $1, %al
5566 ; AVX1-NEXT:    je LBB24_64
5567 ; AVX1-NEXT:  ## %bb.63: ## %cond.load91
5568 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm0
5569 ; AVX1-NEXT:    vpinsrb $15, 31(%rdi), %xmm0, %xmm0
5570 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
5571 ; AVX1-NEXT:  LBB24_64: ## %else92
5572 ; AVX1-NEXT:    vmovaps %ymm1, %ymm0
5573 ; AVX1-NEXT:    retq
5574 ;
5575 ; AVX2-LABEL: load_v32i8_v32i8:
5576 ; AVX2:       ## %bb.0:
5577 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5578 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5579 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
5580 ; AVX2-NEXT:    testb $1, %al
5581 ; AVX2-NEXT:    je LBB24_2
5582 ; AVX2-NEXT:  ## %bb.1: ## %cond.load
5583 ; AVX2-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm3
5584 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5585 ; AVX2-NEXT:  LBB24_2: ## %else
5586 ; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
5587 ; AVX2-NEXT:    testb $1, %al
5588 ; AVX2-NEXT:    je LBB24_4
5589 ; AVX2-NEXT:  ## %bb.3: ## %cond.load1
5590 ; AVX2-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm2
5591 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5592 ; AVX2-NEXT:  LBB24_4: ## %else2
5593 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5594 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5595 ; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
5596 ; AVX2-NEXT:    testb $1, %al
5597 ; AVX2-NEXT:    je LBB24_6
5598 ; AVX2-NEXT:  ## %bb.5: ## %cond.load4
5599 ; AVX2-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm3
5600 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5601 ; AVX2-NEXT:  LBB24_6: ## %else5
5602 ; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
5603 ; AVX2-NEXT:    testb $1, %al
5604 ; AVX2-NEXT:    je LBB24_8
5605 ; AVX2-NEXT:  ## %bb.7: ## %cond.load7
5606 ; AVX2-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm2
5607 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5608 ; AVX2-NEXT:  LBB24_8: ## %else8
5609 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5610 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5611 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
5612 ; AVX2-NEXT:    testb $1, %al
5613 ; AVX2-NEXT:    je LBB24_10
5614 ; AVX2-NEXT:  ## %bb.9: ## %cond.load10
5615 ; AVX2-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm3
5616 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5617 ; AVX2-NEXT:  LBB24_10: ## %else11
5618 ; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
5619 ; AVX2-NEXT:    testb $1, %al
5620 ; AVX2-NEXT:    je LBB24_12
5621 ; AVX2-NEXT:  ## %bb.11: ## %cond.load13
5622 ; AVX2-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm2
5623 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5624 ; AVX2-NEXT:  LBB24_12: ## %else14
5625 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5626 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5627 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
5628 ; AVX2-NEXT:    testb $1, %al
5629 ; AVX2-NEXT:    je LBB24_14
5630 ; AVX2-NEXT:  ## %bb.13: ## %cond.load16
5631 ; AVX2-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm3
5632 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5633 ; AVX2-NEXT:  LBB24_14: ## %else17
5634 ; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
5635 ; AVX2-NEXT:    testb $1, %al
5636 ; AVX2-NEXT:    je LBB24_16
5637 ; AVX2-NEXT:  ## %bb.15: ## %cond.load19
5638 ; AVX2-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm2
5639 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5640 ; AVX2-NEXT:  LBB24_16: ## %else20
5641 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5642 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5643 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
5644 ; AVX2-NEXT:    testb $1, %al
5645 ; AVX2-NEXT:    je LBB24_18
5646 ; AVX2-NEXT:  ## %bb.17: ## %cond.load22
5647 ; AVX2-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm3
5648 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5649 ; AVX2-NEXT:  LBB24_18: ## %else23
5650 ; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
5651 ; AVX2-NEXT:    testb $1, %al
5652 ; AVX2-NEXT:    je LBB24_20
5653 ; AVX2-NEXT:  ## %bb.19: ## %cond.load25
5654 ; AVX2-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm2
5655 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5656 ; AVX2-NEXT:  LBB24_20: ## %else26
5657 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5658 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5659 ; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
5660 ; AVX2-NEXT:    testb $1, %al
5661 ; AVX2-NEXT:    je LBB24_22
5662 ; AVX2-NEXT:  ## %bb.21: ## %cond.load28
5663 ; AVX2-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm3
5664 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5665 ; AVX2-NEXT:  LBB24_22: ## %else29
5666 ; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
5667 ; AVX2-NEXT:    testb $1, %al
5668 ; AVX2-NEXT:    je LBB24_24
5669 ; AVX2-NEXT:  ## %bb.23: ## %cond.load31
5670 ; AVX2-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm2
5671 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5672 ; AVX2-NEXT:  LBB24_24: ## %else32
5673 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5674 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5675 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
5676 ; AVX2-NEXT:    testb $1, %al
5677 ; AVX2-NEXT:    je LBB24_26
5678 ; AVX2-NEXT:  ## %bb.25: ## %cond.load34
5679 ; AVX2-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm3
5680 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5681 ; AVX2-NEXT:  LBB24_26: ## %else35
5682 ; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
5683 ; AVX2-NEXT:    testb $1, %al
5684 ; AVX2-NEXT:    je LBB24_28
5685 ; AVX2-NEXT:  ## %bb.27: ## %cond.load37
5686 ; AVX2-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm2
5687 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5688 ; AVX2-NEXT:  LBB24_28: ## %else38
5689 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5690 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5691 ; AVX2-NEXT:    vpextrb $14, %xmm2, %eax
5692 ; AVX2-NEXT:    testb $1, %al
5693 ; AVX2-NEXT:    je LBB24_30
5694 ; AVX2-NEXT:  ## %bb.29: ## %cond.load40
5695 ; AVX2-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm3
5696 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5697 ; AVX2-NEXT:  LBB24_30: ## %else41
5698 ; AVX2-NEXT:    vpextrb $15, %xmm2, %eax
5699 ; AVX2-NEXT:    testb $1, %al
5700 ; AVX2-NEXT:    je LBB24_32
5701 ; AVX2-NEXT:  ## %bb.31: ## %cond.load43
5702 ; AVX2-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm2
5703 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5704 ; AVX2-NEXT:  LBB24_32: ## %else44
5705 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5706 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5707 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5708 ; AVX2-NEXT:    vpextrb $0, %xmm2, %eax
5709 ; AVX2-NEXT:    testb $1, %al
5710 ; AVX2-NEXT:    je LBB24_34
5711 ; AVX2-NEXT:  ## %bb.33: ## %cond.load46
5712 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5713 ; AVX2-NEXT:    vpinsrb $0, 16(%rdi), %xmm3, %xmm3
5714 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5715 ; AVX2-NEXT:  LBB24_34: ## %else47
5716 ; AVX2-NEXT:    vpextrb $1, %xmm2, %eax
5717 ; AVX2-NEXT:    testb $1, %al
5718 ; AVX2-NEXT:    je LBB24_36
5719 ; AVX2-NEXT:  ## %bb.35: ## %cond.load49
5720 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5721 ; AVX2-NEXT:    vpinsrb $1, 17(%rdi), %xmm2, %xmm2
5722 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5723 ; AVX2-NEXT:  LBB24_36: ## %else50
5724 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5725 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5726 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5727 ; AVX2-NEXT:    vpextrb $2, %xmm2, %eax
5728 ; AVX2-NEXT:    testb $1, %al
5729 ; AVX2-NEXT:    je LBB24_38
5730 ; AVX2-NEXT:  ## %bb.37: ## %cond.load52
5731 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5732 ; AVX2-NEXT:    vpinsrb $2, 18(%rdi), %xmm3, %xmm3
5733 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5734 ; AVX2-NEXT:  LBB24_38: ## %else53
5735 ; AVX2-NEXT:    vpextrb $3, %xmm2, %eax
5736 ; AVX2-NEXT:    testb $1, %al
5737 ; AVX2-NEXT:    je LBB24_40
5738 ; AVX2-NEXT:  ## %bb.39: ## %cond.load55
5739 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5740 ; AVX2-NEXT:    vpinsrb $3, 19(%rdi), %xmm2, %xmm2
5741 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5742 ; AVX2-NEXT:  LBB24_40: ## %else56
5743 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5744 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5745 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5746 ; AVX2-NEXT:    vpextrb $4, %xmm2, %eax
5747 ; AVX2-NEXT:    testb $1, %al
5748 ; AVX2-NEXT:    je LBB24_42
5749 ; AVX2-NEXT:  ## %bb.41: ## %cond.load58
5750 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5751 ; AVX2-NEXT:    vpinsrb $4, 20(%rdi), %xmm3, %xmm3
5752 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5753 ; AVX2-NEXT:  LBB24_42: ## %else59
5754 ; AVX2-NEXT:    vpextrb $5, %xmm2, %eax
5755 ; AVX2-NEXT:    testb $1, %al
5756 ; AVX2-NEXT:    je LBB24_44
5757 ; AVX2-NEXT:  ## %bb.43: ## %cond.load61
5758 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5759 ; AVX2-NEXT:    vpinsrb $5, 21(%rdi), %xmm2, %xmm2
5760 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5761 ; AVX2-NEXT:  LBB24_44: ## %else62
5762 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5763 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5764 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5765 ; AVX2-NEXT:    vpextrb $6, %xmm2, %eax
5766 ; AVX2-NEXT:    testb $1, %al
5767 ; AVX2-NEXT:    je LBB24_46
5768 ; AVX2-NEXT:  ## %bb.45: ## %cond.load64
5769 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5770 ; AVX2-NEXT:    vpinsrb $6, 22(%rdi), %xmm3, %xmm3
5771 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5772 ; AVX2-NEXT:  LBB24_46: ## %else65
5773 ; AVX2-NEXT:    vpextrb $7, %xmm2, %eax
5774 ; AVX2-NEXT:    testb $1, %al
5775 ; AVX2-NEXT:    je LBB24_48
5776 ; AVX2-NEXT:  ## %bb.47: ## %cond.load67
5777 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5778 ; AVX2-NEXT:    vpinsrb $7, 23(%rdi), %xmm2, %xmm2
5779 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5780 ; AVX2-NEXT:  LBB24_48: ## %else68
5781 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5782 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5783 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5784 ; AVX2-NEXT:    vpextrb $8, %xmm2, %eax
5785 ; AVX2-NEXT:    testb $1, %al
5786 ; AVX2-NEXT:    je LBB24_50
5787 ; AVX2-NEXT:  ## %bb.49: ## %cond.load70
5788 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5789 ; AVX2-NEXT:    vpinsrb $8, 24(%rdi), %xmm3, %xmm3
5790 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5791 ; AVX2-NEXT:  LBB24_50: ## %else71
5792 ; AVX2-NEXT:    vpextrb $9, %xmm2, %eax
5793 ; AVX2-NEXT:    testb $1, %al
5794 ; AVX2-NEXT:    je LBB24_52
5795 ; AVX2-NEXT:  ## %bb.51: ## %cond.load73
5796 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5797 ; AVX2-NEXT:    vpinsrb $9, 25(%rdi), %xmm2, %xmm2
5798 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5799 ; AVX2-NEXT:  LBB24_52: ## %else74
5800 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5801 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5802 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5803 ; AVX2-NEXT:    vpextrb $10, %xmm2, %eax
5804 ; AVX2-NEXT:    testb $1, %al
5805 ; AVX2-NEXT:    je LBB24_54
5806 ; AVX2-NEXT:  ## %bb.53: ## %cond.load76
5807 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5808 ; AVX2-NEXT:    vpinsrb $10, 26(%rdi), %xmm3, %xmm3
5809 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5810 ; AVX2-NEXT:  LBB24_54: ## %else77
5811 ; AVX2-NEXT:    vpextrb $11, %xmm2, %eax
5812 ; AVX2-NEXT:    testb $1, %al
5813 ; AVX2-NEXT:    je LBB24_56
5814 ; AVX2-NEXT:  ## %bb.55: ## %cond.load79
5815 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5816 ; AVX2-NEXT:    vpinsrb $11, 27(%rdi), %xmm2, %xmm2
5817 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5818 ; AVX2-NEXT:  LBB24_56: ## %else80
5819 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5820 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5821 ; AVX2-NEXT:    vextracti128 $1, %ymm2, %xmm2
5822 ; AVX2-NEXT:    vpextrb $12, %xmm2, %eax
5823 ; AVX2-NEXT:    testb $1, %al
5824 ; AVX2-NEXT:    je LBB24_58
5825 ; AVX2-NEXT:  ## %bb.57: ## %cond.load82
5826 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm3
5827 ; AVX2-NEXT:    vpinsrb $12, 28(%rdi), %xmm3, %xmm3
5828 ; AVX2-NEXT:    vinserti128 $1, %xmm3, %ymm1, %ymm1
5829 ; AVX2-NEXT:  LBB24_58: ## %else83
5830 ; AVX2-NEXT:    vpextrb $13, %xmm2, %eax
5831 ; AVX2-NEXT:    testb $1, %al
5832 ; AVX2-NEXT:    je LBB24_60
5833 ; AVX2-NEXT:  ## %bb.59: ## %cond.load85
5834 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5835 ; AVX2-NEXT:    vpinsrb $13, 29(%rdi), %xmm2, %xmm2
5836 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5837 ; AVX2-NEXT:  LBB24_60: ## %else86
5838 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5839 ; AVX2-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm0
5840 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
5841 ; AVX2-NEXT:    vpextrb $14, %xmm0, %eax
5842 ; AVX2-NEXT:    testb $1, %al
5843 ; AVX2-NEXT:    je LBB24_62
5844 ; AVX2-NEXT:  ## %bb.61: ## %cond.load88
5845 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
5846 ; AVX2-NEXT:    vpinsrb $14, 30(%rdi), %xmm2, %xmm2
5847 ; AVX2-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
5848 ; AVX2-NEXT:  LBB24_62: ## %else89
5849 ; AVX2-NEXT:    vpextrb $15, %xmm0, %eax
5850 ; AVX2-NEXT:    testb $1, %al
5851 ; AVX2-NEXT:    je LBB24_64
5852 ; AVX2-NEXT:  ## %bb.63: ## %cond.load91
5853 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm0
5854 ; AVX2-NEXT:    vpinsrb $15, 31(%rdi), %xmm0, %xmm0
5855 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
5856 ; AVX2-NEXT:  LBB24_64: ## %else92
5857 ; AVX2-NEXT:    vmovdqa %ymm1, %ymm0
5858 ; AVX2-NEXT:    retq
5859 ;
5860 ; AVX512F-LABEL: load_v32i8_v32i8:
5861 ; AVX512F:       ## %bb.0:
5862 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5863 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5864 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5865 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5866 ; AVX512F-NEXT:    kmovw %k0, %eax
5867 ; AVX512F-NEXT:    testb $1, %al
5868 ; AVX512F-NEXT:    je LBB24_2
5869 ; AVX512F-NEXT:  ## %bb.1: ## %cond.load
5870 ; AVX512F-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm3
5871 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5872 ; AVX512F-NEXT:  LBB24_2: ## %else
5873 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5874 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5875 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
5876 ; AVX512F-NEXT:    kmovw %k0, %eax
5877 ; AVX512F-NEXT:    testb $1, %al
5878 ; AVX512F-NEXT:    je LBB24_4
5879 ; AVX512F-NEXT:  ## %bb.3: ## %cond.load1
5880 ; AVX512F-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm2
5881 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5882 ; AVX512F-NEXT:  LBB24_4: ## %else2
5883 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5884 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5885 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5886 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5887 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k0
5888 ; AVX512F-NEXT:    kmovw %k0, %eax
5889 ; AVX512F-NEXT:    testb $1, %al
5890 ; AVX512F-NEXT:    je LBB24_6
5891 ; AVX512F-NEXT:  ## %bb.5: ## %cond.load4
5892 ; AVX512F-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm3
5893 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5894 ; AVX512F-NEXT:  LBB24_6: ## %else5
5895 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5896 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5897 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
5898 ; AVX512F-NEXT:    kmovw %k0, %eax
5899 ; AVX512F-NEXT:    testb $1, %al
5900 ; AVX512F-NEXT:    je LBB24_8
5901 ; AVX512F-NEXT:  ## %bb.7: ## %cond.load7
5902 ; AVX512F-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm2
5903 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5904 ; AVX512F-NEXT:  LBB24_8: ## %else8
5905 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5906 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5907 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5908 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5909 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k0
5910 ; AVX512F-NEXT:    kmovw %k0, %eax
5911 ; AVX512F-NEXT:    testb $1, %al
5912 ; AVX512F-NEXT:    je LBB24_10
5913 ; AVX512F-NEXT:  ## %bb.9: ## %cond.load10
5914 ; AVX512F-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm3
5915 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5916 ; AVX512F-NEXT:  LBB24_10: ## %else11
5917 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5918 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5919 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
5920 ; AVX512F-NEXT:    kmovw %k0, %eax
5921 ; AVX512F-NEXT:    testb $1, %al
5922 ; AVX512F-NEXT:    je LBB24_12
5923 ; AVX512F-NEXT:  ## %bb.11: ## %cond.load13
5924 ; AVX512F-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm2
5925 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5926 ; AVX512F-NEXT:  LBB24_12: ## %else14
5927 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5928 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5929 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5930 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5931 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k0
5932 ; AVX512F-NEXT:    kmovw %k0, %eax
5933 ; AVX512F-NEXT:    testb $1, %al
5934 ; AVX512F-NEXT:    je LBB24_14
5935 ; AVX512F-NEXT:  ## %bb.13: ## %cond.load16
5936 ; AVX512F-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm3
5937 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5938 ; AVX512F-NEXT:  LBB24_14: ## %else17
5939 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5940 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5941 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
5942 ; AVX512F-NEXT:    kmovw %k0, %eax
5943 ; AVX512F-NEXT:    testb $1, %al
5944 ; AVX512F-NEXT:    je LBB24_16
5945 ; AVX512F-NEXT:  ## %bb.15: ## %cond.load19
5946 ; AVX512F-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm2
5947 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5948 ; AVX512F-NEXT:  LBB24_16: ## %else20
5949 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5950 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5951 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5952 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5953 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k0
5954 ; AVX512F-NEXT:    kmovw %k0, %eax
5955 ; AVX512F-NEXT:    testb $1, %al
5956 ; AVX512F-NEXT:    je LBB24_18
5957 ; AVX512F-NEXT:  ## %bb.17: ## %cond.load22
5958 ; AVX512F-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm3
5959 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5960 ; AVX512F-NEXT:  LBB24_18: ## %else23
5961 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5962 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5963 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
5964 ; AVX512F-NEXT:    kmovw %k0, %eax
5965 ; AVX512F-NEXT:    testb $1, %al
5966 ; AVX512F-NEXT:    je LBB24_20
5967 ; AVX512F-NEXT:  ## %bb.19: ## %cond.load25
5968 ; AVX512F-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm2
5969 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5970 ; AVX512F-NEXT:  LBB24_20: ## %else26
5971 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5972 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5973 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5974 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5975 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k0
5976 ; AVX512F-NEXT:    kmovw %k0, %eax
5977 ; AVX512F-NEXT:    testb $1, %al
5978 ; AVX512F-NEXT:    je LBB24_22
5979 ; AVX512F-NEXT:  ## %bb.21: ## %cond.load28
5980 ; AVX512F-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm3
5981 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
5982 ; AVX512F-NEXT:  LBB24_22: ## %else29
5983 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
5984 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
5985 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
5986 ; AVX512F-NEXT:    kmovw %k0, %eax
5987 ; AVX512F-NEXT:    testb $1, %al
5988 ; AVX512F-NEXT:    je LBB24_24
5989 ; AVX512F-NEXT:  ## %bb.23: ## %cond.load31
5990 ; AVX512F-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm2
5991 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
5992 ; AVX512F-NEXT:  LBB24_24: ## %else32
5993 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5994 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
5995 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
5996 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
5997 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k0
5998 ; AVX512F-NEXT:    kmovw %k0, %eax
5999 ; AVX512F-NEXT:    testb $1, %al
6000 ; AVX512F-NEXT:    je LBB24_26
6001 ; AVX512F-NEXT:  ## %bb.25: ## %cond.load34
6002 ; AVX512F-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm3
6003 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6004 ; AVX512F-NEXT:  LBB24_26: ## %else35
6005 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6006 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6007 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
6008 ; AVX512F-NEXT:    kmovw %k0, %eax
6009 ; AVX512F-NEXT:    testb $1, %al
6010 ; AVX512F-NEXT:    je LBB24_28
6011 ; AVX512F-NEXT:  ## %bb.27: ## %cond.load37
6012 ; AVX512F-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm2
6013 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6014 ; AVX512F-NEXT:  LBB24_28: ## %else38
6015 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6016 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6017 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm3
6018 ; AVX512F-NEXT:    vptestmd %zmm3, %zmm3, %k0
6019 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k0
6020 ; AVX512F-NEXT:    kmovw %k0, %eax
6021 ; AVX512F-NEXT:    testb $1, %al
6022 ; AVX512F-NEXT:    je LBB24_30
6023 ; AVX512F-NEXT:  ## %bb.29: ## %cond.load40
6024 ; AVX512F-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm3
6025 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6026 ; AVX512F-NEXT:  LBB24_30: ## %else41
6027 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6028 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6029 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
6030 ; AVX512F-NEXT:    kmovw %k0, %eax
6031 ; AVX512F-NEXT:    testb $1, %al
6032 ; AVX512F-NEXT:    je LBB24_32
6033 ; AVX512F-NEXT:  ## %bb.31: ## %cond.load43
6034 ; AVX512F-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm2
6035 ; AVX512F-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6036 ; AVX512F-NEXT:  LBB24_32: ## %else44
6037 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6038 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6039 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6040 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6041 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6042 ; AVX512F-NEXT:    kmovw %k0, %eax
6043 ; AVX512F-NEXT:    testb $1, %al
6044 ; AVX512F-NEXT:    je LBB24_34
6045 ; AVX512F-NEXT:  ## %bb.33: ## %cond.load46
6046 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6047 ; AVX512F-NEXT:    vpinsrb $0, 16(%rdi), %xmm2, %xmm2
6048 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6049 ; AVX512F-NEXT:  LBB24_34: ## %else47
6050 ; AVX512F-NEXT:    kshiftrw $1, %k0, %k0
6051 ; AVX512F-NEXT:    kmovw %k0, %eax
6052 ; AVX512F-NEXT:    testb $1, %al
6053 ; AVX512F-NEXT:    je LBB24_36
6054 ; AVX512F-NEXT:  ## %bb.35: ## %cond.load49
6055 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6056 ; AVX512F-NEXT:    vpinsrb $1, 17(%rdi), %xmm2, %xmm2
6057 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6058 ; AVX512F-NEXT:  LBB24_36: ## %else50
6059 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6060 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6061 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6062 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6063 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6064 ; AVX512F-NEXT:    kshiftrw $2, %k0, %k1
6065 ; AVX512F-NEXT:    kmovw %k1, %eax
6066 ; AVX512F-NEXT:    testb $1, %al
6067 ; AVX512F-NEXT:    je LBB24_38
6068 ; AVX512F-NEXT:  ## %bb.37: ## %cond.load52
6069 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6070 ; AVX512F-NEXT:    vpinsrb $2, 18(%rdi), %xmm2, %xmm2
6071 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6072 ; AVX512F-NEXT:  LBB24_38: ## %else53
6073 ; AVX512F-NEXT:    kshiftrw $3, %k0, %k0
6074 ; AVX512F-NEXT:    kmovw %k0, %eax
6075 ; AVX512F-NEXT:    testb $1, %al
6076 ; AVX512F-NEXT:    je LBB24_40
6077 ; AVX512F-NEXT:  ## %bb.39: ## %cond.load55
6078 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6079 ; AVX512F-NEXT:    vpinsrb $3, 19(%rdi), %xmm2, %xmm2
6080 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6081 ; AVX512F-NEXT:  LBB24_40: ## %else56
6082 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6083 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6084 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6085 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6086 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6087 ; AVX512F-NEXT:    kshiftrw $4, %k0, %k1
6088 ; AVX512F-NEXT:    kmovw %k1, %eax
6089 ; AVX512F-NEXT:    testb $1, %al
6090 ; AVX512F-NEXT:    je LBB24_42
6091 ; AVX512F-NEXT:  ## %bb.41: ## %cond.load58
6092 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6093 ; AVX512F-NEXT:    vpinsrb $4, 20(%rdi), %xmm2, %xmm2
6094 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6095 ; AVX512F-NEXT:  LBB24_42: ## %else59
6096 ; AVX512F-NEXT:    kshiftrw $5, %k0, %k0
6097 ; AVX512F-NEXT:    kmovw %k0, %eax
6098 ; AVX512F-NEXT:    testb $1, %al
6099 ; AVX512F-NEXT:    je LBB24_44
6100 ; AVX512F-NEXT:  ## %bb.43: ## %cond.load61
6101 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6102 ; AVX512F-NEXT:    vpinsrb $5, 21(%rdi), %xmm2, %xmm2
6103 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6104 ; AVX512F-NEXT:  LBB24_44: ## %else62
6105 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6106 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6107 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6108 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6109 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6110 ; AVX512F-NEXT:    kshiftrw $6, %k0, %k1
6111 ; AVX512F-NEXT:    kmovw %k1, %eax
6112 ; AVX512F-NEXT:    testb $1, %al
6113 ; AVX512F-NEXT:    je LBB24_46
6114 ; AVX512F-NEXT:  ## %bb.45: ## %cond.load64
6115 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6116 ; AVX512F-NEXT:    vpinsrb $6, 22(%rdi), %xmm2, %xmm2
6117 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6118 ; AVX512F-NEXT:  LBB24_46: ## %else65
6119 ; AVX512F-NEXT:    kshiftrw $7, %k0, %k0
6120 ; AVX512F-NEXT:    kmovw %k0, %eax
6121 ; AVX512F-NEXT:    testb $1, %al
6122 ; AVX512F-NEXT:    je LBB24_48
6123 ; AVX512F-NEXT:  ## %bb.47: ## %cond.load67
6124 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6125 ; AVX512F-NEXT:    vpinsrb $7, 23(%rdi), %xmm2, %xmm2
6126 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6127 ; AVX512F-NEXT:  LBB24_48: ## %else68
6128 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6129 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6130 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6131 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6132 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6133 ; AVX512F-NEXT:    kshiftrw $8, %k0, %k1
6134 ; AVX512F-NEXT:    kmovw %k1, %eax
6135 ; AVX512F-NEXT:    testb $1, %al
6136 ; AVX512F-NEXT:    je LBB24_50
6137 ; AVX512F-NEXT:  ## %bb.49: ## %cond.load70
6138 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6139 ; AVX512F-NEXT:    vpinsrb $8, 24(%rdi), %xmm2, %xmm2
6140 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6141 ; AVX512F-NEXT:  LBB24_50: ## %else71
6142 ; AVX512F-NEXT:    kshiftrw $9, %k0, %k0
6143 ; AVX512F-NEXT:    kmovw %k0, %eax
6144 ; AVX512F-NEXT:    testb $1, %al
6145 ; AVX512F-NEXT:    je LBB24_52
6146 ; AVX512F-NEXT:  ## %bb.51: ## %cond.load73
6147 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6148 ; AVX512F-NEXT:    vpinsrb $9, 25(%rdi), %xmm2, %xmm2
6149 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6150 ; AVX512F-NEXT:  LBB24_52: ## %else74
6151 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6152 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6153 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6154 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6155 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6156 ; AVX512F-NEXT:    kshiftrw $10, %k0, %k1
6157 ; AVX512F-NEXT:    kmovw %k1, %eax
6158 ; AVX512F-NEXT:    testb $1, %al
6159 ; AVX512F-NEXT:    je LBB24_54
6160 ; AVX512F-NEXT:  ## %bb.53: ## %cond.load76
6161 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6162 ; AVX512F-NEXT:    vpinsrb $10, 26(%rdi), %xmm2, %xmm2
6163 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6164 ; AVX512F-NEXT:  LBB24_54: ## %else77
6165 ; AVX512F-NEXT:    kshiftrw $11, %k0, %k0
6166 ; AVX512F-NEXT:    kmovw %k0, %eax
6167 ; AVX512F-NEXT:    testb $1, %al
6168 ; AVX512F-NEXT:    je LBB24_56
6169 ; AVX512F-NEXT:  ## %bb.55: ## %cond.load79
6170 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6171 ; AVX512F-NEXT:    vpinsrb $11, 27(%rdi), %xmm2, %xmm2
6172 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6173 ; AVX512F-NEXT:  LBB24_56: ## %else80
6174 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6175 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6176 ; AVX512F-NEXT:    vextracti128 $1, %ymm2, %xmm2
6177 ; AVX512F-NEXT:    vpmovsxbd %xmm2, %zmm2
6178 ; AVX512F-NEXT:    vptestmd %zmm2, %zmm2, %k0
6179 ; AVX512F-NEXT:    kshiftrw $12, %k0, %k1
6180 ; AVX512F-NEXT:    kmovw %k1, %eax
6181 ; AVX512F-NEXT:    testb $1, %al
6182 ; AVX512F-NEXT:    je LBB24_58
6183 ; AVX512F-NEXT:  ## %bb.57: ## %cond.load82
6184 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6185 ; AVX512F-NEXT:    vpinsrb $12, 28(%rdi), %xmm2, %xmm2
6186 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6187 ; AVX512F-NEXT:  LBB24_58: ## %else83
6188 ; AVX512F-NEXT:    kshiftrw $13, %k0, %k0
6189 ; AVX512F-NEXT:    kmovw %k0, %eax
6190 ; AVX512F-NEXT:    testb $1, %al
6191 ; AVX512F-NEXT:    je LBB24_60
6192 ; AVX512F-NEXT:  ## %bb.59: ## %cond.load85
6193 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm2
6194 ; AVX512F-NEXT:    vpinsrb $13, 29(%rdi), %xmm2, %xmm2
6195 ; AVX512F-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6196 ; AVX512F-NEXT:  LBB24_60: ## %else86
6197 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6198 ; AVX512F-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm0
6199 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
6200 ; AVX512F-NEXT:    vpmovsxbd %xmm0, %zmm0
6201 ; AVX512F-NEXT:    vptestmd %zmm0, %zmm0, %k0
6202 ; AVX512F-NEXT:    kshiftrw $14, %k0, %k1
6203 ; AVX512F-NEXT:    kmovw %k1, %eax
6204 ; AVX512F-NEXT:    testb $1, %al
6205 ; AVX512F-NEXT:    je LBB24_62
6206 ; AVX512F-NEXT:  ## %bb.61: ## %cond.load88
6207 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
6208 ; AVX512F-NEXT:    vpinsrb $14, 30(%rdi), %xmm0, %xmm0
6209 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
6210 ; AVX512F-NEXT:  LBB24_62: ## %else89
6211 ; AVX512F-NEXT:    kshiftrw $15, %k0, %k0
6212 ; AVX512F-NEXT:    kmovw %k0, %eax
6213 ; AVX512F-NEXT:    testb $1, %al
6214 ; AVX512F-NEXT:    je LBB24_64
6215 ; AVX512F-NEXT:  ## %bb.63: ## %cond.load91
6216 ; AVX512F-NEXT:    vextracti128 $1, %ymm1, %xmm0
6217 ; AVX512F-NEXT:    vpinsrb $15, 31(%rdi), %xmm0, %xmm0
6218 ; AVX512F-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
6219 ; AVX512F-NEXT:  LBB24_64: ## %else92
6220 ; AVX512F-NEXT:    vmovdqa %ymm1, %ymm0
6221 ; AVX512F-NEXT:    retq
6222 ;
6223 ; AVX512VLDQ-LABEL: load_v32i8_v32i8:
6224 ; AVX512VLDQ:       ## %bb.0:
6225 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6226 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6227 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6228 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6229 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6230 ; AVX512VLDQ-NEXT:    testb $1, %al
6231 ; AVX512VLDQ-NEXT:    je LBB24_2
6232 ; AVX512VLDQ-NEXT:  ## %bb.1: ## %cond.load
6233 ; AVX512VLDQ-NEXT:    vpinsrb $0, (%rdi), %xmm1, %xmm3
6234 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6235 ; AVX512VLDQ-NEXT:  LBB24_2: ## %else
6236 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6237 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6238 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
6239 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6240 ; AVX512VLDQ-NEXT:    testb $1, %al
6241 ; AVX512VLDQ-NEXT:    je LBB24_4
6242 ; AVX512VLDQ-NEXT:  ## %bb.3: ## %cond.load1
6243 ; AVX512VLDQ-NEXT:    vpinsrb $1, 1(%rdi), %xmm1, %xmm2
6244 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6245 ; AVX512VLDQ-NEXT:  LBB24_4: ## %else2
6246 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6247 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6248 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6249 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6250 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k0
6251 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6252 ; AVX512VLDQ-NEXT:    testb $1, %al
6253 ; AVX512VLDQ-NEXT:    je LBB24_6
6254 ; AVX512VLDQ-NEXT:  ## %bb.5: ## %cond.load4
6255 ; AVX512VLDQ-NEXT:    vpinsrb $2, 2(%rdi), %xmm1, %xmm3
6256 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6257 ; AVX512VLDQ-NEXT:  LBB24_6: ## %else5
6258 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6259 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6260 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
6261 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6262 ; AVX512VLDQ-NEXT:    testb $1, %al
6263 ; AVX512VLDQ-NEXT:    je LBB24_8
6264 ; AVX512VLDQ-NEXT:  ## %bb.7: ## %cond.load7
6265 ; AVX512VLDQ-NEXT:    vpinsrb $3, 3(%rdi), %xmm1, %xmm2
6266 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6267 ; AVX512VLDQ-NEXT:  LBB24_8: ## %else8
6268 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6269 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6270 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6271 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6272 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k0
6273 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6274 ; AVX512VLDQ-NEXT:    testb $1, %al
6275 ; AVX512VLDQ-NEXT:    je LBB24_10
6276 ; AVX512VLDQ-NEXT:  ## %bb.9: ## %cond.load10
6277 ; AVX512VLDQ-NEXT:    vpinsrb $4, 4(%rdi), %xmm1, %xmm3
6278 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6279 ; AVX512VLDQ-NEXT:  LBB24_10: ## %else11
6280 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6281 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6282 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
6283 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6284 ; AVX512VLDQ-NEXT:    testb $1, %al
6285 ; AVX512VLDQ-NEXT:    je LBB24_12
6286 ; AVX512VLDQ-NEXT:  ## %bb.11: ## %cond.load13
6287 ; AVX512VLDQ-NEXT:    vpinsrb $5, 5(%rdi), %xmm1, %xmm2
6288 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6289 ; AVX512VLDQ-NEXT:  LBB24_12: ## %else14
6290 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6291 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6292 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6293 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6294 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k0
6295 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6296 ; AVX512VLDQ-NEXT:    testb $1, %al
6297 ; AVX512VLDQ-NEXT:    je LBB24_14
6298 ; AVX512VLDQ-NEXT:  ## %bb.13: ## %cond.load16
6299 ; AVX512VLDQ-NEXT:    vpinsrb $6, 6(%rdi), %xmm1, %xmm3
6300 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6301 ; AVX512VLDQ-NEXT:  LBB24_14: ## %else17
6302 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6303 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6304 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
6305 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6306 ; AVX512VLDQ-NEXT:    testb $1, %al
6307 ; AVX512VLDQ-NEXT:    je LBB24_16
6308 ; AVX512VLDQ-NEXT:  ## %bb.15: ## %cond.load19
6309 ; AVX512VLDQ-NEXT:    vpinsrb $7, 7(%rdi), %xmm1, %xmm2
6310 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6311 ; AVX512VLDQ-NEXT:  LBB24_16: ## %else20
6312 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6313 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6314 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6315 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6316 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k0
6317 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6318 ; AVX512VLDQ-NEXT:    testb $1, %al
6319 ; AVX512VLDQ-NEXT:    je LBB24_18
6320 ; AVX512VLDQ-NEXT:  ## %bb.17: ## %cond.load22
6321 ; AVX512VLDQ-NEXT:    vpinsrb $8, 8(%rdi), %xmm1, %xmm3
6322 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6323 ; AVX512VLDQ-NEXT:  LBB24_18: ## %else23
6324 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6325 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6326 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
6327 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6328 ; AVX512VLDQ-NEXT:    testb $1, %al
6329 ; AVX512VLDQ-NEXT:    je LBB24_20
6330 ; AVX512VLDQ-NEXT:  ## %bb.19: ## %cond.load25
6331 ; AVX512VLDQ-NEXT:    vpinsrb $9, 9(%rdi), %xmm1, %xmm2
6332 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6333 ; AVX512VLDQ-NEXT:  LBB24_20: ## %else26
6334 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6335 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6336 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6337 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6338 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k0
6339 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6340 ; AVX512VLDQ-NEXT:    testb $1, %al
6341 ; AVX512VLDQ-NEXT:    je LBB24_22
6342 ; AVX512VLDQ-NEXT:  ## %bb.21: ## %cond.load28
6343 ; AVX512VLDQ-NEXT:    vpinsrb $10, 10(%rdi), %xmm1, %xmm3
6344 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6345 ; AVX512VLDQ-NEXT:  LBB24_22: ## %else29
6346 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6347 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6348 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
6349 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6350 ; AVX512VLDQ-NEXT:    testb $1, %al
6351 ; AVX512VLDQ-NEXT:    je LBB24_24
6352 ; AVX512VLDQ-NEXT:  ## %bb.23: ## %cond.load31
6353 ; AVX512VLDQ-NEXT:    vpinsrb $11, 11(%rdi), %xmm1, %xmm2
6354 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6355 ; AVX512VLDQ-NEXT:  LBB24_24: ## %else32
6356 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6357 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6358 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6359 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6360 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k0
6361 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6362 ; AVX512VLDQ-NEXT:    testb $1, %al
6363 ; AVX512VLDQ-NEXT:    je LBB24_26
6364 ; AVX512VLDQ-NEXT:  ## %bb.25: ## %cond.load34
6365 ; AVX512VLDQ-NEXT:    vpinsrb $12, 12(%rdi), %xmm1, %xmm3
6366 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6367 ; AVX512VLDQ-NEXT:  LBB24_26: ## %else35
6368 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6369 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6370 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
6371 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6372 ; AVX512VLDQ-NEXT:    testb $1, %al
6373 ; AVX512VLDQ-NEXT:    je LBB24_28
6374 ; AVX512VLDQ-NEXT:  ## %bb.27: ## %cond.load37
6375 ; AVX512VLDQ-NEXT:    vpinsrb $13, 13(%rdi), %xmm1, %xmm2
6376 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6377 ; AVX512VLDQ-NEXT:  LBB24_28: ## %else38
6378 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6379 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6380 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm3
6381 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm3, %k0
6382 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k0
6383 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6384 ; AVX512VLDQ-NEXT:    testb $1, %al
6385 ; AVX512VLDQ-NEXT:    je LBB24_30
6386 ; AVX512VLDQ-NEXT:  ## %bb.29: ## %cond.load40
6387 ; AVX512VLDQ-NEXT:    vpinsrb $14, 14(%rdi), %xmm1, %xmm3
6388 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]
6389 ; AVX512VLDQ-NEXT:  LBB24_30: ## %else41
6390 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6391 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6392 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
6393 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6394 ; AVX512VLDQ-NEXT:    testb $1, %al
6395 ; AVX512VLDQ-NEXT:    je LBB24_32
6396 ; AVX512VLDQ-NEXT:  ## %bb.31: ## %cond.load43
6397 ; AVX512VLDQ-NEXT:    vpinsrb $15, 15(%rdi), %xmm1, %xmm2
6398 ; AVX512VLDQ-NEXT:    vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
6399 ; AVX512VLDQ-NEXT:  LBB24_32: ## %else44
6400 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6401 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6402 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6403 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6404 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6405 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6406 ; AVX512VLDQ-NEXT:    testb $1, %al
6407 ; AVX512VLDQ-NEXT:    je LBB24_34
6408 ; AVX512VLDQ-NEXT:  ## %bb.33: ## %cond.load46
6409 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6410 ; AVX512VLDQ-NEXT:    vpinsrb $0, 16(%rdi), %xmm2, %xmm2
6411 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6412 ; AVX512VLDQ-NEXT:  LBB24_34: ## %else47
6413 ; AVX512VLDQ-NEXT:    kshiftrw $1, %k0, %k0
6414 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6415 ; AVX512VLDQ-NEXT:    testb $1, %al
6416 ; AVX512VLDQ-NEXT:    je LBB24_36
6417 ; AVX512VLDQ-NEXT:  ## %bb.35: ## %cond.load49
6418 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6419 ; AVX512VLDQ-NEXT:    vpinsrb $1, 17(%rdi), %xmm2, %xmm2
6420 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6421 ; AVX512VLDQ-NEXT:  LBB24_36: ## %else50
6422 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6423 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6424 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6425 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6426 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6427 ; AVX512VLDQ-NEXT:    kshiftrw $2, %k0, %k1
6428 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6429 ; AVX512VLDQ-NEXT:    testb $1, %al
6430 ; AVX512VLDQ-NEXT:    je LBB24_38
6431 ; AVX512VLDQ-NEXT:  ## %bb.37: ## %cond.load52
6432 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6433 ; AVX512VLDQ-NEXT:    vpinsrb $2, 18(%rdi), %xmm2, %xmm2
6434 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6435 ; AVX512VLDQ-NEXT:  LBB24_38: ## %else53
6436 ; AVX512VLDQ-NEXT:    kshiftrw $3, %k0, %k0
6437 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6438 ; AVX512VLDQ-NEXT:    testb $1, %al
6439 ; AVX512VLDQ-NEXT:    je LBB24_40
6440 ; AVX512VLDQ-NEXT:  ## %bb.39: ## %cond.load55
6441 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6442 ; AVX512VLDQ-NEXT:    vpinsrb $3, 19(%rdi), %xmm2, %xmm2
6443 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6444 ; AVX512VLDQ-NEXT:  LBB24_40: ## %else56
6445 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6446 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6447 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6448 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6449 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6450 ; AVX512VLDQ-NEXT:    kshiftrw $4, %k0, %k1
6451 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6452 ; AVX512VLDQ-NEXT:    testb $1, %al
6453 ; AVX512VLDQ-NEXT:    je LBB24_42
6454 ; AVX512VLDQ-NEXT:  ## %bb.41: ## %cond.load58
6455 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6456 ; AVX512VLDQ-NEXT:    vpinsrb $4, 20(%rdi), %xmm2, %xmm2
6457 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6458 ; AVX512VLDQ-NEXT:  LBB24_42: ## %else59
6459 ; AVX512VLDQ-NEXT:    kshiftrw $5, %k0, %k0
6460 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6461 ; AVX512VLDQ-NEXT:    testb $1, %al
6462 ; AVX512VLDQ-NEXT:    je LBB24_44
6463 ; AVX512VLDQ-NEXT:  ## %bb.43: ## %cond.load61
6464 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6465 ; AVX512VLDQ-NEXT:    vpinsrb $5, 21(%rdi), %xmm2, %xmm2
6466 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6467 ; AVX512VLDQ-NEXT:  LBB24_44: ## %else62
6468 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6469 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6470 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6471 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6472 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6473 ; AVX512VLDQ-NEXT:    kshiftrw $6, %k0, %k1
6474 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6475 ; AVX512VLDQ-NEXT:    testb $1, %al
6476 ; AVX512VLDQ-NEXT:    je LBB24_46
6477 ; AVX512VLDQ-NEXT:  ## %bb.45: ## %cond.load64
6478 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6479 ; AVX512VLDQ-NEXT:    vpinsrb $6, 22(%rdi), %xmm2, %xmm2
6480 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6481 ; AVX512VLDQ-NEXT:  LBB24_46: ## %else65
6482 ; AVX512VLDQ-NEXT:    kshiftrw $7, %k0, %k0
6483 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6484 ; AVX512VLDQ-NEXT:    testb $1, %al
6485 ; AVX512VLDQ-NEXT:    je LBB24_48
6486 ; AVX512VLDQ-NEXT:  ## %bb.47: ## %cond.load67
6487 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6488 ; AVX512VLDQ-NEXT:    vpinsrb $7, 23(%rdi), %xmm2, %xmm2
6489 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6490 ; AVX512VLDQ-NEXT:  LBB24_48: ## %else68
6491 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6492 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6493 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6494 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6495 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6496 ; AVX512VLDQ-NEXT:    kshiftrw $8, %k0, %k1
6497 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6498 ; AVX512VLDQ-NEXT:    testb $1, %al
6499 ; AVX512VLDQ-NEXT:    je LBB24_50
6500 ; AVX512VLDQ-NEXT:  ## %bb.49: ## %cond.load70
6501 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6502 ; AVX512VLDQ-NEXT:    vpinsrb $8, 24(%rdi), %xmm2, %xmm2
6503 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6504 ; AVX512VLDQ-NEXT:  LBB24_50: ## %else71
6505 ; AVX512VLDQ-NEXT:    kshiftrw $9, %k0, %k0
6506 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6507 ; AVX512VLDQ-NEXT:    testb $1, %al
6508 ; AVX512VLDQ-NEXT:    je LBB24_52
6509 ; AVX512VLDQ-NEXT:  ## %bb.51: ## %cond.load73
6510 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6511 ; AVX512VLDQ-NEXT:    vpinsrb $9, 25(%rdi), %xmm2, %xmm2
6512 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6513 ; AVX512VLDQ-NEXT:  LBB24_52: ## %else74
6514 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6515 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6516 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6517 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6518 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6519 ; AVX512VLDQ-NEXT:    kshiftrw $10, %k0, %k1
6520 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6521 ; AVX512VLDQ-NEXT:    testb $1, %al
6522 ; AVX512VLDQ-NEXT:    je LBB24_54
6523 ; AVX512VLDQ-NEXT:  ## %bb.53: ## %cond.load76
6524 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6525 ; AVX512VLDQ-NEXT:    vpinsrb $10, 26(%rdi), %xmm2, %xmm2
6526 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6527 ; AVX512VLDQ-NEXT:  LBB24_54: ## %else77
6528 ; AVX512VLDQ-NEXT:    kshiftrw $11, %k0, %k0
6529 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6530 ; AVX512VLDQ-NEXT:    testb $1, %al
6531 ; AVX512VLDQ-NEXT:    je LBB24_56
6532 ; AVX512VLDQ-NEXT:  ## %bb.55: ## %cond.load79
6533 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6534 ; AVX512VLDQ-NEXT:    vpinsrb $11, 27(%rdi), %xmm2, %xmm2
6535 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6536 ; AVX512VLDQ-NEXT:  LBB24_56: ## %else80
6537 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6538 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm2
6539 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm2, %xmm2
6540 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm2, %zmm2
6541 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm2, %k0
6542 ; AVX512VLDQ-NEXT:    kshiftrw $12, %k0, %k1
6543 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6544 ; AVX512VLDQ-NEXT:    testb $1, %al
6545 ; AVX512VLDQ-NEXT:    je LBB24_58
6546 ; AVX512VLDQ-NEXT:  ## %bb.57: ## %cond.load82
6547 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6548 ; AVX512VLDQ-NEXT:    vpinsrb $12, 28(%rdi), %xmm2, %xmm2
6549 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6550 ; AVX512VLDQ-NEXT:  LBB24_58: ## %else83
6551 ; AVX512VLDQ-NEXT:    kshiftrw $13, %k0, %k0
6552 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6553 ; AVX512VLDQ-NEXT:    testb $1, %al
6554 ; AVX512VLDQ-NEXT:    je LBB24_60
6555 ; AVX512VLDQ-NEXT:  ## %bb.59: ## %cond.load85
6556 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm2
6557 ; AVX512VLDQ-NEXT:    vpinsrb $13, 29(%rdi), %xmm2, %xmm2
6558 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
6559 ; AVX512VLDQ-NEXT:  LBB24_60: ## %else86
6560 ; AVX512VLDQ-NEXT:    vpxor %xmm2, %xmm2, %xmm2
6561 ; AVX512VLDQ-NEXT:    vpcmpgtb %ymm0, %ymm2, %ymm0
6562 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm0, %xmm0
6563 ; AVX512VLDQ-NEXT:    vpmovsxbd %xmm0, %zmm0
6564 ; AVX512VLDQ-NEXT:    vpmovd2m %zmm0, %k0
6565 ; AVX512VLDQ-NEXT:    kshiftrw $14, %k0, %k1
6566 ; AVX512VLDQ-NEXT:    kmovw %k1, %eax
6567 ; AVX512VLDQ-NEXT:    testb $1, %al
6568 ; AVX512VLDQ-NEXT:    je LBB24_62
6569 ; AVX512VLDQ-NEXT:  ## %bb.61: ## %cond.load88
6570 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
6571 ; AVX512VLDQ-NEXT:    vpinsrb $14, 30(%rdi), %xmm0, %xmm0
6572 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
6573 ; AVX512VLDQ-NEXT:  LBB24_62: ## %else89
6574 ; AVX512VLDQ-NEXT:    kshiftrw $15, %k0, %k0
6575 ; AVX512VLDQ-NEXT:    kmovw %k0, %eax
6576 ; AVX512VLDQ-NEXT:    testb $1, %al
6577 ; AVX512VLDQ-NEXT:    je LBB24_64
6578 ; AVX512VLDQ-NEXT:  ## %bb.63: ## %cond.load91
6579 ; AVX512VLDQ-NEXT:    vextracti128 $1, %ymm1, %xmm0
6580 ; AVX512VLDQ-NEXT:    vpinsrb $15, 31(%rdi), %xmm0, %xmm0
6581 ; AVX512VLDQ-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm1
6582 ; AVX512VLDQ-NEXT:  LBB24_64: ## %else92
6583 ; AVX512VLDQ-NEXT:    vmovdqa %ymm1, %ymm0
6584 ; AVX512VLDQ-NEXT:    retq
6585 ;
6586 ; AVX512VLBW-LABEL: load_v32i8_v32i8:
6587 ; AVX512VLBW:       ## %bb.0:
6588 ; AVX512VLBW-NEXT:    vpmovb2m %ymm0, %k1
6589 ; AVX512VLBW-NEXT:    vpblendmb (%rdi), %ymm1, %ymm0 {%k1}
6590 ; AVX512VLBW-NEXT:    retq
6591   %mask = icmp slt <32 x i8> %trigger, zeroinitializer
6592   %res = call <32 x i8> @llvm.masked.load.v32i8.p0v32i8(<32 x i8>* %addr, i32 4, <32 x i1> %mask, <32 x i8> %dst)
6593   ret <32 x i8> %res
6594 }
6595
6596 ;;; Loads with Constant Masks - these should be optimized to use something other than a variable blend.
6597
6598 ; 128-bit FP vectors are supported with AVX.
6599
6600 define <4 x float> @mload_constmask_v4f32(<4 x float>* %addr, <4 x float> %dst) {
6601 ; SSE2-LABEL: mload_constmask_v4f32:
6602 ; SSE2:       ## %bb.0:
6603 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
6604 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
6605 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
6606 ; SSE2-NEXT:    movaps %xmm0, %xmm1
6607 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
6608 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
6609 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm1[2,0]
6610 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,0]
6611 ; SSE2-NEXT:    retq
6612 ;
6613 ; SSE42-LABEL: mload_constmask_v4f32:
6614 ; SSE42:       ## %bb.0:
6615 ; SSE42-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
6616 ; SSE42-NEXT:    blendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
6617 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
6618 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]
6619 ; SSE42-NEXT:    retq
6620 ;
6621 ; AVX1OR2-LABEL: mload_constmask_v4f32:
6622 ; AVX1OR2:       ## %bb.0:
6623 ; AVX1OR2-NEXT:    vblendps {{.*#+}} xmm0 = mem[0],xmm0[1],mem[2,3]
6624 ; AVX1OR2-NEXT:    retq
6625 ;
6626 ; AVX512F-LABEL: mload_constmask_v4f32:
6627 ; AVX512F:       ## %bb.0:
6628 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
6629 ; AVX512F-NEXT:    movw $13, %ax
6630 ; AVX512F-NEXT:    kmovw %eax, %k1
6631 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1}
6632 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
6633 ; AVX512F-NEXT:    vzeroupper
6634 ; AVX512F-NEXT:    retq
6635 ;
6636 ; AVX512VLDQ-LABEL: mload_constmask_v4f32:
6637 ; AVX512VLDQ:       ## %bb.0:
6638 ; AVX512VLDQ-NEXT:    movb $13, %al
6639 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6640 ; AVX512VLDQ-NEXT:    vmovups (%rdi), %xmm0 {%k1}
6641 ; AVX512VLDQ-NEXT:    retq
6642 ;
6643 ; AVX512VLBW-LABEL: mload_constmask_v4f32:
6644 ; AVX512VLBW:       ## %bb.0:
6645 ; AVX512VLBW-NEXT:    movb $13, %al
6646 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6647 ; AVX512VLBW-NEXT:    vmovups (%rdi), %xmm0 {%k1}
6648 ; AVX512VLBW-NEXT:    retq
6649   %res = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %addr, i32 4, <4 x i1> <i1 1, i1 0, i1 1, i1 1>, <4 x float> %dst)
6650   ret <4 x float> %res
6651 }
6652
6653 define <4 x float> @mload_constmask_v4f32_all(<4 x float>* %addr) {
6654 ; SSE-LABEL: mload_constmask_v4f32_all:
6655 ; SSE:       ## %bb.0:
6656 ; SSE-NEXT:    movups (%rdi), %xmm0
6657 ; SSE-NEXT:    retq
6658 ;
6659 ; AVX1OR2-LABEL: mload_constmask_v4f32_all:
6660 ; AVX1OR2:       ## %bb.0:
6661 ; AVX1OR2-NEXT:    vmovups (%rdi), %xmm0
6662 ; AVX1OR2-NEXT:    retq
6663 ;
6664 ; AVX512F-LABEL: mload_constmask_v4f32_all:
6665 ; AVX512F:       ## %bb.0:
6666 ; AVX512F-NEXT:    movw $15, %ax
6667 ; AVX512F-NEXT:    kmovw %eax, %k1
6668 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1} {z}
6669 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
6670 ; AVX512F-NEXT:    vzeroupper
6671 ; AVX512F-NEXT:    retq
6672 ;
6673 ; AVX512VL-LABEL: mload_constmask_v4f32_all:
6674 ; AVX512VL:       ## %bb.0:
6675 ; AVX512VL-NEXT:    kxnorw %k0, %k0, %k1
6676 ; AVX512VL-NEXT:    vmovups (%rdi), %xmm0 {%k1} {z}
6677 ; AVX512VL-NEXT:    retq
6678   %res = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %addr, i32 4, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x float>undef)
6679   ret <4 x float> %res
6680 }
6681
6682 define <2 x double> @mload_constmask_v2f64(<2 x double>* %addr, <2 x double> %dst) {
6683 ; SSE-LABEL: mload_constmask_v2f64:
6684 ; SSE:       ## %bb.0:
6685 ; SSE-NEXT:    movhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
6686 ; SSE-NEXT:    retq
6687 ;
6688 ; AVX-LABEL: mload_constmask_v2f64:
6689 ; AVX:       ## %bb.0:
6690 ; AVX-NEXT:    vmovhpd {{.*#+}} xmm0 = xmm0[0],mem[0]
6691 ; AVX-NEXT:    retq
6692   %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %addr, i32 4, <2 x i1> <i1 0, i1 1>, <2 x double> %dst)
6693   ret <2 x double> %res
6694 }
6695
6696 ; 128-bit integer vectors are supported with AVX2.
6697
6698 define <4 x i32> @mload_constmask_v4i32(<4 x i32>* %addr, <4 x i32> %dst) {
6699 ; SSE2-LABEL: mload_constmask_v4i32:
6700 ; SSE2:       ## %bb.0:
6701 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
6702 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[0,0]
6703 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
6704 ; SSE2-NEXT:    movaps %xmm1, %xmm2
6705 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm0[0,2]
6706 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
6707 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm2[2,0]
6708 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm0[2,0]
6709 ; SSE2-NEXT:    movaps %xmm1, %xmm0
6710 ; SSE2-NEXT:    retq
6711 ;
6712 ; SSE42-LABEL: mload_constmask_v4i32:
6713 ; SSE42:       ## %bb.0:
6714 ; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm0
6715 ; SSE42-NEXT:    pinsrd $2, 8(%rdi), %xmm0
6716 ; SSE42-NEXT:    pinsrd $3, 12(%rdi), %xmm0
6717 ; SSE42-NEXT:    retq
6718 ;
6719 ; AVX1-LABEL: mload_constmask_v4i32:
6720 ; AVX1:       ## %bb.0:
6721 ; AVX1-NEXT:    vmovaps {{.*#+}} xmm1 = [0,4294967295,4294967295,4294967295]
6722 ; AVX1-NEXT:    vmaskmovps (%rdi), %xmm1, %xmm1
6723 ; AVX1-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
6724 ; AVX1-NEXT:    retq
6725 ;
6726 ; AVX2-LABEL: mload_constmask_v4i32:
6727 ; AVX2:       ## %bb.0:
6728 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm1 = [0,4294967295,4294967295,4294967295]
6729 ; AVX2-NEXT:    vpmaskmovd (%rdi), %xmm1, %xmm1
6730 ; AVX2-NEXT:    vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1,2,3]
6731 ; AVX2-NEXT:    retq
6732 ;
6733 ; AVX512F-LABEL: mload_constmask_v4i32:
6734 ; AVX512F:       ## %bb.0:
6735 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 def $zmm0
6736 ; AVX512F-NEXT:    movw $14, %ax
6737 ; AVX512F-NEXT:    kmovw %eax, %k1
6738 ; AVX512F-NEXT:    vmovdqu32 (%rdi), %zmm0 {%k1}
6739 ; AVX512F-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $zmm0
6740 ; AVX512F-NEXT:    vzeroupper
6741 ; AVX512F-NEXT:    retq
6742 ;
6743 ; AVX512VLDQ-LABEL: mload_constmask_v4i32:
6744 ; AVX512VLDQ:       ## %bb.0:
6745 ; AVX512VLDQ-NEXT:    movb $14, %al
6746 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6747 ; AVX512VLDQ-NEXT:    vmovdqu32 (%rdi), %xmm0 {%k1}
6748 ; AVX512VLDQ-NEXT:    retq
6749 ;
6750 ; AVX512VLBW-LABEL: mload_constmask_v4i32:
6751 ; AVX512VLBW:       ## %bb.0:
6752 ; AVX512VLBW-NEXT:    movb $14, %al
6753 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6754 ; AVX512VLBW-NEXT:    vmovdqu32 (%rdi), %xmm0 {%k1}
6755 ; AVX512VLBW-NEXT:    retq
6756   %res = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %addr, i32 4, <4 x i1> <i1 0, i1 1, i1 1, i1 1>, <4 x i32> %dst)
6757   ret <4 x i32> %res
6758 }
6759
6760 define <2 x i64> @mload_constmask_v2i64(<2 x i64>* %addr, <2 x i64> %dst) {
6761 ; SSE2-LABEL: mload_constmask_v2i64:
6762 ; SSE2:       ## %bb.0:
6763 ; SSE2-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
6764 ; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
6765 ; SSE2-NEXT:    retq
6766 ;
6767 ; SSE42-LABEL: mload_constmask_v2i64:
6768 ; SSE42:       ## %bb.0:
6769 ; SSE42-NEXT:    pinsrq $1, 8(%rdi), %xmm0
6770 ; SSE42-NEXT:    retq
6771 ;
6772 ; AVX-LABEL: mload_constmask_v2i64:
6773 ; AVX:       ## %bb.0:
6774 ; AVX-NEXT:    vpinsrq $1, 8(%rdi), %xmm0, %xmm0
6775 ; AVX-NEXT:    retq
6776   %res = call <2 x i64> @llvm.masked.load.v2i64.p0v2i64(<2 x i64>* %addr, i32 4, <2 x i1> <i1 0, i1 1>, <2 x i64> %dst)
6777   ret <2 x i64> %res
6778 }
6779
6780 ; 256-bit FP vectors are supported with AVX.
6781
6782 define <8 x float> @mload_constmask_v8f32(<8 x float>* %addr, <8 x float> %dst) {
6783 ; SSE2-LABEL: mload_constmask_v8f32:
6784 ; SSE2:       ## %bb.0:
6785 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
6786 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
6787 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm3[0,0]
6788 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
6789 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]
6790 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm3[0,2]
6791 ; SSE2-NEXT:    movaps %xmm2, %xmm0
6792 ; SSE2-NEXT:    retq
6793 ;
6794 ; SSE42-LABEL: mload_constmask_v8f32:
6795 ; SSE42:       ## %bb.0:
6796 ; SSE42-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
6797 ; SSE42-NEXT:    blendps {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3]
6798 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]
6799 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
6800 ; SSE42-NEXT:    retq
6801 ;
6802 ; AVX1OR2-LABEL: mload_constmask_v8f32:
6803 ; AVX1OR2:       ## %bb.0:
6804 ; AVX1OR2-NEXT:    vmovaps {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,0,0,0,0,0]
6805 ; AVX1OR2-NEXT:    vmaskmovps (%rdi), %ymm1, %ymm1
6806 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3,4,5,6,7]
6807 ; AVX1OR2-NEXT:    retq
6808 ;
6809 ; AVX512F-LABEL: mload_constmask_v8f32:
6810 ; AVX512F:       ## %bb.0:
6811 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
6812 ; AVX512F-NEXT:    movw $7, %ax
6813 ; AVX512F-NEXT:    kmovw %eax, %k1
6814 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1}
6815 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
6816 ; AVX512F-NEXT:    retq
6817 ;
6818 ; AVX512VLDQ-LABEL: mload_constmask_v8f32:
6819 ; AVX512VLDQ:       ## %bb.0:
6820 ; AVX512VLDQ-NEXT:    movb $7, %al
6821 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6822 ; AVX512VLDQ-NEXT:    vmovups (%rdi), %ymm0 {%k1}
6823 ; AVX512VLDQ-NEXT:    retq
6824 ;
6825 ; AVX512VLBW-LABEL: mload_constmask_v8f32:
6826 ; AVX512VLBW:       ## %bb.0:
6827 ; AVX512VLBW-NEXT:    movb $7, %al
6828 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6829 ; AVX512VLBW-NEXT:    vmovups (%rdi), %ymm0 {%k1}
6830 ; AVX512VLBW-NEXT:    retq
6831   %res = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x float> %dst)
6832   ret <8 x float> %res
6833 }
6834
6835 define <8 x float> @mload_constmask_v8f32_zero(<8 x float>* %addr, <8 x float> %dst) {
6836 ; SSE2-LABEL: mload_constmask_v8f32_zero:
6837 ; SSE2:       ## %bb.0:
6838 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
6839 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
6840 ; SSE2-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
6841 ; SSE2-NEXT:    xorps %xmm1, %xmm1
6842 ; SSE2-NEXT:    retq
6843 ;
6844 ; SSE42-LABEL: mload_constmask_v8f32_zero:
6845 ; SSE42:       ## %bb.0:
6846 ; SSE42-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
6847 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],zero
6848 ; SSE42-NEXT:    xorps %xmm1, %xmm1
6849 ; SSE42-NEXT:    retq
6850 ;
6851 ; AVX1OR2-LABEL: mload_constmask_v8f32_zero:
6852 ; AVX1OR2:       ## %bb.0:
6853 ; AVX1OR2-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967295,4294967295,4294967295,0,0,0,0,0]
6854 ; AVX1OR2-NEXT:    vmaskmovps (%rdi), %ymm0, %ymm0
6855 ; AVX1OR2-NEXT:    retq
6856 ;
6857 ; AVX512F-LABEL: mload_constmask_v8f32_zero:
6858 ; AVX512F:       ## %bb.0:
6859 ; AVX512F-NEXT:    movw $7, %ax
6860 ; AVX512F-NEXT:    kmovw %eax, %k1
6861 ; AVX512F-NEXT:    vmovups (%rdi), %zmm0 {%k1} {z}
6862 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
6863 ; AVX512F-NEXT:    retq
6864 ;
6865 ; AVX512VLDQ-LABEL: mload_constmask_v8f32_zero:
6866 ; AVX512VLDQ:       ## %bb.0:
6867 ; AVX512VLDQ-NEXT:    movb $7, %al
6868 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6869 ; AVX512VLDQ-NEXT:    vmovups (%rdi), %ymm0 {%k1} {z}
6870 ; AVX512VLDQ-NEXT:    retq
6871 ;
6872 ; AVX512VLBW-LABEL: mload_constmask_v8f32_zero:
6873 ; AVX512VLBW:       ## %bb.0:
6874 ; AVX512VLBW-NEXT:    movb $7, %al
6875 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6876 ; AVX512VLBW-NEXT:    vmovups (%rdi), %ymm0 {%k1} {z}
6877 ; AVX512VLBW-NEXT:    retq
6878   %res = call <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>* %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 0>, <8 x float> zeroinitializer)
6879   ret <8 x float> %res
6880 }
6881
6882 define <4 x double> @mload_constmask_v4f64(<4 x double>* %addr, <4 x double> %dst) {
6883 ; SSE-LABEL: mload_constmask_v4f64:
6884 ; SSE:       ## %bb.0:
6885 ; SSE-NEXT:    movups (%rdi), %xmm0
6886 ; SSE-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
6887 ; SSE-NEXT:    retq
6888 ;
6889 ; AVX1OR2-LABEL: mload_constmask_v4f64:
6890 ; AVX1OR2:       ## %bb.0:
6891 ; AVX1OR2-NEXT:    vmovapd {{.*#+}} ymm1 = [18446744073709551615,18446744073709551615,18446744073709551615,0]
6892 ; AVX1OR2-NEXT:    vmaskmovpd (%rdi), %ymm1, %ymm1
6893 ; AVX1OR2-NEXT:    vblendpd {{.*#+}} ymm0 = ymm1[0,1,2],ymm0[3]
6894 ; AVX1OR2-NEXT:    retq
6895 ;
6896 ; AVX512F-LABEL: mload_constmask_v4f64:
6897 ; AVX512F:       ## %bb.0:
6898 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
6899 ; AVX512F-NEXT:    movb $7, %al
6900 ; AVX512F-NEXT:    kmovw %eax, %k1
6901 ; AVX512F-NEXT:    vmovupd (%rdi), %zmm0 {%k1}
6902 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
6903 ; AVX512F-NEXT:    retq
6904 ;
6905 ; AVX512VLDQ-LABEL: mload_constmask_v4f64:
6906 ; AVX512VLDQ:       ## %bb.0:
6907 ; AVX512VLDQ-NEXT:    movb $7, %al
6908 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6909 ; AVX512VLDQ-NEXT:    vmovupd (%rdi), %ymm0 {%k1}
6910 ; AVX512VLDQ-NEXT:    retq
6911 ;
6912 ; AVX512VLBW-LABEL: mload_constmask_v4f64:
6913 ; AVX512VLBW:       ## %bb.0:
6914 ; AVX512VLBW-NEXT:    movb $7, %al
6915 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6916 ; AVX512VLBW-NEXT:    vmovupd (%rdi), %ymm0 {%k1}
6917 ; AVX512VLBW-NEXT:    retq
6918   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 4, <4 x i1> <i1 1, i1 1, i1 1, i1 0>, <4 x double> %dst)
6919   ret <4 x double> %res
6920 }
6921
6922 ; 256-bit integer vectors are supported with AVX2.
6923
6924 define <8 x i32> @mload_constmask_v8i32(<8 x i32>* %addr, <8 x i32> %dst) {
6925 ; SSE2-LABEL: mload_constmask_v8i32:
6926 ; SSE2:       ## %bb.0:
6927 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
6928 ; SSE2-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
6929 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,0],xmm3[0,0]
6930 ; SSE2-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
6931 ; SSE2-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,0],xmm0[3,0]
6932 ; SSE2-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm3[0,2]
6933 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
6934 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[2,0]
6935 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,0]
6936 ; SSE2-NEXT:    movaps %xmm2, %xmm0
6937 ; SSE2-NEXT:    retq
6938 ;
6939 ; SSE42-LABEL: mload_constmask_v8i32:
6940 ; SSE42:       ## %bb.0:
6941 ; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm0
6942 ; SSE42-NEXT:    pinsrd $1, 4(%rdi), %xmm0
6943 ; SSE42-NEXT:    pinsrd $2, 8(%rdi), %xmm0
6944 ; SSE42-NEXT:    pinsrd $3, 28(%rdi), %xmm1
6945 ; SSE42-NEXT:    retq
6946 ;
6947 ; AVX1OR2-LABEL: mload_constmask_v8i32:
6948 ; AVX1OR2:       ## %bb.0:
6949 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1,2],ymm0[3,4,5,6],mem[7]
6950 ; AVX1OR2-NEXT:    retq
6951 ;
6952 ; AVX512F-LABEL: mload_constmask_v8i32:
6953 ; AVX512F:       ## %bb.0:
6954 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
6955 ; AVX512F-NEXT:    movw $135, %ax
6956 ; AVX512F-NEXT:    kmovw %eax, %k1
6957 ; AVX512F-NEXT:    vmovdqu32 (%rdi), %zmm0 {%k1}
6958 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
6959 ; AVX512F-NEXT:    retq
6960 ;
6961 ; AVX512VLDQ-LABEL: mload_constmask_v8i32:
6962 ; AVX512VLDQ:       ## %bb.0:
6963 ; AVX512VLDQ-NEXT:    movb $-121, %al
6964 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
6965 ; AVX512VLDQ-NEXT:    vmovdqu32 (%rdi), %ymm0 {%k1}
6966 ; AVX512VLDQ-NEXT:    retq
6967 ;
6968 ; AVX512VLBW-LABEL: mload_constmask_v8i32:
6969 ; AVX512VLBW:       ## %bb.0:
6970 ; AVX512VLBW-NEXT:    movb $-121, %al
6971 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
6972 ; AVX512VLBW-NEXT:    vmovdqu32 (%rdi), %ymm0 {%k1}
6973 ; AVX512VLBW-NEXT:    retq
6974   %res = call <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>* %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1>, <8 x i32> %dst)
6975   ret <8 x i32> %res
6976 }
6977
6978 define <4 x i64> @mload_constmask_v4i64(<4 x i64>* %addr, <4 x i64> %dst) {
6979 ; SSE2-LABEL: mload_constmask_v4i64:
6980 ; SSE2:       ## %bb.0:
6981 ; SSE2-NEXT:    movlpd {{.*#+}} xmm0 = mem[0],xmm0[1]
6982 ; SSE2-NEXT:    movsd {{.*#+}} xmm2 = mem[0],zero
6983 ; SSE2-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
6984 ; SSE2-NEXT:    retq
6985 ;
6986 ; SSE42-LABEL: mload_constmask_v4i64:
6987 ; SSE42:       ## %bb.0:
6988 ; SSE42-NEXT:    pinsrq $0, (%rdi), %xmm0
6989 ; SSE42-NEXT:    pinsrq $1, 24(%rdi), %xmm1
6990 ; SSE42-NEXT:    retq
6991 ;
6992 ; AVX1OR2-LABEL: mload_constmask_v4i64:
6993 ; AVX1OR2:       ## %bb.0:
6994 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1],ymm0[2,3,4,5],mem[6,7]
6995 ; AVX1OR2-NEXT:    retq
6996 ;
6997 ; AVX512F-LABEL: mload_constmask_v4i64:
6998 ; AVX512F:       ## %bb.0:
6999 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 def $zmm0
7000 ; AVX512F-NEXT:    movb $9, %al
7001 ; AVX512F-NEXT:    kmovw %eax, %k1
7002 ; AVX512F-NEXT:    vmovdqu64 (%rdi), %zmm0 {%k1}
7003 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
7004 ; AVX512F-NEXT:    retq
7005 ;
7006 ; AVX512VLDQ-LABEL: mload_constmask_v4i64:
7007 ; AVX512VLDQ:       ## %bb.0:
7008 ; AVX512VLDQ-NEXT:    movb $9, %al
7009 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
7010 ; AVX512VLDQ-NEXT:    vmovdqu64 (%rdi), %ymm0 {%k1}
7011 ; AVX512VLDQ-NEXT:    retq
7012 ;
7013 ; AVX512VLBW-LABEL: mload_constmask_v4i64:
7014 ; AVX512VLBW:       ## %bb.0:
7015 ; AVX512VLBW-NEXT:    movb $9, %al
7016 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
7017 ; AVX512VLBW-NEXT:    vmovdqu64 (%rdi), %ymm0 {%k1}
7018 ; AVX512VLBW-NEXT:    retq
7019   %res = call <4 x i64> @llvm.masked.load.v4i64.p0v4i64(<4 x i64>* %addr, i32 4, <4 x i1> <i1 1, i1 0, i1 0, i1 1>, <4 x i64> %dst)
7020   ret <4 x i64> %res
7021 }
7022
7023 ; 512-bit FP vectors are supported with AVX512.
7024
7025 define <8 x double> @mload_constmask_v8f64(<8 x double>* %addr, <8 x double> %dst) {
7026 ; SSE-LABEL: mload_constmask_v8f64:
7027 ; SSE:       ## %bb.0:
7028 ; SSE-NEXT:    movups (%rdi), %xmm0
7029 ; SSE-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
7030 ; SSE-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
7031 ; SSE-NEXT:    retq
7032 ;
7033 ; AVX1OR2-LABEL: mload_constmask_v8f64:
7034 ; AVX1OR2:       ## %bb.0:
7035 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1,2,3,4,5],ymm0[6,7]
7036 ; AVX1OR2-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3,4,5],mem[6,7]
7037 ; AVX1OR2-NEXT:    retq
7038 ;
7039 ; AVX512F-LABEL: mload_constmask_v8f64:
7040 ; AVX512F:       ## %bb.0:
7041 ; AVX512F-NEXT:    movb $-121, %al
7042 ; AVX512F-NEXT:    kmovw %eax, %k1
7043 ; AVX512F-NEXT:    vmovupd (%rdi), %zmm0 {%k1}
7044 ; AVX512F-NEXT:    retq
7045 ;
7046 ; AVX512VLDQ-LABEL: mload_constmask_v8f64:
7047 ; AVX512VLDQ:       ## %bb.0:
7048 ; AVX512VLDQ-NEXT:    movb $-121, %al
7049 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
7050 ; AVX512VLDQ-NEXT:    vmovupd (%rdi), %zmm0 {%k1}
7051 ; AVX512VLDQ-NEXT:    retq
7052 ;
7053 ; AVX512VLBW-LABEL: mload_constmask_v8f64:
7054 ; AVX512VLBW:       ## %bb.0:
7055 ; AVX512VLBW-NEXT:    movb $-121, %al
7056 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
7057 ; AVX512VLBW-NEXT:    vmovupd (%rdi), %zmm0 {%k1}
7058 ; AVX512VLBW-NEXT:    retq
7059   %res = call <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %addr, i32 4, <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 0, i1 0, i1 0, i1 1>, <8 x double> %dst)
7060   ret <8 x double> %res
7061 }
7062
7063 ; If the pass-through operand is undef, no blend is needed.
7064
7065 define <4 x double> @mload_constmask_v4f64_undef_passthrough(<4 x double>* %addr) {
7066 ; SSE-LABEL: mload_constmask_v4f64_undef_passthrough:
7067 ; SSE:       ## %bb.0:
7068 ; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
7069 ; SSE-NEXT:    movups (%rdi), %xmm0
7070 ; SSE-NEXT:    retq
7071 ;
7072 ; AVX1OR2-LABEL: mload_constmask_v4f64_undef_passthrough:
7073 ; AVX1OR2:       ## %bb.0:
7074 ; AVX1OR2-NEXT:    vmovapd {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,18446744073709551615,0]
7075 ; AVX1OR2-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm0
7076 ; AVX1OR2-NEXT:    retq
7077 ;
7078 ; AVX512F-LABEL: mload_constmask_v4f64_undef_passthrough:
7079 ; AVX512F:       ## %bb.0:
7080 ; AVX512F-NEXT:    movb $7, %al
7081 ; AVX512F-NEXT:    kmovw %eax, %k1
7082 ; AVX512F-NEXT:    vmovupd (%rdi), %zmm0 {%k1} {z}
7083 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
7084 ; AVX512F-NEXT:    retq
7085 ;
7086 ; AVX512VLDQ-LABEL: mload_constmask_v4f64_undef_passthrough:
7087 ; AVX512VLDQ:       ## %bb.0:
7088 ; AVX512VLDQ-NEXT:    movb $7, %al
7089 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
7090 ; AVX512VLDQ-NEXT:    vmovupd (%rdi), %ymm0 {%k1} {z}
7091 ; AVX512VLDQ-NEXT:    retq
7092 ;
7093 ; AVX512VLBW-LABEL: mload_constmask_v4f64_undef_passthrough:
7094 ; AVX512VLBW:       ## %bb.0:
7095 ; AVX512VLBW-NEXT:    movb $7, %al
7096 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
7097 ; AVX512VLBW-NEXT:    vmovupd (%rdi), %ymm0 {%k1} {z}
7098 ; AVX512VLBW-NEXT:    retq
7099   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 4, <4 x i1> <i1 1, i1 1, i1 1, i1 0>, <4 x double> undef)
7100   ret <4 x double> %res
7101 }
7102
7103 define <4 x i64> @mload_constmask_v4i64_undef_passthrough(<4 x i64>* %addr) {
7104 ; SSE-LABEL: mload_constmask_v4i64_undef_passthrough:
7105 ; SSE:       ## %bb.0:
7106 ; SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
7107 ; SSE-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
7108 ; SSE-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,0,1]
7109 ; SSE-NEXT:    retq
7110 ;
7111 ; AVX1-LABEL: mload_constmask_v4i64_undef_passthrough:
7112 ; AVX1:       ## %bb.0:
7113 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm0 = [0,18446744073709551615,18446744073709551615,0]
7114 ; AVX1-NEXT:    vmaskmovpd (%rdi), %ymm0, %ymm0
7115 ; AVX1-NEXT:    retq
7116 ;
7117 ; AVX2-LABEL: mload_constmask_v4i64_undef_passthrough:
7118 ; AVX2:       ## %bb.0:
7119 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm0 = [0,18446744073709551615,18446744073709551615,0]
7120 ; AVX2-NEXT:    vpmaskmovq (%rdi), %ymm0, %ymm0
7121 ; AVX2-NEXT:    retq
7122 ;
7123 ; AVX512F-LABEL: mload_constmask_v4i64_undef_passthrough:
7124 ; AVX512F:       ## %bb.0:
7125 ; AVX512F-NEXT:    movb $6, %al
7126 ; AVX512F-NEXT:    kmovw %eax, %k1
7127 ; AVX512F-NEXT:    vmovdqu64 (%rdi), %zmm0 {%k1} {z}
7128 ; AVX512F-NEXT:    ## kill: def $ymm0 killed $ymm0 killed $zmm0
7129 ; AVX512F-NEXT:    retq
7130 ;
7131 ; AVX512VLDQ-LABEL: mload_constmask_v4i64_undef_passthrough:
7132 ; AVX512VLDQ:       ## %bb.0:
7133 ; AVX512VLDQ-NEXT:    movb $6, %al
7134 ; AVX512VLDQ-NEXT:    kmovw %eax, %k1
7135 ; AVX512VLDQ-NEXT:    vmovdqu64 (%rdi), %ymm0 {%k1} {z}
7136 ; AVX512VLDQ-NEXT:    retq
7137 ;
7138 ; AVX512VLBW-LABEL: mload_constmask_v4i64_undef_passthrough:
7139 ; AVX512VLBW:       ## %bb.0:
7140 ; AVX512VLBW-NEXT:    movb $6, %al
7141 ; AVX512VLBW-NEXT:    kmovd %eax, %k1
7142 ; AVX512VLBW-NEXT:    vmovdqu64 (%rdi), %ymm0 {%k1} {z}
7143 ; AVX512VLBW-NEXT:    retq
7144   %res = call <4 x i64> @llvm.masked.load.v4i64.p0v4i64(<4 x i64>* %addr, i32 4, <4 x i1> <i1 0, i1 1, i1 1, i1 0>, <4 x i64> undef)
7145   ret <4 x i64> %res
7146 }
7147
7148 ;  When only one element of the mask is set, reduce to a scalar load.
7149
7150 define <4 x i32> @load_one_mask_bit_set1(<4 x i32>* %addr, <4 x i32> %val) {
7151 ; SSE2-LABEL: load_one_mask_bit_set1:
7152 ; SSE2:       ## %bb.0:
7153 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
7154 ; SSE2-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
7155 ; SSE2-NEXT:    retq
7156 ;
7157 ; SSE42-LABEL: load_one_mask_bit_set1:
7158 ; SSE42:       ## %bb.0:
7159 ; SSE42-NEXT:    pinsrd $0, (%rdi), %xmm0
7160 ; SSE42-NEXT:    retq
7161 ;
7162 ; AVX-LABEL: load_one_mask_bit_set1:
7163 ; AVX:       ## %bb.0:
7164 ; AVX-NEXT:    vpinsrd $0, (%rdi), %xmm0, %xmm0
7165 ; AVX-NEXT:    retq
7166   %res = call <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>* %addr, i32 4, <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i32> %val)
7167   ret <4 x i32> %res
7168 }
7169
7170 ; Choose a different element to show that the correct address offset is produced.
7171
7172 define <4 x float> @load_one_mask_bit_set2(<4 x float>* %addr, <4 x float> %val) {
7173 ; SSE2-LABEL: load_one_mask_bit_set2:
7174 ; SSE2:       ## %bb.0:
7175 ; SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
7176 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,0],xmm0[3,0]
7177 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm1[0,2]
7178 ; SSE2-NEXT:    retq
7179 ;
7180 ; SSE42-LABEL: load_one_mask_bit_set2:
7181 ; SSE42:       ## %bb.0:
7182 ; SSE42-NEXT:    insertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
7183 ; SSE42-NEXT:    retq
7184 ;
7185 ; AVX-LABEL: load_one_mask_bit_set2:
7186 ; AVX:       ## %bb.0:
7187 ; AVX-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]
7188 ; AVX-NEXT:    retq
7189   %res = call <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>* %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x float> %val)
7190   ret <4 x float> %res
7191 }
7192
7193 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
7194
7195 define <4 x i64> @load_one_mask_bit_set3(<4 x i64>* %addr, <4 x i64> %val) {
7196 ; SSE2-LABEL: load_one_mask_bit_set3:
7197 ; SSE2:       ## %bb.0:
7198 ; SSE2-NEXT:    movlpd {{.*#+}} xmm1 = mem[0],xmm1[1]
7199 ; SSE2-NEXT:    retq
7200 ;
7201 ; SSE42-LABEL: load_one_mask_bit_set3:
7202 ; SSE42:       ## %bb.0:
7203 ; SSE42-NEXT:    pinsrq $0, 16(%rdi), %xmm1
7204 ; SSE42-NEXT:    retq
7205 ;
7206 ; AVX1-LABEL: load_one_mask_bit_set3:
7207 ; AVX1:       ## %bb.0:
7208 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
7209 ; AVX1-NEXT:    vpinsrq $0, 16(%rdi), %xmm1, %xmm1
7210 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
7211 ; AVX1-NEXT:    retq
7212 ;
7213 ; AVX2-LABEL: load_one_mask_bit_set3:
7214 ; AVX2:       ## %bb.0:
7215 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
7216 ; AVX2-NEXT:    vpinsrq $0, 16(%rdi), %xmm1, %xmm1
7217 ; AVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
7218 ; AVX2-NEXT:    retq
7219 ;
7220 ; AVX512-LABEL: load_one_mask_bit_set3:
7221 ; AVX512:       ## %bb.0:
7222 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm1
7223 ; AVX512-NEXT:    vpinsrq $0, 16(%rdi), %xmm1, %xmm1
7224 ; AVX512-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
7225 ; AVX512-NEXT:    retq
7226   %res = call <4 x i64> @llvm.masked.load.v4i64.p0v4i64(<4 x i64>* %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 true, i1 false>, <4 x i64> %val)
7227   ret <4 x i64> %res
7228 }
7229
7230 ; Choose a different scalar type and a high element of a 256-bit vector because AVX doesn't support those evenly.
7231
7232 define <4 x double> @load_one_mask_bit_set4(<4 x double>* %addr, <4 x double> %val) {
7233 ; SSE-LABEL: load_one_mask_bit_set4:
7234 ; SSE:       ## %bb.0:
7235 ; SSE-NEXT:    movhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
7236 ; SSE-NEXT:    retq
7237 ;
7238 ; AVX-LABEL: load_one_mask_bit_set4:
7239 ; AVX:       ## %bb.0:
7240 ; AVX-NEXT:    vextractf128 $1, %ymm0, %xmm1
7241 ; AVX-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
7242 ; AVX-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
7243 ; AVX-NEXT:    retq
7244   %res = call <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>* %addr, i32 4, <4 x i1> <i1 false, i1 false, i1 false, i1 true>, <4 x double> %val)
7245   ret <4 x double> %res
7246 }
7247
7248 ; Try a 512-bit vector to make sure AVX doesn't die and AVX512 works as expected.
7249
7250 define <8 x double> @load_one_mask_bit_set5(<8 x double>* %addr, <8 x double> %val) {
7251 ; SSE-LABEL: load_one_mask_bit_set5:
7252 ; SSE:       ## %bb.0:
7253 ; SSE-NEXT:    movhpd {{.*#+}} xmm3 = xmm3[0],mem[0]
7254 ; SSE-NEXT:    retq
7255 ;
7256 ; AVX1OR2-LABEL: load_one_mask_bit_set5:
7257 ; AVX1OR2:       ## %bb.0:
7258 ; AVX1OR2-NEXT:    vextractf128 $1, %ymm1, %xmm2
7259 ; AVX1OR2-NEXT:    vmovhpd {{.*#+}} xmm2 = xmm2[0],mem[0]
7260 ; AVX1OR2-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7261 ; AVX1OR2-NEXT:    retq
7262 ;
7263 ; AVX512-LABEL: load_one_mask_bit_set5:
7264 ; AVX512:       ## %bb.0:
7265 ; AVX512-NEXT:    vextractf32x4 $3, %zmm0, %xmm1
7266 ; AVX512-NEXT:    vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0]
7267 ; AVX512-NEXT:    vinsertf32x4 $3, %xmm1, %zmm0, %zmm0
7268 ; AVX512-NEXT:    retq
7269   %res = call <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>* %addr, i32 4, <8 x i1> <i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 true>, <8 x double> %val)
7270   ret <8 x double> %res
7271 }
7272
7273 define i32 @pr38986(i1 %c, i32* %p) {
7274 ; SSE-LABEL: pr38986:
7275 ; SSE:       ## %bb.0:
7276 ; SSE-NEXT:    testb $1, %dil
7277 ; SSE-NEXT:    ## implicit-def: $eax
7278 ; SSE-NEXT:    je LBB43_2
7279 ; SSE-NEXT:  ## %bb.1: ## %cond.load
7280 ; SSE-NEXT:    movl (%rsi), %eax
7281 ; SSE-NEXT:  LBB43_2: ## %else
7282 ; SSE-NEXT:    retq
7283 ;
7284 ; AVX-LABEL: pr38986:
7285 ; AVX:       ## %bb.0:
7286 ; AVX-NEXT:    testb $1, %dil
7287 ; AVX-NEXT:    ## implicit-def: $eax
7288 ; AVX-NEXT:    je LBB43_2
7289 ; AVX-NEXT:  ## %bb.1: ## %cond.load
7290 ; AVX-NEXT:    movl (%rsi), %eax
7291 ; AVX-NEXT:  LBB43_2: ## %else
7292 ; AVX-NEXT:    retq
7293  %vc = insertelement <1 x i1> undef, i1 %c, i32 0
7294  %vp = bitcast i32* %p to <1 x i32>*
7295  %L = call <1 x i32> @llvm.masked.load.v1i32.p0v1i32 (<1 x i32>* %vp, i32 4, <1 x i1> %vc, <1 x i32> undef)
7296  %ret = bitcast <1 x i32> %L to i32
7297  ret i32 %ret
7298 }
7299
7300 define <2 x double> @zero_mask(<2 x double>* %addr, <2 x double> %dst) {
7301 ; SSE-LABEL: zero_mask:
7302 ; SSE:       ## %bb.0:
7303 ; SSE-NEXT:    retq
7304 ;
7305 ; AVX-LABEL: zero_mask:
7306 ; AVX:       ## %bb.0:
7307 ; AVX-NEXT:    retq
7308   %res = call <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>* %addr, i32 4, <2 x i1> zeroinitializer, <2 x double> %dst)
7309   ret <2 x double> %res
7310 }
7311
7312 declare <8 x double> @llvm.masked.load.v8f64.p0v8f64(<8 x double>*, i32, <8 x i1>, <8 x double>)
7313 declare <4 x double> @llvm.masked.load.v4f64.p0v4f64(<4 x double>*, i32, <4 x i1>, <4 x double>)
7314 declare <2 x double> @llvm.masked.load.v2f64.p0v2f64(<2 x double>*, i32, <2 x i1>, <2 x double>)
7315 declare <1 x double> @llvm.masked.load.v1f64.p0v1f64(<1 x double>*, i32, <1 x i1>, <1 x double>)
7316
7317 declare <16 x float> @llvm.masked.load.v16f32.p0v16f32(<16 x float>*, i32, <16 x i1>, <16 x float>)
7318 declare <8 x float> @llvm.masked.load.v8f32.p0v8f32(<8 x float>*, i32, <8 x i1>, <8 x float>)
7319 declare <4 x float> @llvm.masked.load.v4f32.p0v4f32(<4 x float>*, i32, <4 x i1>, <4 x float>)
7320 declare <2 x float> @llvm.masked.load.v2f32.p0v2f32(<2 x float>*, i32, <2 x i1>, <2 x float>)
7321
7322 declare <8 x i64> @llvm.masked.load.v8i64.p0v8i64(<8 x i64>*, i32, <8 x i1>, <8 x i64>)
7323 declare <4 x i64> @llvm.masked.load.v4i64.p0v4i64(<4 x i64>*, i32, <4 x i1>, <4 x i64>)
7324 declare <2 x i64> @llvm.masked.load.v2i64.p0v2i64(<2 x i64>*, i32, <2 x i1>, <2 x i64>)
7325 declare <1 x i64> @llvm.masked.load.v1i64.p0v1i64(<1 x i64>*, i32, <1 x i1>, <1 x i64>)
7326
7327 declare <16 x i32> @llvm.masked.load.v16i32.p0v16i32(<16 x i32>*, i32, <16 x i1>, <16 x i32>)
7328 declare <8 x i32> @llvm.masked.load.v8i32.p0v8i32(<8 x i32>*, i32, <8 x i1>, <8 x i32>)
7329 declare <4 x i32> @llvm.masked.load.v4i32.p0v4i32(<4 x i32>*, i32, <4 x i1>, <4 x i32>)
7330 declare <2 x i32> @llvm.masked.load.v2i32.p0v2i32(<2 x i32>*, i32, <2 x i1>, <2 x i32>)
7331 declare <1 x i32> @llvm.masked.load.v1i32.p0v1i32(<1 x i32>*, i32, <1 x i1>, <1 x i32>)
7332
7333 declare <32 x i16> @llvm.masked.load.v32i16.p0v32i16(<32 x i16>*, i32, <32 x i1>, <32 x i16>)
7334 declare <16 x i16> @llvm.masked.load.v16i16.p0v16i16(<16 x i16>*, i32, <16 x i1>, <16 x i16>)
7335 declare <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>*, i32, <8 x i1>, <8 x i16>)
7336 declare <4 x i16> @llvm.masked.load.v4i16.p0v4i16(<4 x i16>*, i32, <4 x i1>, <4 x i16>)
7337
7338 declare <64 x i8> @llvm.masked.load.v64i8.p0v64i8(<64 x i8>*, i32, <64 x i1>, <64 x i8>)
7339 declare <32 x i8> @llvm.masked.load.v32i8.p0v32i8(<32 x i8>*, i32, <32 x i1>, <32 x i8>)
7340 declare <16 x i8> @llvm.masked.load.v16i8.p0v16i8(<16 x i8>*, i32, <16 x i1>, <16 x i8>)
7341 declare <8 x i8> @llvm.masked.load.v8i8.p0v8i8(<8 x i8>*, i32, <8 x i1>, <8 x i8>)