1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
4 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-pc-linux -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
8 ; ExtractElement - Constant Index
11 define i8 @extractelement_v16i8_1(<16 x i8> %a) nounwind {
12 ; SSE2-LABEL: extractelement_v16i8_1:
14 ; SSE2-NEXT: movd %xmm0, %eax
15 ; SSE2-NEXT: shrl $8, %eax
16 ; SSE2-NEXT: # kill: def $al killed $al killed $eax
19 ; SSE41-LABEL: extractelement_v16i8_1:
21 ; SSE41-NEXT: pextrb $1, %xmm0, %eax
22 ; SSE41-NEXT: # kill: def $al killed $al killed $eax
25 ; AVX-LABEL: extractelement_v16i8_1:
27 ; AVX-NEXT: vpextrb $1, %xmm0, %eax
28 ; AVX-NEXT: # kill: def $al killed $al killed $eax
30 %b = extractelement <16 x i8> %a, i256 1
34 define i8 @extractelement_v16i8_11(<16 x i8> %a) nounwind {
35 ; SSE2-LABEL: extractelement_v16i8_11:
37 ; SSE2-NEXT: pextrw $5, %xmm0, %eax
38 ; SSE2-NEXT: shrl $8, %eax
39 ; SSE2-NEXT: # kill: def $al killed $al killed $eax
42 ; SSE41-LABEL: extractelement_v16i8_11:
44 ; SSE41-NEXT: pextrb $11, %xmm0, %eax
45 ; SSE41-NEXT: # kill: def $al killed $al killed $eax
48 ; AVX-LABEL: extractelement_v16i8_11:
50 ; AVX-NEXT: vpextrb $11, %xmm0, %eax
51 ; AVX-NEXT: # kill: def $al killed $al killed $eax
53 %b = extractelement <16 x i8> %a, i256 11
57 define i8 @extractelement_v16i8_14(<16 x i8> %a) nounwind {
58 ; SSE2-LABEL: extractelement_v16i8_14:
60 ; SSE2-NEXT: pextrw $7, %xmm0, %eax
61 ; SSE2-NEXT: # kill: def $al killed $al killed $eax
64 ; SSE41-LABEL: extractelement_v16i8_14:
66 ; SSE41-NEXT: pextrb $14, %xmm0, %eax
67 ; SSE41-NEXT: # kill: def $al killed $al killed $eax
70 ; AVX-LABEL: extractelement_v16i8_14:
72 ; AVX-NEXT: vpextrb $14, %xmm0, %eax
73 ; AVX-NEXT: # kill: def $al killed $al killed $eax
75 %b = extractelement <16 x i8> %a, i256 14
79 define i8 @extractelement_v32i8_1(<32 x i8> %a) nounwind {
80 ; SSE2-LABEL: extractelement_v32i8_1:
82 ; SSE2-NEXT: movd %xmm0, %eax
83 ; SSE2-NEXT: shrl $8, %eax
84 ; SSE2-NEXT: # kill: def $al killed $al killed $eax
87 ; SSE41-LABEL: extractelement_v32i8_1:
89 ; SSE41-NEXT: pextrb $1, %xmm0, %eax
90 ; SSE41-NEXT: # kill: def $al killed $al killed $eax
93 ; AVX-LABEL: extractelement_v32i8_1:
95 ; AVX-NEXT: vpextrb $1, %xmm0, %eax
96 ; AVX-NEXT: # kill: def $al killed $al killed $eax
97 ; AVX-NEXT: vzeroupper
99 %b = extractelement <32 x i8> %a, i256 1
103 define i8 @extractelement_v32i8_17(<32 x i8> %a) nounwind {
104 ; SSE2-LABEL: extractelement_v32i8_17:
106 ; SSE2-NEXT: movd %xmm1, %eax
107 ; SSE2-NEXT: shrl $8, %eax
108 ; SSE2-NEXT: # kill: def $al killed $al killed $eax
111 ; SSE41-LABEL: extractelement_v32i8_17:
113 ; SSE41-NEXT: pextrb $1, %xmm1, %eax
114 ; SSE41-NEXT: # kill: def $al killed $al killed $eax
117 ; AVX1-LABEL: extractelement_v32i8_17:
119 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
120 ; AVX1-NEXT: vpextrb $1, %xmm0, %eax
121 ; AVX1-NEXT: # kill: def $al killed $al killed $eax
122 ; AVX1-NEXT: vzeroupper
125 ; AVX2-LABEL: extractelement_v32i8_17:
127 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
128 ; AVX2-NEXT: vpextrb $1, %xmm0, %eax
129 ; AVX2-NEXT: # kill: def $al killed $al killed $eax
130 ; AVX2-NEXT: vzeroupper
132 %b = extractelement <32 x i8> %a, i256 17
136 define i16 @extractelement_v8i16_0(<8 x i16> %a, i256 %i) nounwind {
137 ; SSE-LABEL: extractelement_v8i16_0:
139 ; SSE-NEXT: movd %xmm0, %eax
140 ; SSE-NEXT: # kill: def $ax killed $ax killed $eax
143 ; AVX-LABEL: extractelement_v8i16_0:
145 ; AVX-NEXT: vmovd %xmm0, %eax
146 ; AVX-NEXT: # kill: def $ax killed $ax killed $eax
148 %b = extractelement <8 x i16> %a, i256 0
152 define i16 @extractelement_v8i16_3(<8 x i16> %a, i256 %i) nounwind {
153 ; SSE-LABEL: extractelement_v8i16_3:
155 ; SSE-NEXT: pextrw $3, %xmm0, %eax
156 ; SSE-NEXT: # kill: def $ax killed $ax killed $eax
159 ; AVX-LABEL: extractelement_v8i16_3:
161 ; AVX-NEXT: vpextrw $3, %xmm0, %eax
162 ; AVX-NEXT: # kill: def $ax killed $ax killed $eax
164 %b = extractelement <8 x i16> %a, i256 3
168 define i16 @extractelement_v16i16_0(<16 x i16> %a, i256 %i) nounwind {
169 ; SSE-LABEL: extractelement_v16i16_0:
171 ; SSE-NEXT: movd %xmm0, %eax
172 ; SSE-NEXT: # kill: def $ax killed $ax killed $eax
175 ; AVX-LABEL: extractelement_v16i16_0:
177 ; AVX-NEXT: vmovd %xmm0, %eax
178 ; AVX-NEXT: # kill: def $ax killed $ax killed $eax
179 ; AVX-NEXT: vzeroupper
181 %b = extractelement <16 x i16> %a, i256 0
185 define i16 @extractelement_v16i16_13(<16 x i16> %a, i256 %i) nounwind {
186 ; SSE-LABEL: extractelement_v16i16_13:
188 ; SSE-NEXT: pextrw $5, %xmm1, %eax
189 ; SSE-NEXT: # kill: def $ax killed $ax killed $eax
192 ; AVX1-LABEL: extractelement_v16i16_13:
194 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
195 ; AVX1-NEXT: vpextrw $5, %xmm0, %eax
196 ; AVX1-NEXT: # kill: def $ax killed $ax killed $eax
197 ; AVX1-NEXT: vzeroupper
200 ; AVX2-LABEL: extractelement_v16i16_13:
202 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
203 ; AVX2-NEXT: vpextrw $5, %xmm0, %eax
204 ; AVX2-NEXT: # kill: def $ax killed $ax killed $eax
205 ; AVX2-NEXT: vzeroupper
207 %b = extractelement <16 x i16> %a, i256 13
211 define i32 @extractelement_v4i32_0(<4 x i32> %a) nounwind {
212 ; SSE-LABEL: extractelement_v4i32_0:
214 ; SSE-NEXT: movd %xmm0, %eax
217 ; AVX-LABEL: extractelement_v4i32_0:
219 ; AVX-NEXT: vmovd %xmm0, %eax
221 %b = extractelement <4 x i32> %a, i256 0
225 define i32 @extractelement_v4i32_3(<4 x i32> %a) nounwind {
226 ; SSE2-LABEL: extractelement_v4i32_3:
228 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
229 ; SSE2-NEXT: movd %xmm0, %eax
232 ; SSE41-LABEL: extractelement_v4i32_3:
234 ; SSE41-NEXT: extractps $3, %xmm0, %eax
237 ; AVX-LABEL: extractelement_v4i32_3:
239 ; AVX-NEXT: vextractps $3, %xmm0, %eax
241 %b = extractelement <4 x i32> %a, i256 3
245 define i32 @extractelement_v8i32_0(<8 x i32> %a) nounwind {
246 ; SSE-LABEL: extractelement_v8i32_0:
248 ; SSE-NEXT: movd %xmm1, %eax
251 ; AVX1-LABEL: extractelement_v8i32_0:
253 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
254 ; AVX1-NEXT: vmovd %xmm0, %eax
255 ; AVX1-NEXT: vzeroupper
258 ; AVX2-LABEL: extractelement_v8i32_0:
260 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
261 ; AVX2-NEXT: vmovd %xmm0, %eax
262 ; AVX2-NEXT: vzeroupper
264 %b = extractelement <8 x i32> %a, i256 4
268 define i32 @extractelement_v8i32_4(<8 x i32> %a) nounwind {
269 ; SSE-LABEL: extractelement_v8i32_4:
271 ; SSE-NEXT: movd %xmm1, %eax
274 ; AVX1-LABEL: extractelement_v8i32_4:
276 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
277 ; AVX1-NEXT: vmovd %xmm0, %eax
278 ; AVX1-NEXT: vzeroupper
281 ; AVX2-LABEL: extractelement_v8i32_4:
283 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
284 ; AVX2-NEXT: vmovd %xmm0, %eax
285 ; AVX2-NEXT: vzeroupper
287 %b = extractelement <8 x i32> %a, i256 4
291 define i32 @extractelement_v8i32_7(<8 x i32> %a) nounwind {
292 ; SSE2-LABEL: extractelement_v8i32_7:
294 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[3,1,2,3]
295 ; SSE2-NEXT: movd %xmm0, %eax
298 ; SSE41-LABEL: extractelement_v8i32_7:
300 ; SSE41-NEXT: extractps $3, %xmm1, %eax
303 ; AVX-LABEL: extractelement_v8i32_7:
305 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm0
306 ; AVX-NEXT: vextractps $3, %xmm0, %eax
307 ; AVX-NEXT: vzeroupper
309 %b = extractelement <8 x i32> %a, i64 7
313 define i64 @extractelement_v2i64_0(<2 x i64> %a, i256 %i) nounwind {
314 ; SSE-LABEL: extractelement_v2i64_0:
316 ; SSE-NEXT: movq %xmm0, %rax
319 ; AVX-LABEL: extractelement_v2i64_0:
321 ; AVX-NEXT: vmovq %xmm0, %rax
323 %b = extractelement <2 x i64> %a, i256 0
327 define i64 @extractelement_v2i64_1(<2 x i64> %a, i256 %i) nounwind {
328 ; SSE2-LABEL: extractelement_v2i64_1:
330 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
331 ; SSE2-NEXT: movq %xmm0, %rax
334 ; SSE41-LABEL: extractelement_v2i64_1:
336 ; SSE41-NEXT: pextrq $1, %xmm0, %rax
339 ; AVX-LABEL: extractelement_v2i64_1:
341 ; AVX-NEXT: vpextrq $1, %xmm0, %rax
343 %b = extractelement <2 x i64> %a, i256 1
347 define i64 @extractelement_v4i64_1(<4 x i64> %a, i256 %i) nounwind {
348 ; SSE2-LABEL: extractelement_v4i64_1:
350 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
351 ; SSE2-NEXT: movq %xmm0, %rax
354 ; SSE41-LABEL: extractelement_v4i64_1:
356 ; SSE41-NEXT: pextrq $1, %xmm0, %rax
359 ; AVX-LABEL: extractelement_v4i64_1:
361 ; AVX-NEXT: vpextrq $1, %xmm0, %rax
362 ; AVX-NEXT: vzeroupper
364 %b = extractelement <4 x i64> %a, i256 1
368 define i64 @extractelement_v4i64_3(<4 x i64> %a, i256 %i) nounwind {
369 ; SSE2-LABEL: extractelement_v4i64_3:
371 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
372 ; SSE2-NEXT: movq %xmm0, %rax
375 ; SSE41-LABEL: extractelement_v4i64_3:
377 ; SSE41-NEXT: pextrq $1, %xmm1, %rax
380 ; AVX1-LABEL: extractelement_v4i64_3:
382 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0
383 ; AVX1-NEXT: vpextrq $1, %xmm0, %rax
384 ; AVX1-NEXT: vzeroupper
387 ; AVX2-LABEL: extractelement_v4i64_3:
389 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
390 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
391 ; AVX2-NEXT: vzeroupper
393 %b = extractelement <4 x i64> %a, i256 3
398 ; ExtractElement - Variable Index
401 define i8 @extractelement_v16i8_var(<16 x i8> %a, i256 %i) nounwind {
402 ; SSE-LABEL: extractelement_v16i8_var:
404 ; SSE-NEXT: andl $15, %edi
405 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
406 ; SSE-NEXT: movb -24(%rsp,%rdi), %al
409 ; AVX-LABEL: extractelement_v16i8_var:
411 ; AVX-NEXT: andl $15, %edi
412 ; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
413 ; AVX-NEXT: movb -24(%rsp,%rdi), %al
415 %b = extractelement <16 x i8> %a, i256 %i
419 define i8 @extractelement_v32i8_var(<32 x i8> %a, i256 %i) nounwind {
420 ; SSE-LABEL: extractelement_v32i8_var:
422 ; SSE-NEXT: pushq %rbp
423 ; SSE-NEXT: movq %rsp, %rbp
424 ; SSE-NEXT: andq $-32, %rsp
425 ; SSE-NEXT: subq $64, %rsp
426 ; SSE-NEXT: andl $31, %edi
427 ; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp)
428 ; SSE-NEXT: movaps %xmm0, (%rsp)
429 ; SSE-NEXT: movb (%rsp,%rdi), %al
430 ; SSE-NEXT: movq %rbp, %rsp
431 ; SSE-NEXT: popq %rbp
434 ; AVX-LABEL: extractelement_v32i8_var:
436 ; AVX-NEXT: pushq %rbp
437 ; AVX-NEXT: movq %rsp, %rbp
438 ; AVX-NEXT: andq $-32, %rsp
439 ; AVX-NEXT: subq $64, %rsp
440 ; AVX-NEXT: andl $31, %edi
441 ; AVX-NEXT: vmovaps %ymm0, (%rsp)
442 ; AVX-NEXT: movb (%rsp,%rdi), %al
443 ; AVX-NEXT: movq %rbp, %rsp
444 ; AVX-NEXT: popq %rbp
445 ; AVX-NEXT: vzeroupper
447 %b = extractelement <32 x i8> %a, i256 %i
451 define i16 @extractelement_v8i16_var(<8 x i16> %a, i256 %i) nounwind {
452 ; SSE-LABEL: extractelement_v8i16_var:
454 ; SSE-NEXT: andl $7, %edi
455 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
456 ; SSE-NEXT: movzwl -24(%rsp,%rdi,2), %eax
459 ; AVX-LABEL: extractelement_v8i16_var:
461 ; AVX-NEXT: andl $7, %edi
462 ; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
463 ; AVX-NEXT: movzwl -24(%rsp,%rdi,2), %eax
465 %b = extractelement <8 x i16> %a, i256 %i
469 define i16 @extractelement_v16i16_var(<16 x i16> %a, i256 %i) nounwind {
470 ; SSE-LABEL: extractelement_v16i16_var:
472 ; SSE-NEXT: pushq %rbp
473 ; SSE-NEXT: movq %rsp, %rbp
474 ; SSE-NEXT: andq $-32, %rsp
475 ; SSE-NEXT: subq $64, %rsp
476 ; SSE-NEXT: andl $15, %edi
477 ; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp)
478 ; SSE-NEXT: movaps %xmm0, (%rsp)
479 ; SSE-NEXT: movzwl (%rsp,%rdi,2), %eax
480 ; SSE-NEXT: movq %rbp, %rsp
481 ; SSE-NEXT: popq %rbp
484 ; AVX-LABEL: extractelement_v16i16_var:
486 ; AVX-NEXT: pushq %rbp
487 ; AVX-NEXT: movq %rsp, %rbp
488 ; AVX-NEXT: andq $-32, %rsp
489 ; AVX-NEXT: subq $64, %rsp
490 ; AVX-NEXT: andl $15, %edi
491 ; AVX-NEXT: vmovaps %ymm0, (%rsp)
492 ; AVX-NEXT: movzwl (%rsp,%rdi,2), %eax
493 ; AVX-NEXT: movq %rbp, %rsp
494 ; AVX-NEXT: popq %rbp
495 ; AVX-NEXT: vzeroupper
497 %b = extractelement <16 x i16> %a, i256 %i
501 define i32 @extractelement_v4i32_var(<4 x i32> %a, i256 %i) nounwind {
502 ; SSE-LABEL: extractelement_v4i32_var:
504 ; SSE-NEXT: andl $3, %edi
505 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
506 ; SSE-NEXT: movl -24(%rsp,%rdi,4), %eax
509 ; AVX-LABEL: extractelement_v4i32_var:
511 ; AVX-NEXT: andl $3, %edi
512 ; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
513 ; AVX-NEXT: movl -24(%rsp,%rdi,4), %eax
515 %b = extractelement <4 x i32> %a, i256 %i
519 define i32 @extractelement_v8i32_var(<8 x i32> %a, i256 %i) nounwind {
520 ; SSE-LABEL: extractelement_v8i32_var:
522 ; SSE-NEXT: pushq %rbp
523 ; SSE-NEXT: movq %rsp, %rbp
524 ; SSE-NEXT: andq $-32, %rsp
525 ; SSE-NEXT: subq $64, %rsp
526 ; SSE-NEXT: andl $7, %edi
527 ; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp)
528 ; SSE-NEXT: movaps %xmm0, (%rsp)
529 ; SSE-NEXT: movl (%rsp,%rdi,4), %eax
530 ; SSE-NEXT: movq %rbp, %rsp
531 ; SSE-NEXT: popq %rbp
534 ; AVX-LABEL: extractelement_v8i32_var:
536 ; AVX-NEXT: pushq %rbp
537 ; AVX-NEXT: movq %rsp, %rbp
538 ; AVX-NEXT: andq $-32, %rsp
539 ; AVX-NEXT: subq $64, %rsp
540 ; AVX-NEXT: andl $7, %edi
541 ; AVX-NEXT: vmovaps %ymm0, (%rsp)
542 ; AVX-NEXT: movl (%rsp,%rdi,4), %eax
543 ; AVX-NEXT: movq %rbp, %rsp
544 ; AVX-NEXT: popq %rbp
545 ; AVX-NEXT: vzeroupper
547 %b = extractelement <8 x i32> %a, i256 %i
551 define i64 @extractelement_v2i64_var(<2 x i64> %a, i256 %i) nounwind {
552 ; SSE-LABEL: extractelement_v2i64_var:
554 ; SSE-NEXT: andl $1, %edi
555 ; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)
556 ; SSE-NEXT: movq -24(%rsp,%rdi,8), %rax
559 ; AVX-LABEL: extractelement_v2i64_var:
561 ; AVX-NEXT: andl $1, %edi
562 ; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
563 ; AVX-NEXT: movq -24(%rsp,%rdi,8), %rax
565 %b = extractelement <2 x i64> %a, i256 %i
569 define i64 @extractelement_v4i64_var(<4 x i64> %a, i256 %i) nounwind {
570 ; SSE-LABEL: extractelement_v4i64_var:
572 ; SSE-NEXT: pushq %rbp
573 ; SSE-NEXT: movq %rsp, %rbp
574 ; SSE-NEXT: andq $-32, %rsp
575 ; SSE-NEXT: subq $64, %rsp
576 ; SSE-NEXT: andl $3, %edi
577 ; SSE-NEXT: movaps %xmm1, {{[0-9]+}}(%rsp)
578 ; SSE-NEXT: movaps %xmm0, (%rsp)
579 ; SSE-NEXT: movq (%rsp,%rdi,8), %rax
580 ; SSE-NEXT: movq %rbp, %rsp
581 ; SSE-NEXT: popq %rbp
584 ; AVX-LABEL: extractelement_v4i64_var:
586 ; AVX-NEXT: pushq %rbp
587 ; AVX-NEXT: movq %rsp, %rbp
588 ; AVX-NEXT: andq $-32, %rsp
589 ; AVX-NEXT: subq $64, %rsp
590 ; AVX-NEXT: andl $3, %edi
591 ; AVX-NEXT: vmovaps %ymm0, (%rsp)
592 ; AVX-NEXT: movq (%rsp,%rdi,8), %rax
593 ; AVX-NEXT: movq %rbp, %rsp
594 ; AVX-NEXT: popq %rbp
595 ; AVX-NEXT: vzeroupper
597 %b = extractelement <4 x i64> %a, i256 %i
602 ; ExtractElement - Constant (Out Of Range) Index
605 define i8 @extractelement_32i8_m1(<32 x i8> %a) nounwind {
606 ; SSE-LABEL: extractelement_32i8_m1:
610 ; AVX-LABEL: extractelement_32i8_m1:
613 %b = extractelement <32 x i8> %a, i256 -1
617 define i16 @extractelement_v16i16_m4(<16 x i16> %a, i256 %i) nounwind {
618 ; SSE-LABEL: extractelement_v16i16_m4:
622 ; AVX-LABEL: extractelement_v16i16_m4:
625 %b = extractelement <16 x i16> %a, i256 -4
629 define i32 @extractelement_v8i32_15(<8 x i32> %a) nounwind {
630 ; SSE-LABEL: extractelement_v8i32_15:
634 ; AVX-LABEL: extractelement_v8i32_15:
637 %b = extractelement <8 x i32> %a, i64 15
641 define i64 @extractelement_v4i64_4(<4 x i64> %a, i256 %i) nounwind {
642 ; SSE-LABEL: extractelement_v4i64_4:
646 ; AVX-LABEL: extractelement_v4i64_4:
649 %b = extractelement <4 x i64> %a, i256 4