xref: /llvm-project/llvm/test/CodeGen/X86/avx512fp16-subv-broadcast-fp16.ll (revision 2f448bf509432c1a19ec46ab8cbc7353c03c6280)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx -mattr=+avx512fp16 | FileCheck %s
3
4define dso_local void @test_v8f16_v32f16(ptr %x_addr, ptr %y_addr) {
5; CHECK-LABEL: test_v8f16_v32f16:
6; CHECK:       ## %bb.0: ## %entry
7; CHECK-NEXT:    vbroadcastf32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]
8; CHECK-NEXT:    vmovdqa64 %zmm0, (%rsi)
9; CHECK-NEXT:    vzeroupper
10; CHECK-NEXT:    retq
11entry:
12  %0 = load <8 x half>, ptr %x_addr, align 16
13  %shuffle.i58 = shufflevector <8 x half> %0, <8 x half> %0, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
14  store <32 x half> %shuffle.i58, ptr %y_addr, align 64
15  ret void
16}
17
18define dso_local void @test_v8f16_v16f16(ptr %x_addr, ptr %y_addr) {
19; CHECK-LABEL: test_v8f16_v16f16:
20; CHECK:       ## %bb.0: ## %entry
21; CHECK-NEXT:    vbroadcastf128 {{.*#+}} ymm0 = mem[0,1,0,1]
22; CHECK-NEXT:    vmovdqa %ymm0, (%rsi)
23; CHECK-NEXT:    vzeroupper
24; CHECK-NEXT:    retq
25entry:
26  %0 = load <8 x half>, ptr %x_addr, align 16
27  %shuffle.i58 = shufflevector <8 x half> %0, <8 x half> %0, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
28  store <16 x half> %shuffle.i58, ptr %y_addr, align 64
29  ret void
30}
31
32define dso_local void @test_v16f16_v32f16(ptr %x_addr, ptr %y_addr) {
33; CHECK-LABEL: test_v16f16_v32f16:
34; CHECK:       ## %bb.0: ## %entry
35; CHECK-NEXT:    vbroadcastf64x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3]
36; CHECK-NEXT:    vmovdqa64 %zmm0, (%rsi)
37; CHECK-NEXT:    vzeroupper
38; CHECK-NEXT:    retq
39entry:
40  %0 = load <16 x half>, ptr %x_addr, align 16
41  %shuffle.i58 = shufflevector <16 x half> %0, <16 x half> %0, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
42  store <32 x half> %shuffle.i58, ptr %y_addr, align 64
43  ret void
44}
45