|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
|
3 |
| -; RUN: -verify-machineinstrs < %s | FileCheck %s |
| 3 | +; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH |
4 | 4 | ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
|
5 |
| -; RUN: -verify-machineinstrs < %s | FileCheck %s |
| 5 | +; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH |
| 6 | +; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \ |
| 7 | +; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN |
| 8 | +; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \ |
| 9 | +; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN |
6 | 10 |
|
7 | 11 | declare <2 x half> @llvm.maximum.v2f16(<2 x half>, <2 x half>)
|
8 | 12 |
|
9 | 13 | define <2 x half> @vfmax_v2f16_vv(<2 x half> %a, <2 x half> %b) {
|
10 |
| -; CHECK-LABEL: vfmax_v2f16_vv: |
11 |
| -; CHECK: # %bb.0: |
12 |
| -; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
13 |
| -; CHECK-NEXT: vmfeq.vv v0, v8, v8 |
14 |
| -; CHECK-NEXT: vmfeq.vv v10, v9, v9 |
15 |
| -; CHECK-NEXT: vmerge.vvm v11, v8, v9, v0 |
16 |
| -; CHECK-NEXT: vmv1r.v v0, v10 |
17 |
| -; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
18 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v11 |
19 |
| -; CHECK-NEXT: ret |
| 14 | +; ZVFH-LABEL: vfmax_v2f16_vv: |
| 15 | +; ZVFH: # %bb.0: |
| 16 | +; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 17 | +; ZVFH-NEXT: vmfeq.vv v0, v8, v8 |
| 18 | +; ZVFH-NEXT: vmfeq.vv v10, v9, v9 |
| 19 | +; ZVFH-NEXT: vmerge.vvm v11, v8, v9, v0 |
| 20 | +; ZVFH-NEXT: vmv1r.v v0, v10 |
| 21 | +; ZVFH-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 22 | +; ZVFH-NEXT: vfmax.vv v8, v8, v11 |
| 23 | +; ZVFH-NEXT: ret |
| 24 | +; |
| 25 | +; ZVFHMIN-LABEL: vfmax_v2f16_vv: |
| 26 | +; ZVFHMIN: # %bb.0: |
| 27 | +; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 28 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 |
| 29 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 |
| 30 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 31 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v9, v9 |
| 32 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10 |
| 33 | +; ZVFHMIN-NEXT: vmerge.vvm v11, v9, v10, v0 |
| 34 | +; ZVFHMIN-NEXT: vmv1r.v v0, v8 |
| 35 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v10, v9, v0 |
| 36 | +; ZVFHMIN-NEXT: vfmax.vv v9, v8, v11 |
| 37 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 38 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 |
| 39 | +; ZVFHMIN-NEXT: ret |
20 | 40 | %v = call <2 x half> @llvm.maximum.v2f16(<2 x half> %a, <2 x half> %b)
|
21 | 41 | ret <2 x half> %v
|
22 | 42 | }
|
23 | 43 |
|
24 | 44 | declare <4 x half> @llvm.maximum.v4f16(<4 x half>, <4 x half>)
|
25 | 45 |
|
26 | 46 | define <4 x half> @vfmax_v4f16_vv(<4 x half> %a, <4 x half> %b) {
|
27 |
| -; CHECK-LABEL: vfmax_v4f16_vv: |
28 |
| -; CHECK: # %bb.0: |
29 |
| -; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma |
30 |
| -; CHECK-NEXT: vmfeq.vv v0, v8, v8 |
31 |
| -; CHECK-NEXT: vmfeq.vv v10, v9, v9 |
32 |
| -; CHECK-NEXT: vmerge.vvm v11, v8, v9, v0 |
33 |
| -; CHECK-NEXT: vmv1r.v v0, v10 |
34 |
| -; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
35 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v11 |
36 |
| -; CHECK-NEXT: ret |
| 47 | +; ZVFH-LABEL: vfmax_v4f16_vv: |
| 48 | +; ZVFH: # %bb.0: |
| 49 | +; ZVFH-NEXT: vsetivli zero, 4, e16, mf2, ta, ma |
| 50 | +; ZVFH-NEXT: vmfeq.vv v0, v8, v8 |
| 51 | +; ZVFH-NEXT: vmfeq.vv v10, v9, v9 |
| 52 | +; ZVFH-NEXT: vmerge.vvm v11, v8, v9, v0 |
| 53 | +; ZVFH-NEXT: vmv1r.v v0, v10 |
| 54 | +; ZVFH-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 55 | +; ZVFH-NEXT: vfmax.vv v8, v8, v11 |
| 56 | +; ZVFH-NEXT: ret |
| 57 | +; |
| 58 | +; ZVFHMIN-LABEL: vfmax_v4f16_vv: |
| 59 | +; ZVFHMIN: # %bb.0: |
| 60 | +; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma |
| 61 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 |
| 62 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 |
| 63 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma |
| 64 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v9, v9 |
| 65 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10 |
| 66 | +; ZVFHMIN-NEXT: vmerge.vvm v11, v9, v10, v0 |
| 67 | +; ZVFHMIN-NEXT: vmv.v.v v0, v8 |
| 68 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v10, v9, v0 |
| 69 | +; ZVFHMIN-NEXT: vfmax.vv v9, v8, v11 |
| 70 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma |
| 71 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 |
| 72 | +; ZVFHMIN-NEXT: ret |
37 | 73 | %v = call <4 x half> @llvm.maximum.v4f16(<4 x half> %a, <4 x half> %b)
|
38 | 74 | ret <4 x half> %v
|
39 | 75 | }
|
40 | 76 |
|
41 | 77 | declare <8 x half> @llvm.maximum.v8f16(<8 x half>, <8 x half>)
|
42 | 78 |
|
43 | 79 | define <8 x half> @vfmax_v8f16_vv(<8 x half> %a, <8 x half> %b) {
|
44 |
| -; CHECK-LABEL: vfmax_v8f16_vv: |
45 |
| -; CHECK: # %bb.0: |
46 |
| -; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
47 |
| -; CHECK-NEXT: vmfeq.vv v0, v8, v8 |
48 |
| -; CHECK-NEXT: vmfeq.vv v10, v9, v9 |
49 |
| -; CHECK-NEXT: vmerge.vvm v11, v8, v9, v0 |
50 |
| -; CHECK-NEXT: vmv.v.v v0, v10 |
51 |
| -; CHECK-NEXT: vmerge.vvm v8, v9, v8, v0 |
52 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v11 |
53 |
| -; CHECK-NEXT: ret |
| 80 | +; ZVFH-LABEL: vfmax_v8f16_vv: |
| 81 | +; ZVFH: # %bb.0: |
| 82 | +; ZVFH-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
| 83 | +; ZVFH-NEXT: vmfeq.vv v0, v8, v8 |
| 84 | +; ZVFH-NEXT: vmfeq.vv v10, v9, v9 |
| 85 | +; ZVFH-NEXT: vmerge.vvm v11, v8, v9, v0 |
| 86 | +; ZVFH-NEXT: vmv.v.v v0, v10 |
| 87 | +; ZVFH-NEXT: vmerge.vvm v8, v9, v8, v0 |
| 88 | +; ZVFH-NEXT: vfmax.vv v8, v8, v11 |
| 89 | +; ZVFH-NEXT: ret |
| 90 | +; |
| 91 | +; ZVFHMIN-LABEL: vfmax_v8f16_vv: |
| 92 | +; ZVFHMIN: # %bb.0: |
| 93 | +; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma |
| 94 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 |
| 95 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 |
| 96 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma |
| 97 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v12, v12 |
| 98 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v10, v10 |
| 99 | +; ZVFHMIN-NEXT: vmerge.vvm v14, v12, v10, v0 |
| 100 | +; ZVFHMIN-NEXT: vmv1r.v v0, v8 |
| 101 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v10, v12, v0 |
| 102 | +; ZVFHMIN-NEXT: vfmax.vv v10, v8, v14 |
| 103 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma |
| 104 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 |
| 105 | +; ZVFHMIN-NEXT: ret |
54 | 106 | %v = call <8 x half> @llvm.maximum.v8f16(<8 x half> %a, <8 x half> %b)
|
55 | 107 | ret <8 x half> %v
|
56 | 108 | }
|
57 | 109 |
|
58 | 110 | declare <16 x half> @llvm.maximum.v16f16(<16 x half>, <16 x half>)
|
59 | 111 |
|
60 | 112 | define <16 x half> @vfmax_v16f16_vv(<16 x half> %a, <16 x half> %b) {
|
61 |
| -; CHECK-LABEL: vfmax_v16f16_vv: |
62 |
| -; CHECK: # %bb.0: |
63 |
| -; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma |
64 |
| -; CHECK-NEXT: vmfeq.vv v0, v8, v8 |
65 |
| -; CHECK-NEXT: vmfeq.vv v12, v10, v10 |
66 |
| -; CHECK-NEXT: vmerge.vvm v14, v8, v10, v0 |
67 |
| -; CHECK-NEXT: vmv1r.v v0, v12 |
68 |
| -; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 |
69 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v14 |
70 |
| -; CHECK-NEXT: ret |
| 113 | +; ZVFH-LABEL: vfmax_v16f16_vv: |
| 114 | +; ZVFH: # %bb.0: |
| 115 | +; ZVFH-NEXT: vsetivli zero, 16, e16, m2, ta, ma |
| 116 | +; ZVFH-NEXT: vmfeq.vv v0, v8, v8 |
| 117 | +; ZVFH-NEXT: vmfeq.vv v12, v10, v10 |
| 118 | +; ZVFH-NEXT: vmerge.vvm v14, v8, v10, v0 |
| 119 | +; ZVFH-NEXT: vmv1r.v v0, v12 |
| 120 | +; ZVFH-NEXT: vmerge.vvm v8, v10, v8, v0 |
| 121 | +; ZVFH-NEXT: vfmax.vv v8, v8, v14 |
| 122 | +; ZVFH-NEXT: ret |
| 123 | +; |
| 124 | +; ZVFHMIN-LABEL: vfmax_v16f16_vv: |
| 125 | +; ZVFHMIN: # %bb.0: |
| 126 | +; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma |
| 127 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 |
| 128 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 |
| 129 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma |
| 130 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v16, v16 |
| 131 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12 |
| 132 | +; ZVFHMIN-NEXT: vmerge.vvm v20, v16, v12, v0 |
| 133 | +; ZVFHMIN-NEXT: vmv1r.v v0, v8 |
| 134 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v12, v16, v0 |
| 135 | +; ZVFHMIN-NEXT: vfmax.vv v12, v8, v20 |
| 136 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 137 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 |
| 138 | +; ZVFHMIN-NEXT: ret |
71 | 139 | %v = call <16 x half> @llvm.maximum.v16f16(<16 x half> %a, <16 x half> %b)
|
72 | 140 | ret <16 x half> %v
|
73 | 141 | }
|
@@ -220,46 +288,103 @@ define <16 x double> @vfmax_v16f64_vv(<16 x double> %a, <16 x double> %b) nounwi
|
220 | 288 | }
|
221 | 289 |
|
222 | 290 | define <2 x half> @vfmax_v2f16_vv_nnan(<2 x half> %a, <2 x half> %b) {
|
223 |
| -; CHECK-LABEL: vfmax_v2f16_vv_nnan: |
224 |
| -; CHECK: # %bb.0: |
225 |
| -; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
226 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v9 |
227 |
| -; CHECK-NEXT: ret |
| 291 | +; ZVFH-LABEL: vfmax_v2f16_vv_nnan: |
| 292 | +; ZVFH: # %bb.0: |
| 293 | +; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 294 | +; ZVFH-NEXT: vfmax.vv v8, v8, v9 |
| 295 | +; ZVFH-NEXT: ret |
| 296 | +; |
| 297 | +; ZVFHMIN-LABEL: vfmax_v2f16_vv_nnan: |
| 298 | +; ZVFHMIN: # %bb.0: |
| 299 | +; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 300 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 |
| 301 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 |
| 302 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 303 | +; ZVFHMIN-NEXT: vfmax.vv v9, v9, v10 |
| 304 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 305 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 |
| 306 | +; ZVFHMIN-NEXT: ret |
228 | 307 | %v = call nnan <2 x half> @llvm.maximum.v2f16(<2 x half> %a, <2 x half> %b)
|
229 | 308 | ret <2 x half> %v
|
230 | 309 | }
|
231 | 310 |
|
232 | 311 | ; FIXME: The nnan from fadd isn't propagating.
|
233 | 312 | define <2 x half> @vfmax_v2f16_vv_nnana(<2 x half> %a, <2 x half> %b) {
|
234 |
| -; CHECK-LABEL: vfmax_v2f16_vv_nnana: |
235 |
| -; CHECK: # %bb.0: |
236 |
| -; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
237 |
| -; CHECK-NEXT: vfadd.vv v10, v8, v8 |
238 |
| -; CHECK-NEXT: vmfeq.vv v0, v9, v9 |
239 |
| -; CHECK-NEXT: vmfeq.vv v8, v10, v10 |
240 |
| -; CHECK-NEXT: vmerge.vvm v11, v9, v10, v0 |
241 |
| -; CHECK-NEXT: vmv1r.v v0, v8 |
242 |
| -; CHECK-NEXT: vmerge.vvm v8, v10, v9, v0 |
243 |
| -; CHECK-NEXT: vfmax.vv v8, v11, v8 |
244 |
| -; CHECK-NEXT: ret |
| 313 | +; ZVFH-LABEL: vfmax_v2f16_vv_nnana: |
| 314 | +; ZVFH: # %bb.0: |
| 315 | +; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 316 | +; ZVFH-NEXT: vfadd.vv v10, v8, v8 |
| 317 | +; ZVFH-NEXT: vmfeq.vv v0, v9, v9 |
| 318 | +; ZVFH-NEXT: vmfeq.vv v8, v10, v10 |
| 319 | +; ZVFH-NEXT: vmerge.vvm v11, v9, v10, v0 |
| 320 | +; ZVFH-NEXT: vmv1r.v v0, v8 |
| 321 | +; ZVFH-NEXT: vmerge.vvm v8, v10, v9, v0 |
| 322 | +; ZVFH-NEXT: vfmax.vv v8, v11, v8 |
| 323 | +; ZVFH-NEXT: ret |
| 324 | +; |
| 325 | +; ZVFHMIN-LABEL: vfmax_v2f16_vv_nnana: |
| 326 | +; ZVFHMIN: # %bb.0: |
| 327 | +; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 328 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 |
| 329 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 330 | +; ZVFHMIN-NEXT: vfadd.vv v8, v10, v10 |
| 331 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 332 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v8 |
| 333 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v9 |
| 334 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 335 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v11, v11 |
| 336 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 337 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v10 |
| 338 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 339 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v9, v9 |
| 340 | +; ZVFHMIN-NEXT: vmerge.vvm v10, v11, v9, v0 |
| 341 | +; ZVFHMIN-NEXT: vmv1r.v v0, v8 |
| 342 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v9, v11, v0 |
| 343 | +; ZVFHMIN-NEXT: vfmax.vv v9, v10, v8 |
| 344 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 345 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 |
| 346 | +; ZVFHMIN-NEXT: ret |
245 | 347 | %c = fadd nnan <2 x half> %a, %a
|
246 | 348 | %v = call <2 x half> @llvm.maximum.v2f16(<2 x half> %c, <2 x half> %b)
|
247 | 349 | ret <2 x half> %v
|
248 | 350 | }
|
249 | 351 |
|
250 | 352 | ; FIXME: The nnan from fadd isn't propagating.
|
251 | 353 | define <2 x half> @vfmax_v2f16_vv_nnanb(<2 x half> %a, <2 x half> %b) {
|
252 |
| -; CHECK-LABEL: vfmax_v2f16_vv_nnanb: |
253 |
| -; CHECK: # %bb.0: |
254 |
| -; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
255 |
| -; CHECK-NEXT: vfadd.vv v10, v9, v9 |
256 |
| -; CHECK-NEXT: vmfeq.vv v0, v8, v8 |
257 |
| -; CHECK-NEXT: vmfeq.vv v9, v10, v10 |
258 |
| -; CHECK-NEXT: vmerge.vvm v11, v8, v10, v0 |
259 |
| -; CHECK-NEXT: vmv1r.v v0, v9 |
260 |
| -; CHECK-NEXT: vmerge.vvm v8, v10, v8, v0 |
261 |
| -; CHECK-NEXT: vfmax.vv v8, v8, v11 |
262 |
| -; CHECK-NEXT: ret |
| 354 | +; ZVFH-LABEL: vfmax_v2f16_vv_nnanb: |
| 355 | +; ZVFH: # %bb.0: |
| 356 | +; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 357 | +; ZVFH-NEXT: vfadd.vv v10, v9, v9 |
| 358 | +; ZVFH-NEXT: vmfeq.vv v0, v8, v8 |
| 359 | +; ZVFH-NEXT: vmfeq.vv v9, v10, v10 |
| 360 | +; ZVFH-NEXT: vmerge.vvm v11, v8, v10, v0 |
| 361 | +; ZVFH-NEXT: vmv1r.v v0, v9 |
| 362 | +; ZVFH-NEXT: vmerge.vvm v8, v10, v8, v0 |
| 363 | +; ZVFH-NEXT: vfmax.vv v8, v8, v11 |
| 364 | +; ZVFH-NEXT: ret |
| 365 | +; |
| 366 | +; ZVFHMIN-LABEL: vfmax_v2f16_vv_nnanb: |
| 367 | +; ZVFHMIN: # %bb.0: |
| 368 | +; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma |
| 369 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 |
| 370 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 371 | +; ZVFHMIN-NEXT: vfadd.vv v9, v10, v10 |
| 372 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 373 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v9 |
| 374 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 |
| 375 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 376 | +; ZVFHMIN-NEXT: vmfeq.vv v0, v9, v9 |
| 377 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 378 | +; ZVFHMIN-NEXT: vfwcvt.f.f.v v11, v10 |
| 379 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma |
| 380 | +; ZVFHMIN-NEXT: vmfeq.vv v8, v11, v11 |
| 381 | +; ZVFHMIN-NEXT: vmerge.vvm v10, v9, v11, v0 |
| 382 | +; ZVFHMIN-NEXT: vmv1r.v v0, v8 |
| 383 | +; ZVFHMIN-NEXT: vmerge.vvm v8, v11, v9, v0 |
| 384 | +; ZVFHMIN-NEXT: vfmax.vv v9, v8, v10 |
| 385 | +; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma |
| 386 | +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 |
| 387 | +; ZVFHMIN-NEXT: ret |
263 | 388 | %c = fadd nnan <2 x half> %b, %b
|
264 | 389 | %v = call <2 x half> @llvm.maximum.v2f16(<2 x half> %a, <2 x half> %c)
|
265 | 390 | ret <2 x half> %v
|
|
0 commit comments