xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vsplats-bf16.ll (revision b2e8b8fac031127ab513da6a6677f64c0a9ad2e4)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfbfmin,+zvfbfmin,+v -target-abi ilp32d -verify-machineinstrs < %s \
3; RUN:   | FileCheck %s
4; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfbfmin,+zvfbfmin,+v -target-abi lp64d -verify-machineinstrs < %s \
5; RUN:   | FileCheck %s
6; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zvfbfmin,+v -target-abi ilp32d -verify-machineinstrs < %s \
7; RUN:   | FileCheck %s --check-prefixes=NOZFBFMIN
8; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zvfbfmin,+v -target-abi lp64d -verify-machineinstrs < %s \
9; RUN:   | FileCheck %s --check-prefixes=NOZFBFMIN
10
11define <vscale x 8 x bfloat> @vsplat_nxv8bf16(bfloat %f) {
12; CHECK-LABEL: vsplat_nxv8bf16:
13; CHECK:       # %bb.0:
14; CHECK-NEXT:    fmv.x.h a0, fa0
15; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
16; CHECK-NEXT:    vmv.v.x v8, a0
17; CHECK-NEXT:    ret
18;
19; NOZFBFMIN-LABEL: vsplat_nxv8bf16:
20; NOZFBFMIN:       # %bb.0:
21; NOZFBFMIN-NEXT:    fmv.x.w a0, fa0
22; NOZFBFMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
23; NOZFBFMIN-NEXT:    vmv.v.x v8, a0
24; NOZFBFMIN-NEXT:    ret
25  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %f, i32 0
26  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
27  ret <vscale x 8 x bfloat> %splat
28}
29
30define <vscale x 8 x bfloat> @vsplat_zero_nxv8bf16() {
31; CHECK-LABEL: vsplat_zero_nxv8bf16:
32; CHECK:       # %bb.0:
33; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
34; CHECK-NEXT:    vmv.v.i v8, 0
35; CHECK-NEXT:    ret
36;
37; NOZFBFMIN-LABEL: vsplat_zero_nxv8bf16:
38; NOZFBFMIN:       # %bb.0:
39; NOZFBFMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
40; NOZFBFMIN-NEXT:    vmv.v.i v8, 0
41; NOZFBFMIN-NEXT:    ret
42  ret <vscale x 8 x bfloat> splat (bfloat zeroinitializer)
43}
44
45define <vscale x 8 x bfloat> @vsplat_negzero_nxv8bf16() {
46; CHECK-LABEL: vsplat_negzero_nxv8bf16:
47; CHECK:       # %bb.0:
48; CHECK-NEXT:    lui a0, 1048568
49; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
50; CHECK-NEXT:    vmv.v.x v8, a0
51; CHECK-NEXT:    ret
52;
53; NOZFBFMIN-LABEL: vsplat_negzero_nxv8bf16:
54; NOZFBFMIN:       # %bb.0:
55; NOZFBFMIN-NEXT:    lui a0, 1048568
56; NOZFBFMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
57; NOZFBFMIN-NEXT:    vmv.v.x v8, a0
58; NOZFBFMIN-NEXT:    ret
59  ret <vscale x 8 x bfloat> splat (bfloat -0.0)
60}
61