1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=-sse2 | FileCheck %s --check-prefixes=ALL,SCALAR
3 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=ALL,SSE,SSE2,SSE2-ONLY
4 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=ALL,SSE,SSE2,SSE3
5 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+ssse3 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSSE3-ONLY
6 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.1 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSE41
7 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse4.2 | FileCheck %s --check-prefixes=ALL,SSE,SSSE3,SSE42
8 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx | FileCheck %s --check-prefixes=ALL,AVX,AVX1
9 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 | FileCheck %s --check-prefixes=ALL,AVX,AVX2
10 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512vl | FileCheck %s --check-prefixes=ALL,AVX512,AVX512F
11 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512vl,+avx512bw | FileCheck %s --check-prefixes=ALL,AVX512,AVX512BW
13 define void @vec16_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
14 ; ALL-LABEL: vec16_i8:
16 ; ALL-NEXT: movzbl (%rdi), %eax
18 ; ALL-NEXT: movb %al, (%rsi)
19 ; ALL-NEXT: movb %al, 1(%rsi)
21 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
22 %in.elt = xor i8 %in.elt.not, -1
23 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
24 store i8 %in.elt, ptr %out.elt0.ptr, align 64
25 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
26 store i8 %in.elt, ptr %out.elt1.ptr, align 1
30 define void @vec32_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
31 ; ALL-LABEL: vec32_i8:
33 ; ALL-NEXT: movzbl (%rdi), %eax
35 ; ALL-NEXT: movb %al, (%rsi)
36 ; ALL-NEXT: movb %al, 1(%rsi)
37 ; ALL-NEXT: movb %al, 2(%rsi)
38 ; ALL-NEXT: movb %al, 3(%rsi)
40 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
41 %in.elt = xor i8 %in.elt.not, -1
42 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
43 store i8 %in.elt, ptr %out.elt0.ptr, align 64
44 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
45 store i8 %in.elt, ptr %out.elt1.ptr, align 1
46 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
47 store i8 %in.elt, ptr %out.elt2.ptr, align 2
48 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
49 store i8 %in.elt, ptr %out.elt3.ptr, align 1
53 define void @vec32_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
54 ; ALL-LABEL: vec32_i16:
56 ; ALL-NEXT: movl (%rdi), %eax
58 ; ALL-NEXT: movw %ax, (%rsi)
59 ; ALL-NEXT: movw %ax, 2(%rsi)
61 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
62 %in.elt = xor i16 %in.elt.not, -1
63 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
64 store i16 %in.elt, ptr %out.elt0.ptr, align 64
65 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
66 store i16 %in.elt, ptr %out.elt1.ptr, align 2
70 define void @vec64_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
71 ; ALL-LABEL: vec64_i8:
73 ; ALL-NEXT: movzbl (%rdi), %eax
75 ; ALL-NEXT: movb %al, (%rsi)
76 ; ALL-NEXT: movb %al, 1(%rsi)
77 ; ALL-NEXT: movb %al, 2(%rsi)
78 ; ALL-NEXT: movb %al, 3(%rsi)
79 ; ALL-NEXT: movb %al, 4(%rsi)
80 ; ALL-NEXT: movb %al, 5(%rsi)
81 ; ALL-NEXT: movb %al, 6(%rsi)
82 ; ALL-NEXT: movb %al, 7(%rsi)
84 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
85 %in.elt = xor i8 %in.elt.not, -1
86 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
87 store i8 %in.elt, ptr %out.elt0.ptr, align 64
88 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
89 store i8 %in.elt, ptr %out.elt1.ptr, align 1
90 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
91 store i8 %in.elt, ptr %out.elt2.ptr, align 2
92 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
93 store i8 %in.elt, ptr %out.elt3.ptr, align 1
94 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4
95 store i8 %in.elt, ptr %out.elt4.ptr, align 4
96 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5
97 store i8 %in.elt, ptr %out.elt5.ptr, align 1
98 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6
99 store i8 %in.elt, ptr %out.elt6.ptr, align 2
100 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7
101 store i8 %in.elt, ptr %out.elt7.ptr, align 1
105 define void @vec64_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
106 ; ALL-LABEL: vec64_i16:
108 ; ALL-NEXT: movl (%rdi), %eax
109 ; ALL-NEXT: notl %eax
110 ; ALL-NEXT: movw %ax, (%rsi)
111 ; ALL-NEXT: movw %ax, 2(%rsi)
112 ; ALL-NEXT: movw %ax, 4(%rsi)
113 ; ALL-NEXT: movw %ax, 6(%rsi)
115 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
116 %in.elt = xor i16 %in.elt.not, -1
117 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
118 store i16 %in.elt, ptr %out.elt0.ptr, align 64
119 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
120 store i16 %in.elt, ptr %out.elt1.ptr, align 2
121 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2
122 store i16 %in.elt, ptr %out.elt2.ptr, align 4
123 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3
124 store i16 %in.elt, ptr %out.elt3.ptr, align 2
128 define void @vec64_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
129 ; ALL-LABEL: vec64_i32:
131 ; ALL-NEXT: movl (%rdi), %eax
132 ; ALL-NEXT: notl %eax
133 ; ALL-NEXT: movl %eax, (%rsi)
134 ; ALL-NEXT: movl %eax, 4(%rsi)
136 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
137 %in.elt = xor i32 %in.elt.not, -1
138 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0
139 store i32 %in.elt, ptr %out.elt0.ptr, align 64
140 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1
141 store i32 %in.elt, ptr %out.elt1.ptr, align 4
145 define void @vec64_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
146 ; ALL-LABEL: vec64_float:
148 ; ALL-NEXT: movl (%rdi), %eax
149 ; ALL-NEXT: notl %eax
150 ; ALL-NEXT: movl %eax, (%rsi)
151 ; ALL-NEXT: movl %eax, 4(%rsi)
153 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
154 %in.elt.int = xor i32 %in.elt.not, -1
155 %in.elt = bitcast i32 %in.elt.int to float
156 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0
157 store float %in.elt, ptr %out.elt0.ptr, align 64
158 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1
159 store float %in.elt, ptr %out.elt1.ptr, align 4
163 define void @vec128_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
164 ; ALL-LABEL: vec128_i8:
166 ; ALL-NEXT: movzbl (%rdi), %eax
168 ; ALL-NEXT: movb %al, (%rsi)
169 ; ALL-NEXT: movb %al, 1(%rsi)
170 ; ALL-NEXT: movb %al, 2(%rsi)
171 ; ALL-NEXT: movb %al, 3(%rsi)
172 ; ALL-NEXT: movb %al, 4(%rsi)
173 ; ALL-NEXT: movb %al, 5(%rsi)
174 ; ALL-NEXT: movb %al, 6(%rsi)
175 ; ALL-NEXT: movb %al, 7(%rsi)
176 ; ALL-NEXT: movb %al, 8(%rsi)
177 ; ALL-NEXT: movb %al, 9(%rsi)
178 ; ALL-NEXT: movb %al, 10(%rsi)
179 ; ALL-NEXT: movb %al, 11(%rsi)
180 ; ALL-NEXT: movb %al, 12(%rsi)
181 ; ALL-NEXT: movb %al, 13(%rsi)
182 ; ALL-NEXT: movb %al, 14(%rsi)
183 ; ALL-NEXT: movb %al, 15(%rsi)
185 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
186 %in.elt = xor i8 %in.elt.not, -1
187 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
188 store i8 %in.elt, ptr %out.elt0.ptr, align 64
189 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
190 store i8 %in.elt, ptr %out.elt1.ptr, align 1
191 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
192 store i8 %in.elt, ptr %out.elt2.ptr, align 2
193 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
194 store i8 %in.elt, ptr %out.elt3.ptr, align 1
195 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4
196 store i8 %in.elt, ptr %out.elt4.ptr, align 4
197 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5
198 store i8 %in.elt, ptr %out.elt5.ptr, align 1
199 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6
200 store i8 %in.elt, ptr %out.elt6.ptr, align 2
201 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7
202 store i8 %in.elt, ptr %out.elt7.ptr, align 1
203 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8
204 store i8 %in.elt, ptr %out.elt8.ptr, align 8
205 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9
206 store i8 %in.elt, ptr %out.elt9.ptr, align 1
207 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10
208 store i8 %in.elt, ptr %out.elt10.ptr, align 2
209 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11
210 store i8 %in.elt, ptr %out.elt11.ptr, align 1
211 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12
212 store i8 %in.elt, ptr %out.elt12.ptr, align 4
213 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13
214 store i8 %in.elt, ptr %out.elt13.ptr, align 1
215 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14
216 store i8 %in.elt, ptr %out.elt14.ptr, align 2
217 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15
218 store i8 %in.elt, ptr %out.elt15.ptr, align 1
222 define void @vec128_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
223 ; ALL-LABEL: vec128_i16:
225 ; ALL-NEXT: movl (%rdi), %eax
226 ; ALL-NEXT: notl %eax
227 ; ALL-NEXT: movw %ax, (%rsi)
228 ; ALL-NEXT: movw %ax, 2(%rsi)
229 ; ALL-NEXT: movw %ax, 4(%rsi)
230 ; ALL-NEXT: movw %ax, 6(%rsi)
231 ; ALL-NEXT: movw %ax, 8(%rsi)
232 ; ALL-NEXT: movw %ax, 10(%rsi)
233 ; ALL-NEXT: movw %ax, 12(%rsi)
234 ; ALL-NEXT: movw %ax, 14(%rsi)
236 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
237 %in.elt = xor i16 %in.elt.not, -1
238 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
239 store i16 %in.elt, ptr %out.elt0.ptr, align 64
240 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
241 store i16 %in.elt, ptr %out.elt1.ptr, align 2
242 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2
243 store i16 %in.elt, ptr %out.elt2.ptr, align 4
244 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3
245 store i16 %in.elt, ptr %out.elt3.ptr, align 2
246 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4
247 store i16 %in.elt, ptr %out.elt4.ptr, align 8
248 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5
249 store i16 %in.elt, ptr %out.elt5.ptr, align 2
250 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6
251 store i16 %in.elt, ptr %out.elt6.ptr, align 4
252 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7
253 store i16 %in.elt, ptr %out.elt7.ptr, align 2
257 define void @vec128_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
258 ; ALL-LABEL: vec128_i32:
260 ; ALL-NEXT: movl (%rdi), %eax
261 ; ALL-NEXT: notl %eax
262 ; ALL-NEXT: movl %eax, (%rsi)
263 ; ALL-NEXT: movl %eax, 4(%rsi)
264 ; ALL-NEXT: movl %eax, 8(%rsi)
265 ; ALL-NEXT: movl %eax, 12(%rsi)
267 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
268 %in.elt = xor i32 %in.elt.not, -1
269 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0
270 store i32 %in.elt, ptr %out.elt0.ptr, align 64
271 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1
272 store i32 %in.elt, ptr %out.elt1.ptr, align 4
273 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2
274 store i32 %in.elt, ptr %out.elt2.ptr, align 8
275 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3
276 store i32 %in.elt, ptr %out.elt3.ptr, align 4
280 define void @vec128_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
281 ; ALL-LABEL: vec128_float:
283 ; ALL-NEXT: movl (%rdi), %eax
284 ; ALL-NEXT: notl %eax
285 ; ALL-NEXT: movl %eax, (%rsi)
286 ; ALL-NEXT: movl %eax, 4(%rsi)
287 ; ALL-NEXT: movl %eax, 8(%rsi)
288 ; ALL-NEXT: movl %eax, 12(%rsi)
290 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
291 %in.elt.int = xor i32 %in.elt.not, -1
292 %in.elt = bitcast i32 %in.elt.int to float
293 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0
294 store float %in.elt, ptr %out.elt0.ptr, align 64
295 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1
296 store float %in.elt, ptr %out.elt1.ptr, align 4
297 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2
298 store float %in.elt, ptr %out.elt2.ptr, align 8
299 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3
300 store float %in.elt, ptr %out.elt3.ptr, align 4
304 define void @vec128_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
305 ; ALL-LABEL: vec128_i64:
307 ; ALL-NEXT: movq (%rdi), %rax
308 ; ALL-NEXT: notq %rax
309 ; ALL-NEXT: movq %rax, (%rsi)
310 ; ALL-NEXT: movq %rax, 8(%rsi)
312 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
313 %in.elt = xor i64 %in.elt.not, -1
314 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0
315 store i64 %in.elt, ptr %out.elt0.ptr, align 64
316 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1
317 store i64 %in.elt, ptr %out.elt1.ptr, align 8
321 define void @vec128_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
322 ; ALL-LABEL: vec128_double:
324 ; ALL-NEXT: movq (%rdi), %rax
325 ; ALL-NEXT: notq %rax
326 ; ALL-NEXT: movq %rax, (%rsi)
327 ; ALL-NEXT: movq %rax, 8(%rsi)
329 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
330 %in.elt.int = xor i64 %in.elt.not, -1
331 %in.elt = bitcast i64 %in.elt.int to double
332 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0
333 store double %in.elt, ptr %out.elt0.ptr, align 64
334 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1
335 store double %in.elt, ptr %out.elt1.ptr, align 8
339 define void @vec256_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
340 ; ALL-LABEL: vec256_i8:
342 ; ALL-NEXT: movzbl (%rdi), %eax
344 ; ALL-NEXT: movb %al, (%rsi)
345 ; ALL-NEXT: movb %al, 1(%rsi)
346 ; ALL-NEXT: movb %al, 2(%rsi)
347 ; ALL-NEXT: movb %al, 3(%rsi)
348 ; ALL-NEXT: movb %al, 4(%rsi)
349 ; ALL-NEXT: movb %al, 5(%rsi)
350 ; ALL-NEXT: movb %al, 6(%rsi)
351 ; ALL-NEXT: movb %al, 7(%rsi)
352 ; ALL-NEXT: movb %al, 8(%rsi)
353 ; ALL-NEXT: movb %al, 9(%rsi)
354 ; ALL-NEXT: movb %al, 10(%rsi)
355 ; ALL-NEXT: movb %al, 11(%rsi)
356 ; ALL-NEXT: movb %al, 12(%rsi)
357 ; ALL-NEXT: movb %al, 13(%rsi)
358 ; ALL-NEXT: movb %al, 14(%rsi)
359 ; ALL-NEXT: movb %al, 15(%rsi)
360 ; ALL-NEXT: movb %al, 16(%rsi)
361 ; ALL-NEXT: movb %al, 17(%rsi)
362 ; ALL-NEXT: movb %al, 18(%rsi)
363 ; ALL-NEXT: movb %al, 19(%rsi)
364 ; ALL-NEXT: movb %al, 20(%rsi)
365 ; ALL-NEXT: movb %al, 21(%rsi)
366 ; ALL-NEXT: movb %al, 22(%rsi)
367 ; ALL-NEXT: movb %al, 23(%rsi)
368 ; ALL-NEXT: movb %al, 24(%rsi)
369 ; ALL-NEXT: movb %al, 25(%rsi)
370 ; ALL-NEXT: movb %al, 26(%rsi)
371 ; ALL-NEXT: movb %al, 27(%rsi)
372 ; ALL-NEXT: movb %al, 28(%rsi)
373 ; ALL-NEXT: movb %al, 29(%rsi)
374 ; ALL-NEXT: movb %al, 30(%rsi)
375 ; ALL-NEXT: movb %al, 31(%rsi)
377 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
378 %in.elt = xor i8 %in.elt.not, -1
379 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
380 store i8 %in.elt, ptr %out.elt0.ptr, align 64
381 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
382 store i8 %in.elt, ptr %out.elt1.ptr, align 1
383 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
384 store i8 %in.elt, ptr %out.elt2.ptr, align 2
385 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
386 store i8 %in.elt, ptr %out.elt3.ptr, align 1
387 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4
388 store i8 %in.elt, ptr %out.elt4.ptr, align 4
389 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5
390 store i8 %in.elt, ptr %out.elt5.ptr, align 1
391 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6
392 store i8 %in.elt, ptr %out.elt6.ptr, align 2
393 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7
394 store i8 %in.elt, ptr %out.elt7.ptr, align 1
395 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8
396 store i8 %in.elt, ptr %out.elt8.ptr, align 8
397 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9
398 store i8 %in.elt, ptr %out.elt9.ptr, align 1
399 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10
400 store i8 %in.elt, ptr %out.elt10.ptr, align 2
401 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11
402 store i8 %in.elt, ptr %out.elt11.ptr, align 1
403 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12
404 store i8 %in.elt, ptr %out.elt12.ptr, align 4
405 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13
406 store i8 %in.elt, ptr %out.elt13.ptr, align 1
407 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14
408 store i8 %in.elt, ptr %out.elt14.ptr, align 2
409 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15
410 store i8 %in.elt, ptr %out.elt15.ptr, align 1
411 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 16
412 store i8 %in.elt, ptr %out.elt16.ptr, align 16
413 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 17
414 store i8 %in.elt, ptr %out.elt17.ptr, align 1
415 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 18
416 store i8 %in.elt, ptr %out.elt18.ptr, align 2
417 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 19
418 store i8 %in.elt, ptr %out.elt19.ptr, align 1
419 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 20
420 store i8 %in.elt, ptr %out.elt20.ptr, align 4
421 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21
422 store i8 %in.elt, ptr %out.elt21.ptr, align 1
423 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 22
424 store i8 %in.elt, ptr %out.elt22.ptr, align 2
425 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 23
426 store i8 %in.elt, ptr %out.elt23.ptr, align 1
427 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 24
428 store i8 %in.elt, ptr %out.elt24.ptr, align 8
429 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 25
430 store i8 %in.elt, ptr %out.elt25.ptr, align 1
431 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 26
432 store i8 %in.elt, ptr %out.elt26.ptr, align 2
433 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 27
434 store i8 %in.elt, ptr %out.elt27.ptr, align 1
435 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 28
436 store i8 %in.elt, ptr %out.elt28.ptr, align 4
437 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 29
438 store i8 %in.elt, ptr %out.elt29.ptr, align 1
439 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 30
440 store i8 %in.elt, ptr %out.elt30.ptr, align 2
441 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31
442 store i8 %in.elt, ptr %out.elt31.ptr, align 1
446 define void @vec256_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
447 ; ALL-LABEL: vec256_i16:
449 ; ALL-NEXT: movl (%rdi), %eax
450 ; ALL-NEXT: notl %eax
451 ; ALL-NEXT: movw %ax, (%rsi)
452 ; ALL-NEXT: movw %ax, 2(%rsi)
453 ; ALL-NEXT: movw %ax, 4(%rsi)
454 ; ALL-NEXT: movw %ax, 6(%rsi)
455 ; ALL-NEXT: movw %ax, 8(%rsi)
456 ; ALL-NEXT: movw %ax, 10(%rsi)
457 ; ALL-NEXT: movw %ax, 12(%rsi)
458 ; ALL-NEXT: movw %ax, 14(%rsi)
459 ; ALL-NEXT: movw %ax, 16(%rsi)
460 ; ALL-NEXT: movw %ax, 18(%rsi)
461 ; ALL-NEXT: movw %ax, 20(%rsi)
462 ; ALL-NEXT: movw %ax, 22(%rsi)
463 ; ALL-NEXT: movw %ax, 24(%rsi)
464 ; ALL-NEXT: movw %ax, 26(%rsi)
465 ; ALL-NEXT: movw %ax, 28(%rsi)
466 ; ALL-NEXT: movw %ax, 30(%rsi)
468 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
469 %in.elt = xor i16 %in.elt.not, -1
470 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
471 store i16 %in.elt, ptr %out.elt0.ptr, align 64
472 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
473 store i16 %in.elt, ptr %out.elt1.ptr, align 2
474 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2
475 store i16 %in.elt, ptr %out.elt2.ptr, align 4
476 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3
477 store i16 %in.elt, ptr %out.elt3.ptr, align 2
478 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4
479 store i16 %in.elt, ptr %out.elt4.ptr, align 8
480 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5
481 store i16 %in.elt, ptr %out.elt5.ptr, align 2
482 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6
483 store i16 %in.elt, ptr %out.elt6.ptr, align 4
484 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7
485 store i16 %in.elt, ptr %out.elt7.ptr, align 2
486 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 8
487 store i16 %in.elt, ptr %out.elt8.ptr, align 16
488 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 9
489 store i16 %in.elt, ptr %out.elt9.ptr, align 2
490 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 10
491 store i16 %in.elt, ptr %out.elt10.ptr, align 4
492 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11
493 store i16 %in.elt, ptr %out.elt11.ptr, align 2
494 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 12
495 store i16 %in.elt, ptr %out.elt12.ptr, align 8
496 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 13
497 store i16 %in.elt, ptr %out.elt13.ptr, align 2
498 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 14
499 store i16 %in.elt, ptr %out.elt14.ptr, align 4
500 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 15
501 store i16 %in.elt, ptr %out.elt15.ptr, align 2
505 define void @vec256_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
506 ; ALL-LABEL: vec256_i32:
508 ; ALL-NEXT: movl (%rdi), %eax
509 ; ALL-NEXT: notl %eax
510 ; ALL-NEXT: movl %eax, (%rsi)
511 ; ALL-NEXT: movl %eax, 4(%rsi)
512 ; ALL-NEXT: movl %eax, 8(%rsi)
513 ; ALL-NEXT: movl %eax, 12(%rsi)
514 ; ALL-NEXT: movl %eax, 16(%rsi)
515 ; ALL-NEXT: movl %eax, 20(%rsi)
516 ; ALL-NEXT: movl %eax, 24(%rsi)
517 ; ALL-NEXT: movl %eax, 28(%rsi)
519 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
520 %in.elt = xor i32 %in.elt.not, -1
521 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0
522 store i32 %in.elt, ptr %out.elt0.ptr, align 64
523 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1
524 store i32 %in.elt, ptr %out.elt1.ptr, align 4
525 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2
526 store i32 %in.elt, ptr %out.elt2.ptr, align 8
527 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3
528 store i32 %in.elt, ptr %out.elt3.ptr, align 4
529 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 4
530 store i32 %in.elt, ptr %out.elt4.ptr, align 16
531 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 5
532 store i32 %in.elt, ptr %out.elt5.ptr, align 4
533 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 6
534 store i32 %in.elt, ptr %out.elt6.ptr, align 8
535 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 7
536 store i32 %in.elt, ptr %out.elt7.ptr, align 4
540 define void @vec256_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
541 ; ALL-LABEL: vec256_float:
543 ; ALL-NEXT: movl (%rdi), %eax
544 ; ALL-NEXT: notl %eax
545 ; ALL-NEXT: movl %eax, (%rsi)
546 ; ALL-NEXT: movl %eax, 4(%rsi)
547 ; ALL-NEXT: movl %eax, 8(%rsi)
548 ; ALL-NEXT: movl %eax, 12(%rsi)
549 ; ALL-NEXT: movl %eax, 16(%rsi)
550 ; ALL-NEXT: movl %eax, 20(%rsi)
551 ; ALL-NEXT: movl %eax, 24(%rsi)
552 ; ALL-NEXT: movl %eax, 28(%rsi)
554 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
555 %in.elt.int = xor i32 %in.elt.not, -1
556 %in.elt = bitcast i32 %in.elt.int to float
557 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0
558 store float %in.elt, ptr %out.elt0.ptr, align 64
559 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1
560 store float %in.elt, ptr %out.elt1.ptr, align 4
561 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2
562 store float %in.elt, ptr %out.elt2.ptr, align 8
563 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3
564 store float %in.elt, ptr %out.elt3.ptr, align 4
565 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 4
566 store float %in.elt, ptr %out.elt4.ptr, align 16
567 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 5
568 store float %in.elt, ptr %out.elt5.ptr, align 4
569 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 6
570 store float %in.elt, ptr %out.elt6.ptr, align 8
571 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 7
572 store float %in.elt, ptr %out.elt7.ptr, align 4
576 define void @vec256_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
577 ; ALL-LABEL: vec256_i64:
579 ; ALL-NEXT: movq (%rdi), %rax
580 ; ALL-NEXT: notq %rax
581 ; ALL-NEXT: movq %rax, (%rsi)
582 ; ALL-NEXT: movq %rax, 8(%rsi)
583 ; ALL-NEXT: movq %rax, 16(%rsi)
584 ; ALL-NEXT: movq %rax, 24(%rsi)
586 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
587 %in.elt = xor i64 %in.elt.not, -1
588 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0
589 store i64 %in.elt, ptr %out.elt0.ptr, align 64
590 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1
591 store i64 %in.elt, ptr %out.elt1.ptr, align 8
592 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 2
593 store i64 %in.elt, ptr %out.elt2.ptr, align 16
594 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 3
595 store i64 %in.elt, ptr %out.elt3.ptr, align 8
599 define void @vec256_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
600 ; ALL-LABEL: vec256_double:
602 ; ALL-NEXT: movq (%rdi), %rax
603 ; ALL-NEXT: notq %rax
604 ; ALL-NEXT: movq %rax, (%rsi)
605 ; ALL-NEXT: movq %rax, 8(%rsi)
606 ; ALL-NEXT: movq %rax, 16(%rsi)
607 ; ALL-NEXT: movq %rax, 24(%rsi)
609 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
610 %in.elt.int = xor i64 %in.elt.not, -1
611 %in.elt = bitcast i64 %in.elt.int to double
612 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0
613 store double %in.elt, ptr %out.elt0.ptr, align 64
614 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1
615 store double %in.elt, ptr %out.elt1.ptr, align 8
616 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 2
617 store double %in.elt, ptr %out.elt2.ptr, align 16
618 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 3
619 store double %in.elt, ptr %out.elt3.ptr, align 8
623 define void @vec256_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
624 ; ALL-LABEL: vec256_i128:
626 ; ALL-NEXT: movq (%rdi), %rax
627 ; ALL-NEXT: movq 8(%rdi), %rcx
628 ; ALL-NEXT: notq %rcx
629 ; ALL-NEXT: notq %rax
630 ; ALL-NEXT: movq %rax, (%rsi)
631 ; ALL-NEXT: movq %rcx, 8(%rsi)
632 ; ALL-NEXT: movq %rcx, 24(%rsi)
633 ; ALL-NEXT: movq %rax, 16(%rsi)
635 %in.elt.not = load i128, ptr %in.elt.ptr, align 64
636 %in.elt = xor i128 %in.elt.not, -1
637 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 0
638 store i128 %in.elt, ptr %out.elt0.ptr, align 64
639 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 1
640 store i128 %in.elt, ptr %out.elt1.ptr, align 16
644 define void @vec384_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
645 ; ALL-LABEL: vec384_i8:
647 ; ALL-NEXT: movzbl (%rdi), %eax
649 ; ALL-NEXT: movb %al, (%rsi)
650 ; ALL-NEXT: movb %al, 1(%rsi)
651 ; ALL-NEXT: movb %al, 2(%rsi)
652 ; ALL-NEXT: movb %al, 3(%rsi)
653 ; ALL-NEXT: movb %al, 4(%rsi)
654 ; ALL-NEXT: movb %al, 5(%rsi)
655 ; ALL-NEXT: movb %al, 6(%rsi)
656 ; ALL-NEXT: movb %al, 7(%rsi)
657 ; ALL-NEXT: movb %al, 8(%rsi)
658 ; ALL-NEXT: movb %al, 9(%rsi)
659 ; ALL-NEXT: movb %al, 10(%rsi)
660 ; ALL-NEXT: movb %al, 11(%rsi)
661 ; ALL-NEXT: movb %al, 12(%rsi)
662 ; ALL-NEXT: movb %al, 13(%rsi)
663 ; ALL-NEXT: movb %al, 14(%rsi)
664 ; ALL-NEXT: movb %al, 15(%rsi)
665 ; ALL-NEXT: movb %al, 16(%rsi)
666 ; ALL-NEXT: movb %al, 17(%rsi)
667 ; ALL-NEXT: movb %al, 18(%rsi)
668 ; ALL-NEXT: movb %al, 19(%rsi)
669 ; ALL-NEXT: movb %al, 20(%rsi)
670 ; ALL-NEXT: movb %al, 21(%rsi)
671 ; ALL-NEXT: movb %al, 22(%rsi)
672 ; ALL-NEXT: movb %al, 23(%rsi)
673 ; ALL-NEXT: movb %al, 24(%rsi)
674 ; ALL-NEXT: movb %al, 25(%rsi)
675 ; ALL-NEXT: movb %al, 26(%rsi)
676 ; ALL-NEXT: movb %al, 27(%rsi)
677 ; ALL-NEXT: movb %al, 28(%rsi)
678 ; ALL-NEXT: movb %al, 29(%rsi)
679 ; ALL-NEXT: movb %al, 30(%rsi)
680 ; ALL-NEXT: movb %al, 31(%rsi)
681 ; ALL-NEXT: movb %al, 32(%rsi)
682 ; ALL-NEXT: movb %al, 33(%rsi)
683 ; ALL-NEXT: movb %al, 34(%rsi)
684 ; ALL-NEXT: movb %al, 35(%rsi)
685 ; ALL-NEXT: movb %al, 36(%rsi)
686 ; ALL-NEXT: movb %al, 37(%rsi)
687 ; ALL-NEXT: movb %al, 38(%rsi)
688 ; ALL-NEXT: movb %al, 39(%rsi)
689 ; ALL-NEXT: movb %al, 40(%rsi)
690 ; ALL-NEXT: movb %al, 41(%rsi)
691 ; ALL-NEXT: movb %al, 42(%rsi)
692 ; ALL-NEXT: movb %al, 43(%rsi)
693 ; ALL-NEXT: movb %al, 44(%rsi)
694 ; ALL-NEXT: movb %al, 45(%rsi)
695 ; ALL-NEXT: movb %al, 46(%rsi)
696 ; ALL-NEXT: movb %al, 47(%rsi)
698 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
699 %in.elt = xor i8 %in.elt.not, -1
700 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
701 store i8 %in.elt, ptr %out.elt0.ptr, align 64
702 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
703 store i8 %in.elt, ptr %out.elt1.ptr, align 1
704 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
705 store i8 %in.elt, ptr %out.elt2.ptr, align 2
706 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
707 store i8 %in.elt, ptr %out.elt3.ptr, align 1
708 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4
709 store i8 %in.elt, ptr %out.elt4.ptr, align 4
710 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5
711 store i8 %in.elt, ptr %out.elt5.ptr, align 1
712 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6
713 store i8 %in.elt, ptr %out.elt6.ptr, align 2
714 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7
715 store i8 %in.elt, ptr %out.elt7.ptr, align 1
716 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8
717 store i8 %in.elt, ptr %out.elt8.ptr, align 8
718 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9
719 store i8 %in.elt, ptr %out.elt9.ptr, align 1
720 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10
721 store i8 %in.elt, ptr %out.elt10.ptr, align 2
722 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11
723 store i8 %in.elt, ptr %out.elt11.ptr, align 1
724 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12
725 store i8 %in.elt, ptr %out.elt12.ptr, align 4
726 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13
727 store i8 %in.elt, ptr %out.elt13.ptr, align 1
728 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14
729 store i8 %in.elt, ptr %out.elt14.ptr, align 2
730 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15
731 store i8 %in.elt, ptr %out.elt15.ptr, align 1
732 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 16
733 store i8 %in.elt, ptr %out.elt16.ptr, align 16
734 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 17
735 store i8 %in.elt, ptr %out.elt17.ptr, align 1
736 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 18
737 store i8 %in.elt, ptr %out.elt18.ptr, align 2
738 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 19
739 store i8 %in.elt, ptr %out.elt19.ptr, align 1
740 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 20
741 store i8 %in.elt, ptr %out.elt20.ptr, align 4
742 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21
743 store i8 %in.elt, ptr %out.elt21.ptr, align 1
744 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 22
745 store i8 %in.elt, ptr %out.elt22.ptr, align 2
746 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 23
747 store i8 %in.elt, ptr %out.elt23.ptr, align 1
748 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 24
749 store i8 %in.elt, ptr %out.elt24.ptr, align 8
750 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 25
751 store i8 %in.elt, ptr %out.elt25.ptr, align 1
752 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 26
753 store i8 %in.elt, ptr %out.elt26.ptr, align 2
754 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 27
755 store i8 %in.elt, ptr %out.elt27.ptr, align 1
756 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 28
757 store i8 %in.elt, ptr %out.elt28.ptr, align 4
758 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 29
759 store i8 %in.elt, ptr %out.elt29.ptr, align 1
760 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 30
761 store i8 %in.elt, ptr %out.elt30.ptr, align 2
762 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31
763 store i8 %in.elt, ptr %out.elt31.ptr, align 1
764 %out.elt32.ptr = getelementptr i8, ptr %out.vec.ptr, i64 32
765 store i8 %in.elt, ptr %out.elt32.ptr, align 32
766 %out.elt33.ptr = getelementptr i8, ptr %out.vec.ptr, i64 33
767 store i8 %in.elt, ptr %out.elt33.ptr, align 1
768 %out.elt34.ptr = getelementptr i8, ptr %out.vec.ptr, i64 34
769 store i8 %in.elt, ptr %out.elt34.ptr, align 2
770 %out.elt35.ptr = getelementptr i8, ptr %out.vec.ptr, i64 35
771 store i8 %in.elt, ptr %out.elt35.ptr, align 1
772 %out.elt36.ptr = getelementptr i8, ptr %out.vec.ptr, i64 36
773 store i8 %in.elt, ptr %out.elt36.ptr, align 4
774 %out.elt37.ptr = getelementptr i8, ptr %out.vec.ptr, i64 37
775 store i8 %in.elt, ptr %out.elt37.ptr, align 1
776 %out.elt38.ptr = getelementptr i8, ptr %out.vec.ptr, i64 38
777 store i8 %in.elt, ptr %out.elt38.ptr, align 2
778 %out.elt39.ptr = getelementptr i8, ptr %out.vec.ptr, i64 39
779 store i8 %in.elt, ptr %out.elt39.ptr, align 1
780 %out.elt40.ptr = getelementptr i8, ptr %out.vec.ptr, i64 40
781 store i8 %in.elt, ptr %out.elt40.ptr, align 8
782 %out.elt41.ptr = getelementptr i8, ptr %out.vec.ptr, i64 41
783 store i8 %in.elt, ptr %out.elt41.ptr, align 1
784 %out.elt42.ptr = getelementptr i8, ptr %out.vec.ptr, i64 42
785 store i8 %in.elt, ptr %out.elt42.ptr, align 2
786 %out.elt43.ptr = getelementptr i8, ptr %out.vec.ptr, i64 43
787 store i8 %in.elt, ptr %out.elt43.ptr, align 1
788 %out.elt44.ptr = getelementptr i8, ptr %out.vec.ptr, i64 44
789 store i8 %in.elt, ptr %out.elt44.ptr, align 4
790 %out.elt45.ptr = getelementptr i8, ptr %out.vec.ptr, i64 45
791 store i8 %in.elt, ptr %out.elt45.ptr, align 1
792 %out.elt46.ptr = getelementptr i8, ptr %out.vec.ptr, i64 46
793 store i8 %in.elt, ptr %out.elt46.ptr, align 2
794 %out.elt47.ptr = getelementptr i8, ptr %out.vec.ptr, i64 47
795 store i8 %in.elt, ptr %out.elt47.ptr, align 1
799 define void @vec384_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
800 ; ALL-LABEL: vec384_i16:
802 ; ALL-NEXT: movl (%rdi), %eax
803 ; ALL-NEXT: notl %eax
804 ; ALL-NEXT: movw %ax, (%rsi)
805 ; ALL-NEXT: movw %ax, 2(%rsi)
806 ; ALL-NEXT: movw %ax, 4(%rsi)
807 ; ALL-NEXT: movw %ax, 6(%rsi)
808 ; ALL-NEXT: movw %ax, 8(%rsi)
809 ; ALL-NEXT: movw %ax, 10(%rsi)
810 ; ALL-NEXT: movw %ax, 12(%rsi)
811 ; ALL-NEXT: movw %ax, 14(%rsi)
812 ; ALL-NEXT: movw %ax, 16(%rsi)
813 ; ALL-NEXT: movw %ax, 18(%rsi)
814 ; ALL-NEXT: movw %ax, 20(%rsi)
815 ; ALL-NEXT: movw %ax, 22(%rsi)
816 ; ALL-NEXT: movw %ax, 24(%rsi)
817 ; ALL-NEXT: movw %ax, 26(%rsi)
818 ; ALL-NEXT: movw %ax, 28(%rsi)
819 ; ALL-NEXT: movw %ax, 30(%rsi)
820 ; ALL-NEXT: movw %ax, 32(%rsi)
821 ; ALL-NEXT: movw %ax, 34(%rsi)
822 ; ALL-NEXT: movw %ax, 36(%rsi)
823 ; ALL-NEXT: movw %ax, 38(%rsi)
824 ; ALL-NEXT: movw %ax, 40(%rsi)
825 ; ALL-NEXT: movw %ax, 42(%rsi)
826 ; ALL-NEXT: movw %ax, 44(%rsi)
827 ; ALL-NEXT: movw %ax, 46(%rsi)
829 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
830 %in.elt = xor i16 %in.elt.not, -1
831 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
832 store i16 %in.elt, ptr %out.elt0.ptr, align 64
833 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
834 store i16 %in.elt, ptr %out.elt1.ptr, align 2
835 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2
836 store i16 %in.elt, ptr %out.elt2.ptr, align 4
837 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3
838 store i16 %in.elt, ptr %out.elt3.ptr, align 2
839 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4
840 store i16 %in.elt, ptr %out.elt4.ptr, align 8
841 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5
842 store i16 %in.elt, ptr %out.elt5.ptr, align 2
843 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6
844 store i16 %in.elt, ptr %out.elt6.ptr, align 4
845 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7
846 store i16 %in.elt, ptr %out.elt7.ptr, align 2
847 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 8
848 store i16 %in.elt, ptr %out.elt8.ptr, align 16
849 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 9
850 store i16 %in.elt, ptr %out.elt9.ptr, align 2
851 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 10
852 store i16 %in.elt, ptr %out.elt10.ptr, align 4
853 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11
854 store i16 %in.elt, ptr %out.elt11.ptr, align 2
855 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 12
856 store i16 %in.elt, ptr %out.elt12.ptr, align 8
857 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 13
858 store i16 %in.elt, ptr %out.elt13.ptr, align 2
859 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 14
860 store i16 %in.elt, ptr %out.elt14.ptr, align 4
861 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 15
862 store i16 %in.elt, ptr %out.elt15.ptr, align 2
863 %out.elt16.ptr = getelementptr i16, ptr %out.vec.ptr, i64 16
864 store i16 %in.elt, ptr %out.elt16.ptr, align 32
865 %out.elt17.ptr = getelementptr i16, ptr %out.vec.ptr, i64 17
866 store i16 %in.elt, ptr %out.elt17.ptr, align 2
867 %out.elt18.ptr = getelementptr i16, ptr %out.vec.ptr, i64 18
868 store i16 %in.elt, ptr %out.elt18.ptr, align 4
869 %out.elt19.ptr = getelementptr i16, ptr %out.vec.ptr, i64 19
870 store i16 %in.elt, ptr %out.elt19.ptr, align 2
871 %out.elt20.ptr = getelementptr i16, ptr %out.vec.ptr, i64 20
872 store i16 %in.elt, ptr %out.elt20.ptr, align 8
873 %out.elt21.ptr = getelementptr i16, ptr %out.vec.ptr, i64 21
874 store i16 %in.elt, ptr %out.elt21.ptr, align 2
875 %out.elt22.ptr = getelementptr i16, ptr %out.vec.ptr, i64 22
876 store i16 %in.elt, ptr %out.elt22.ptr, align 4
877 %out.elt23.ptr = getelementptr i16, ptr %out.vec.ptr, i64 23
878 store i16 %in.elt, ptr %out.elt23.ptr, align 2
882 define void @vec384_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
883 ; ALL-LABEL: vec384_i32:
885 ; ALL-NEXT: movl (%rdi), %eax
886 ; ALL-NEXT: notl %eax
887 ; ALL-NEXT: movl %eax, (%rsi)
888 ; ALL-NEXT: movl %eax, 4(%rsi)
889 ; ALL-NEXT: movl %eax, 8(%rsi)
890 ; ALL-NEXT: movl %eax, 12(%rsi)
891 ; ALL-NEXT: movl %eax, 16(%rsi)
892 ; ALL-NEXT: movl %eax, 20(%rsi)
893 ; ALL-NEXT: movl %eax, 24(%rsi)
894 ; ALL-NEXT: movl %eax, 28(%rsi)
895 ; ALL-NEXT: movl %eax, 32(%rsi)
896 ; ALL-NEXT: movl %eax, 36(%rsi)
897 ; ALL-NEXT: movl %eax, 40(%rsi)
898 ; ALL-NEXT: movl %eax, 44(%rsi)
900 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
901 %in.elt = xor i32 %in.elt.not, -1
902 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0
903 store i32 %in.elt, ptr %out.elt0.ptr, align 64
904 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1
905 store i32 %in.elt, ptr %out.elt1.ptr, align 4
906 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2
907 store i32 %in.elt, ptr %out.elt2.ptr, align 8
908 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3
909 store i32 %in.elt, ptr %out.elt3.ptr, align 4
910 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 4
911 store i32 %in.elt, ptr %out.elt4.ptr, align 16
912 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 5
913 store i32 %in.elt, ptr %out.elt5.ptr, align 4
914 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 6
915 store i32 %in.elt, ptr %out.elt6.ptr, align 8
916 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 7
917 store i32 %in.elt, ptr %out.elt7.ptr, align 4
918 %out.elt8.ptr = getelementptr i32, ptr %out.vec.ptr, i64 8
919 store i32 %in.elt, ptr %out.elt8.ptr, align 32
920 %out.elt9.ptr = getelementptr i32, ptr %out.vec.ptr, i64 9
921 store i32 %in.elt, ptr %out.elt9.ptr, align 4
922 %out.elt10.ptr = getelementptr i32, ptr %out.vec.ptr, i64 10
923 store i32 %in.elt, ptr %out.elt10.ptr, align 8
924 %out.elt11.ptr = getelementptr i32, ptr %out.vec.ptr, i64 11
925 store i32 %in.elt, ptr %out.elt11.ptr, align 4
929 define void @vec384_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
930 ; ALL-LABEL: vec384_float:
932 ; ALL-NEXT: movl (%rdi), %eax
933 ; ALL-NEXT: notl %eax
934 ; ALL-NEXT: movl %eax, (%rsi)
935 ; ALL-NEXT: movl %eax, 4(%rsi)
936 ; ALL-NEXT: movl %eax, 8(%rsi)
937 ; ALL-NEXT: movl %eax, 12(%rsi)
938 ; ALL-NEXT: movl %eax, 16(%rsi)
939 ; ALL-NEXT: movl %eax, 20(%rsi)
940 ; ALL-NEXT: movl %eax, 24(%rsi)
941 ; ALL-NEXT: movl %eax, 28(%rsi)
942 ; ALL-NEXT: movl %eax, 32(%rsi)
943 ; ALL-NEXT: movl %eax, 36(%rsi)
944 ; ALL-NEXT: movl %eax, 40(%rsi)
945 ; ALL-NEXT: movl %eax, 44(%rsi)
947 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
948 %in.elt.int = xor i32 %in.elt.not, -1
949 %in.elt = bitcast i32 %in.elt.int to float
950 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0
951 store float %in.elt, ptr %out.elt0.ptr, align 64
952 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1
953 store float %in.elt, ptr %out.elt1.ptr, align 4
954 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2
955 store float %in.elt, ptr %out.elt2.ptr, align 8
956 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3
957 store float %in.elt, ptr %out.elt3.ptr, align 4
958 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 4
959 store float %in.elt, ptr %out.elt4.ptr, align 16
960 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 5
961 store float %in.elt, ptr %out.elt5.ptr, align 4
962 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 6
963 store float %in.elt, ptr %out.elt6.ptr, align 8
964 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 7
965 store float %in.elt, ptr %out.elt7.ptr, align 4
966 %out.elt8.ptr = getelementptr float, ptr %out.vec.ptr, i64 8
967 store float %in.elt, ptr %out.elt8.ptr, align 32
968 %out.elt9.ptr = getelementptr float, ptr %out.vec.ptr, i64 9
969 store float %in.elt, ptr %out.elt9.ptr, align 4
970 %out.elt10.ptr = getelementptr float, ptr %out.vec.ptr, i64 10
971 store float %in.elt, ptr %out.elt10.ptr, align 8
972 %out.elt11.ptr = getelementptr float, ptr %out.vec.ptr, i64 11
973 store float %in.elt, ptr %out.elt11.ptr, align 4
977 define void @vec384_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
978 ; ALL-LABEL: vec384_i64:
980 ; ALL-NEXT: movq (%rdi), %rax
981 ; ALL-NEXT: notq %rax
982 ; ALL-NEXT: movq %rax, (%rsi)
983 ; ALL-NEXT: movq %rax, 8(%rsi)
984 ; ALL-NEXT: movq %rax, 16(%rsi)
985 ; ALL-NEXT: movq %rax, 24(%rsi)
986 ; ALL-NEXT: movq %rax, 32(%rsi)
987 ; ALL-NEXT: movq %rax, 40(%rsi)
989 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
990 %in.elt = xor i64 %in.elt.not, -1
991 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0
992 store i64 %in.elt, ptr %out.elt0.ptr, align 64
993 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1
994 store i64 %in.elt, ptr %out.elt1.ptr, align 8
995 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 2
996 store i64 %in.elt, ptr %out.elt2.ptr, align 16
997 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 3
998 store i64 %in.elt, ptr %out.elt3.ptr, align 8
999 %out.elt4.ptr = getelementptr i64, ptr %out.vec.ptr, i64 4
1000 store i64 %in.elt, ptr %out.elt4.ptr, align 32
1001 %out.elt5.ptr = getelementptr i64, ptr %out.vec.ptr, i64 5
1002 store i64 %in.elt, ptr %out.elt5.ptr, align 8
1006 define void @vec384_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1007 ; ALL-LABEL: vec384_double:
1009 ; ALL-NEXT: movq (%rdi), %rax
1010 ; ALL-NEXT: notq %rax
1011 ; ALL-NEXT: movq %rax, (%rsi)
1012 ; ALL-NEXT: movq %rax, 8(%rsi)
1013 ; ALL-NEXT: movq %rax, 16(%rsi)
1014 ; ALL-NEXT: movq %rax, 24(%rsi)
1015 ; ALL-NEXT: movq %rax, 32(%rsi)
1016 ; ALL-NEXT: movq %rax, 40(%rsi)
1018 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
1019 %in.elt.int = xor i64 %in.elt.not, -1
1020 %in.elt = bitcast i64 %in.elt.int to double
1021 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0
1022 store double %in.elt, ptr %out.elt0.ptr, align 64
1023 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1
1024 store double %in.elt, ptr %out.elt1.ptr, align 8
1025 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 2
1026 store double %in.elt, ptr %out.elt2.ptr, align 16
1027 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 3
1028 store double %in.elt, ptr %out.elt3.ptr, align 8
1029 %out.elt4.ptr = getelementptr double, ptr %out.vec.ptr, i64 4
1030 store double %in.elt, ptr %out.elt4.ptr, align 32
1031 %out.elt5.ptr = getelementptr double, ptr %out.vec.ptr, i64 5
1032 store double %in.elt, ptr %out.elt5.ptr, align 8
1036 define void @vec384_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1037 ; ALL-LABEL: vec384_i128:
1039 ; ALL-NEXT: movq (%rdi), %rax
1040 ; ALL-NEXT: movq 8(%rdi), %rcx
1041 ; ALL-NEXT: notq %rcx
1042 ; ALL-NEXT: notq %rax
1043 ; ALL-NEXT: movq %rax, (%rsi)
1044 ; ALL-NEXT: movq %rcx, 8(%rsi)
1045 ; ALL-NEXT: movq %rcx, 24(%rsi)
1046 ; ALL-NEXT: movq %rax, 16(%rsi)
1047 ; ALL-NEXT: movq %rcx, 40(%rsi)
1048 ; ALL-NEXT: movq %rax, 32(%rsi)
1050 %in.elt.not = load i128, ptr %in.elt.ptr, align 64
1051 %in.elt = xor i128 %in.elt.not, -1
1052 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 0
1053 store i128 %in.elt, ptr %out.elt0.ptr, align 64
1054 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 1
1055 store i128 %in.elt, ptr %out.elt1.ptr, align 16
1056 %out.elt2.ptr = getelementptr i128, ptr %out.vec.ptr, i64 2
1057 store i128 %in.elt, ptr %out.elt2.ptr, align 32
1061 define void @vec512_i8(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1062 ; ALL-LABEL: vec512_i8:
1064 ; ALL-NEXT: movzbl (%rdi), %eax
1065 ; ALL-NEXT: notb %al
1066 ; ALL-NEXT: movb %al, (%rsi)
1067 ; ALL-NEXT: movb %al, 1(%rsi)
1068 ; ALL-NEXT: movb %al, 2(%rsi)
1069 ; ALL-NEXT: movb %al, 3(%rsi)
1070 ; ALL-NEXT: movb %al, 4(%rsi)
1071 ; ALL-NEXT: movb %al, 5(%rsi)
1072 ; ALL-NEXT: movb %al, 6(%rsi)
1073 ; ALL-NEXT: movb %al, 7(%rsi)
1074 ; ALL-NEXT: movb %al, 8(%rsi)
1075 ; ALL-NEXT: movb %al, 9(%rsi)
1076 ; ALL-NEXT: movb %al, 10(%rsi)
1077 ; ALL-NEXT: movb %al, 11(%rsi)
1078 ; ALL-NEXT: movb %al, 12(%rsi)
1079 ; ALL-NEXT: movb %al, 13(%rsi)
1080 ; ALL-NEXT: movb %al, 14(%rsi)
1081 ; ALL-NEXT: movb %al, 15(%rsi)
1082 ; ALL-NEXT: movb %al, 16(%rsi)
1083 ; ALL-NEXT: movb %al, 17(%rsi)
1084 ; ALL-NEXT: movb %al, 18(%rsi)
1085 ; ALL-NEXT: movb %al, 19(%rsi)
1086 ; ALL-NEXT: movb %al, 20(%rsi)
1087 ; ALL-NEXT: movb %al, 21(%rsi)
1088 ; ALL-NEXT: movb %al, 22(%rsi)
1089 ; ALL-NEXT: movb %al, 23(%rsi)
1090 ; ALL-NEXT: movb %al, 24(%rsi)
1091 ; ALL-NEXT: movb %al, 25(%rsi)
1092 ; ALL-NEXT: movb %al, 26(%rsi)
1093 ; ALL-NEXT: movb %al, 27(%rsi)
1094 ; ALL-NEXT: movb %al, 28(%rsi)
1095 ; ALL-NEXT: movb %al, 29(%rsi)
1096 ; ALL-NEXT: movb %al, 30(%rsi)
1097 ; ALL-NEXT: movb %al, 31(%rsi)
1098 ; ALL-NEXT: movb %al, 32(%rsi)
1099 ; ALL-NEXT: movb %al, 33(%rsi)
1100 ; ALL-NEXT: movb %al, 34(%rsi)
1101 ; ALL-NEXT: movb %al, 35(%rsi)
1102 ; ALL-NEXT: movb %al, 36(%rsi)
1103 ; ALL-NEXT: movb %al, 37(%rsi)
1104 ; ALL-NEXT: movb %al, 38(%rsi)
1105 ; ALL-NEXT: movb %al, 39(%rsi)
1106 ; ALL-NEXT: movb %al, 40(%rsi)
1107 ; ALL-NEXT: movb %al, 41(%rsi)
1108 ; ALL-NEXT: movb %al, 42(%rsi)
1109 ; ALL-NEXT: movb %al, 43(%rsi)
1110 ; ALL-NEXT: movb %al, 44(%rsi)
1111 ; ALL-NEXT: movb %al, 45(%rsi)
1112 ; ALL-NEXT: movb %al, 46(%rsi)
1113 ; ALL-NEXT: movb %al, 47(%rsi)
1114 ; ALL-NEXT: movb %al, 48(%rsi)
1115 ; ALL-NEXT: movb %al, 49(%rsi)
1116 ; ALL-NEXT: movb %al, 50(%rsi)
1117 ; ALL-NEXT: movb %al, 51(%rsi)
1118 ; ALL-NEXT: movb %al, 52(%rsi)
1119 ; ALL-NEXT: movb %al, 53(%rsi)
1120 ; ALL-NEXT: movb %al, 54(%rsi)
1121 ; ALL-NEXT: movb %al, 55(%rsi)
1122 ; ALL-NEXT: movb %al, 56(%rsi)
1123 ; ALL-NEXT: movb %al, 57(%rsi)
1124 ; ALL-NEXT: movb %al, 58(%rsi)
1125 ; ALL-NEXT: movb %al, 59(%rsi)
1126 ; ALL-NEXT: movb %al, 60(%rsi)
1127 ; ALL-NEXT: movb %al, 61(%rsi)
1128 ; ALL-NEXT: movb %al, 62(%rsi)
1129 ; ALL-NEXT: movb %al, 63(%rsi)
1131 %in.elt.not = load i8, ptr %in.elt.ptr, align 64
1132 %in.elt = xor i8 %in.elt.not, -1
1133 %out.elt0.ptr = getelementptr i8, ptr %out.vec.ptr, i64 0
1134 store i8 %in.elt, ptr %out.elt0.ptr, align 64
1135 %out.elt1.ptr = getelementptr i8, ptr %out.vec.ptr, i64 1
1136 store i8 %in.elt, ptr %out.elt1.ptr, align 1
1137 %out.elt2.ptr = getelementptr i8, ptr %out.vec.ptr, i64 2
1138 store i8 %in.elt, ptr %out.elt2.ptr, align 2
1139 %out.elt3.ptr = getelementptr i8, ptr %out.vec.ptr, i64 3
1140 store i8 %in.elt, ptr %out.elt3.ptr, align 1
1141 %out.elt4.ptr = getelementptr i8, ptr %out.vec.ptr, i64 4
1142 store i8 %in.elt, ptr %out.elt4.ptr, align 4
1143 %out.elt5.ptr = getelementptr i8, ptr %out.vec.ptr, i64 5
1144 store i8 %in.elt, ptr %out.elt5.ptr, align 1
1145 %out.elt6.ptr = getelementptr i8, ptr %out.vec.ptr, i64 6
1146 store i8 %in.elt, ptr %out.elt6.ptr, align 2
1147 %out.elt7.ptr = getelementptr i8, ptr %out.vec.ptr, i64 7
1148 store i8 %in.elt, ptr %out.elt7.ptr, align 1
1149 %out.elt8.ptr = getelementptr i8, ptr %out.vec.ptr, i64 8
1150 store i8 %in.elt, ptr %out.elt8.ptr, align 8
1151 %out.elt9.ptr = getelementptr i8, ptr %out.vec.ptr, i64 9
1152 store i8 %in.elt, ptr %out.elt9.ptr, align 1
1153 %out.elt10.ptr = getelementptr i8, ptr %out.vec.ptr, i64 10
1154 store i8 %in.elt, ptr %out.elt10.ptr, align 2
1155 %out.elt11.ptr = getelementptr i8, ptr %out.vec.ptr, i64 11
1156 store i8 %in.elt, ptr %out.elt11.ptr, align 1
1157 %out.elt12.ptr = getelementptr i8, ptr %out.vec.ptr, i64 12
1158 store i8 %in.elt, ptr %out.elt12.ptr, align 4
1159 %out.elt13.ptr = getelementptr i8, ptr %out.vec.ptr, i64 13
1160 store i8 %in.elt, ptr %out.elt13.ptr, align 1
1161 %out.elt14.ptr = getelementptr i8, ptr %out.vec.ptr, i64 14
1162 store i8 %in.elt, ptr %out.elt14.ptr, align 2
1163 %out.elt15.ptr = getelementptr i8, ptr %out.vec.ptr, i64 15
1164 store i8 %in.elt, ptr %out.elt15.ptr, align 1
1165 %out.elt16.ptr = getelementptr i8, ptr %out.vec.ptr, i64 16
1166 store i8 %in.elt, ptr %out.elt16.ptr, align 16
1167 %out.elt17.ptr = getelementptr i8, ptr %out.vec.ptr, i64 17
1168 store i8 %in.elt, ptr %out.elt17.ptr, align 1
1169 %out.elt18.ptr = getelementptr i8, ptr %out.vec.ptr, i64 18
1170 store i8 %in.elt, ptr %out.elt18.ptr, align 2
1171 %out.elt19.ptr = getelementptr i8, ptr %out.vec.ptr, i64 19
1172 store i8 %in.elt, ptr %out.elt19.ptr, align 1
1173 %out.elt20.ptr = getelementptr i8, ptr %out.vec.ptr, i64 20
1174 store i8 %in.elt, ptr %out.elt20.ptr, align 4
1175 %out.elt21.ptr = getelementptr i8, ptr %out.vec.ptr, i64 21
1176 store i8 %in.elt, ptr %out.elt21.ptr, align 1
1177 %out.elt22.ptr = getelementptr i8, ptr %out.vec.ptr, i64 22
1178 store i8 %in.elt, ptr %out.elt22.ptr, align 2
1179 %out.elt23.ptr = getelementptr i8, ptr %out.vec.ptr, i64 23
1180 store i8 %in.elt, ptr %out.elt23.ptr, align 1
1181 %out.elt24.ptr = getelementptr i8, ptr %out.vec.ptr, i64 24
1182 store i8 %in.elt, ptr %out.elt24.ptr, align 8
1183 %out.elt25.ptr = getelementptr i8, ptr %out.vec.ptr, i64 25
1184 store i8 %in.elt, ptr %out.elt25.ptr, align 1
1185 %out.elt26.ptr = getelementptr i8, ptr %out.vec.ptr, i64 26
1186 store i8 %in.elt, ptr %out.elt26.ptr, align 2
1187 %out.elt27.ptr = getelementptr i8, ptr %out.vec.ptr, i64 27
1188 store i8 %in.elt, ptr %out.elt27.ptr, align 1
1189 %out.elt28.ptr = getelementptr i8, ptr %out.vec.ptr, i64 28
1190 store i8 %in.elt, ptr %out.elt28.ptr, align 4
1191 %out.elt29.ptr = getelementptr i8, ptr %out.vec.ptr, i64 29
1192 store i8 %in.elt, ptr %out.elt29.ptr, align 1
1193 %out.elt30.ptr = getelementptr i8, ptr %out.vec.ptr, i64 30
1194 store i8 %in.elt, ptr %out.elt30.ptr, align 2
1195 %out.elt31.ptr = getelementptr i8, ptr %out.vec.ptr, i64 31
1196 store i8 %in.elt, ptr %out.elt31.ptr, align 1
1197 %out.elt32.ptr = getelementptr i8, ptr %out.vec.ptr, i64 32
1198 store i8 %in.elt, ptr %out.elt32.ptr, align 32
1199 %out.elt33.ptr = getelementptr i8, ptr %out.vec.ptr, i64 33
1200 store i8 %in.elt, ptr %out.elt33.ptr, align 1
1201 %out.elt34.ptr = getelementptr i8, ptr %out.vec.ptr, i64 34
1202 store i8 %in.elt, ptr %out.elt34.ptr, align 2
1203 %out.elt35.ptr = getelementptr i8, ptr %out.vec.ptr, i64 35
1204 store i8 %in.elt, ptr %out.elt35.ptr, align 1
1205 %out.elt36.ptr = getelementptr i8, ptr %out.vec.ptr, i64 36
1206 store i8 %in.elt, ptr %out.elt36.ptr, align 4
1207 %out.elt37.ptr = getelementptr i8, ptr %out.vec.ptr, i64 37
1208 store i8 %in.elt, ptr %out.elt37.ptr, align 1
1209 %out.elt38.ptr = getelementptr i8, ptr %out.vec.ptr, i64 38
1210 store i8 %in.elt, ptr %out.elt38.ptr, align 2
1211 %out.elt39.ptr = getelementptr i8, ptr %out.vec.ptr, i64 39
1212 store i8 %in.elt, ptr %out.elt39.ptr, align 1
1213 %out.elt40.ptr = getelementptr i8, ptr %out.vec.ptr, i64 40
1214 store i8 %in.elt, ptr %out.elt40.ptr, align 8
1215 %out.elt41.ptr = getelementptr i8, ptr %out.vec.ptr, i64 41
1216 store i8 %in.elt, ptr %out.elt41.ptr, align 1
1217 %out.elt42.ptr = getelementptr i8, ptr %out.vec.ptr, i64 42
1218 store i8 %in.elt, ptr %out.elt42.ptr, align 2
1219 %out.elt43.ptr = getelementptr i8, ptr %out.vec.ptr, i64 43
1220 store i8 %in.elt, ptr %out.elt43.ptr, align 1
1221 %out.elt44.ptr = getelementptr i8, ptr %out.vec.ptr, i64 44
1222 store i8 %in.elt, ptr %out.elt44.ptr, align 4
1223 %out.elt45.ptr = getelementptr i8, ptr %out.vec.ptr, i64 45
1224 store i8 %in.elt, ptr %out.elt45.ptr, align 1
1225 %out.elt46.ptr = getelementptr i8, ptr %out.vec.ptr, i64 46
1226 store i8 %in.elt, ptr %out.elt46.ptr, align 2
1227 %out.elt47.ptr = getelementptr i8, ptr %out.vec.ptr, i64 47
1228 store i8 %in.elt, ptr %out.elt47.ptr, align 1
1229 %out.elt48.ptr = getelementptr i8, ptr %out.vec.ptr, i64 48
1230 store i8 %in.elt, ptr %out.elt48.ptr, align 16
1231 %out.elt49.ptr = getelementptr i8, ptr %out.vec.ptr, i64 49
1232 store i8 %in.elt, ptr %out.elt49.ptr, align 1
1233 %out.elt50.ptr = getelementptr i8, ptr %out.vec.ptr, i64 50
1234 store i8 %in.elt, ptr %out.elt50.ptr, align 2
1235 %out.elt51.ptr = getelementptr i8, ptr %out.vec.ptr, i64 51
1236 store i8 %in.elt, ptr %out.elt51.ptr, align 1
1237 %out.elt52.ptr = getelementptr i8, ptr %out.vec.ptr, i64 52
1238 store i8 %in.elt, ptr %out.elt52.ptr, align 4
1239 %out.elt53.ptr = getelementptr i8, ptr %out.vec.ptr, i64 53
1240 store i8 %in.elt, ptr %out.elt53.ptr, align 1
1241 %out.elt54.ptr = getelementptr i8, ptr %out.vec.ptr, i64 54
1242 store i8 %in.elt, ptr %out.elt54.ptr, align 2
1243 %out.elt55.ptr = getelementptr i8, ptr %out.vec.ptr, i64 55
1244 store i8 %in.elt, ptr %out.elt55.ptr, align 1
1245 %out.elt56.ptr = getelementptr i8, ptr %out.vec.ptr, i64 56
1246 store i8 %in.elt, ptr %out.elt56.ptr, align 8
1247 %out.elt57.ptr = getelementptr i8, ptr %out.vec.ptr, i64 57
1248 store i8 %in.elt, ptr %out.elt57.ptr, align 1
1249 %out.elt58.ptr = getelementptr i8, ptr %out.vec.ptr, i64 58
1250 store i8 %in.elt, ptr %out.elt58.ptr, align 2
1251 %out.elt59.ptr = getelementptr i8, ptr %out.vec.ptr, i64 59
1252 store i8 %in.elt, ptr %out.elt59.ptr, align 1
1253 %out.elt60.ptr = getelementptr i8, ptr %out.vec.ptr, i64 60
1254 store i8 %in.elt, ptr %out.elt60.ptr, align 4
1255 %out.elt61.ptr = getelementptr i8, ptr %out.vec.ptr, i64 61
1256 store i8 %in.elt, ptr %out.elt61.ptr, align 1
1257 %out.elt62.ptr = getelementptr i8, ptr %out.vec.ptr, i64 62
1258 store i8 %in.elt, ptr %out.elt62.ptr, align 2
1259 %out.elt63.ptr = getelementptr i8, ptr %out.vec.ptr, i64 63
1260 store i8 %in.elt, ptr %out.elt63.ptr, align 1
1264 define void @vec512_i16(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1265 ; ALL-LABEL: vec512_i16:
1267 ; ALL-NEXT: movl (%rdi), %eax
1268 ; ALL-NEXT: notl %eax
1269 ; ALL-NEXT: movw %ax, (%rsi)
1270 ; ALL-NEXT: movw %ax, 2(%rsi)
1271 ; ALL-NEXT: movw %ax, 4(%rsi)
1272 ; ALL-NEXT: movw %ax, 6(%rsi)
1273 ; ALL-NEXT: movw %ax, 8(%rsi)
1274 ; ALL-NEXT: movw %ax, 10(%rsi)
1275 ; ALL-NEXT: movw %ax, 12(%rsi)
1276 ; ALL-NEXT: movw %ax, 14(%rsi)
1277 ; ALL-NEXT: movw %ax, 16(%rsi)
1278 ; ALL-NEXT: movw %ax, 18(%rsi)
1279 ; ALL-NEXT: movw %ax, 20(%rsi)
1280 ; ALL-NEXT: movw %ax, 22(%rsi)
1281 ; ALL-NEXT: movw %ax, 24(%rsi)
1282 ; ALL-NEXT: movw %ax, 26(%rsi)
1283 ; ALL-NEXT: movw %ax, 28(%rsi)
1284 ; ALL-NEXT: movw %ax, 30(%rsi)
1285 ; ALL-NEXT: movw %ax, 32(%rsi)
1286 ; ALL-NEXT: movw %ax, 34(%rsi)
1287 ; ALL-NEXT: movw %ax, 36(%rsi)
1288 ; ALL-NEXT: movw %ax, 38(%rsi)
1289 ; ALL-NEXT: movw %ax, 40(%rsi)
1290 ; ALL-NEXT: movw %ax, 42(%rsi)
1291 ; ALL-NEXT: movw %ax, 44(%rsi)
1292 ; ALL-NEXT: movw %ax, 46(%rsi)
1293 ; ALL-NEXT: movw %ax, 48(%rsi)
1294 ; ALL-NEXT: movw %ax, 50(%rsi)
1295 ; ALL-NEXT: movw %ax, 52(%rsi)
1296 ; ALL-NEXT: movw %ax, 54(%rsi)
1297 ; ALL-NEXT: movw %ax, 56(%rsi)
1298 ; ALL-NEXT: movw %ax, 58(%rsi)
1299 ; ALL-NEXT: movw %ax, 60(%rsi)
1300 ; ALL-NEXT: movw %ax, 62(%rsi)
1302 %in.elt.not = load i16, ptr %in.elt.ptr, align 64
1303 %in.elt = xor i16 %in.elt.not, -1
1304 %out.elt0.ptr = getelementptr i16, ptr %out.vec.ptr, i64 0
1305 store i16 %in.elt, ptr %out.elt0.ptr, align 64
1306 %out.elt1.ptr = getelementptr i16, ptr %out.vec.ptr, i64 1
1307 store i16 %in.elt, ptr %out.elt1.ptr, align 2
1308 %out.elt2.ptr = getelementptr i16, ptr %out.vec.ptr, i64 2
1309 store i16 %in.elt, ptr %out.elt2.ptr, align 4
1310 %out.elt3.ptr = getelementptr i16, ptr %out.vec.ptr, i64 3
1311 store i16 %in.elt, ptr %out.elt3.ptr, align 2
1312 %out.elt4.ptr = getelementptr i16, ptr %out.vec.ptr, i64 4
1313 store i16 %in.elt, ptr %out.elt4.ptr, align 8
1314 %out.elt5.ptr = getelementptr i16, ptr %out.vec.ptr, i64 5
1315 store i16 %in.elt, ptr %out.elt5.ptr, align 2
1316 %out.elt6.ptr = getelementptr i16, ptr %out.vec.ptr, i64 6
1317 store i16 %in.elt, ptr %out.elt6.ptr, align 4
1318 %out.elt7.ptr = getelementptr i16, ptr %out.vec.ptr, i64 7
1319 store i16 %in.elt, ptr %out.elt7.ptr, align 2
1320 %out.elt8.ptr = getelementptr i16, ptr %out.vec.ptr, i64 8
1321 store i16 %in.elt, ptr %out.elt8.ptr, align 16
1322 %out.elt9.ptr = getelementptr i16, ptr %out.vec.ptr, i64 9
1323 store i16 %in.elt, ptr %out.elt9.ptr, align 2
1324 %out.elt10.ptr = getelementptr i16, ptr %out.vec.ptr, i64 10
1325 store i16 %in.elt, ptr %out.elt10.ptr, align 4
1326 %out.elt11.ptr = getelementptr i16, ptr %out.vec.ptr, i64 11
1327 store i16 %in.elt, ptr %out.elt11.ptr, align 2
1328 %out.elt12.ptr = getelementptr i16, ptr %out.vec.ptr, i64 12
1329 store i16 %in.elt, ptr %out.elt12.ptr, align 8
1330 %out.elt13.ptr = getelementptr i16, ptr %out.vec.ptr, i64 13
1331 store i16 %in.elt, ptr %out.elt13.ptr, align 2
1332 %out.elt14.ptr = getelementptr i16, ptr %out.vec.ptr, i64 14
1333 store i16 %in.elt, ptr %out.elt14.ptr, align 4
1334 %out.elt15.ptr = getelementptr i16, ptr %out.vec.ptr, i64 15
1335 store i16 %in.elt, ptr %out.elt15.ptr, align 2
1336 %out.elt16.ptr = getelementptr i16, ptr %out.vec.ptr, i64 16
1337 store i16 %in.elt, ptr %out.elt16.ptr, align 32
1338 %out.elt17.ptr = getelementptr i16, ptr %out.vec.ptr, i64 17
1339 store i16 %in.elt, ptr %out.elt17.ptr, align 2
1340 %out.elt18.ptr = getelementptr i16, ptr %out.vec.ptr, i64 18
1341 store i16 %in.elt, ptr %out.elt18.ptr, align 4
1342 %out.elt19.ptr = getelementptr i16, ptr %out.vec.ptr, i64 19
1343 store i16 %in.elt, ptr %out.elt19.ptr, align 2
1344 %out.elt20.ptr = getelementptr i16, ptr %out.vec.ptr, i64 20
1345 store i16 %in.elt, ptr %out.elt20.ptr, align 8
1346 %out.elt21.ptr = getelementptr i16, ptr %out.vec.ptr, i64 21
1347 store i16 %in.elt, ptr %out.elt21.ptr, align 2
1348 %out.elt22.ptr = getelementptr i16, ptr %out.vec.ptr, i64 22
1349 store i16 %in.elt, ptr %out.elt22.ptr, align 4
1350 %out.elt23.ptr = getelementptr i16, ptr %out.vec.ptr, i64 23
1351 store i16 %in.elt, ptr %out.elt23.ptr, align 2
1352 %out.elt24.ptr = getelementptr i16, ptr %out.vec.ptr, i64 24
1353 store i16 %in.elt, ptr %out.elt24.ptr, align 16
1354 %out.elt25.ptr = getelementptr i16, ptr %out.vec.ptr, i64 25
1355 store i16 %in.elt, ptr %out.elt25.ptr, align 2
1356 %out.elt26.ptr = getelementptr i16, ptr %out.vec.ptr, i64 26
1357 store i16 %in.elt, ptr %out.elt26.ptr, align 4
1358 %out.elt27.ptr = getelementptr i16, ptr %out.vec.ptr, i64 27
1359 store i16 %in.elt, ptr %out.elt27.ptr, align 2
1360 %out.elt28.ptr = getelementptr i16, ptr %out.vec.ptr, i64 28
1361 store i16 %in.elt, ptr %out.elt28.ptr, align 8
1362 %out.elt29.ptr = getelementptr i16, ptr %out.vec.ptr, i64 29
1363 store i16 %in.elt, ptr %out.elt29.ptr, align 2
1364 %out.elt30.ptr = getelementptr i16, ptr %out.vec.ptr, i64 30
1365 store i16 %in.elt, ptr %out.elt30.ptr, align 4
1366 %out.elt31.ptr = getelementptr i16, ptr %out.vec.ptr, i64 31
1367 store i16 %in.elt, ptr %out.elt31.ptr, align 2
1371 define void @vec512_i32(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1372 ; ALL-LABEL: vec512_i32:
1374 ; ALL-NEXT: movl (%rdi), %eax
1375 ; ALL-NEXT: notl %eax
1376 ; ALL-NEXT: movl %eax, (%rsi)
1377 ; ALL-NEXT: movl %eax, 4(%rsi)
1378 ; ALL-NEXT: movl %eax, 8(%rsi)
1379 ; ALL-NEXT: movl %eax, 12(%rsi)
1380 ; ALL-NEXT: movl %eax, 16(%rsi)
1381 ; ALL-NEXT: movl %eax, 20(%rsi)
1382 ; ALL-NEXT: movl %eax, 24(%rsi)
1383 ; ALL-NEXT: movl %eax, 28(%rsi)
1384 ; ALL-NEXT: movl %eax, 32(%rsi)
1385 ; ALL-NEXT: movl %eax, 36(%rsi)
1386 ; ALL-NEXT: movl %eax, 40(%rsi)
1387 ; ALL-NEXT: movl %eax, 44(%rsi)
1388 ; ALL-NEXT: movl %eax, 48(%rsi)
1389 ; ALL-NEXT: movl %eax, 52(%rsi)
1390 ; ALL-NEXT: movl %eax, 56(%rsi)
1391 ; ALL-NEXT: movl %eax, 60(%rsi)
1393 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
1394 %in.elt = xor i32 %in.elt.not, -1
1395 %out.elt0.ptr = getelementptr i32, ptr %out.vec.ptr, i64 0
1396 store i32 %in.elt, ptr %out.elt0.ptr, align 64
1397 %out.elt1.ptr = getelementptr i32, ptr %out.vec.ptr, i64 1
1398 store i32 %in.elt, ptr %out.elt1.ptr, align 4
1399 %out.elt2.ptr = getelementptr i32, ptr %out.vec.ptr, i64 2
1400 store i32 %in.elt, ptr %out.elt2.ptr, align 8
1401 %out.elt3.ptr = getelementptr i32, ptr %out.vec.ptr, i64 3
1402 store i32 %in.elt, ptr %out.elt3.ptr, align 4
1403 %out.elt4.ptr = getelementptr i32, ptr %out.vec.ptr, i64 4
1404 store i32 %in.elt, ptr %out.elt4.ptr, align 16
1405 %out.elt5.ptr = getelementptr i32, ptr %out.vec.ptr, i64 5
1406 store i32 %in.elt, ptr %out.elt5.ptr, align 4
1407 %out.elt6.ptr = getelementptr i32, ptr %out.vec.ptr, i64 6
1408 store i32 %in.elt, ptr %out.elt6.ptr, align 8
1409 %out.elt7.ptr = getelementptr i32, ptr %out.vec.ptr, i64 7
1410 store i32 %in.elt, ptr %out.elt7.ptr, align 4
1411 %out.elt8.ptr = getelementptr i32, ptr %out.vec.ptr, i64 8
1412 store i32 %in.elt, ptr %out.elt8.ptr, align 32
1413 %out.elt9.ptr = getelementptr i32, ptr %out.vec.ptr, i64 9
1414 store i32 %in.elt, ptr %out.elt9.ptr, align 4
1415 %out.elt10.ptr = getelementptr i32, ptr %out.vec.ptr, i64 10
1416 store i32 %in.elt, ptr %out.elt10.ptr, align 8
1417 %out.elt11.ptr = getelementptr i32, ptr %out.vec.ptr, i64 11
1418 store i32 %in.elt, ptr %out.elt11.ptr, align 4
1419 %out.elt12.ptr = getelementptr i32, ptr %out.vec.ptr, i64 12
1420 store i32 %in.elt, ptr %out.elt12.ptr, align 16
1421 %out.elt13.ptr = getelementptr i32, ptr %out.vec.ptr, i64 13
1422 store i32 %in.elt, ptr %out.elt13.ptr, align 4
1423 %out.elt14.ptr = getelementptr i32, ptr %out.vec.ptr, i64 14
1424 store i32 %in.elt, ptr %out.elt14.ptr, align 8
1425 %out.elt15.ptr = getelementptr i32, ptr %out.vec.ptr, i64 15
1426 store i32 %in.elt, ptr %out.elt15.ptr, align 4
1430 define void @vec512_float(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1431 ; ALL-LABEL: vec512_float:
1433 ; ALL-NEXT: movl (%rdi), %eax
1434 ; ALL-NEXT: notl %eax
1435 ; ALL-NEXT: movl %eax, (%rsi)
1436 ; ALL-NEXT: movl %eax, 4(%rsi)
1437 ; ALL-NEXT: movl %eax, 8(%rsi)
1438 ; ALL-NEXT: movl %eax, 12(%rsi)
1439 ; ALL-NEXT: movl %eax, 16(%rsi)
1440 ; ALL-NEXT: movl %eax, 20(%rsi)
1441 ; ALL-NEXT: movl %eax, 24(%rsi)
1442 ; ALL-NEXT: movl %eax, 28(%rsi)
1443 ; ALL-NEXT: movl %eax, 32(%rsi)
1444 ; ALL-NEXT: movl %eax, 36(%rsi)
1445 ; ALL-NEXT: movl %eax, 40(%rsi)
1446 ; ALL-NEXT: movl %eax, 44(%rsi)
1447 ; ALL-NEXT: movl %eax, 48(%rsi)
1448 ; ALL-NEXT: movl %eax, 52(%rsi)
1449 ; ALL-NEXT: movl %eax, 56(%rsi)
1450 ; ALL-NEXT: movl %eax, 60(%rsi)
1452 %in.elt.not = load i32, ptr %in.elt.ptr, align 64
1453 %in.elt.int = xor i32 %in.elt.not, -1
1454 %in.elt = bitcast i32 %in.elt.int to float
1455 %out.elt0.ptr = getelementptr float, ptr %out.vec.ptr, i64 0
1456 store float %in.elt, ptr %out.elt0.ptr, align 64
1457 %out.elt1.ptr = getelementptr float, ptr %out.vec.ptr, i64 1
1458 store float %in.elt, ptr %out.elt1.ptr, align 4
1459 %out.elt2.ptr = getelementptr float, ptr %out.vec.ptr, i64 2
1460 store float %in.elt, ptr %out.elt2.ptr, align 8
1461 %out.elt3.ptr = getelementptr float, ptr %out.vec.ptr, i64 3
1462 store float %in.elt, ptr %out.elt3.ptr, align 4
1463 %out.elt4.ptr = getelementptr float, ptr %out.vec.ptr, i64 4
1464 store float %in.elt, ptr %out.elt4.ptr, align 16
1465 %out.elt5.ptr = getelementptr float, ptr %out.vec.ptr, i64 5
1466 store float %in.elt, ptr %out.elt5.ptr, align 4
1467 %out.elt6.ptr = getelementptr float, ptr %out.vec.ptr, i64 6
1468 store float %in.elt, ptr %out.elt6.ptr, align 8
1469 %out.elt7.ptr = getelementptr float, ptr %out.vec.ptr, i64 7
1470 store float %in.elt, ptr %out.elt7.ptr, align 4
1471 %out.elt8.ptr = getelementptr float, ptr %out.vec.ptr, i64 8
1472 store float %in.elt, ptr %out.elt8.ptr, align 32
1473 %out.elt9.ptr = getelementptr float, ptr %out.vec.ptr, i64 9
1474 store float %in.elt, ptr %out.elt9.ptr, align 4
1475 %out.elt10.ptr = getelementptr float, ptr %out.vec.ptr, i64 10
1476 store float %in.elt, ptr %out.elt10.ptr, align 8
1477 %out.elt11.ptr = getelementptr float, ptr %out.vec.ptr, i64 11
1478 store float %in.elt, ptr %out.elt11.ptr, align 4
1479 %out.elt12.ptr = getelementptr float, ptr %out.vec.ptr, i64 12
1480 store float %in.elt, ptr %out.elt12.ptr, align 16
1481 %out.elt13.ptr = getelementptr float, ptr %out.vec.ptr, i64 13
1482 store float %in.elt, ptr %out.elt13.ptr, align 4
1483 %out.elt14.ptr = getelementptr float, ptr %out.vec.ptr, i64 14
1484 store float %in.elt, ptr %out.elt14.ptr, align 8
1485 %out.elt15.ptr = getelementptr float, ptr %out.vec.ptr, i64 15
1486 store float %in.elt, ptr %out.elt15.ptr, align 4
1490 define void @vec512_i64(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1491 ; ALL-LABEL: vec512_i64:
1493 ; ALL-NEXT: movq (%rdi), %rax
1494 ; ALL-NEXT: notq %rax
1495 ; ALL-NEXT: movq %rax, (%rsi)
1496 ; ALL-NEXT: movq %rax, 8(%rsi)
1497 ; ALL-NEXT: movq %rax, 16(%rsi)
1498 ; ALL-NEXT: movq %rax, 24(%rsi)
1499 ; ALL-NEXT: movq %rax, 32(%rsi)
1500 ; ALL-NEXT: movq %rax, 40(%rsi)
1501 ; ALL-NEXT: movq %rax, 48(%rsi)
1502 ; ALL-NEXT: movq %rax, 56(%rsi)
1504 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
1505 %in.elt = xor i64 %in.elt.not, -1
1506 %out.elt0.ptr = getelementptr i64, ptr %out.vec.ptr, i64 0
1507 store i64 %in.elt, ptr %out.elt0.ptr, align 64
1508 %out.elt1.ptr = getelementptr i64, ptr %out.vec.ptr, i64 1
1509 store i64 %in.elt, ptr %out.elt1.ptr, align 8
1510 %out.elt2.ptr = getelementptr i64, ptr %out.vec.ptr, i64 2
1511 store i64 %in.elt, ptr %out.elt2.ptr, align 16
1512 %out.elt3.ptr = getelementptr i64, ptr %out.vec.ptr, i64 3
1513 store i64 %in.elt, ptr %out.elt3.ptr, align 8
1514 %out.elt4.ptr = getelementptr i64, ptr %out.vec.ptr, i64 4
1515 store i64 %in.elt, ptr %out.elt4.ptr, align 32
1516 %out.elt5.ptr = getelementptr i64, ptr %out.vec.ptr, i64 5
1517 store i64 %in.elt, ptr %out.elt5.ptr, align 8
1518 %out.elt6.ptr = getelementptr i64, ptr %out.vec.ptr, i64 6
1519 store i64 %in.elt, ptr %out.elt6.ptr, align 16
1520 %out.elt7.ptr = getelementptr i64, ptr %out.vec.ptr, i64 7
1521 store i64 %in.elt, ptr %out.elt7.ptr, align 8
1525 define void @vec512_double(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1526 ; ALL-LABEL: vec512_double:
1528 ; ALL-NEXT: movq (%rdi), %rax
1529 ; ALL-NEXT: notq %rax
1530 ; ALL-NEXT: movq %rax, (%rsi)
1531 ; ALL-NEXT: movq %rax, 8(%rsi)
1532 ; ALL-NEXT: movq %rax, 16(%rsi)
1533 ; ALL-NEXT: movq %rax, 24(%rsi)
1534 ; ALL-NEXT: movq %rax, 32(%rsi)
1535 ; ALL-NEXT: movq %rax, 40(%rsi)
1536 ; ALL-NEXT: movq %rax, 48(%rsi)
1537 ; ALL-NEXT: movq %rax, 56(%rsi)
1539 %in.elt.not = load i64, ptr %in.elt.ptr, align 64
1540 %in.elt.int = xor i64 %in.elt.not, -1
1541 %in.elt = bitcast i64 %in.elt.int to double
1542 %out.elt0.ptr = getelementptr double, ptr %out.vec.ptr, i64 0
1543 store double %in.elt, ptr %out.elt0.ptr, align 64
1544 %out.elt1.ptr = getelementptr double, ptr %out.vec.ptr, i64 1
1545 store double %in.elt, ptr %out.elt1.ptr, align 8
1546 %out.elt2.ptr = getelementptr double, ptr %out.vec.ptr, i64 2
1547 store double %in.elt, ptr %out.elt2.ptr, align 16
1548 %out.elt3.ptr = getelementptr double, ptr %out.vec.ptr, i64 3
1549 store double %in.elt, ptr %out.elt3.ptr, align 8
1550 %out.elt4.ptr = getelementptr double, ptr %out.vec.ptr, i64 4
1551 store double %in.elt, ptr %out.elt4.ptr, align 32
1552 %out.elt5.ptr = getelementptr double, ptr %out.vec.ptr, i64 5
1553 store double %in.elt, ptr %out.elt5.ptr, align 8
1554 %out.elt6.ptr = getelementptr double, ptr %out.vec.ptr, i64 6
1555 store double %in.elt, ptr %out.elt6.ptr, align 16
1556 %out.elt7.ptr = getelementptr double, ptr %out.vec.ptr, i64 7
1557 store double %in.elt, ptr %out.elt7.ptr, align 8
1561 define void @vec512_i128(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1562 ; ALL-LABEL: vec512_i128:
1564 ; ALL-NEXT: movq (%rdi), %rax
1565 ; ALL-NEXT: movq 8(%rdi), %rcx
1566 ; ALL-NEXT: notq %rcx
1567 ; ALL-NEXT: notq %rax
1568 ; ALL-NEXT: movq %rax, (%rsi)
1569 ; ALL-NEXT: movq %rcx, 8(%rsi)
1570 ; ALL-NEXT: movq %rcx, 24(%rsi)
1571 ; ALL-NEXT: movq %rax, 16(%rsi)
1572 ; ALL-NEXT: movq %rcx, 40(%rsi)
1573 ; ALL-NEXT: movq %rax, 32(%rsi)
1574 ; ALL-NEXT: movq %rcx, 56(%rsi)
1575 ; ALL-NEXT: movq %rax, 48(%rsi)
1577 %in.elt.not = load i128, ptr %in.elt.ptr, align 64
1578 %in.elt = xor i128 %in.elt.not, -1
1579 %out.elt0.ptr = getelementptr i128, ptr %out.vec.ptr, i64 0
1580 store i128 %in.elt, ptr %out.elt0.ptr, align 64
1581 %out.elt1.ptr = getelementptr i128, ptr %out.vec.ptr, i64 1
1582 store i128 %in.elt, ptr %out.elt1.ptr, align 16
1583 %out.elt2.ptr = getelementptr i128, ptr %out.vec.ptr, i64 2
1584 store i128 %in.elt, ptr %out.elt2.ptr, align 32
1585 %out.elt3.ptr = getelementptr i128, ptr %out.vec.ptr, i64 3
1586 store i128 %in.elt, ptr %out.elt3.ptr, align 16
1590 define void @vec512_i256(ptr %in.elt.ptr, ptr %out.vec.ptr) nounwind {
1591 ; ALL-LABEL: vec512_i256:
1593 ; ALL-NEXT: movq 16(%rdi), %rax
1594 ; ALL-NEXT: movq 24(%rdi), %rcx
1595 ; ALL-NEXT: movq (%rdi), %rdx
1596 ; ALL-NEXT: movq 8(%rdi), %rdi
1597 ; ALL-NEXT: notq %rdi
1598 ; ALL-NEXT: notq %rdx
1599 ; ALL-NEXT: notq %rcx
1600 ; ALL-NEXT: notq %rax
1601 ; ALL-NEXT: movq %rax, 16(%rsi)
1602 ; ALL-NEXT: movq %rcx, 24(%rsi)
1603 ; ALL-NEXT: movq %rdx, (%rsi)
1604 ; ALL-NEXT: movq %rdi, 8(%rsi)
1605 ; ALL-NEXT: movq %rax, 48(%rsi)
1606 ; ALL-NEXT: movq %rcx, 56(%rsi)
1607 ; ALL-NEXT: movq %rdx, 32(%rsi)
1608 ; ALL-NEXT: movq %rdi, 40(%rsi)
1610 %in.elt.not = load i256, ptr %in.elt.ptr, align 64
1611 %in.elt = xor i256 %in.elt.not, -1
1612 %out.elt0.ptr = getelementptr i256, ptr %out.vec.ptr, i64 0
1613 store i256 %in.elt, ptr %out.elt0.ptr, align 64
1614 %out.elt1.ptr = getelementptr i256, ptr %out.vec.ptr, i64 1
1615 store i256 %in.elt, ptr %out.elt1.ptr, align 32
1618 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1633 ; SSSE3-ONLY: {{.*}}