|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X32 --check-prefix=X32-AVX2 |
3 |
| -; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx2 | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX2 |
4 |
| -; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefix=X32 --check-prefix=X32-AVX512VL |
5 |
| -; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl,+avx512dq | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX512VL |
| 2 | +; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx2,+mmx | FileCheck %s --check-prefix=X32 --check-prefix=X32-AVX2 |
| 3 | +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx2,+mmx | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX2 |
| 4 | +; RUN: llc < %s -mtriple=i686-apple-darwin -mattr=+avx512vl,+avx512dq,+mmx | FileCheck %s --check-prefix=X32 --check-prefix=X32-AVX512VL |
| 5 | +; RUN: llc < %s -mtriple=x86_64-apple-darwin -mattr=+avx512vl,+avx512dq,+mmx | FileCheck %s --check-prefix=X64 --check-prefix=X64-AVX512VL |
6 | 6 |
|
7 | 7 | define <16 x i8> @BB16(i8* %ptr) nounwind uwtable readnone ssp {
|
8 | 8 | ; X32-LABEL: BB16:
|
@@ -1448,3 +1448,34 @@ eintry:
|
1448 | 1448 | store <4 x i64> %splat.splat, <4 x i64>* %__b.addr.i, align 16
|
1449 | 1449 | ret void
|
1450 | 1450 | }
|
| 1451 | + |
| 1452 | +define <8 x i16> @broadcast_x86_mmx(x86_mmx %tmp) nounwind { |
| 1453 | +; X32-LABEL: broadcast_x86_mmx: |
| 1454 | +; X32: ## %bb.0: ## %bb |
| 1455 | +; X32-NEXT: subl $12, %esp |
| 1456 | +; X32-NEXT: movq %mm0, (%esp) |
| 1457 | +; X32-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] |
| 1458 | +; X32-NEXT: addl $12, %esp |
| 1459 | +; X32-NEXT: retl |
| 1460 | +; |
| 1461 | +; X64-AVX2-LABEL: broadcast_x86_mmx: |
| 1462 | +; X64-AVX2: ## %bb.0: ## %bb |
| 1463 | +; X64-AVX2-NEXT: movdq2q %xmm0, %mm0 |
| 1464 | +; X64-AVX2-NEXT: movq %mm0, %rax |
| 1465 | +; X64-AVX2-NEXT: vmovq %rax, %xmm0 |
| 1466 | +; X64-AVX2-NEXT: vpbroadcastq %xmm0, %xmm0 |
| 1467 | +; X64-AVX2-NEXT: retq |
| 1468 | +; |
| 1469 | +; X64-AVX512VL-LABEL: broadcast_x86_mmx: |
| 1470 | +; X64-AVX512VL: ## %bb.0: ## %bb |
| 1471 | +; X64-AVX512VL-NEXT: movdq2q %xmm0, %mm0 |
| 1472 | +; X64-AVX512VL-NEXT: movq %mm0, %rax |
| 1473 | +; X64-AVX512VL-NEXT: vpbroadcastq %rax, %xmm0 |
| 1474 | +; X64-AVX512VL-NEXT: retq |
| 1475 | +bb: |
| 1476 | + %tmp1 = bitcast x86_mmx %tmp to i64 |
| 1477 | + %tmp2 = insertelement <2 x i64> undef, i64 %tmp1, i32 0 |
| 1478 | + %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16> |
| 1479 | + %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3> |
| 1480 | + ret <8 x i16> %tmp4 |
| 1481 | +} |
0 commit comments