Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vfmax.ll
bloba9d6b5f047ebb10ade2183ddb7652a314e8fd756
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:    fcvt.s.h fa5, fa0
44 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
45 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
46 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
47 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
48 ; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
49 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
50 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
51 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
52 ; ZVFHMIN-NEXT:    vfmax.vv v9, v9, v8
53 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
54 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
55 ; ZVFHMIN-NEXT:    ret
56   %head = insertelement <2 x half> poison, half %b, i32 0
57   %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
58   %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %splat)
59   ret <2 x half> %v
62 define <2 x half> @vfmax_v2f16_fv(<2 x half> %a, half %b) {
63 ; ZVFH-LABEL: vfmax_v2f16_fv:
64 ; ZVFH:       # %bb.0:
65 ; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
66 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
67 ; ZVFH-NEXT:    ret
69 ; ZVFHMIN-LABEL: vfmax_v2f16_fv:
70 ; ZVFHMIN:       # %bb.0:
71 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
72 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
73 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
74 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
75 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
76 ; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
77 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
78 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
79 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
80 ; ZVFHMIN-NEXT:    vfmax.vv v9, v8, v9
81 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
82 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
83 ; ZVFHMIN-NEXT:    ret
84   %head = insertelement <2 x half> poison, half %b, i32 0
85   %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer
86   %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %splat, <2 x half> %a)
87   ret <2 x half> %v
90 declare <4 x half> @llvm.maxnum.v4f16(<4 x half>, <4 x half>)
92 define <4 x half> @vfmax_v4f16_vv(<4 x half> %a, <4 x half> %b) {
93 ; ZVFH-LABEL: vfmax_v4f16_vv:
94 ; ZVFH:       # %bb.0:
95 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
96 ; ZVFH-NEXT:    vfmax.vv v8, v8, v9
97 ; ZVFH-NEXT:    ret
99 ; ZVFHMIN-LABEL: vfmax_v4f16_vv:
100 ; ZVFHMIN:       # %bb.0:
101 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
102 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
103 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
104 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
105 ; ZVFHMIN-NEXT:    vfmax.vv v9, v9, v10
106 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
107 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
108 ; ZVFHMIN-NEXT:    ret
109   %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %b)
110   ret <4 x half> %v
113 define <4 x half> @vfmax_v4f16_vf(<4 x half> %a, half %b) {
114 ; ZVFH-LABEL: vfmax_v4f16_vf:
115 ; ZVFH:       # %bb.0:
116 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
117 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
118 ; ZVFH-NEXT:    ret
120 ; ZVFHMIN-LABEL: vfmax_v4f16_vf:
121 ; ZVFHMIN:       # %bb.0:
122 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
123 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
124 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
125 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
126 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
127 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
128 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
129 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
130 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
131 ; ZVFHMIN-NEXT:    vfmax.vv v9, v9, v8
132 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
133 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
134 ; ZVFHMIN-NEXT:    ret
135   %head = insertelement <4 x half> poison, half %b, i32 0
136   %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
137   %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %splat)
138   ret <4 x half> %v
141 define <4 x half> @vfmax_v4f16_fv(<4 x half> %a, half %b) {
142 ; ZVFH-LABEL: vfmax_v4f16_fv:
143 ; ZVFH:       # %bb.0:
144 ; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
145 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
146 ; ZVFH-NEXT:    ret
148 ; ZVFHMIN-LABEL: vfmax_v4f16_fv:
149 ; ZVFHMIN:       # %bb.0:
150 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
151 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
152 ; ZVFHMIN-NEXT:    vfmv.v.f v9, fa5
153 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
154 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v9
155 ; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
156 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8
157 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v10
158 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
159 ; ZVFHMIN-NEXT:    vfmax.vv v9, v8, v9
160 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
161 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9
162 ; ZVFHMIN-NEXT:    ret
163   %head = insertelement <4 x half> poison, half %b, i32 0
164   %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer
165   %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %splat, <4 x half> %a)
166   ret <4 x half> %v
169 declare <8 x half> @llvm.maxnum.v8f16(<8 x half>, <8 x half>)
171 define <8 x half> @vfmax_v8f16_vv(<8 x half> %a, <8 x half> %b) {
172 ; ZVFH-LABEL: vfmax_v8f16_vv:
173 ; ZVFH:       # %bb.0:
174 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
175 ; ZVFH-NEXT:    vfmax.vv v8, v8, v9
176 ; ZVFH-NEXT:    ret
178 ; ZVFHMIN-LABEL: vfmax_v8f16_vv:
179 ; ZVFHMIN:       # %bb.0:
180 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
181 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
182 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
183 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
184 ; ZVFHMIN-NEXT:    vfmax.vv v10, v12, v10
185 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
186 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
187 ; ZVFHMIN-NEXT:    ret
188   %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %b)
189   ret <8 x half> %v
192 define <8 x half> @vfmax_v8f16_vf(<8 x half> %a, half %b) {
193 ; ZVFH-LABEL: vfmax_v8f16_vf:
194 ; ZVFH:       # %bb.0:
195 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
196 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
197 ; ZVFH-NEXT:    ret
199 ; ZVFHMIN-LABEL: vfmax_v8f16_vf:
200 ; ZVFHMIN:       # %bb.0:
201 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
202 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
203 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
204 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
205 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
206 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
207 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
208 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
209 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
210 ; ZVFHMIN-NEXT:    vfmax.vv v10, v10, v12
211 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
212 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
213 ; ZVFHMIN-NEXT:    ret
214   %head = insertelement <8 x half> poison, half %b, i32 0
215   %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
216   %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %splat)
217   ret <8 x half> %v
220 define <8 x half> @vfmax_v8f16_fv(<8 x half> %a, half %b) {
221 ; ZVFH-LABEL: vfmax_v8f16_fv:
222 ; ZVFH:       # %bb.0:
223 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
224 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
225 ; ZVFH-NEXT:    ret
227 ; ZVFHMIN-LABEL: vfmax_v8f16_fv:
228 ; ZVFHMIN:       # %bb.0:
229 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
230 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
231 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
232 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
233 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
234 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
235 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
236 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
237 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
238 ; ZVFHMIN-NEXT:    vfmax.vv v10, v12, v10
239 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
240 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10
241 ; ZVFHMIN-NEXT:    ret
242   %head = insertelement <8 x half> poison, half %b, i32 0
243   %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer
244   %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %splat, <8 x half> %a)
245   ret <8 x half> %v
248 declare <16 x half> @llvm.maxnum.v16f16(<16 x half>, <16 x half>)
250 define <16 x half> @vfmax_v16f16_vv(<16 x half> %a, <16 x half> %b) {
251 ; ZVFH-LABEL: vfmax_v16f16_vv:
252 ; ZVFH:       # %bb.0:
253 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
254 ; ZVFH-NEXT:    vfmax.vv v8, v8, v10
255 ; ZVFH-NEXT:    ret
257 ; ZVFHMIN-LABEL: vfmax_v16f16_vv:
258 ; ZVFHMIN:       # %bb.0:
259 ; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
260 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
261 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
262 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
263 ; ZVFHMIN-NEXT:    vfmax.vv v12, v16, v12
264 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
265 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
266 ; ZVFHMIN-NEXT:    ret
267   %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %b)
268   ret <16 x half> %v
271 define <16 x half> @vfmax_v16f16_vf(<16 x half> %a, half %b) {
272 ; ZVFH-LABEL: vfmax_v16f16_vf:
273 ; ZVFH:       # %bb.0:
274 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
275 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
276 ; ZVFH-NEXT:    ret
278 ; ZVFHMIN-LABEL: vfmax_v16f16_vf:
279 ; ZVFHMIN:       # %bb.0:
280 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
281 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
282 ; ZVFHMIN-NEXT:    vfmv.v.f v12, fa5
283 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
284 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v12
285 ; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
286 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
287 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
288 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
289 ; ZVFHMIN-NEXT:    vfmax.vv v12, v12, v16
290 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
291 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
292 ; ZVFHMIN-NEXT:    ret
293   %head = insertelement <16 x half> poison, half %b, i32 0
294   %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
295   %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %splat)
296   ret <16 x half> %v
299 define <16 x half> @vfmax_v16f16_fv(<16 x half> %a, half %b) {
300 ; ZVFH-LABEL: vfmax_v16f16_fv:
301 ; ZVFH:       # %bb.0:
302 ; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
303 ; ZVFH-NEXT:    vfmax.vf v8, v8, fa0
304 ; ZVFH-NEXT:    ret
306 ; ZVFHMIN-LABEL: vfmax_v16f16_fv:
307 ; ZVFHMIN:       # %bb.0:
308 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
309 ; ZVFHMIN-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
310 ; ZVFHMIN-NEXT:    vfmv.v.f v12, fa5
311 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
312 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v10, v12
313 ; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
314 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
315 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
316 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
317 ; ZVFHMIN-NEXT:    vfmax.vv v12, v16, v12
318 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
319 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12
320 ; ZVFHMIN-NEXT:    ret
321   %head = insertelement <16 x half> poison, half %b, i32 0
322   %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer
323   %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %splat, <16 x half> %a)
324   ret <16 x half> %v
327 declare <2 x float> @llvm.maxnum.v2f32(<2 x float>, <2 x float>)
329 define <2 x float> @vfmax_v2f32_vv(<2 x float> %a, <2 x float> %b) {
330 ; CHECK-LABEL: vfmax_v2f32_vv:
331 ; CHECK:       # %bb.0:
332 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
333 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
334 ; CHECK-NEXT:    ret
335   %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %b)
336   ret <2 x float> %v
339 define <2 x float> @vfmax_v2f32_vf(<2 x float> %a, float %b) {
340 ; CHECK-LABEL: vfmax_v2f32_vf:
341 ; CHECK:       # %bb.0:
342 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
343 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
344 ; CHECK-NEXT:    ret
345   %head = insertelement <2 x float> poison, float %b, i32 0
346   %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
347   %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %splat)
348   ret <2 x float> %v
351 define <2 x float> @vfmax_v2f32_fv(<2 x float> %a, float %b) {
352 ; CHECK-LABEL: vfmax_v2f32_fv:
353 ; CHECK:       # %bb.0:
354 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
355 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
356 ; CHECK-NEXT:    ret
357   %head = insertelement <2 x float> poison, float %b, i32 0
358   %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer
359   %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %splat, <2 x float> %a)
360   ret <2 x float> %v
363 declare <4 x float> @llvm.maxnum.v4f32(<4 x float>, <4 x float>)
365 define <4 x float> @vfmax_v4f32_vv(<4 x float> %a, <4 x float> %b) {
366 ; CHECK-LABEL: vfmax_v4f32_vv:
367 ; CHECK:       # %bb.0:
368 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
369 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
370 ; CHECK-NEXT:    ret
371   %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b)
372   ret <4 x float> %v
375 define <4 x float> @vfmax_v4f32_vf(<4 x float> %a, float %b) {
376 ; CHECK-LABEL: vfmax_v4f32_vf:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
379 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
380 ; CHECK-NEXT:    ret
381   %head = insertelement <4 x float> poison, float %b, i32 0
382   %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
383   %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %splat)
384   ret <4 x float> %v
387 define <4 x float> @vfmax_v4f32_fv(<4 x float> %a, float %b) {
388 ; CHECK-LABEL: vfmax_v4f32_fv:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
391 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
392 ; CHECK-NEXT:    ret
393   %head = insertelement <4 x float> poison, float %b, i32 0
394   %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer
395   %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %splat, <4 x float> %a)
396   ret <4 x float> %v
399 declare <8 x float> @llvm.maxnum.v8f32(<8 x float>, <8 x float>)
401 define <8 x float> @vfmax_v8f32_vv(<8 x float> %a, <8 x float> %b) {
402 ; CHECK-LABEL: vfmax_v8f32_vv:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
405 ; CHECK-NEXT:    vfmax.vv v8, v8, v10
406 ; CHECK-NEXT:    ret
407   %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %b)
408   ret <8 x float> %v
411 define <8 x float> @vfmax_v8f32_vf(<8 x float> %a, float %b) {
412 ; CHECK-LABEL: vfmax_v8f32_vf:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
415 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
416 ; CHECK-NEXT:    ret
417   %head = insertelement <8 x float> poison, float %b, i32 0
418   %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
419   %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %splat)
420   ret <8 x float> %v
423 define <8 x float> @vfmax_v8f32_fv(<8 x float> %a, float %b) {
424 ; CHECK-LABEL: vfmax_v8f32_fv:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
427 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
428 ; CHECK-NEXT:    ret
429   %head = insertelement <8 x float> poison, float %b, i32 0
430   %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer
431   %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %splat, <8 x float> %a)
432   ret <8 x float> %v
435 declare <16 x float> @llvm.maxnum.v16f32(<16 x float>, <16 x float>)
437 define <16 x float> @vfmax_v16f32_vv(<16 x float> %a, <16 x float> %b) {
438 ; CHECK-LABEL: vfmax_v16f32_vv:
439 ; CHECK:       # %bb.0:
440 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
441 ; CHECK-NEXT:    vfmax.vv v8, v8, v12
442 ; CHECK-NEXT:    ret
443   %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %b)
444   ret <16 x float> %v
447 define <16 x float> @vfmax_v16f32_vf(<16 x float> %a, float %b) {
448 ; CHECK-LABEL: vfmax_v16f32_vf:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
451 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
452 ; CHECK-NEXT:    ret
453   %head = insertelement <16 x float> poison, float %b, i32 0
454   %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
455   %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %splat)
456   ret <16 x float> %v
459 define <16 x float> @vfmax_v16f32_fv(<16 x float> %a, float %b) {
460 ; CHECK-LABEL: vfmax_v16f32_fv:
461 ; CHECK:       # %bb.0:
462 ; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
463 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
464 ; CHECK-NEXT:    ret
465   %head = insertelement <16 x float> poison, float %b, i32 0
466   %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer
467   %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %splat, <16 x float> %a)
468   ret <16 x float> %v
471 declare <2 x double> @llvm.maxnum.v2f64(<2 x double>, <2 x double>)
473 define <2 x double> @vfmax_v2f64_vv(<2 x double> %a, <2 x double> %b) {
474 ; CHECK-LABEL: vfmax_v2f64_vv:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
477 ; CHECK-NEXT:    vfmax.vv v8, v8, v9
478 ; CHECK-NEXT:    ret
479   %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %b)
480   ret <2 x double> %v
483 define <2 x double> @vfmax_v2f64_vf(<2 x double> %a, double %b) {
484 ; CHECK-LABEL: vfmax_v2f64_vf:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
487 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
488 ; CHECK-NEXT:    ret
489   %head = insertelement <2 x double> poison, double %b, i32 0
490   %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
491   %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %splat)
492   ret <2 x double> %v
495 define <2 x double> @vfmax_v2f64_fv(<2 x double> %a, double %b) {
496 ; CHECK-LABEL: vfmax_v2f64_fv:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
499 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
500 ; CHECK-NEXT:    ret
501   %head = insertelement <2 x double> poison, double %b, i32 0
502   %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer
503   %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %splat, <2 x double> %a)
504   ret <2 x double> %v
507 declare <4 x double> @llvm.maxnum.v4f64(<4 x double>, <4 x double>)
509 define <4 x double> @vfmax_v4f64_vv(<4 x double> %a, <4 x double> %b) {
510 ; CHECK-LABEL: vfmax_v4f64_vv:
511 ; CHECK:       # %bb.0:
512 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
513 ; CHECK-NEXT:    vfmax.vv v8, v8, v10
514 ; CHECK-NEXT:    ret
515   %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %b)
516   ret <4 x double> %v
519 define <4 x double> @vfmax_v4f64_vf(<4 x double> %a, double %b) {
520 ; CHECK-LABEL: vfmax_v4f64_vf:
521 ; CHECK:       # %bb.0:
522 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
523 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
524 ; CHECK-NEXT:    ret
525   %head = insertelement <4 x double> poison, double %b, i32 0
526   %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
527   %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %splat)
528   ret <4 x double> %v
531 define <4 x double> @vfmax_v4f64_fv(<4 x double> %a, double %b) {
532 ; CHECK-LABEL: vfmax_v4f64_fv:
533 ; CHECK:       # %bb.0:
534 ; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
535 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
536 ; CHECK-NEXT:    ret
537   %head = insertelement <4 x double> poison, double %b, i32 0
538   %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer
539   %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %splat, <4 x double> %a)
540   ret <4 x double> %v
543 declare <8 x double> @llvm.maxnum.v8f64(<8 x double>, <8 x double>)
545 define <8 x double> @vfmax_v8f64_vv(<8 x double> %a, <8 x double> %b) {
546 ; CHECK-LABEL: vfmax_v8f64_vv:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
549 ; CHECK-NEXT:    vfmax.vv v8, v8, v12
550 ; CHECK-NEXT:    ret
551   %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %b)
552   ret <8 x double> %v
555 define <8 x double> @vfmax_v8f64_vf(<8 x double> %a, double %b) {
556 ; CHECK-LABEL: vfmax_v8f64_vf:
557 ; CHECK:       # %bb.0:
558 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
559 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
560 ; CHECK-NEXT:    ret
561   %head = insertelement <8 x double> poison, double %b, i32 0
562   %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
563   %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %splat)
564   ret <8 x double> %v
567 define <8 x double> @vfmax_v8f64_fv(<8 x double> %a, double %b) {
568 ; CHECK-LABEL: vfmax_v8f64_fv:
569 ; CHECK:       # %bb.0:
570 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
571 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
572 ; CHECK-NEXT:    ret
573   %head = insertelement <8 x double> poison, double %b, i32 0
574   %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer
575   %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %splat, <8 x double> %a)
576   ret <8 x double> %v
579 declare <16 x double> @llvm.maxnum.v16f64(<16 x double>, <16 x double>)
581 define <16 x double> @vfmax_v16f64_vv(<16 x double> %a, <16 x double> %b) {
582 ; CHECK-LABEL: vfmax_v16f64_vv:
583 ; CHECK:       # %bb.0:
584 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
585 ; CHECK-NEXT:    vfmax.vv v8, v8, v16
586 ; CHECK-NEXT:    ret
587   %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %b)
588   ret <16 x double> %v
591 define <16 x double> @vfmax_v16f64_vf(<16 x double> %a, double %b) {
592 ; CHECK-LABEL: vfmax_v16f64_vf:
593 ; CHECK:       # %bb.0:
594 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
595 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
596 ; CHECK-NEXT:    ret
597   %head = insertelement <16 x double> poison, double %b, i32 0
598   %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
599   %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %splat)
600   ret <16 x double> %v
603 define <16 x double> @vfmax_v16f64_fv(<16 x double> %a, double %b) {
604 ; CHECK-LABEL: vfmax_v16f64_fv:
605 ; CHECK:       # %bb.0:
606 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
607 ; CHECK-NEXT:    vfmax.vf v8, v8, fa0
608 ; CHECK-NEXT:    ret
609   %head = insertelement <16 x double> poison, double %b, i32 0
610   %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer
611   %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %splat, <16 x double> %a)
612   ret <16 x double> %v