|
8 | 8 | ; ExtractElement - Constant Index
|
9 | 9 | ;
|
10 | 10 |
|
| 11 | +define i64 @extract_undef_index_from_zero_vec() nounwind { |
| 12 | +; SSE-LABEL: extract_undef_index_from_zero_vec: |
| 13 | +; SSE: # %bb.0: |
| 14 | +; SSE-NEXT: xorps %xmm0, %xmm0 |
| 15 | +; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) |
| 16 | +; SSE-NEXT: movq -{{[0-9]+}}(%rsp), %rax |
| 17 | +; SSE-NEXT: retq |
| 18 | +; |
| 19 | +; AVX-LABEL: extract_undef_index_from_zero_vec: |
| 20 | +; AVX: # %bb.0: |
| 21 | +; AVX-NEXT: vxorps %xmm0, %xmm0, %xmm0 |
| 22 | +; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) |
| 23 | +; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rax |
| 24 | +; AVX-NEXT: retq |
| 25 | + %E = extractelement <2 x i64> zeroinitializer, i64 undef |
| 26 | + ret i64 %E |
| 27 | +} |
| 28 | + |
| 29 | +define i64 @extract_undef_index_from_nonzero_vec() nounwind { |
| 30 | +; SSE-LABEL: extract_undef_index_from_nonzero_vec: |
| 31 | +; SSE: # %bb.0: |
| 32 | +; SSE-NEXT: pcmpeqd %xmm0, %xmm0 |
| 33 | +; SSE-NEXT: movdqa %xmm0, -{{[0-9]+}}(%rsp) |
| 34 | +; SSE-NEXT: movq -{{[0-9]+}}(%rsp), %rax |
| 35 | +; SSE-NEXT: retq |
| 36 | +; |
| 37 | +; AVX-LABEL: extract_undef_index_from_nonzero_vec: |
| 38 | +; AVX: # %bb.0: |
| 39 | +; AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0 |
| 40 | +; AVX-NEXT: vmovdqa %xmm0, -{{[0-9]+}}(%rsp) |
| 41 | +; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rax |
| 42 | +; AVX-NEXT: retq |
| 43 | + %E = extractelement <2 x i64> <i64 -1, i64 -1>, i64 undef |
| 44 | + ret i64 %E |
| 45 | +} |
| 46 | + |
11 | 47 | define i8 @extractelement_v16i8_1(<16 x i8> %a) nounwind {
|
12 | 48 | ; SSE2-LABEL: extractelement_v16i8_1:
|
13 | 49 | ; SSE2: # %bb.0:
|
|
0 commit comments