84 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zfbfmin,+zvfbfmin,+v -target-abi ilp32d -verify-machineinstrs < %s \3; RUN: | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zfbfmin,+zvfbfmin,+v -target-abi lp64d -verify-machineinstrs < %s \5; RUN: | FileCheck %s6; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+zvfbfmin,+v -target-abi ilp32d -verify-machineinstrs < %s \7; RUN: | FileCheck %s --check-prefixes=NOZFBFMIN8; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+zvfbfmin,+v -target-abi lp64d -verify-machineinstrs < %s \9; RUN: | FileCheck %s --check-prefixes=NOZFBFMIN10; RUN: llc -mtriple=riscv32 -mattr=+f,+d,+experimental-zvfbfa,+v -target-abi ilp32d -verify-machineinstrs < %s \11; RUN: | FileCheck %s --check-prefixes=ZVFBFA12; RUN: llc -mtriple=riscv64 -mattr=+f,+d,+experimental-zvfbfa,+v -target-abi lp64d -verify-machineinstrs < %s \13; RUN: | FileCheck %s --check-prefixes=ZVFBFA14 15define <vscale x 8 x bfloat> @vsplat_nxv8bf16(bfloat %f) {16; CHECK-LABEL: vsplat_nxv8bf16:17; CHECK: # %bb.0:18; CHECK-NEXT: fmv.x.h a0, fa019; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma20; CHECK-NEXT: vmv.v.x v8, a021; CHECK-NEXT: ret22;23; NOZFBFMIN-LABEL: vsplat_nxv8bf16:24; NOZFBFMIN: # %bb.0:25; NOZFBFMIN-NEXT: fmv.x.w a0, fa026; NOZFBFMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma27; NOZFBFMIN-NEXT: vmv.v.x v8, a028; NOZFBFMIN-NEXT: ret29;30; ZVFBFA-LABEL: vsplat_nxv8bf16:31; ZVFBFA: # %bb.0:32; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m2, ta, ma33; ZVFBFA-NEXT: vfmv.v.f v8, fa034; ZVFBFA-NEXT: ret35 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %f, i32 036 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer37 ret <vscale x 8 x bfloat> %splat38}39 40define <vscale x 8 x bfloat> @vsplat_zero_nxv8bf16() {41; CHECK-LABEL: vsplat_zero_nxv8bf16:42; CHECK: # %bb.0:43; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma44; CHECK-NEXT: vmv.v.i v8, 045; CHECK-NEXT: ret46;47; NOZFBFMIN-LABEL: vsplat_zero_nxv8bf16:48; NOZFBFMIN: # %bb.0:49; NOZFBFMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma50; NOZFBFMIN-NEXT: vmv.v.i v8, 051; NOZFBFMIN-NEXT: ret52;53; ZVFBFA-LABEL: vsplat_zero_nxv8bf16:54; ZVFBFA: # %bb.0:55; ZVFBFA-NEXT: vsetvli a0, zero, e16, m2, ta, ma56; ZVFBFA-NEXT: vmv.v.i v8, 057; ZVFBFA-NEXT: ret58 ret <vscale x 8 x bfloat> splat (bfloat zeroinitializer)59}60 61define <vscale x 8 x bfloat> @vsplat_negzero_nxv8bf16() {62; CHECK-LABEL: vsplat_negzero_nxv8bf16:63; CHECK: # %bb.0:64; CHECK-NEXT: lui a0, 104856865; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma66; CHECK-NEXT: vmv.v.x v8, a067; CHECK-NEXT: ret68;69; NOZFBFMIN-LABEL: vsplat_negzero_nxv8bf16:70; NOZFBFMIN: # %bb.0:71; NOZFBFMIN-NEXT: lui a0, 104856872; NOZFBFMIN-NEXT: vsetvli a1, zero, e16, m2, ta, ma73; NOZFBFMIN-NEXT: vmv.v.x v8, a074; NOZFBFMIN-NEXT: ret75;76; ZVFBFA-LABEL: vsplat_negzero_nxv8bf16:77; ZVFBFA: # %bb.0:78; ZVFBFA-NEXT: lui a0, 104856879; ZVFBFA-NEXT: vsetvli a1, zero, e16, m2, ta, ma80; ZVFBFA-NEXT: vmv.v.x v8, a081; ZVFBFA-NEXT: ret82 ret <vscale x 8 x bfloat> splat (bfloat -0.0)83}84