xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vfmin.ll (revision ff0f2011e475141454028bce9cf7c6ff37a49620)
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
10
11declare <2 x half> @llvm.minnum.v2f16(<2 x half>, <2 x half>)
12
13define <2 x half> @vfmin_v2f16_vv(<2 x half> %a, <2 x half> %b) {
14; ZVFH-LABEL: vfmin_v2f16_vv:
15; ZVFH:       # %bb.0:
16; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
17; ZVFH-NEXT:    vfmin.vv v8, v8, v9
18; ZVFH-NEXT:    ret
19;
20; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v2f16(<2 x half> %a, <2 x half> %b)
31  ret <2 x half> %v
32}
33
34define <2 x half> @vfmin_v2f16_vf(<2 x half> %a, half %b) {
35; ZVFH-LABEL: vfmin_v2f16_vf:
36; ZVFH:       # %bb.0:
37; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
38; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
39; ZVFH-NEXT:    ret
40;
41; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v2f16(<2 x half> %a, <2 x half> %splat)
56  ret <2 x half> %v
57}
58
59define <2 x half> @vfmin_v2f16_fv(<2 x half> %a, half %b) {
60; ZVFH-LABEL: vfmin_v2f16_fv:
61; ZVFH:       # %bb.0:
62; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
63; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
64; ZVFH-NEXT:    ret
65;
66; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v2f16(<2 x half> %splat, <2 x half> %a)
81  ret <2 x half> %v
82}
83
84declare <4 x half> @llvm.minnum.v4f16(<4 x half>, <4 x half>)
85
86define <4 x half> @vfmin_v4f16_vv(<4 x half> %a, <4 x half> %b) {
87; ZVFH-LABEL: vfmin_v4f16_vv:
88; ZVFH:       # %bb.0:
89; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
90; ZVFH-NEXT:    vfmin.vv v8, v8, v9
91; ZVFH-NEXT:    ret
92;
93; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v4f16(<4 x half> %a, <4 x half> %b)
104  ret <4 x half> %v
105}
106
107define <4 x half> @vfmin_v4f16_vf(<4 x half> %a, half %b) {
108; ZVFH-LABEL: vfmin_v4f16_vf:
109; ZVFH:       # %bb.0:
110; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
111; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
112; ZVFH-NEXT:    ret
113;
114; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v4f16(<4 x half> %a, <4 x half> %splat)
129  ret <4 x half> %v
130}
131
132define <4 x half> @vfmin_v4f16_fv(<4 x half> %a, half %b) {
133; ZVFH-LABEL: vfmin_v4f16_fv:
134; ZVFH:       # %bb.0:
135; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
136; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
137; ZVFH-NEXT:    ret
138;
139; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v4f16(<4 x half> %splat, <4 x half> %a)
154  ret <4 x half> %v
155}
156
157declare <8 x half> @llvm.minnum.v8f16(<8 x half>, <8 x half>)
158
159define <8 x half> @vfmin_v8f16_vv(<8 x half> %a, <8 x half> %b) {
160; ZVFH-LABEL: vfmin_v8f16_vv:
161; ZVFH:       # %bb.0:
162; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
163; ZVFH-NEXT:    vfmin.vv v8, v8, v9
164; ZVFH-NEXT:    ret
165;
166; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v8f16(<8 x half> %a, <8 x half> %b)
177  ret <8 x half> %v
178}
179
180define <8 x half> @vfmin_v8f16_vf(<8 x half> %a, half %b) {
181; ZVFH-LABEL: vfmin_v8f16_vf:
182; ZVFH:       # %bb.0:
183; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
184; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
185; ZVFH-NEXT:    ret
186;
187; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v8f16(<8 x half> %a, <8 x half> %splat)
202  ret <8 x half> %v
203}
204
205define <8 x half> @vfmin_v8f16_fv(<8 x half> %a, half %b) {
206; ZVFH-LABEL: vfmin_v8f16_fv:
207; ZVFH:       # %bb.0:
208; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
209; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
210; ZVFH-NEXT:    ret
211;
212; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v8f16(<8 x half> %splat, <8 x half> %a)
227  ret <8 x half> %v
228}
229
230declare <16 x half> @llvm.minnum.v16f16(<16 x half>, <16 x half>)
231
232define <16 x half> @vfmin_v16f16_vv(<16 x half> %a, <16 x half> %b) {
233; ZVFH-LABEL: vfmin_v16f16_vv:
234; ZVFH:       # %bb.0:
235; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
236; ZVFH-NEXT:    vfmin.vv v8, v8, v10
237; ZVFH-NEXT:    ret
238;
239; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v16f16(<16 x half> %a, <16 x half> %b)
250  ret <16 x half> %v
251}
252
253define <16 x half> @vfmin_v16f16_vf(<16 x half> %a, half %b) {
254; ZVFH-LABEL: vfmin_v16f16_vf:
255; ZVFH:       # %bb.0:
256; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
257; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
258; ZVFH-NEXT:    ret
259;
260; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v16f16(<16 x half> %a, <16 x half> %splat)
275  ret <16 x half> %v
276}
277
278define <16 x half> @vfmin_v16f16_fv(<16 x half> %a, half %b) {
279; ZVFH-LABEL: vfmin_v16f16_fv:
280; ZVFH:       # %bb.0:
281; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
282; ZVFH-NEXT:    vfmin.vf v8, v8, fa0
283; ZVFH-NEXT:    ret
284;
285; ZVFHMIN-LABEL: vfmin_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:    vfmin.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.minnum.v16f16(<16 x half> %splat, <16 x half> %a)
300  ret <16 x half> %v
301}
302
303declare <2 x float> @llvm.minnum.v2f32(<2 x float>, <2 x float>)
304
305define <2 x float> @vfmin_v2f32_vv(<2 x float> %a, <2 x float> %b) {
306; CHECK-LABEL: vfmin_v2f32_vv:
307; CHECK:       # %bb.0:
308; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
309; CHECK-NEXT:    vfmin.vv v8, v8, v9
310; CHECK-NEXT:    ret
311  %v = call <2 x float> @llvm.minnum.v2f32(<2 x float> %a, <2 x float> %b)
312  ret <2 x float> %v
313}
314
315define <2 x float> @vfmin_v2f32_vf(<2 x float> %a, float %b) {
316; CHECK-LABEL: vfmin_v2f32_vf:
317; CHECK:       # %bb.0:
318; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
319; CHECK-NEXT:    vfmin.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.minnum.v2f32(<2 x float> %a, <2 x float> %splat)
324  ret <2 x float> %v
325}
326
327define <2 x float> @vfmin_v2f32_fv(<2 x float> %a, float %b) {
328; CHECK-LABEL: vfmin_v2f32_fv:
329; CHECK:       # %bb.0:
330; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
331; CHECK-NEXT:    vfmin.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.minnum.v2f32(<2 x float> %splat, <2 x float> %a)
336  ret <2 x float> %v
337}
338
339declare <4 x float> @llvm.minnum.v4f32(<4 x float>, <4 x float>)
340
341define <4 x float> @vfmin_v4f32_vv(<4 x float> %a, <4 x float> %b) {
342; CHECK-LABEL: vfmin_v4f32_vv:
343; CHECK:       # %bb.0:
344; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
345; CHECK-NEXT:    vfmin.vv v8, v8, v9
346; CHECK-NEXT:    ret
347  %v = call <4 x float> @llvm.minnum.v4f32(<4 x float> %a, <4 x float> %b)
348  ret <4 x float> %v
349}
350
351define <4 x float> @vfmin_v4f32_vf(<4 x float> %a, float %b) {
352; CHECK-LABEL: vfmin_v4f32_vf:
353; CHECK:       # %bb.0:
354; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
355; CHECK-NEXT:    vfmin.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.minnum.v4f32(<4 x float> %a, <4 x float> %splat)
360  ret <4 x float> %v
361}
362
363define <4 x float> @vfmin_v4f32_fv(<4 x float> %a, float %b) {
364; CHECK-LABEL: vfmin_v4f32_fv:
365; CHECK:       # %bb.0:
366; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
367; CHECK-NEXT:    vfmin.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.minnum.v4f32(<4 x float> %splat, <4 x float> %a)
372  ret <4 x float> %v
373}
374
375declare <8 x float> @llvm.minnum.v8f32(<8 x float>, <8 x float>)
376
377define <8 x float> @vfmin_v8f32_vv(<8 x float> %a, <8 x float> %b) {
378; CHECK-LABEL: vfmin_v8f32_vv:
379; CHECK:       # %bb.0:
380; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
381; CHECK-NEXT:    vfmin.vv v8, v8, v10
382; CHECK-NEXT:    ret
383  %v = call <8 x float> @llvm.minnum.v8f32(<8 x float> %a, <8 x float> %b)
384  ret <8 x float> %v
385}
386
387define <8 x float> @vfmin_v8f32_vf(<8 x float> %a, float %b) {
388; CHECK-LABEL: vfmin_v8f32_vf:
389; CHECK:       # %bb.0:
390; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
391; CHECK-NEXT:    vfmin.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.minnum.v8f32(<8 x float> %a, <8 x float> %splat)
396  ret <8 x float> %v
397}
398
399define <8 x float> @vfmin_v8f32_fv(<8 x float> %a, float %b) {
400; CHECK-LABEL: vfmin_v8f32_fv:
401; CHECK:       # %bb.0:
402; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
403; CHECK-NEXT:    vfmin.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.minnum.v8f32(<8 x float> %splat, <8 x float> %a)
408  ret <8 x float> %v
409}
410
411declare <16 x float> @llvm.minnum.v16f32(<16 x float>, <16 x float>)
412
413define <16 x float> @vfmin_v16f32_vv(<16 x float> %a, <16 x float> %b) {
414; CHECK-LABEL: vfmin_v16f32_vv:
415; CHECK:       # %bb.0:
416; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
417; CHECK-NEXT:    vfmin.vv v8, v8, v12
418; CHECK-NEXT:    ret
419  %v = call <16 x float> @llvm.minnum.v16f32(<16 x float> %a, <16 x float> %b)
420  ret <16 x float> %v
421}
422
423define <16 x float> @vfmin_v16f32_vf(<16 x float> %a, float %b) {
424; CHECK-LABEL: vfmin_v16f32_vf:
425; CHECK:       # %bb.0:
426; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
427; CHECK-NEXT:    vfmin.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.minnum.v16f32(<16 x float> %a, <16 x float> %splat)
432  ret <16 x float> %v
433}
434
435define <16 x float> @vfmin_v16f32_fv(<16 x float> %a, float %b) {
436; CHECK-LABEL: vfmin_v16f32_fv:
437; CHECK:       # %bb.0:
438; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
439; CHECK-NEXT:    vfmin.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.minnum.v16f32(<16 x float> %splat, <16 x float> %a)
444  ret <16 x float> %v
445}
446
447declare <2 x double> @llvm.minnum.v2f64(<2 x double>, <2 x double>)
448
449define <2 x double> @vfmin_v2f64_vv(<2 x double> %a, <2 x double> %b) {
450; CHECK-LABEL: vfmin_v2f64_vv:
451; CHECK:       # %bb.0:
452; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
453; CHECK-NEXT:    vfmin.vv v8, v8, v9
454; CHECK-NEXT:    ret
455  %v = call <2 x double> @llvm.minnum.v2f64(<2 x double> %a, <2 x double> %b)
456  ret <2 x double> %v
457}
458
459define <2 x double> @vfmin_v2f64_vf(<2 x double> %a, double %b) {
460; CHECK-LABEL: vfmin_v2f64_vf:
461; CHECK:       # %bb.0:
462; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
463; CHECK-NEXT:    vfmin.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.minnum.v2f64(<2 x double> %a, <2 x double> %splat)
468  ret <2 x double> %v
469}
470
471define <2 x double> @vfmin_v2f64_fv(<2 x double> %a, double %b) {
472; CHECK-LABEL: vfmin_v2f64_fv:
473; CHECK:       # %bb.0:
474; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
475; CHECK-NEXT:    vfmin.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.minnum.v2f64(<2 x double> %splat, <2 x double> %a)
480  ret <2 x double> %v
481}
482
483declare <4 x double> @llvm.minnum.v4f64(<4 x double>, <4 x double>)
484
485define <4 x double> @vfmin_v4f64_vv(<4 x double> %a, <4 x double> %b) {
486; CHECK-LABEL: vfmin_v4f64_vv:
487; CHECK:       # %bb.0:
488; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
489; CHECK-NEXT:    vfmin.vv v8, v8, v10
490; CHECK-NEXT:    ret
491  %v = call <4 x double> @llvm.minnum.v4f64(<4 x double> %a, <4 x double> %b)
492  ret <4 x double> %v
493}
494
495define <4 x double> @vfmin_v4f64_vf(<4 x double> %a, double %b) {
496; CHECK-LABEL: vfmin_v4f64_vf:
497; CHECK:       # %bb.0:
498; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
499; CHECK-NEXT:    vfmin.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.minnum.v4f64(<4 x double> %a, <4 x double> %splat)
504  ret <4 x double> %v
505}
506
507define <4 x double> @vfmin_v4f64_fv(<4 x double> %a, double %b) {
508; CHECK-LABEL: vfmin_v4f64_fv:
509; CHECK:       # %bb.0:
510; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
511; CHECK-NEXT:    vfmin.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.minnum.v4f64(<4 x double> %splat, <4 x double> %a)
516  ret <4 x double> %v
517}
518
519declare <8 x double> @llvm.minnum.v8f64(<8 x double>, <8 x double>)
520
521define <8 x double> @vfmin_v8f64_vv(<8 x double> %a, <8 x double> %b) {
522; CHECK-LABEL: vfmin_v8f64_vv:
523; CHECK:       # %bb.0:
524; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
525; CHECK-NEXT:    vfmin.vv v8, v8, v12
526; CHECK-NEXT:    ret
527  %v = call <8 x double> @llvm.minnum.v8f64(<8 x double> %a, <8 x double> %b)
528  ret <8 x double> %v
529}
530
531define <8 x double> @vfmin_v8f64_vf(<8 x double> %a, double %b) {
532; CHECK-LABEL: vfmin_v8f64_vf:
533; CHECK:       # %bb.0:
534; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
535; CHECK-NEXT:    vfmin.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.minnum.v8f64(<8 x double> %a, <8 x double> %splat)
540  ret <8 x double> %v
541}
542
543define <8 x double> @vfmin_v8f64_fv(<8 x double> %a, double %b) {
544; CHECK-LABEL: vfmin_v8f64_fv:
545; CHECK:       # %bb.0:
546; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
547; CHECK-NEXT:    vfmin.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.minnum.v8f64(<8 x double> %splat, <8 x double> %a)
552  ret <8 x double> %v
553}
554
555declare <16 x double> @llvm.minnum.v16f64(<16 x double>, <16 x double>)
556
557define <16 x double> @vfmin_v16f64_vv(<16 x double> %a, <16 x double> %b) {
558; CHECK-LABEL: vfmin_v16f64_vv:
559; CHECK:       # %bb.0:
560; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
561; CHECK-NEXT:    vfmin.vv v8, v8, v16
562; CHECK-NEXT:    ret
563  %v = call <16 x double> @llvm.minnum.v16f64(<16 x double> %a, <16 x double> %b)
564  ret <16 x double> %v
565}
566
567define <16 x double> @vfmin_v16f64_vf(<16 x double> %a, double %b) {
568; CHECK-LABEL: vfmin_v16f64_vf:
569; CHECK:       # %bb.0:
570; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
571; CHECK-NEXT:    vfmin.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.minnum.v16f64(<16 x double> %a, <16 x double> %splat)
576  ret <16 x double> %v
577}
578
579define <16 x double> @vfmin_v16f64_fv(<16 x double> %a, double %b) {
580; CHECK-LABEL: vfmin_v16f64_fv:
581; CHECK:       # %bb.0:
582; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
583; CHECK-NEXT:    vfmin.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.minnum.v16f64(<16 x double> %splat, <16 x double> %a)
588  ret <16 x double> %v
589}
590