brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · c29c253 Raw
136 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFH3; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFH4; RUN: llc -mtriple=riscv32 -mattr=+v,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFHMIN5; RUN: llc -mtriple=riscv64 -mattr=+v,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,NOZFMIN,ZVFHMIN6; RUN: llc -mtriple=riscv32 -mattr=+v,+zfhmin,+zfbfmin,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZFMIN7; RUN: llc -mtriple=riscv64 -mattr=+v,+zfhmin,+zfbfmin,+zvfhmin,+zvfbfmin -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZFMIN8 9define <vscale x 8 x bfloat> @vsplat_nxv8bf16(bfloat %f) {10; NOZFMIN-LABEL: vsplat_nxv8bf16:11; NOZFMIN:       # %bb.0:12; NOZFMIN-NEXT:    fmv.x.w a0, fa013; NOZFMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma14; NOZFMIN-NEXT:    vmv.v.x v8, a015; NOZFMIN-NEXT:    ret16;17; ZFMIN-LABEL: vsplat_nxv8bf16:18; ZFMIN:       # %bb.0:19; ZFMIN-NEXT:    fmv.x.h a0, fa020; ZFMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma21; ZFMIN-NEXT:    vmv.v.x v8, a022; ZFMIN-NEXT:    ret23  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %f, i32 024  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer25  ret <vscale x 8 x bfloat> %splat26}27 28define <vscale x 8 x bfloat> @vsplat_zero_nxv8bf16() {29; CHECK-LABEL: vsplat_zero_nxv8bf16:30; CHECK:       # %bb.0:31; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma32; CHECK-NEXT:    vmv.v.i v8, 033; CHECK-NEXT:    ret34  ret <vscale x 8 x bfloat> splat (bfloat zeroinitializer)35}36 37define <vscale x 8 x half> @vsplat_nxv8f16(half %f) {38; ZVFH-LABEL: vsplat_nxv8f16:39; ZVFH:       # %bb.0:40; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma41; ZVFH-NEXT:    vfmv.v.f v8, fa042; ZVFH-NEXT:    ret43;44; ZVFHMIN-LABEL: vsplat_nxv8f16:45; ZVFHMIN:       # %bb.0:46; ZVFHMIN-NEXT:    fmv.x.w a0, fa047; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma48; ZVFHMIN-NEXT:    vmv.v.x v8, a049; ZVFHMIN-NEXT:    ret50;51; ZFMIN-LABEL: vsplat_nxv8f16:52; ZFMIN:       # %bb.0:53; ZFMIN-NEXT:    fmv.x.h a0, fa054; ZFMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma55; ZFMIN-NEXT:    vmv.v.x v8, a056; ZFMIN-NEXT:    ret57  %head = insertelement <vscale x 8 x half> poison, half %f, i32 058  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer59  ret <vscale x 8 x half> %splat60}61 62define <vscale x 8 x half> @vsplat_zero_nxv8f16() {63; CHECK-LABEL: vsplat_zero_nxv8f16:64; CHECK:       # %bb.0:65; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma66; CHECK-NEXT:    vmv.v.i v8, 067; CHECK-NEXT:    ret68  ret <vscale x 8 x half> splat (half zeroinitializer)69}70 71define <vscale x 8 x float> @vsplat_nxv8f32(float %f) {72; CHECK-LABEL: vsplat_nxv8f32:73; CHECK:       # %bb.0:74; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma75; CHECK-NEXT:    vfmv.v.f v8, fa076; CHECK-NEXT:    ret77  %head = insertelement <vscale x 8 x float> poison, float %f, i32 078  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer79  ret <vscale x 8 x float> %splat80}81 82define <vscale x 8 x float> @vsplat_zero_nxv8f32() {83; CHECK-LABEL: vsplat_zero_nxv8f32:84; CHECK:       # %bb.0:85; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma86; CHECK-NEXT:    vmv.v.i v8, 087; CHECK-NEXT:    ret88  ret <vscale x 8 x float> splat (float zeroinitializer)89}90 91define <vscale x 8 x double> @vsplat_nxv8f64(double %f) {92; CHECK-LABEL: vsplat_nxv8f64:93; CHECK:       # %bb.0:94; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma95; CHECK-NEXT:    vfmv.v.f v8, fa096; CHECK-NEXT:    ret97  %head = insertelement <vscale x 8 x double> poison, double %f, i32 098  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer99  ret <vscale x 8 x double> %splat100}101 102define <vscale x 8 x double> @vsplat_zero_nxv8f64() {103; CHECK-LABEL: vsplat_zero_nxv8f64:104; CHECK:       # %bb.0:105; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma106; CHECK-NEXT:    vmv.v.i v8, 0107; CHECK-NEXT:    ret108  ret <vscale x 8 x double> splat (double zeroinitializer)109}110 111define <vscale x 8 x float> @vsplat_load_nxv8f32(ptr %ptr) {112; CHECK-LABEL: vsplat_load_nxv8f32:113; CHECK:       # %bb.0:114; CHECK-NEXT:    flw fa5, 0(a0)115; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma116; CHECK-NEXT:    vfmv.v.f v8, fa5117; CHECK-NEXT:    ret118  %f = load float, ptr %ptr119  %head = insertelement <vscale x 8 x float> poison, float %f, i32 0120  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer121  ret <vscale x 8 x float> %splat122}123 124; Test that we fold this to a vlse with 0 stride.125define <vscale x 8 x float> @vsplat_load_nxv8f32_optimized(ptr %ptr) "target-features"="+optimized-zero-stride-load" {126; CHECK-LABEL: vsplat_load_nxv8f32_optimized:127; CHECK:       # %bb.0:128; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma129; CHECK-NEXT:    vlse32.v v8, (a0), zero130; CHECK-NEXT:    ret131  %f = load float, ptr %ptr132  %head = insertelement <vscale x 8 x float> poison, float %f, i32 0133  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer134  ret <vscale x 8 x float> %splat135}136