|
3 | 3 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64SSE --check-prefix=X64SSE2
|
4 | 4 | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32SSE --check-prefix=X32SSE4
|
5 | 5 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X64SSE --check-prefix=X64SSE4
|
| 6 | +; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X32AVX --check-prefix=X32AVX1 |
| 7 | +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=X64AVX --check-prefix=X64AVX1 |
6 | 8 | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X32AVX --check-prefix=X32AVX2
|
7 | 9 | ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X64AVX --check-prefix=X64AVX2
|
8 | 10 | ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=X32AVX --check-prefix=X32AVX512F
|
@@ -269,21 +271,53 @@ define <8 x i32> @elt7_v8i32(i32 %x) {
|
269 | 271 | ; X64SSE4-NEXT: movaps {{.*#+}} xmm0 = [42,1,2,3]
|
270 | 272 | ; X64SSE4-NEXT: retq
|
271 | 273 | ;
|
272 |
| -; X32AVX-LABEL: elt7_v8i32: |
273 |
| -; X32AVX: # %bb.0: |
274 |
| -; X32AVX-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
275 |
| -; X32AVX-NEXT: vextracti128 $1, %ymm0, %xmm1 |
276 |
| -; X32AVX-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1 |
277 |
| -; X32AVX-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
278 |
| -; X32AVX-NEXT: retl |
| 274 | +; X32AVX1-LABEL: elt7_v8i32: |
| 275 | +; X32AVX1: # %bb.0: |
| 276 | +; X32AVX1-NEXT: vmovaps {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 277 | +; X32AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 |
| 278 | +; X32AVX1-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1 |
| 279 | +; X32AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 |
| 280 | +; X32AVX1-NEXT: retl |
| 281 | +; |
| 282 | +; X64AVX1-LABEL: elt7_v8i32: |
| 283 | +; X64AVX1: # %bb.0: |
| 284 | +; X64AVX1-NEXT: vmovaps {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 285 | +; X64AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 |
| 286 | +; X64AVX1-NEXT: vpinsrd $3, %edi, %xmm1, %xmm1 |
| 287 | +; X64AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 |
| 288 | +; X64AVX1-NEXT: retq |
| 289 | +; |
| 290 | +; X32AVX2-LABEL: elt7_v8i32: |
| 291 | +; X32AVX2: # %bb.0: |
| 292 | +; X32AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 293 | +; X32AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 |
| 294 | +; X32AVX2-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1 |
| 295 | +; X32AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
| 296 | +; X32AVX2-NEXT: retl |
279 | 297 | ;
|
280 |
| -; X64AVX-LABEL: elt7_v8i32: |
281 |
| -; X64AVX: # %bb.0: |
282 |
| -; X64AVX-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
283 |
| -; X64AVX-NEXT: vextracti128 $1, %ymm0, %xmm1 |
284 |
| -; X64AVX-NEXT: vpinsrd $3, %edi, %xmm1, %xmm1 |
285 |
| -; X64AVX-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
286 |
| -; X64AVX-NEXT: retq |
| 298 | +; X64AVX2-LABEL: elt7_v8i32: |
| 299 | +; X64AVX2: # %bb.0: |
| 300 | +; X64AVX2-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 301 | +; X64AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 |
| 302 | +; X64AVX2-NEXT: vpinsrd $3, %edi, %xmm1, %xmm1 |
| 303 | +; X64AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
| 304 | +; X64AVX2-NEXT: retq |
| 305 | +; |
| 306 | +; X32AVX512F-LABEL: elt7_v8i32: |
| 307 | +; X32AVX512F: # %bb.0: |
| 308 | +; X32AVX512F-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 309 | +; X32AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1 |
| 310 | +; X32AVX512F-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1 |
| 311 | +; X32AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
| 312 | +; X32AVX512F-NEXT: retl |
| 313 | +; |
| 314 | +; X64AVX512F-LABEL: elt7_v8i32: |
| 315 | +; X64AVX512F: # %bb.0: |
| 316 | +; X64AVX512F-NEXT: vmovdqa {{.*#+}} ymm0 = <42,1,2,3,4,5,6,u> |
| 317 | +; X64AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm1 |
| 318 | +; X64AVX512F-NEXT: vpinsrd $3, %edi, %xmm1, %xmm1 |
| 319 | +; X64AVX512F-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 |
| 320 | +; X64AVX512F-NEXT: retq |
287 | 321 | %ins = insertelement <8 x i32> <i32 42, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>, i32 %x, i32 7
|
288 | 322 | ret <8 x i32> %ins
|
289 | 323 | }
|
@@ -370,6 +404,24 @@ define <8 x i64> @elt5_v8i64(i64 %x) {
|
370 | 404 | ; X64SSE4-NEXT: movaps {{.*#+}} xmm3 = [6,7]
|
371 | 405 | ; X64SSE4-NEXT: retq
|
372 | 406 | ;
|
| 407 | +; X32AVX1-LABEL: elt5_v8i64: |
| 408 | +; X32AVX1: # %bb.0: |
| 409 | +; X32AVX1-NEXT: movl $4, %eax |
| 410 | +; X32AVX1-NEXT: vmovd %eax, %xmm0 |
| 411 | +; X32AVX1-NEXT: vmovq {{.*#+}} xmm1 = mem[0],zero |
| 412 | +; X32AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] |
| 413 | +; X32AVX1-NEXT: vinsertf128 $1, {{\.LCPI.*}}, %ymm0, %ymm1 |
| 414 | +; X32AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [42,0,1,0,2,0,3,0] |
| 415 | +; X32AVX1-NEXT: retl |
| 416 | +; |
| 417 | +; X64AVX1-LABEL: elt5_v8i64: |
| 418 | +; X64AVX1: # %bb.0: |
| 419 | +; X64AVX1-NEXT: vmovdqa {{.*#+}} ymm0 = <4,u,6,7> |
| 420 | +; X64AVX1-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm1 |
| 421 | +; X64AVX1-NEXT: vblendps {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm0[4,5,6,7] |
| 422 | +; X64AVX1-NEXT: vmovaps {{.*#+}} ymm0 = [42,1,2,3] |
| 423 | +; X64AVX1-NEXT: retq |
| 424 | +; |
373 | 425 | ; X32AVX2-LABEL: elt5_v8i64:
|
374 | 426 | ; X32AVX2: # %bb.0:
|
375 | 427 | ; X32AVX2-NEXT: movl $4, %eax
|
@@ -430,6 +482,22 @@ define <8 x double> @elt1_v8f64(double %x) {
|
430 | 482 | ; X64SSE-NEXT: movaps %xmm4, %xmm0
|
431 | 483 | ; X64SSE-NEXT: retq
|
432 | 484 | ;
|
| 485 | +; X32AVX1-LABEL: elt1_v8f64: |
| 486 | +; X32AVX1: # %bb.0: |
| 487 | +; X32AVX1-NEXT: vmovapd {{.*#+}} ymm0 = <4.2E+1,u,2.0E+0,3.0E+0> |
| 488 | +; X32AVX1-NEXT: vmovhpd {{.*#+}} xmm1 = xmm0[0],mem[0] |
| 489 | +; X32AVX1-NEXT: vblendpd {{.*#+}} ymm0 = ymm1[0,1],ymm0[2,3] |
| 490 | +; X32AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [4.0E+0,5.0E+0,6.0E+0,7.0E+0] |
| 491 | +; X32AVX1-NEXT: retl |
| 492 | +; |
| 493 | +; X64AVX1-LABEL: elt1_v8f64: |
| 494 | +; X64AVX1: # %bb.0: |
| 495 | +; X64AVX1-NEXT: vmovaps {{.*#+}} ymm1 = <4.2E+1,u,2.0E+0,3.0E+0> |
| 496 | +; X64AVX1-NEXT: vmovlhps {{.*#+}} xmm0 = xmm1[0],xmm0[0] |
| 497 | +; X64AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7] |
| 498 | +; X64AVX1-NEXT: vmovaps {{.*#+}} ymm1 = [4.0E+0,5.0E+0,6.0E+0,7.0E+0] |
| 499 | +; X64AVX1-NEXT: retq |
| 500 | +; |
433 | 501 | ; X32AVX2-LABEL: elt1_v8f64:
|
434 | 502 | ; X32AVX2: # %bb.0:
|
435 | 503 | ; X32AVX2-NEXT: vmovapd {{.*#+}} ymm0 = <4.2E+1,u,2.0E+0,3.0E+0>
|
|
0 commit comments