1dc8e078aSCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*32597685SJianjian Guan; RUN: llc -mtriple=riscv32 -mattr=+d,+v,+zfbfmin,+zvfbfmin -target-abi=ilp32d \ 3dc8e078aSCraig Topper; RUN: -verify-machineinstrs < %s | FileCheck %s 4*32597685SJianjian Guan; RUN: llc -mtriple=riscv64 -mattr=+d,+v,+zfbfmin,+zvfbfmin -target-abi=lp64d \ 5dc8e078aSCraig Topper; RUN: -verify-machineinstrs < %s | FileCheck %s 6dc8e078aSCraig Topper 7dc8e078aSCraig Topperdefine <2 x bfloat> @select_v2bf16(i1 zeroext %c, <2 x bfloat> %a, <2 x bfloat> %b) { 8dc8e078aSCraig Topper; CHECK-LABEL: select_v2bf16: 9dc8e078aSCraig Topper; CHECK: # %bb.0: 10dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 11dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 12dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 13dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 14dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 15dc8e078aSCraig Topper; CHECK-NEXT: ret 16dc8e078aSCraig Topper %v = select i1 %c, <2 x bfloat> %a, <2 x bfloat> %b 17dc8e078aSCraig Topper ret <2 x bfloat> %v 18dc8e078aSCraig Topper} 19dc8e078aSCraig Topper 20dc8e078aSCraig Topperdefine <2 x bfloat> @selectcc_v2bf16(bfloat %a, bfloat %b, <2 x bfloat> %c, <2 x bfloat> %d) { 21dc8e078aSCraig Topper; CHECK-LABEL: selectcc_v2bf16: 22dc8e078aSCraig Topper; CHECK: # %bb.0: 23dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 24dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 25dc8e078aSCraig Topper; CHECK-NEXT: feq.s a0, fa4, fa5 26dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 27dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 28dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 29dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 30dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 31dc8e078aSCraig Topper; CHECK-NEXT: ret 32dc8e078aSCraig Topper %cmp = fcmp oeq bfloat %a, %b 33dc8e078aSCraig Topper %v = select i1 %cmp, <2 x bfloat> %c, <2 x bfloat> %d 34dc8e078aSCraig Topper ret <2 x bfloat> %v 35dc8e078aSCraig Topper} 36dc8e078aSCraig Topper 37dc8e078aSCraig Topperdefine <4 x bfloat> @select_v4bf16(i1 zeroext %c, <4 x bfloat> %a, <4 x bfloat> %b) { 38dc8e078aSCraig Topper; CHECK-LABEL: select_v4bf16: 39dc8e078aSCraig Topper; CHECK: # %bb.0: 40dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 41dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 42dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 43dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 44dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 45dc8e078aSCraig Topper; CHECK-NEXT: ret 46dc8e078aSCraig Topper %v = select i1 %c, <4 x bfloat> %a, <4 x bfloat> %b 47dc8e078aSCraig Topper ret <4 x bfloat> %v 48dc8e078aSCraig Topper} 49dc8e078aSCraig Topper 50dc8e078aSCraig Topperdefine <4 x bfloat> @selectcc_v4bf16(bfloat %a, bfloat %b, <4 x bfloat> %c, <4 x bfloat> %d) { 51dc8e078aSCraig Topper; CHECK-LABEL: selectcc_v4bf16: 52dc8e078aSCraig Topper; CHECK: # %bb.0: 53dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 54dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 55dc8e078aSCraig Topper; CHECK-NEXT: feq.s a0, fa4, fa5 56dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 57dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 58dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 59dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 60dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 61dc8e078aSCraig Topper; CHECK-NEXT: ret 62dc8e078aSCraig Topper %cmp = fcmp oeq bfloat %a, %b 63dc8e078aSCraig Topper %v = select i1 %cmp, <4 x bfloat> %c, <4 x bfloat> %d 64dc8e078aSCraig Topper ret <4 x bfloat> %v 65dc8e078aSCraig Topper} 66dc8e078aSCraig Topper 67dc8e078aSCraig Topperdefine <8 x bfloat> @select_v8bf16(i1 zeroext %c, <8 x bfloat> %a, <8 x bfloat> %b) { 68dc8e078aSCraig Topper; CHECK-LABEL: select_v8bf16: 69dc8e078aSCraig Topper; CHECK: # %bb.0: 70dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 71dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 72dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 73dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 74dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 75dc8e078aSCraig Topper; CHECK-NEXT: ret 76dc8e078aSCraig Topper %v = select i1 %c, <8 x bfloat> %a, <8 x bfloat> %b 77dc8e078aSCraig Topper ret <8 x bfloat> %v 78dc8e078aSCraig Topper} 79dc8e078aSCraig Topper 80dc8e078aSCraig Topperdefine <8 x bfloat> @selectcc_v8bf16(bfloat %a, bfloat %b, <8 x bfloat> %c, <8 x bfloat> %d) { 81dc8e078aSCraig Topper; CHECK-LABEL: selectcc_v8bf16: 82dc8e078aSCraig Topper; CHECK: # %bb.0: 83dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 84dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 85dc8e078aSCraig Topper; CHECK-NEXT: feq.s a0, fa4, fa5 86dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 87dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v10, a0 88dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v10, 0 89dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 90dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 91dc8e078aSCraig Topper; CHECK-NEXT: ret 92dc8e078aSCraig Topper %cmp = fcmp oeq bfloat %a, %b 93dc8e078aSCraig Topper %v = select i1 %cmp, <8 x bfloat> %c, <8 x bfloat> %d 94dc8e078aSCraig Topper ret <8 x bfloat> %v 95dc8e078aSCraig Topper} 96dc8e078aSCraig Topper 97dc8e078aSCraig Topperdefine <16 x bfloat> @select_v16bf16(i1 zeroext %c, <16 x bfloat> %a, <16 x bfloat> %b) { 98dc8e078aSCraig Topper; CHECK-LABEL: select_v16bf16: 99dc8e078aSCraig Topper; CHECK: # %bb.0: 100dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 101dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v12, a0 102dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v12, 0 103dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 104dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 105dc8e078aSCraig Topper; CHECK-NEXT: ret 106dc8e078aSCraig Topper %v = select i1 %c, <16 x bfloat> %a, <16 x bfloat> %b 107dc8e078aSCraig Topper ret <16 x bfloat> %v 108dc8e078aSCraig Topper} 109dc8e078aSCraig Topper 110dc8e078aSCraig Topperdefine <16 x bfloat> @selectcc_v16bf16(bfloat %a, bfloat %b, <16 x bfloat> %c, <16 x bfloat> %d) { 111dc8e078aSCraig Topper; CHECK-LABEL: selectcc_v16bf16: 112dc8e078aSCraig Topper; CHECK: # %bb.0: 113dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa5, fa1 114dc8e078aSCraig Topper; CHECK-NEXT: fcvt.s.bf16 fa4, fa0 115dc8e078aSCraig Topper; CHECK-NEXT: feq.s a0, fa4, fa5 116dc8e078aSCraig Topper; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 117dc8e078aSCraig Topper; CHECK-NEXT: vmv.v.x v12, a0 118dc8e078aSCraig Topper; CHECK-NEXT: vmsne.vi v0, v12, 0 119dc8e078aSCraig Topper; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma 120dc8e078aSCraig Topper; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 121dc8e078aSCraig Topper; CHECK-NEXT: ret 122dc8e078aSCraig Topper %cmp = fcmp oeq bfloat %a, %b 123dc8e078aSCraig Topper %v = select i1 %cmp, <16 x bfloat> %c, <16 x bfloat> %d 124dc8e078aSCraig Topper ret <16 x bfloat> %v 125dc8e078aSCraig Topper} 126