1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+v,+zfbfmin,+zvfbfmin -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+v,+zfbfmin,+zvfbfmin -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s
7 define <2 x bfloat> @select_v2bf16(i1 zeroext %c, <2 x bfloat> %a, <2 x bfloat> %b) {
8 ; CHECK-LABEL: select_v2bf16:
10 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
11 ; CHECK-NEXT: vmv.v.x v10, a0
12 ; CHECK-NEXT: vmsne.vi v0, v10, 0
13 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
14 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
16 %v = select i1 %c, <2 x bfloat> %a, <2 x bfloat> %b
20 define <2 x bfloat> @selectcc_v2bf16(bfloat %a, bfloat %b, <2 x bfloat> %c, <2 x bfloat> %d) {
21 ; CHECK-LABEL: selectcc_v2bf16:
23 ; CHECK-NEXT: fcvt.s.bf16 fa5, fa1
24 ; CHECK-NEXT: fcvt.s.bf16 fa4, fa0
25 ; CHECK-NEXT: feq.s a0, fa4, fa5
26 ; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
27 ; CHECK-NEXT: vmv.v.x v10, a0
28 ; CHECK-NEXT: vmsne.vi v0, v10, 0
29 ; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
30 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
32 %cmp = fcmp oeq bfloat %a, %b
33 %v = select i1 %cmp, <2 x bfloat> %c, <2 x bfloat> %d
37 define <4 x bfloat> @select_v4bf16(i1 zeroext %c, <4 x bfloat> %a, <4 x bfloat> %b) {
38 ; CHECK-LABEL: select_v4bf16:
40 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
41 ; CHECK-NEXT: vmv.v.x v10, a0
42 ; CHECK-NEXT: vmsne.vi v0, v10, 0
43 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
44 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
46 %v = select i1 %c, <4 x bfloat> %a, <4 x bfloat> %b
50 define <4 x bfloat> @selectcc_v4bf16(bfloat %a, bfloat %b, <4 x bfloat> %c, <4 x bfloat> %d) {
51 ; CHECK-LABEL: selectcc_v4bf16:
53 ; CHECK-NEXT: fcvt.s.bf16 fa5, fa1
54 ; CHECK-NEXT: fcvt.s.bf16 fa4, fa0
55 ; CHECK-NEXT: feq.s a0, fa4, fa5
56 ; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
57 ; CHECK-NEXT: vmv.v.x v10, a0
58 ; CHECK-NEXT: vmsne.vi v0, v10, 0
59 ; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
60 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
62 %cmp = fcmp oeq bfloat %a, %b
63 %v = select i1 %cmp, <4 x bfloat> %c, <4 x bfloat> %d
67 define <8 x bfloat> @select_v8bf16(i1 zeroext %c, <8 x bfloat> %a, <8 x bfloat> %b) {
68 ; CHECK-LABEL: select_v8bf16:
70 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
71 ; CHECK-NEXT: vmv.v.x v10, a0
72 ; CHECK-NEXT: vmsne.vi v0, v10, 0
73 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
74 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
76 %v = select i1 %c, <8 x bfloat> %a, <8 x bfloat> %b
80 define <8 x bfloat> @selectcc_v8bf16(bfloat %a, bfloat %b, <8 x bfloat> %c, <8 x bfloat> %d) {
81 ; CHECK-LABEL: selectcc_v8bf16:
83 ; CHECK-NEXT: fcvt.s.bf16 fa5, fa1
84 ; CHECK-NEXT: fcvt.s.bf16 fa4, fa0
85 ; CHECK-NEXT: feq.s a0, fa4, fa5
86 ; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
87 ; CHECK-NEXT: vmv.v.x v10, a0
88 ; CHECK-NEXT: vmsne.vi v0, v10, 0
89 ; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma
90 ; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0
92 %cmp = fcmp oeq bfloat %a, %b
93 %v = select i1 %cmp, <8 x bfloat> %c, <8 x bfloat> %d
97 define <16 x bfloat> @select_v16bf16(i1 zeroext %c, <16 x bfloat> %a, <16 x bfloat> %b) {
98 ; CHECK-LABEL: select_v16bf16:
100 ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
101 ; CHECK-NEXT: vmv.v.x v12, a0
102 ; CHECK-NEXT: vmsne.vi v0, v12, 0
103 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
104 ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
106 %v = select i1 %c, <16 x bfloat> %a, <16 x bfloat> %b
110 define <16 x bfloat> @selectcc_v16bf16(bfloat %a, bfloat %b, <16 x bfloat> %c, <16 x bfloat> %d) {
111 ; CHECK-LABEL: selectcc_v16bf16:
113 ; CHECK-NEXT: fcvt.s.bf16 fa5, fa1
114 ; CHECK-NEXT: fcvt.s.bf16 fa4, fa0
115 ; CHECK-NEXT: feq.s a0, fa4, fa5
116 ; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma
117 ; CHECK-NEXT: vmv.v.x v12, a0
118 ; CHECK-NEXT: vmsne.vi v0, v12, 0
119 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma
120 ; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0
122 %cmp = fcmp oeq bfloat %a, %b
123 %v = select i1 %cmp, <16 x bfloat> %c, <16 x bfloat> %d