brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.0 KiB · 844e021 Raw
114 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+v,+m,+zfbfmin,+zvfbfmin -target-abi=ilp32d \3; RUN:   -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+v,+m,+zfbfmin,+zvfbfmin -target-abi=lp64d \5; RUN:   -verify-machineinstrs < %s | FileCheck %s6; RUN: llc -mtriple=riscv32 -mattr=+d,+v,+zvfh,+m,+zfbfmin,+zvfbfmin -target-abi=ilp32d \7; RUN:   -verify-machineinstrs < %s | FileCheck %s8; RUN: llc -mtriple=riscv64 -mattr=+d,+v,+m,+zvfh,+zfbfmin,+zvfbfmin -target-abi=lp64d \9; RUN:   -verify-machineinstrs < %s | FileCheck %s10 11define <2 x bfloat> @vpmerge_vv_v2bf16(<2 x bfloat> %va, <2 x bfloat> %vb, <2 x i1> %m, i32 zeroext %evl) {12; CHECK-LABEL: vpmerge_vv_v2bf16:13; CHECK:       # %bb.0:14; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma15; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v016; CHECK-NEXT:    vmv1r.v v8, v917; CHECK-NEXT:    ret18  %v = call <2 x bfloat> @llvm.vp.merge.v2bf16(<2 x i1> %m, <2 x bfloat> %va, <2 x bfloat> %vb, i32 %evl)19  ret <2 x bfloat> %v20}21 22define <2 x bfloat> @vpmerge_vf_v2bf16(bfloat %a, <2 x bfloat> %vb, <2 x i1> %m, i32 zeroext %evl) {23; CHECK-LABEL: vpmerge_vf_v2bf16:24; CHECK:       # %bb.0:25; CHECK-NEXT:    fmv.x.h a1, fa026; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma27; CHECK-NEXT:    vmv.v.x v9, a128; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, tu, ma29; CHECK-NEXT:    vmerge.vvm v8, v8, v9, v030; CHECK-NEXT:    ret31  %elt.head = insertelement <2 x bfloat> poison, bfloat %a, i32 032  %va = shufflevector <2 x bfloat> %elt.head, <2 x bfloat> poison, <2 x i32> zeroinitializer33  %v = call <2 x bfloat> @llvm.vp.merge.v2bf16(<2 x i1> %m, <2 x bfloat> %va, <2 x bfloat> %vb, i32 %evl)34  ret <2 x bfloat> %v35}36 37define <4 x bfloat> @vpmerge_vv_v4bf16(<4 x bfloat> %va, <4 x bfloat> %vb, <4 x i1> %m, i32 zeroext %evl) {38; CHECK-LABEL: vpmerge_vv_v4bf16:39; CHECK:       # %bb.0:40; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma41; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v042; CHECK-NEXT:    vmv1r.v v8, v943; CHECK-NEXT:    ret44  %v = call <4 x bfloat> @llvm.vp.merge.v4bf16(<4 x i1> %m, <4 x bfloat> %va, <4 x bfloat> %vb, i32 %evl)45  ret <4 x bfloat> %v46}47 48define <4 x bfloat> @vpmerge_vf_v4bf16(bfloat %a, <4 x bfloat> %vb, <4 x i1> %m, i32 zeroext %evl) {49; CHECK-LABEL: vpmerge_vf_v4bf16:50; CHECK:       # %bb.0:51; CHECK-NEXT:    fmv.x.h a1, fa052; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma53; CHECK-NEXT:    vmv.v.x v9, a154; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, ma55; CHECK-NEXT:    vmerge.vvm v8, v8, v9, v056; CHECK-NEXT:    ret57  %elt.head = insertelement <4 x bfloat> poison, bfloat %a, i32 058  %va = shufflevector <4 x bfloat> %elt.head, <4 x bfloat> poison, <4 x i32> zeroinitializer59  %v = call <4 x bfloat> @llvm.vp.merge.v4bf16(<4 x i1> %m, <4 x bfloat> %va, <4 x bfloat> %vb, i32 %evl)60  ret <4 x bfloat> %v61}62 63define <8 x bfloat> @vpmerge_vv_v8bf16(<8 x bfloat> %va, <8 x bfloat> %vb, <8 x i1> %m, i32 zeroext %evl) {64; CHECK-LABEL: vpmerge_vv_v8bf16:65; CHECK:       # %bb.0:66; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma67; CHECK-NEXT:    vmerge.vvm v9, v9, v8, v068; CHECK-NEXT:    vmv1r.v v8, v969; CHECK-NEXT:    ret70  %v = call <8 x bfloat> @llvm.vp.merge.v8bf16(<8 x i1> %m, <8 x bfloat> %va, <8 x bfloat> %vb, i32 %evl)71  ret <8 x bfloat> %v72}73 74define <8 x bfloat> @vpmerge_vf_v8bf16(bfloat %a, <8 x bfloat> %vb, <8 x i1> %m, i32 zeroext %evl) {75; CHECK-LABEL: vpmerge_vf_v8bf16:76; CHECK:       # %bb.0:77; CHECK-NEXT:    fmv.x.h a1, fa078; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma79; CHECK-NEXT:    vmv.v.x v9, a180; CHECK-NEXT:    vsetvli zero, a0, e16, m1, tu, ma81; CHECK-NEXT:    vmerge.vvm v8, v8, v9, v082; CHECK-NEXT:    ret83  %elt.head = insertelement <8 x bfloat> poison, bfloat %a, i32 084  %va = shufflevector <8 x bfloat> %elt.head, <8 x bfloat> poison, <8 x i32> zeroinitializer85  %v = call <8 x bfloat> @llvm.vp.merge.v8bf16(<8 x i1> %m, <8 x bfloat> %va, <8 x bfloat> %vb, i32 %evl)86  ret <8 x bfloat> %v87}88 89define <16 x bfloat> @vpmerge_vv_v16bf16(<16 x bfloat> %va, <16 x bfloat> %vb, <16 x i1> %m, i32 zeroext %evl) {90; CHECK-LABEL: vpmerge_vv_v16bf16:91; CHECK:       # %bb.0:92; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma93; CHECK-NEXT:    vmerge.vvm v10, v10, v8, v094; CHECK-NEXT:    vmv2r.v v8, v1095; CHECK-NEXT:    ret96  %v = call <16 x bfloat> @llvm.vp.merge.v16bf16(<16 x i1> %m, <16 x bfloat> %va, <16 x bfloat> %vb, i32 %evl)97  ret <16 x bfloat> %v98}99 100define <16 x bfloat> @vpmerge_vf_v16bf16(bfloat %a, <16 x bfloat> %vb, <16 x i1> %m, i32 zeroext %evl) {101; CHECK-LABEL: vpmerge_vf_v16bf16:102; CHECK:       # %bb.0:103; CHECK-NEXT:    fmv.x.h a1, fa0104; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma105; CHECK-NEXT:    vmv.v.x v10, a1106; CHECK-NEXT:    vsetvli zero, a0, e16, m2, tu, ma107; CHECK-NEXT:    vmerge.vvm v8, v8, v10, v0108; CHECK-NEXT:    ret109  %elt.head = insertelement <16 x bfloat> poison, bfloat %a, i32 0110  %va = shufflevector <16 x bfloat> %elt.head, <16 x bfloat> poison, <16 x i32> zeroinitializer111  %v = call <16 x bfloat> @llvm.vp.merge.v16bf16(<16 x i1> %m, <16 x bfloat> %va, <16 x bfloat> %vb, i32 %evl)112  ret <16 x bfloat> %v113}114