1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
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
11 declare <2 x half> @llvm.maxnum.v2f16(<2 x half>, <2 x half>)
13 define <2 x half> @vfmax_v2f16_vv(<2 x half> %a, <2 x half> %b) {
14 ; ZVFH-LABEL: vfmax_v2f16_vv:
16 ; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
17 ; ZVFH-NEXT: vfmax.vv v8, v8, v9
20 ; ZVFHMIN-LABEL: vfmax_v2f16_vv:
22 ; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
23 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
24 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
25 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
26 ; ZVFHMIN-NEXT: vfmax.vv v9, v9, v10
27 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
28 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
30 %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %b)
34 define <2 x half> @vfmax_v2f16_vf(<2 x half> %a, half %b) {
35 ; ZVFH-LABEL: vfmax_v2f16_vf:
37 ; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
38 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
41 ; ZVFHMIN-LABEL: vfmax_v2f16_vf:
43 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
44 ; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
45 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
46 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
47 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
48 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
49 ; ZVFHMIN-NEXT: vfmax.vv v9, v10, v8
50 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
51 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
53 %head = insertelement <2 x half> poison, half %b, i32 0
54 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
55 %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %splat)
59 define <2 x half> @vfmax_v2f16_fv(<2 x half> %a, half %b) {
60 ; ZVFH-LABEL: vfmax_v2f16_fv:
62 ; ZVFH-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
63 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
66 ; ZVFHMIN-LABEL: vfmax_v2f16_fv:
68 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
69 ; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma
70 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
71 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
72 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
73 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma
74 ; ZVFHMIN-NEXT: vfmax.vv v9, v8, v10
75 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma
76 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
78 %head = insertelement <2 x half> poison, half %b, i32 0
79 %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
80 %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %splat, <2 x half> %a)
84 declare <4 x half> @llvm.maxnum.v4f16(<4 x half>, <4 x half>)
86 define <4 x half> @vfmax_v4f16_vv(<4 x half> %a, <4 x half> %b) {
87 ; ZVFH-LABEL: vfmax_v4f16_vv:
89 ; ZVFH-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
90 ; ZVFH-NEXT: vfmax.vv v8, v8, v9
93 ; ZVFHMIN-LABEL: vfmax_v4f16_vv:
95 ; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
96 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
97 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8
98 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
99 ; ZVFHMIN-NEXT: vfmax.vv v9, v9, v10
100 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
101 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
103 %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %b)
107 define <4 x half> @vfmax_v4f16_vf(<4 x half> %a, half %b) {
108 ; ZVFH-LABEL: vfmax_v4f16_vf:
110 ; ZVFH-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
111 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
114 ; ZVFHMIN-LABEL: vfmax_v4f16_vf:
116 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
117 ; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
118 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
119 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
120 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
121 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
122 ; ZVFHMIN-NEXT: vfmax.vv v9, v10, v8
123 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
124 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
126 %head = insertelement <4 x half> poison, half %b, i32 0
127 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
128 %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %splat)
132 define <4 x half> @vfmax_v4f16_fv(<4 x half> %a, half %b) {
133 ; ZVFH-LABEL: vfmax_v4f16_fv:
135 ; ZVFH-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
136 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
139 ; ZVFHMIN-LABEL: vfmax_v4f16_fv:
141 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
142 ; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma
143 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
144 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
145 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9
146 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma
147 ; ZVFHMIN-NEXT: vfmax.vv v9, v8, v10
148 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma
149 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9
151 %head = insertelement <4 x half> poison, half %b, i32 0
152 %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
153 %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %splat, <4 x half> %a)
157 declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)
159 define <8 x half> @vfmax_v8f16_vv(<8 x half> %a, <8 x half> %b) {
160 ; ZVFH-LABEL: vfmax_v8f16_vv:
162 ; ZVFH-NEXT: vsetivli zero, 8, e16, m1, ta, ma
163 ; ZVFH-NEXT: vfmax.vv v8, v8, v9
166 ; ZVFHMIN-LABEL: vfmax_v8f16_vv:
168 ; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma
169 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9
170 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
171 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
172 ; ZVFHMIN-NEXT: vfmax.vv v10, v12, v10
173 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
174 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
176 %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %b)
180 define <8 x half> @vfmax_v8f16_vf(<8 x half> %a, half %b) {
181 ; ZVFH-LABEL: vfmax_v8f16_vf:
183 ; ZVFH-NEXT: vsetivli zero, 8, e16, m1, ta, ma
184 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
187 ; ZVFHMIN-LABEL: vfmax_v8f16_vf:
189 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
190 ; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma
191 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
192 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
193 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9
194 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
195 ; ZVFHMIN-NEXT: vfmax.vv v10, v10, v12
196 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
197 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
199 %head = insertelement <8 x half> poison, half %b, i32 0
200 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
201 %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %splat)
205 define <8 x half> @vfmax_v8f16_fv(<8 x half> %a, half %b) {
206 ; ZVFH-LABEL: vfmax_v8f16_fv:
208 ; ZVFH-NEXT: vsetivli zero, 8, e16, m1, ta, ma
209 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
212 ; ZVFHMIN-LABEL: vfmax_v8f16_fv:
214 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
215 ; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma
216 ; ZVFHMIN-NEXT: vmv.v.x v9, a0
217 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8
218 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9
219 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma
220 ; ZVFHMIN-NEXT: vfmax.vv v10, v12, v10
221 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma
222 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10
224 %head = insertelement <8 x half> poison, half %b, i32 0
225 %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
226 %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %splat, <8 x half> %a)
230 declare <16 x half> @llvm.maxnum.v16f16(<16 x half>, <16 x half>)
232 define <16 x half> @vfmax_v16f16_vv(<16 x half> %a, <16 x half> %b) {
233 ; ZVFH-LABEL: vfmax_v16f16_vv:
235 ; ZVFH-NEXT: vsetivli zero, 16, e16, m2, ta, ma
236 ; ZVFH-NEXT: vfmax.vv v8, v8, v10
239 ; ZVFHMIN-LABEL: vfmax_v16f16_vv:
241 ; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma
242 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
243 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
244 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
245 ; ZVFHMIN-NEXT: vfmax.vv v12, v16, v12
246 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
247 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
249 %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %b)
253 define <16 x half> @vfmax_v16f16_vf(<16 x half> %a, half %b) {
254 ; ZVFH-LABEL: vfmax_v16f16_vf:
256 ; ZVFH-NEXT: vsetivli zero, 16, e16, m2, ta, ma
257 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
260 ; ZVFHMIN-LABEL: vfmax_v16f16_vf:
262 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
263 ; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma
264 ; ZVFHMIN-NEXT: vmv.v.x v10, a0
265 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
266 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
267 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
268 ; ZVFHMIN-NEXT: vfmax.vv v12, v12, v16
269 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
270 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
272 %head = insertelement <16 x half> poison, half %b, i32 0
273 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
274 %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %splat)
278 define <16 x half> @vfmax_v16f16_fv(<16 x half> %a, half %b) {
279 ; ZVFH-LABEL: vfmax_v16f16_fv:
281 ; ZVFH-NEXT: vsetivli zero, 16, e16, m2, ta, ma
282 ; ZVFH-NEXT: vfmax.vf v8, v8, fa0
285 ; ZVFHMIN-LABEL: vfmax_v16f16_fv:
287 ; ZVFHMIN-NEXT: fmv.x.h a0, fa0
288 ; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma
289 ; ZVFHMIN-NEXT: vmv.v.x v10, a0
290 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
291 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
292 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
293 ; ZVFHMIN-NEXT: vfmax.vv v12, v16, v12
294 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
295 ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12
297 %head = insertelement <16 x half> poison, half %b, i32 0
298 %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
299 %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %splat, <16 x half> %a)
303 declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>)
305 define <2 x float> @vfmax_v2f32_vv(<2 x float> %a, <2 x float> %b) {
306 ; CHECK-LABEL: vfmax_v2f32_vv:
308 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
309 ; CHECK-NEXT: vfmax.vv v8, v8, v9
311 %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %b)
315 define <2 x float> @vfmax_v2f32_vf(<2 x float> %a, float %b) {
316 ; CHECK-LABEL: vfmax_v2f32_vf:
318 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
319 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
321 %head = insertelement <2 x float> poison, float %b, i32 0
322 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
323 %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %splat)
327 define <2 x float> @vfmax_v2f32_fv(<2 x float> %a, float %b) {
328 ; CHECK-LABEL: vfmax_v2f32_fv:
330 ; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
331 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
333 %head = insertelement <2 x float> poison, float %b, i32 0
334 %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
335 %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %splat, <2 x float> %a)
339 declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)
341 define <4 x float> @vfmax_v4f32_vv(<4 x float> %a, <4 x float> %b) {
342 ; CHECK-LABEL: vfmax_v4f32_vv:
344 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
345 ; CHECK-NEXT: vfmax.vv v8, v8, v9
347 %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b)
351 define <4 x float> @vfmax_v4f32_vf(<4 x float> %a, float %b) {
352 ; CHECK-LABEL: vfmax_v4f32_vf:
354 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
355 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
357 %head = insertelement <4 x float> poison, float %b, i32 0
358 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
359 %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %splat)
363 define <4 x float> @vfmax_v4f32_fv(<4 x float> %a, float %b) {
364 ; CHECK-LABEL: vfmax_v4f32_fv:
366 ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
367 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
369 %head = insertelement <4 x float> poison, float %b, i32 0
370 %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
371 %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %splat, <4 x float> %a)
375 declare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>)
377 define <8 x float> @vfmax_v8f32_vv(<8 x float> %a, <8 x float> %b) {
378 ; CHECK-LABEL: vfmax_v8f32_vv:
380 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
381 ; CHECK-NEXT: vfmax.vv v8, v8, v10
383 %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %b)
387 define <8 x float> @vfmax_v8f32_vf(<8 x float> %a, float %b) {
388 ; CHECK-LABEL: vfmax_v8f32_vf:
390 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
391 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
393 %head = insertelement <8 x float> poison, float %b, i32 0
394 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
395 %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %splat)
399 define <8 x float> @vfmax_v8f32_fv(<8 x float> %a, float %b) {
400 ; CHECK-LABEL: vfmax_v8f32_fv:
402 ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
403 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
405 %head = insertelement <8 x float> poison, float %b, i32 0
406 %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
407 %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %splat, <8 x float> %a)
411 declare <16 x float> @llvm.maxnum.v16f32(<16 x float>, <16 x float>)
413 define <16 x float> @vfmax_v16f32_vv(<16 x float> %a, <16 x float> %b) {
414 ; CHECK-LABEL: vfmax_v16f32_vv:
416 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
417 ; CHECK-NEXT: vfmax.vv v8, v8, v12
419 %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %b)
423 define <16 x float> @vfmax_v16f32_vf(<16 x float> %a, float %b) {
424 ; CHECK-LABEL: vfmax_v16f32_vf:
426 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
427 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
429 %head = insertelement <16 x float> poison, float %b, i32 0
430 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
431 %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %splat)
435 define <16 x float> @vfmax_v16f32_fv(<16 x float> %a, float %b) {
436 ; CHECK-LABEL: vfmax_v16f32_fv:
438 ; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma
439 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
441 %head = insertelement <16 x float> poison, float %b, i32 0
442 %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
443 %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %splat, <16 x float> %a)
447 declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)
449 define <2 x double> @vfmax_v2f64_vv(<2 x double> %a, <2 x double> %b) {
450 ; CHECK-LABEL: vfmax_v2f64_vv:
452 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
453 ; CHECK-NEXT: vfmax.vv v8, v8, v9
455 %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %b)
459 define <2 x double> @vfmax_v2f64_vf(<2 x double> %a, double %b) {
460 ; CHECK-LABEL: vfmax_v2f64_vf:
462 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
463 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
465 %head = insertelement <2 x double> poison, double %b, i32 0
466 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
467 %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %splat)
471 define <2 x double> @vfmax_v2f64_fv(<2 x double> %a, double %b) {
472 ; CHECK-LABEL: vfmax_v2f64_fv:
474 ; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma
475 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
477 %head = insertelement <2 x double> poison, double %b, i32 0
478 %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
479 %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %splat, <2 x double> %a)
483 declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>)
485 define <4 x double> @vfmax_v4f64_vv(<4 x double> %a, <4 x double> %b) {
486 ; CHECK-LABEL: vfmax_v4f64_vv:
488 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
489 ; CHECK-NEXT: vfmax.vv v8, v8, v10
491 %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %b)
495 define <4 x double> @vfmax_v4f64_vf(<4 x double> %a, double %b) {
496 ; CHECK-LABEL: vfmax_v4f64_vf:
498 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
499 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
501 %head = insertelement <4 x double> poison, double %b, i32 0
502 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
503 %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %splat)
507 define <4 x double> @vfmax_v4f64_fv(<4 x double> %a, double %b) {
508 ; CHECK-LABEL: vfmax_v4f64_fv:
510 ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
511 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
513 %head = insertelement <4 x double> poison, double %b, i32 0
514 %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
515 %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %splat, <4 x double> %a)
519 declare <8 x double> @llvm.maxnum.v8f64(<8 x double>, <8 x double>)
521 define <8 x double> @vfmax_v8f64_vv(<8 x double> %a, <8 x double> %b) {
522 ; CHECK-LABEL: vfmax_v8f64_vv:
524 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
525 ; CHECK-NEXT: vfmax.vv v8, v8, v12
527 %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %b)
531 define <8 x double> @vfmax_v8f64_vf(<8 x double> %a, double %b) {
532 ; CHECK-LABEL: vfmax_v8f64_vf:
534 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
535 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
537 %head = insertelement <8 x double> poison, double %b, i32 0
538 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
539 %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %splat)
543 define <8 x double> @vfmax_v8f64_fv(<8 x double> %a, double %b) {
544 ; CHECK-LABEL: vfmax_v8f64_fv:
546 ; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma
547 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
549 %head = insertelement <8 x double> poison, double %b, i32 0
550 %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
551 %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %splat, <8 x double> %a)
555 declare <16 x double> @llvm.maxnum.v16f64(<16 x double>, <16 x double>)
557 define <16 x double> @vfmax_v16f64_vv(<16 x double> %a, <16 x double> %b) {
558 ; CHECK-LABEL: vfmax_v16f64_vv:
560 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
561 ; CHECK-NEXT: vfmax.vv v8, v8, v16
563 %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %b)
567 define <16 x double> @vfmax_v16f64_vf(<16 x double> %a, double %b) {
568 ; CHECK-LABEL: vfmax_v16f64_vf:
570 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
571 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
573 %head = insertelement <16 x double> poison, double %b, i32 0
574 %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
575 %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %splat)
579 define <16 x double> @vfmax_v16f64_fv(<16 x double> %a, double %b) {
580 ; CHECK-LABEL: vfmax_v16f64_fv:
582 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
583 ; CHECK-NEXT: vfmax.vf v8, v8, fa0
585 %head = insertelement <16 x double> poison, double %b, i32 0
586 %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
587 %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %splat, <16 x double> %a)