[TTI] getTypeBasedIntrinsicInstrCost - add basic handling for strided load/store...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfmax.ll
blob11420a23285d07ccab91ba164eae88f80fca6e79
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:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
17 ; ZVFH-NEXT:    vfmax.vv v8, v8, v9
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: vfmax_v2f16_vv:
21 ; ZVFHMIN:       # %bb.0:
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
29 ; ZVFHMIN-NEXT:    ret
30   %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %b)
31   ret <2 x half> %v
34 define <2 x half> @vfmax_v2f16_vf(<2 x half> %a, half %b) {
35 ; ZVFH-LABEL: vfmax_v2f16_vf:
36 ; ZVFH:       # %bb.0:
37 ; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
38 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
39 ; ZVFH-NEXT:    ret
41 ; ZVFHMIN-LABEL: vfmax_v2f16_vf:
42 ; ZVFHMIN:       # %bb.0:
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
52 ; ZVFHMIN-NEXT:    ret
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)
56   ret <2 x half> %v
59 define <2 x half> @vfmax_v2f16_fv(<2 x half> %a, half %b) {
60 ; ZVFH-LABEL: vfmax_v2f16_fv:
61 ; ZVFH:       # %bb.0:
62 ; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
63 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
64 ; ZVFH-NEXT:    ret
66 ; ZVFHMIN-LABEL: vfmax_v2f16_fv:
67 ; ZVFHMIN:       # %bb.0:
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
77 ; ZVFHMIN-NEXT:    ret
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)
81   ret <2 x half> %v
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:
88 ; ZVFH:       # %bb.0:
89 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
90 ; ZVFH-NEXT:    vfmax.vv v8, v8, v9
91 ; ZVFH-NEXT:    ret
93 ; ZVFHMIN-LABEL: vfmax_v4f16_vv:
94 ; ZVFHMIN:       # %bb.0:
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
102 ; ZVFHMIN-NEXT:    ret
103   %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %b)
104   ret <4 x half> %v
107 define <4 x half> @vfmax_v4f16_vf(<4 x half> %a, half %b) {
108 ; ZVFH-LABEL: vfmax_v4f16_vf:
109 ; ZVFH:       # %bb.0:
110 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
111 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
112 ; ZVFH-NEXT:    ret
114 ; ZVFHMIN-LABEL: vfmax_v4f16_vf:
115 ; ZVFHMIN:       # %bb.0:
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
125 ; ZVFHMIN-NEXT:    ret
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)
129   ret <4 x half> %v
132 define <4 x half> @vfmax_v4f16_fv(<4 x half> %a, half %b) {
133 ; ZVFH-LABEL: vfmax_v4f16_fv:
134 ; ZVFH:       # %bb.0:
135 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
136 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
137 ; ZVFH-NEXT:    ret
139 ; ZVFHMIN-LABEL: vfmax_v4f16_fv:
140 ; ZVFHMIN:       # %bb.0:
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
150 ; ZVFHMIN-NEXT:    ret
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)
154   ret <4 x half> %v
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:
161 ; ZVFH:       # %bb.0:
162 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
163 ; ZVFH-NEXT:    vfmax.vv v8, v8, v9
164 ; ZVFH-NEXT:    ret
166 ; ZVFHMIN-LABEL: vfmax_v8f16_vv:
167 ; ZVFHMIN:       # %bb.0:
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
175 ; ZVFHMIN-NEXT:    ret
176   %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %b)
177   ret <8 x half> %v
180 define <8 x half> @vfmax_v8f16_vf(<8 x half> %a, half %b) {
181 ; ZVFH-LABEL: vfmax_v8f16_vf:
182 ; ZVFH:       # %bb.0:
183 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
184 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
185 ; ZVFH-NEXT:    ret
187 ; ZVFHMIN-LABEL: vfmax_v8f16_vf:
188 ; ZVFHMIN:       # %bb.0:
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
198 ; ZVFHMIN-NEXT:    ret
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)
202   ret <8 x half> %v
205 define <8 x half> @vfmax_v8f16_fv(<8 x half> %a, half %b) {
206 ; ZVFH-LABEL: vfmax_v8f16_fv:
207 ; ZVFH:       # %bb.0:
208 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
209 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
210 ; ZVFH-NEXT:    ret
212 ; ZVFHMIN-LABEL: vfmax_v8f16_fv:
213 ; ZVFHMIN:       # %bb.0:
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
223 ; ZVFHMIN-NEXT:    ret
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)
227   ret <8 x half> %v
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:
234 ; ZVFH:       # %bb.0:
235 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
236 ; ZVFH-NEXT:    vfmax.vv v8, v8, v10
237 ; ZVFH-NEXT:    ret
239 ; ZVFHMIN-LABEL: vfmax_v16f16_vv:
240 ; ZVFHMIN:       # %bb.0:
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
248 ; ZVFHMIN-NEXT:    ret
249   %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %b)
250   ret <16 x half> %v
253 define <16 x half> @vfmax_v16f16_vf(<16 x half> %a, half %b) {
254 ; ZVFH-LABEL: vfmax_v16f16_vf:
255 ; ZVFH:       # %bb.0:
256 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
257 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
258 ; ZVFH-NEXT:    ret
260 ; ZVFHMIN-LABEL: vfmax_v16f16_vf:
261 ; ZVFHMIN:       # %bb.0:
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
271 ; ZVFHMIN-NEXT:    ret
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)
275   ret <16 x half> %v
278 define <16 x half> @vfmax_v16f16_fv(<16 x half> %a, half %b) {
279 ; ZVFH-LABEL: vfmax_v16f16_fv:
280 ; ZVFH:       # %bb.0:
281 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
282 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
283 ; ZVFH-NEXT:    ret
285 ; ZVFHMIN-LABEL: vfmax_v16f16_fv:
286 ; ZVFHMIN:       # %bb.0:
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
296 ; ZVFHMIN-NEXT:    ret
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)
300   ret <16 x half> %v
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:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
309 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
310 ; CHECK-NEXT:    ret
311   %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %b)
312   ret <2 x float> %v
315 define <2 x float> @vfmax_v2f32_vf(<2 x float> %a, float %b) {
316 ; CHECK-LABEL: vfmax_v2f32_vf:
317 ; CHECK:       # %bb.0:
318 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
319 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
320 ; CHECK-NEXT:    ret
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)
324   ret <2 x float> %v
327 define <2 x float> @vfmax_v2f32_fv(<2 x float> %a, float %b) {
328 ; CHECK-LABEL: vfmax_v2f32_fv:
329 ; CHECK:       # %bb.0:
330 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
331 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
332 ; CHECK-NEXT:    ret
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)
336   ret <2 x float> %v
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:
343 ; CHECK:       # %bb.0:
344 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
345 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
346 ; CHECK-NEXT:    ret
347   %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b)
348   ret <4 x float> %v
351 define <4 x float> @vfmax_v4f32_vf(<4 x float> %a, float %b) {
352 ; CHECK-LABEL: vfmax_v4f32_vf:
353 ; CHECK:       # %bb.0:
354 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
355 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
356 ; CHECK-NEXT:    ret
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)
360   ret <4 x float> %v
363 define <4 x float> @vfmax_v4f32_fv(<4 x float> %a, float %b) {
364 ; CHECK-LABEL: vfmax_v4f32_fv:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
367 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
368 ; CHECK-NEXT:    ret
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)
372   ret <4 x float> %v
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:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
381 ; CHECK-NEXT:    vfmax.vv v8, v8, v10
382 ; CHECK-NEXT:    ret
383   %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %b)
384   ret <8 x float> %v
387 define <8 x float> @vfmax_v8f32_vf(<8 x float> %a, float %b) {
388 ; CHECK-LABEL: vfmax_v8f32_vf:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
391 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
392 ; CHECK-NEXT:    ret
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)
396   ret <8 x float> %v
399 define <8 x float> @vfmax_v8f32_fv(<8 x float> %a, float %b) {
400 ; CHECK-LABEL: vfmax_v8f32_fv:
401 ; CHECK:       # %bb.0:
402 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
403 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
404 ; CHECK-NEXT:    ret
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)
408   ret <8 x float> %v
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:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
417 ; CHECK-NEXT:    vfmax.vv v8, v8, v12
418 ; CHECK-NEXT:    ret
419   %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %b)
420   ret <16 x float> %v
423 define <16 x float> @vfmax_v16f32_vf(<16 x float> %a, float %b) {
424 ; CHECK-LABEL: vfmax_v16f32_vf:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
427 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
428 ; CHECK-NEXT:    ret
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)
432   ret <16 x float> %v
435 define <16 x float> @vfmax_v16f32_fv(<16 x float> %a, float %b) {
436 ; CHECK-LABEL: vfmax_v16f32_fv:
437 ; CHECK:       # %bb.0:
438 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
439 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
440 ; CHECK-NEXT:    ret
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)
444   ret <16 x float> %v
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:
451 ; CHECK:       # %bb.0:
452 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
453 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
454 ; CHECK-NEXT:    ret
455   %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %b)
456   ret <2 x double> %v
459 define <2 x double> @vfmax_v2f64_vf(<2 x double> %a, double %b) {
460 ; CHECK-LABEL: vfmax_v2f64_vf:
461 ; CHECK:       # %bb.0:
462 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
463 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
464 ; CHECK-NEXT:    ret
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)
468   ret <2 x double> %v
471 define <2 x double> @vfmax_v2f64_fv(<2 x double> %a, double %b) {
472 ; CHECK-LABEL: vfmax_v2f64_fv:
473 ; CHECK:       # %bb.0:
474 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
475 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
476 ; CHECK-NEXT:    ret
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)
480   ret <2 x double> %v
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:
487 ; CHECK:       # %bb.0:
488 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
489 ; CHECK-NEXT:    vfmax.vv v8, v8, v10
490 ; CHECK-NEXT:    ret
491   %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %b)
492   ret <4 x double> %v
495 define <4 x double> @vfmax_v4f64_vf(<4 x double> %a, double %b) {
496 ; CHECK-LABEL: vfmax_v4f64_vf:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
499 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
500 ; CHECK-NEXT:    ret
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)
504   ret <4 x double> %v
507 define <4 x double> @vfmax_v4f64_fv(<4 x double> %a, double %b) {
508 ; CHECK-LABEL: vfmax_v4f64_fv:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
511 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
512 ; CHECK-NEXT:    ret
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)
516   ret <4 x double> %v
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:
523 ; CHECK:       # %bb.0:
524 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
525 ; CHECK-NEXT:    vfmax.vv v8, v8, v12
526 ; CHECK-NEXT:    ret
527   %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %b)
528   ret <8 x double> %v
531 define <8 x double> @vfmax_v8f64_vf(<8 x double> %a, double %b) {
532 ; CHECK-LABEL: vfmax_v8f64_vf:
533 ; CHECK:       # %bb.0:
534 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
535 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
536 ; CHECK-NEXT:    ret
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)
540   ret <8 x double> %v
543 define <8 x double> @vfmax_v8f64_fv(<8 x double> %a, double %b) {
544 ; CHECK-LABEL: vfmax_v8f64_fv:
545 ; CHECK:       # %bb.0:
546 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
547 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
548 ; CHECK-NEXT:    ret
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)
552   ret <8 x double> %v
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:
559 ; CHECK:       # %bb.0:
560 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
561 ; CHECK-NEXT:    vfmax.vv v8, v8, v16
562 ; CHECK-NEXT:    ret
563   %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %b)
564   ret <16 x double> %v
567 define <16 x double> @vfmax_v16f64_vf(<16 x double> %a, double %b) {
568 ; CHECK-LABEL: vfmax_v16f64_vf:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
571 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
572 ; CHECK-NEXT:    ret
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)
576   ret <16 x double> %v
579 define <16 x double> @vfmax_v16f64_fv(<16 x double> %a, double %b) {
580 ; CHECK-LABEL: vfmax_v16f64_fv:
581 ; CHECK:       # %bb.0:
582 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
583 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
584 ; CHECK-NEXT:    ret
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)
588   ret <16 x double> %v