[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / minimumnum.ll
bloba32b3b71cd606f962ccad096fb12b6457988cc5f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefix=GFX8 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefix=GFX10 %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s
8 define half @v_minimumnum_f16(half %x, half %y) {
9 ; GFX8-LABEL: v_minimumnum_f16:
10 ; GFX8:       ; %bb.0:
11 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
13 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
14 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
15 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17 ; GFX9-LABEL: v_minimumnum_f16:
18 ; GFX9:       ; %bb.0:
19 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20 ; GFX9-NEXT:    v_max_f16_e32 v1, v1, v1
21 ; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
22 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
23 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25 ; GFX10-LABEL: v_minimumnum_f16:
26 ; GFX10:       ; %bb.0:
27 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28 ; GFX10-NEXT:    v_max_f16_e32 v1, v1, v1
29 ; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
30 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
31 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33 ; GFX11-LABEL: v_minimumnum_f16:
34 ; GFX11:       ; %bb.0:
35 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36 ; GFX11-NEXT:    v_max_f16_e32 v1, v1, v1
37 ; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
38 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
39 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
40 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
42 ; GFX12-LABEL: v_minimumnum_f16:
43 ; GFX12:       ; %bb.0:
44 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
45 ; GFX12-NEXT:    s_wait_expcnt 0x0
46 ; GFX12-NEXT:    s_wait_samplecnt 0x0
47 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
48 ; GFX12-NEXT:    s_wait_kmcnt 0x0
49 ; GFX12-NEXT:    v_max_num_f16_e32 v1, v1, v1
50 ; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
51 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
52 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
53 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
54   %result = call half @llvm.minimumnum.f16(half %x, half %y)
55   ret half %result
58 define half @v_minimumnum_f16_nnan(half %x, half %y) {
59 ; GFX8-LABEL: v_minimumnum_f16_nnan:
60 ; GFX8:       ; %bb.0:
61 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
62 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
63 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
65 ; GFX9-LABEL: v_minimumnum_f16_nnan:
66 ; GFX9:       ; %bb.0:
67 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
68 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
69 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
71 ; GFX10-LABEL: v_minimumnum_f16_nnan:
72 ; GFX10:       ; %bb.0:
73 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
75 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
77 ; GFX11-LABEL: v_minimumnum_f16_nnan:
78 ; GFX11:       ; %bb.0:
79 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
80 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
81 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
83 ; GFX12-LABEL: v_minimumnum_f16_nnan:
84 ; GFX12:       ; %bb.0:
85 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
86 ; GFX12-NEXT:    s_wait_expcnt 0x0
87 ; GFX12-NEXT:    s_wait_samplecnt 0x0
88 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
89 ; GFX12-NEXT:    s_wait_kmcnt 0x0
90 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
91 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
92   %result = call nnan half @llvm.minimumnum.f16(half %x, half %y)
93   ret half %result
96 define half @v_minimumnum_f16_1.0(half %x) {
97 ; GFX8-LABEL: v_minimumnum_f16_1.0:
98 ; GFX8:       ; %bb.0:
99 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
101 ; GFX8-NEXT:    v_min_f16_e32 v0, 1.0, v0
102 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
104 ; GFX9-LABEL: v_minimumnum_f16_1.0:
105 ; GFX9:       ; %bb.0:
106 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
107 ; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
108 ; GFX9-NEXT:    v_min_f16_e32 v0, 1.0, v0
109 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
111 ; GFX10-LABEL: v_minimumnum_f16_1.0:
112 ; GFX10:       ; %bb.0:
113 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
114 ; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
115 ; GFX10-NEXT:    v_min_f16_e32 v0, 1.0, v0
116 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
118 ; GFX11-LABEL: v_minimumnum_f16_1.0:
119 ; GFX11:       ; %bb.0:
120 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
121 ; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
122 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
123 ; GFX11-NEXT:    v_min_f16_e32 v0, 1.0, v0
124 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
126 ; GFX12-LABEL: v_minimumnum_f16_1.0:
127 ; GFX12:       ; %bb.0:
128 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
129 ; GFX12-NEXT:    s_wait_expcnt 0x0
130 ; GFX12-NEXT:    s_wait_samplecnt 0x0
131 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
132 ; GFX12-NEXT:    s_wait_kmcnt 0x0
133 ; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
134 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
135 ; GFX12-NEXT:    v_min_num_f16_e32 v0, 1.0, v0
136 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
137   %result = call half @llvm.minimumnum.f16(half %x, half 1.0)
138   ret half %result
141 define bfloat @v_minimumnum_bf16(bfloat %x, bfloat %y) {
142 ; GFX8-LABEL: v_minimumnum_bf16:
143 ; GFX8:       ; %bb.0:
144 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
145 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
146 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
147 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
148 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
149 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
150 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
151 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
152 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
153 ; GFX8-NEXT:    v_cmp_lt_f32_e32 vcc, v3, v2
154 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
155 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
156 ; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
157 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
158 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
159 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
160 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
161 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
162 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
163 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
164 ; GFX8-NEXT:    s_movk_i32 s4, 0x8000
165 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
166 ; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0
167 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
168 ; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v1
169 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
170 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
171 ; GFX8-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
172 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
173 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
175 ; GFX9-LABEL: v_minimumnum_bf16:
176 ; GFX9:       ; %bb.0:
177 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
178 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
179 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
180 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
181 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
182 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
183 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
184 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
185 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
186 ; GFX9-NEXT:    v_cmp_lt_f32_e32 vcc, v2, v3
187 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
188 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
189 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
190 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
191 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
192 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
193 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
194 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
195 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
196 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
197 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
198 ; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0
199 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
200 ; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v1
201 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
202 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
203 ; GFX9-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
204 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc
205 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
207 ; GFX10-LABEL: v_minimumnum_bf16:
208 ; GFX10:       ; %bb.0:
209 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
210 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
211 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
212 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
213 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
214 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
215 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
216 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
217 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
218 ; GFX10-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v2, v3
219 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
220 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
221 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
222 ; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
223 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
224 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
225 ; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
226 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
227 ; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
228 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
229 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
230 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
231 ; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
232 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
233 ; GFX10-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
234 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
235 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
237 ; GFX11-LABEL: v_minimumnum_bf16:
238 ; GFX11:       ; %bb.0:
239 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
240 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
241 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
242 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
243 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
244 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
245 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
246 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
247 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
248 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
249 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
250 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
251 ; GFX11-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v2, v3
252 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
253 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
254 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
255 ; GFX11-NEXT:    v_max_f32_e32 v2, v2, v2
256 ; GFX11-NEXT:    v_bfe_u32 v3, v2, 16, 1
257 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
258 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
259 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
260 ; GFX11-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
261 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
262 ; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
263 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
264 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
265 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
266 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
267 ; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
268 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4)
269 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
270 ; GFX11-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
271 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
272 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
273 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
275 ; GFX12-LABEL: v_minimumnum_bf16:
276 ; GFX12:       ; %bb.0:
277 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
278 ; GFX12-NEXT:    s_wait_expcnt 0x0
279 ; GFX12-NEXT:    s_wait_samplecnt 0x0
280 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
281 ; GFX12-NEXT:    s_wait_kmcnt 0x0
282 ; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
283 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
284 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
285 ; GFX12-NEXT:    s_wait_alu 0xfffd
286 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
287 ; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
288 ; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
289 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
290 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
291 ; GFX12-NEXT:    s_wait_alu 0xfffd
292 ; GFX12-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc_lo
293 ; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
294 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
295 ; GFX12-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v2, v3
296 ; GFX12-NEXT:    s_wait_alu 0xfffd
297 ; GFX12-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
298 ; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
299 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
300 ; GFX12-NEXT:    v_max_num_f32_e32 v2, v2, v2
301 ; GFX12-NEXT:    v_bfe_u32 v3, v2, 16, 1
302 ; GFX12-NEXT:    v_or_b32_e32 v4, 0x400000, v2
303 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
304 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
305 ; GFX12-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
306 ; GFX12-NEXT:    s_wait_alu 0xfffd
307 ; GFX12-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
308 ; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
309 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
310 ; GFX12-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
311 ; GFX12-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
312 ; GFX12-NEXT:    s_wait_alu 0xfffd
313 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
314 ; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
315 ; GFX12-NEXT:    s_wait_alu 0xfffd
316 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
317 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
318 ; GFX12-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v2
319 ; GFX12-NEXT:    s_wait_alu 0xfffd
320 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v3, v0, vcc_lo
321 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
322   %result = call bfloat @llvm.minimumnum.bf16(bfloat %x, bfloat %y)
323   ret bfloat %result
326 define bfloat @v_minimumnum_bf16_nnan(bfloat %x, bfloat %y) {
327 ; GFX8-LABEL: v_minimumnum_bf16_nnan:
328 ; GFX8:       ; %bb.0:
329 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
330 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
331 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
332 ; GFX8-NEXT:    v_cmp_lt_f32_e32 vcc, v3, v2
333 ; GFX8-NEXT:    s_movk_i32 s4, 0x8000
334 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
335 ; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0
336 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
337 ; GFX8-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v1
338 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
339 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
340 ; GFX8-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
341 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
342 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
344 ; GFX9-LABEL: v_minimumnum_bf16_nnan:
345 ; GFX9:       ; %bb.0:
346 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
347 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
348 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
349 ; GFX9-NEXT:    v_cmp_lt_f32_e32 vcc, v3, v2
350 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
351 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc
352 ; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v0
353 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
354 ; GFX9-NEXT:    v_cmp_eq_u16_e32 vcc, s4, v1
355 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
356 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
357 ; GFX9-NEXT:    v_cmp_eq_f32_e32 vcc, 0, v1
358 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
359 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
361 ; GFX10-LABEL: v_minimumnum_bf16_nnan:
362 ; GFX10:       ; %bb.0:
363 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
364 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
365 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
366 ; GFX10-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v3, v2
367 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
368 ; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
369 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
370 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
371 ; GFX10-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
372 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
373 ; GFX10-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
374 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
375 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
377 ; GFX11-LABEL: v_minimumnum_bf16_nnan:
378 ; GFX11:       ; %bb.0:
379 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
380 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
381 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
382 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
383 ; GFX11-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v3, v2
384 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
385 ; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
386 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2
387 ; GFX11-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
388 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
389 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
390 ; GFX11-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
391 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
392 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
393 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
395 ; GFX12-LABEL: v_minimumnum_bf16_nnan:
396 ; GFX12:       ; %bb.0:
397 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
398 ; GFX12-NEXT:    s_wait_expcnt 0x0
399 ; GFX12-NEXT:    s_wait_samplecnt 0x0
400 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
401 ; GFX12-NEXT:    s_wait_kmcnt 0x0
402 ; GFX12-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
403 ; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
404 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
405 ; GFX12-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v3, v2
406 ; GFX12-NEXT:    s_wait_alu 0xfffd
407 ; GFX12-NEXT:    v_cndmask_b32_e32 v2, v1, v0, vcc_lo
408 ; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v0
409 ; GFX12-NEXT:    s_wait_alu 0xfffd
410 ; GFX12-NEXT:    v_dual_cndmask_b32 v0, v2, v0 :: v_dual_lshlrev_b32 v3, 16, v2
411 ; GFX12-NEXT:    v_cmp_eq_u16_e32 vcc_lo, 0x8000, v1
412 ; GFX12-NEXT:    s_wait_alu 0xfffd
413 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
414 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
415 ; GFX12-NEXT:    v_cmp_eq_f32_e32 vcc_lo, 0, v3
416 ; GFX12-NEXT:    s_wait_alu 0xfffd
417 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
418 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc_lo
419 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
420   %result = call nnan bfloat @llvm.minimumnum.bf16(bfloat %x, bfloat %y)
421   ret bfloat %result
424 define float @v_minimumnum_f32(float %x, float %y) {
425 ; GFX8-LABEL: v_minimumnum_f32:
426 ; GFX8:       ; %bb.0:
427 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
428 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
429 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
430 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
431 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
433 ; GFX9-LABEL: v_minimumnum_f32:
434 ; GFX9:       ; %bb.0:
435 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
436 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
437 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
438 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
439 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
441 ; GFX10-LABEL: v_minimumnum_f32:
442 ; GFX10:       ; %bb.0:
443 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
444 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
445 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
446 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
447 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
449 ; GFX11-LABEL: v_minimumnum_f32:
450 ; GFX11:       ; %bb.0:
451 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
452 ; GFX11-NEXT:    v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
453 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
454 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
455 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
457 ; GFX12-LABEL: v_minimumnum_f32:
458 ; GFX12:       ; %bb.0:
459 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
460 ; GFX12-NEXT:    s_wait_expcnt 0x0
461 ; GFX12-NEXT:    s_wait_samplecnt 0x0
462 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
463 ; GFX12-NEXT:    s_wait_kmcnt 0x0
464 ; GFX12-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
465 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
466 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
467 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
468   %result = call float @llvm.minimumnum.f32(float %x, float %y)
469   ret float %result
472 define float @v_minimumnum_f32_nnan(float %x, float %y) {
473 ; GFX8-LABEL: v_minimumnum_f32_nnan:
474 ; GFX8:       ; %bb.0:
475 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
476 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
477 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
479 ; GFX9-LABEL: v_minimumnum_f32_nnan:
480 ; GFX9:       ; %bb.0:
481 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
482 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
483 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
485 ; GFX10-LABEL: v_minimumnum_f32_nnan:
486 ; GFX10:       ; %bb.0:
487 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
488 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
489 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
491 ; GFX11-LABEL: v_minimumnum_f32_nnan:
492 ; GFX11:       ; %bb.0:
493 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
494 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
495 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
497 ; GFX12-LABEL: v_minimumnum_f32_nnan:
498 ; GFX12:       ; %bb.0:
499 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
500 ; GFX12-NEXT:    s_wait_expcnt 0x0
501 ; GFX12-NEXT:    s_wait_samplecnt 0x0
502 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
503 ; GFX12-NEXT:    s_wait_kmcnt 0x0
504 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
505 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
506   %result = call nnan float @llvm.minimumnum.f32(float %x, float %y)
507   ret float %result
510 define double @v_minimumnum_f64(double %x, double %y) {
511 ; GFX8-LABEL: v_minimumnum_f64:
512 ; GFX8:       ; %bb.0:
513 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
514 ; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
515 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
516 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
517 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
519 ; GFX9-LABEL: v_minimumnum_f64:
520 ; GFX9:       ; %bb.0:
521 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
522 ; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
523 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
524 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
525 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
527 ; GFX10-LABEL: v_minimumnum_f64:
528 ; GFX10:       ; %bb.0:
529 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
530 ; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
531 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
532 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
533 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
535 ; GFX11-LABEL: v_minimumnum_f64:
536 ; GFX11:       ; %bb.0:
537 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
538 ; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
539 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
540 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
541 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
542 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
544 ; GFX12-LABEL: v_minimumnum_f64:
545 ; GFX12:       ; %bb.0:
546 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
547 ; GFX12-NEXT:    s_wait_expcnt 0x0
548 ; GFX12-NEXT:    s_wait_samplecnt 0x0
549 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
550 ; GFX12-NEXT:    s_wait_kmcnt 0x0
551 ; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
552 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
553 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
554 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[2:3]
555 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
556   %result = call double @llvm.minimumnum.f64(double %x, double %y)
557   ret double %result
560 define double @v_minimumnum_f64_nnan(double %x, double %y) {
561 ; GFX8-LABEL: v_minimumnum_f64_nnan:
562 ; GFX8:       ; %bb.0:
563 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
564 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
565 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
567 ; GFX9-LABEL: v_minimumnum_f64_nnan:
568 ; GFX9:       ; %bb.0:
569 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
570 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
571 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
573 ; GFX10-LABEL: v_minimumnum_f64_nnan:
574 ; GFX10:       ; %bb.0:
575 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
576 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
577 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
579 ; GFX11-LABEL: v_minimumnum_f64_nnan:
580 ; GFX11:       ; %bb.0:
581 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
582 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
583 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
585 ; GFX12-LABEL: v_minimumnum_f64_nnan:
586 ; GFX12:       ; %bb.0:
587 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
588 ; GFX12-NEXT:    s_wait_expcnt 0x0
589 ; GFX12-NEXT:    s_wait_samplecnt 0x0
590 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
591 ; GFX12-NEXT:    s_wait_kmcnt 0x0
592 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[2:3]
593 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
594   %result = call nnan double @llvm.minimumnum.f64(double %x, double %y)
595   ret double %result
598 define float @v_minimumnum_f32_1.0(float %x) {
599 ; GFX8-LABEL: v_minimumnum_f32_1.0:
600 ; GFX8:       ; %bb.0:
601 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
602 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
603 ; GFX8-NEXT:    v_min_f32_e32 v0, 1.0, v0
604 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
606 ; GFX9-LABEL: v_minimumnum_f32_1.0:
607 ; GFX9:       ; %bb.0:
608 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
609 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
610 ; GFX9-NEXT:    v_min_f32_e32 v0, 1.0, v0
611 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
613 ; GFX10-LABEL: v_minimumnum_f32_1.0:
614 ; GFX10:       ; %bb.0:
615 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
616 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
617 ; GFX10-NEXT:    v_min_f32_e32 v0, 1.0, v0
618 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
620 ; GFX11-LABEL: v_minimumnum_f32_1.0:
621 ; GFX11:       ; %bb.0:
622 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
623 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
625 ; GFX11-NEXT:    v_min_f32_e32 v0, 1.0, v0
626 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
628 ; GFX12-LABEL: v_minimumnum_f32_1.0:
629 ; GFX12:       ; %bb.0:
630 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
631 ; GFX12-NEXT:    s_wait_expcnt 0x0
632 ; GFX12-NEXT:    s_wait_samplecnt 0x0
633 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
634 ; GFX12-NEXT:    s_wait_kmcnt 0x0
635 ; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
636 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
637 ; GFX12-NEXT:    v_min_num_f32_e32 v0, 1.0, v0
638 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
639   %result = call float @llvm.minimumnum.f32(float %x, float 1.0)
640   ret float %result
643 define float @v_minimumnum_f32_rhs_not_snan(float %x, float %y) {
644 ; GFX8-LABEL: v_minimumnum_f32_rhs_not_snan:
645 ; GFX8:       ; %bb.0:
646 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
647 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
648 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
649 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
650 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
652 ; GFX9-LABEL: v_minimumnum_f32_rhs_not_snan:
653 ; GFX9:       ; %bb.0:
654 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
655 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
656 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
657 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
658 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
660 ; GFX10-LABEL: v_minimumnum_f32_rhs_not_snan:
661 ; GFX10:       ; %bb.0:
662 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
663 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
664 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
665 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
666 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
668 ; GFX11-LABEL: v_minimumnum_f32_rhs_not_snan:
669 ; GFX11:       ; %bb.0:
670 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
671 ; GFX11-NEXT:    v_dual_max_f32 v1, v1, v1 :: v_dual_max_f32 v0, v0, v0
672 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
673 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
674 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
676 ; GFX12-LABEL: v_minimumnum_f32_rhs_not_snan:
677 ; GFX12:       ; %bb.0:
678 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
679 ; GFX12-NEXT:    s_wait_expcnt 0x0
680 ; GFX12-NEXT:    s_wait_samplecnt 0x0
681 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
682 ; GFX12-NEXT:    s_wait_kmcnt 0x0
683 ; GFX12-NEXT:    v_dual_max_num_f32 v1, v1, v1 :: v_dual_max_num_f32 v0, v0, v0
684 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
685 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
686 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
687   %canon.y = call float @llvm.canonicalize.f32(float %y)
688   %result = call float @llvm.minimumnum.f32(float %x, float %canon.y)
689   ret float %result
692 define float @v_minimumnum_f32_lhs_not_snan(float %x, float %y) {
693 ; GFX8-LABEL: v_minimumnum_f32_lhs_not_snan:
694 ; GFX8:       ; %bb.0:
695 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
696 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
697 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
698 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
699 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
701 ; GFX9-LABEL: v_minimumnum_f32_lhs_not_snan:
702 ; GFX9:       ; %bb.0:
703 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
704 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
705 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
706 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
707 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
709 ; GFX10-LABEL: v_minimumnum_f32_lhs_not_snan:
710 ; GFX10:       ; %bb.0:
711 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
713 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
714 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
715 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
717 ; GFX11-LABEL: v_minimumnum_f32_lhs_not_snan:
718 ; GFX11:       ; %bb.0:
719 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
720 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
721 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
722 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
723 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
725 ; GFX12-LABEL: v_minimumnum_f32_lhs_not_snan:
726 ; GFX12:       ; %bb.0:
727 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
728 ; GFX12-NEXT:    s_wait_expcnt 0x0
729 ; GFX12-NEXT:    s_wait_samplecnt 0x0
730 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
731 ; GFX12-NEXT:    s_wait_kmcnt 0x0
732 ; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
733 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
734 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
735 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
736   %canon.x = call float @llvm.canonicalize.f32(float %x)
737   %result = call float @llvm.minimumnum.f32(float %canon.x, float %y)
738   ret float %result
741 define float @v_minimumnum_f32_both_operands_not_snan(float %x, float %y) {
742 ; GFX8-LABEL: v_minimumnum_f32_both_operands_not_snan:
743 ; GFX8:       ; %bb.0:
744 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
745 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
746 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
747 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
748 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
750 ; GFX9-LABEL: v_minimumnum_f32_both_operands_not_snan:
751 ; GFX9:       ; %bb.0:
752 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
753 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
754 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
755 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
756 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
758 ; GFX10-LABEL: v_minimumnum_f32_both_operands_not_snan:
759 ; GFX10:       ; %bb.0:
760 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
761 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
762 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
763 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
764 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
766 ; GFX11-LABEL: v_minimumnum_f32_both_operands_not_snan:
767 ; GFX11:       ; %bb.0:
768 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
769 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
770 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
771 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
772 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
774 ; GFX12-LABEL: v_minimumnum_f32_both_operands_not_snan:
775 ; GFX12:       ; %bb.0:
776 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
777 ; GFX12-NEXT:    s_wait_expcnt 0x0
778 ; GFX12-NEXT:    s_wait_samplecnt 0x0
779 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
780 ; GFX12-NEXT:    s_wait_kmcnt 0x0
781 ; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
782 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
783 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
784 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
785   %canon.x = call float @llvm.canonicalize.f32(float %x)
786   %canon.y = call float @llvm.canonicalize.f32(float %y)
787   %result = call float @llvm.minimumnum.f32(float %canon.x, float %canon.y)
788   ret float %result
791 define double @v_minimumnum_f64_1.0(double %x) {
792 ; GFX8-LABEL: v_minimumnum_f64_1.0:
793 ; GFX8:       ; %bb.0:
794 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
795 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
796 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], 1.0
797 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
799 ; GFX9-LABEL: v_minimumnum_f64_1.0:
800 ; GFX9:       ; %bb.0:
801 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
802 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
803 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], 1.0
804 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
806 ; GFX10-LABEL: v_minimumnum_f64_1.0:
807 ; GFX10:       ; %bb.0:
808 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
809 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
810 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], 1.0
811 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
813 ; GFX11-LABEL: v_minimumnum_f64_1.0:
814 ; GFX11:       ; %bb.0:
815 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
816 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
817 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
818 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], 1.0
819 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
821 ; GFX12-LABEL: v_minimumnum_f64_1.0:
822 ; GFX12:       ; %bb.0:
823 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
824 ; GFX12-NEXT:    s_wait_expcnt 0x0
825 ; GFX12-NEXT:    s_wait_samplecnt 0x0
826 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
827 ; GFX12-NEXT:    s_wait_kmcnt 0x0
828 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
829 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
830 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], 1.0, v[0:1]
831 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
832   %result = call double @llvm.minimumnum.f64(double %x, double 1.0)
833   ret double %result
836 define half @v_minimumnum_f16_v_s(half %x, half inreg %y) {
837 ; GFX8-LABEL: v_minimumnum_f16_v_s:
838 ; GFX8:       ; %bb.0:
839 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
840 ; GFX8-NEXT:    v_max_f16_e64 v1, s16, s16
841 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
842 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
843 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
845 ; GFX9-LABEL: v_minimumnum_f16_v_s:
846 ; GFX9:       ; %bb.0:
847 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
848 ; GFX9-NEXT:    v_max_f16_e64 v1, s16, s16
849 ; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
850 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
851 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
853 ; GFX10-LABEL: v_minimumnum_f16_v_s:
854 ; GFX10:       ; %bb.0:
855 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
856 ; GFX10-NEXT:    v_max_f16_e64 v1, s16, s16
857 ; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
858 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
859 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
861 ; GFX11-LABEL: v_minimumnum_f16_v_s:
862 ; GFX11:       ; %bb.0:
863 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
864 ; GFX11-NEXT:    v_max_f16_e64 v1, s0, s0
865 ; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
866 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
867 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
868 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
870 ; GFX12-LABEL: v_minimumnum_f16_v_s:
871 ; GFX12:       ; %bb.0:
872 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
873 ; GFX12-NEXT:    s_wait_expcnt 0x0
874 ; GFX12-NEXT:    s_wait_samplecnt 0x0
875 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
876 ; GFX12-NEXT:    s_wait_kmcnt 0x0
877 ; GFX12-NEXT:    v_max_num_f16_e64 v1, s0, s0
878 ; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
879 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
880 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
881 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
882  %result = call half @llvm.minimumnum.f16(half %x, half %y)
883   ret half %result
886 define half @v_minimumnum_f16_s_s(half inreg %x, half inreg %y) {
887 ; GFX8-LABEL: v_minimumnum_f16_s_s:
888 ; GFX8:       ; %bb.0:
889 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
890 ; GFX8-NEXT:    v_max_f16_e64 v0, s17, s17
891 ; GFX8-NEXT:    v_max_f16_e64 v1, s16, s16
892 ; GFX8-NEXT:    v_min_f16_e32 v0, v1, v0
893 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
895 ; GFX9-LABEL: v_minimumnum_f16_s_s:
896 ; GFX9:       ; %bb.0:
897 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
898 ; GFX9-NEXT:    v_max_f16_e64 v0, s17, s17
899 ; GFX9-NEXT:    v_max_f16_e64 v1, s16, s16
900 ; GFX9-NEXT:    v_min_f16_e32 v0, v1, v0
901 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
903 ; GFX10-LABEL: v_minimumnum_f16_s_s:
904 ; GFX10:       ; %bb.0:
905 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
906 ; GFX10-NEXT:    v_max_f16_e64 v0, s17, s17
907 ; GFX10-NEXT:    v_max_f16_e64 v1, s16, s16
908 ; GFX10-NEXT:    v_min_f16_e32 v0, v1, v0
909 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
911 ; GFX11-LABEL: v_minimumnum_f16_s_s:
912 ; GFX11:       ; %bb.0:
913 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
914 ; GFX11-NEXT:    v_max_f16_e64 v0, s1, s1
915 ; GFX11-NEXT:    v_max_f16_e64 v1, s0, s0
916 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
917 ; GFX11-NEXT:    v_min_f16_e32 v0, v1, v0
918 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
920 ; GFX12-LABEL: v_minimumnum_f16_s_s:
921 ; GFX12:       ; %bb.0:
922 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
923 ; GFX12-NEXT:    s_wait_expcnt 0x0
924 ; GFX12-NEXT:    s_wait_samplecnt 0x0
925 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
926 ; GFX12-NEXT:    s_wait_kmcnt 0x0
927 ; GFX12-NEXT:    v_max_num_f16_e64 v0, s1, s1
928 ; GFX12-NEXT:    v_max_num_f16_e64 v1, s0, s0
929 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
930 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v1, v0
931 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
932  %result = call half @llvm.minimumnum.f16(half %x, half %y)
933   ret half %result
936 define float @v_minimumnum_f32_s_v(float inreg %x, float %y) {
937 ; GFX8-LABEL: v_minimumnum_f32_s_v:
938 ; GFX8:       ; %bb.0:
939 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
940 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
941 ; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
942 ; GFX8-NEXT:    v_min_f32_e32 v0, v1, v0
943 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
945 ; GFX9-LABEL: v_minimumnum_f32_s_v:
946 ; GFX9:       ; %bb.0:
947 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
948 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
949 ; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
950 ; GFX9-NEXT:    v_min_f32_e32 v0, v1, v0
951 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
953 ; GFX10-LABEL: v_minimumnum_f32_s_v:
954 ; GFX10:       ; %bb.0:
955 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
956 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
957 ; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
958 ; GFX10-NEXT:    v_min_f32_e32 v0, v1, v0
959 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
961 ; GFX11-LABEL: v_minimumnum_f32_s_v:
962 ; GFX11:       ; %bb.0:
963 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
964 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
965 ; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
966 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
967 ; GFX11-NEXT:    v_min_f32_e32 v0, v1, v0
968 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
970 ; GFX12-LABEL: v_minimumnum_f32_s_v:
971 ; GFX12:       ; %bb.0:
972 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
973 ; GFX12-NEXT:    s_wait_expcnt 0x0
974 ; GFX12-NEXT:    s_wait_samplecnt 0x0
975 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
976 ; GFX12-NEXT:    s_wait_kmcnt 0x0
977 ; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
978 ; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
979 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
980 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v1, v0
981 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
982  %result = call float @llvm.minimumnum.f32(float %x, float %y)
983   ret float %result
986 define float @v_minimumnum_f32_v_s(float %x, float inreg %y) {
987 ; GFX8-LABEL: v_minimumnum_f32_v_s:
988 ; GFX8:       ; %bb.0:
989 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
990 ; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
991 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
992 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
993 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
995 ; GFX9-LABEL: v_minimumnum_f32_v_s:
996 ; GFX9:       ; %bb.0:
997 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
998 ; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
999 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1000 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
1001 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1003 ; GFX10-LABEL: v_minimumnum_f32_v_s:
1004 ; GFX10:       ; %bb.0:
1005 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1006 ; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
1007 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1008 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
1009 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1011 ; GFX11-LABEL: v_minimumnum_f32_v_s:
1012 ; GFX11:       ; %bb.0:
1013 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1014 ; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
1015 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1016 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1017 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
1018 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1020 ; GFX12-LABEL: v_minimumnum_f32_v_s:
1021 ; GFX12:       ; %bb.0:
1022 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1023 ; GFX12-NEXT:    s_wait_expcnt 0x0
1024 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1025 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1026 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1027 ; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
1028 ; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1029 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1030 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
1031 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1032  %result = call float @llvm.minimumnum.f32(float %x, float %y)
1033   ret float %result
1036 define float @v_minimumnum_f32_s_s(float inreg %x, float inreg %y) {
1037 ; GFX8-LABEL: v_minimumnum_f32_s_s:
1038 ; GFX8:       ; %bb.0:
1039 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1040 ; GFX8-NEXT:    v_mul_f32_e64 v0, 1.0, s17
1041 ; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, s16
1042 ; GFX8-NEXT:    v_min_f32_e32 v0, v1, v0
1043 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1045 ; GFX9-LABEL: v_minimumnum_f32_s_s:
1046 ; GFX9:       ; %bb.0:
1047 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048 ; GFX9-NEXT:    v_max_f32_e64 v0, s17, s17
1049 ; GFX9-NEXT:    v_max_f32_e64 v1, s16, s16
1050 ; GFX9-NEXT:    v_min_f32_e32 v0, v1, v0
1051 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1053 ; GFX10-LABEL: v_minimumnum_f32_s_s:
1054 ; GFX10:       ; %bb.0:
1055 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1056 ; GFX10-NEXT:    v_max_f32_e64 v0, s17, s17
1057 ; GFX10-NEXT:    v_max_f32_e64 v1, s16, s16
1058 ; GFX10-NEXT:    v_min_f32_e32 v0, v1, v0
1059 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1061 ; GFX11-LABEL: v_minimumnum_f32_s_s:
1062 ; GFX11:       ; %bb.0:
1063 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1064 ; GFX11-NEXT:    v_max_f32_e64 v0, s1, s1
1065 ; GFX11-NEXT:    v_max_f32_e64 v1, s0, s0
1066 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1067 ; GFX11-NEXT:    v_min_f32_e32 v0, v1, v0
1068 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1070 ; GFX12-LABEL: v_minimumnum_f32_s_s:
1071 ; GFX12:       ; %bb.0:
1072 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1073 ; GFX12-NEXT:    s_wait_expcnt 0x0
1074 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1075 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1076 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1077 ; GFX12-NEXT:    v_max_num_f32_e64 v0, s1, s1
1078 ; GFX12-NEXT:    v_max_num_f32_e64 v1, s0, s0
1079 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1080 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v1, v0
1081 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1082  %result = call float @llvm.minimumnum.f32(float %x, float %y)
1083   ret float %result
1086 define double @v_minimumnum_f64_s_v(double inreg %x, double %y) {
1087 ; GFX8-LABEL: v_minimumnum_f64_s_v:
1088 ; GFX8:       ; %bb.0:
1089 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1090 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1091 ; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1092 ; GFX8-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1093 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1095 ; GFX9-LABEL: v_minimumnum_f64_s_v:
1096 ; GFX9:       ; %bb.0:
1097 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1098 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1099 ; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1100 ; GFX9-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1101 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1103 ; GFX10-LABEL: v_minimumnum_f64_s_v:
1104 ; GFX10:       ; %bb.0:
1105 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1106 ; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1107 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1108 ; GFX10-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1109 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1111 ; GFX11-LABEL: v_minimumnum_f64_s_v:
1112 ; GFX11:       ; %bb.0:
1113 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1114 ; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1115 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1116 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1117 ; GFX11-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1118 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1120 ; GFX12-LABEL: v_minimumnum_f64_s_v:
1121 ; GFX12:       ; %bb.0:
1122 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1123 ; GFX12-NEXT:    s_wait_expcnt 0x0
1124 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1125 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1126 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1127 ; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1128 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
1129 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1130 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[2:3], v[0:1]
1131 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1132  %result = call double @llvm.minimumnum.f64(double %x, double %y)
1133   ret double %result
1136 define double @v_minimumnum_f64_v_s(double %x, double inreg %y) {
1137 ; GFX8-LABEL: v_minimumnum_f64_v_s:
1138 ; GFX8:       ; %bb.0:
1139 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1140 ; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1141 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1142 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1143 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1145 ; GFX9-LABEL: v_minimumnum_f64_v_s:
1146 ; GFX9:       ; %bb.0:
1147 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1148 ; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1149 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1150 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1151 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1153 ; GFX10-LABEL: v_minimumnum_f64_v_s:
1154 ; GFX10:       ; %bb.0:
1155 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1156 ; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1157 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1158 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1159 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1161 ; GFX11-LABEL: v_minimumnum_f64_v_s:
1162 ; GFX11:       ; %bb.0:
1163 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1164 ; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1165 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
1166 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1167 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1168 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1170 ; GFX12-LABEL: v_minimumnum_f64_v_s:
1171 ; GFX12:       ; %bb.0:
1172 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1173 ; GFX12-NEXT:    s_wait_expcnt 0x0
1174 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1175 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1176 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1177 ; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1178 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
1179 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1180 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[2:3]
1181 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1182  %result = call double @llvm.minimumnum.f64(double %x, double %y)
1183   ret double %result
1186 define double @v_minimumnum_f64_s_s(double inreg %x, double inreg %y) {
1187 ; GFX8-LABEL: v_minimumnum_f64_s_s:
1188 ; GFX8:       ; %bb.0:
1189 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1190 ; GFX8-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
1191 ; GFX8-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1192 ; GFX8-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1193 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1195 ; GFX9-LABEL: v_minimumnum_f64_s_s:
1196 ; GFX9:       ; %bb.0:
1197 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1198 ; GFX9-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
1199 ; GFX9-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1200 ; GFX9-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1201 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1203 ; GFX10-LABEL: v_minimumnum_f64_s_s:
1204 ; GFX10:       ; %bb.0:
1205 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1206 ; GFX10-NEXT:    v_max_f64 v[0:1], s[18:19], s[18:19]
1207 ; GFX10-NEXT:    v_max_f64 v[2:3], s[16:17], s[16:17]
1208 ; GFX10-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1209 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1211 ; GFX11-LABEL: v_minimumnum_f64_s_s:
1212 ; GFX11:       ; %bb.0:
1213 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1214 ; GFX11-NEXT:    v_max_f64 v[0:1], s[2:3], s[2:3]
1215 ; GFX11-NEXT:    v_max_f64 v[2:3], s[0:1], s[0:1]
1216 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1217 ; GFX11-NEXT:    v_min_f64 v[0:1], v[2:3], v[0:1]
1218 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1220 ; GFX12-LABEL: v_minimumnum_f64_s_s:
1221 ; GFX12:       ; %bb.0:
1222 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1223 ; GFX12-NEXT:    s_wait_expcnt 0x0
1224 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1225 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1226 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1227 ; GFX12-NEXT:    v_max_num_f64_e64 v[0:1], s[2:3], s[2:3]
1228 ; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], s[0:1], s[0:1]
1229 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1230 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[2:3], v[0:1]
1231 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1232  %result = call double @llvm.minimumnum.f64(double %x, double %y)
1233   ret double %result
1236 define float @v_minimumnum_f32_fabs_rhs(float %x, float %y) {
1237 ; GFX8-LABEL: v_minimumnum_f32_fabs_rhs:
1238 ; GFX8:       ; %bb.0:
1239 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1240 ; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, |v1|
1241 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1242 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
1243 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1245 ; GFX9-LABEL: v_minimumnum_f32_fabs_rhs:
1246 ; GFX9:       ; %bb.0:
1247 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1248 ; GFX9-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1249 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1250 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
1251 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1253 ; GFX10-LABEL: v_minimumnum_f32_fabs_rhs:
1254 ; GFX10:       ; %bb.0:
1255 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1256 ; GFX10-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1257 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1258 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
1259 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1261 ; GFX11-LABEL: v_minimumnum_f32_fabs_rhs:
1262 ; GFX11:       ; %bb.0:
1263 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1264 ; GFX11-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1265 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1266 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1267 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
1268 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1270 ; GFX12-LABEL: v_minimumnum_f32_fabs_rhs:
1271 ; GFX12:       ; %bb.0:
1272 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1273 ; GFX12-NEXT:    s_wait_expcnt 0x0
1274 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1275 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1276 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1277 ; GFX12-NEXT:    v_max_num_f32_e64 v1, |v1|, |v1|
1278 ; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1279 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1280 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
1281 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1282   %fabs.y = call float @llvm.fabs.f32(float %y)
1283   %result = call float @llvm.minimumnum.f32(float %x, float %fabs.y)
1284   ret float %result
1287 define float @v_minimumnum_f32_fneg_fabs_rhs(float %x, float %y) {
1288 ; GFX8-LABEL: v_minimumnum_f32_fneg_fabs_rhs:
1289 ; GFX8:       ; %bb.0:
1290 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1291 ; GFX8-NEXT:    v_mul_f32_e64 v1, -1.0, |v1|
1292 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1293 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
1294 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1296 ; GFX9-LABEL: v_minimumnum_f32_fneg_fabs_rhs:
1297 ; GFX9:       ; %bb.0:
1298 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1299 ; GFX9-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1300 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
1301 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
1302 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1304 ; GFX10-LABEL: v_minimumnum_f32_fneg_fabs_rhs:
1305 ; GFX10:       ; %bb.0:
1306 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1307 ; GFX10-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1308 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
1309 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
1310 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1312 ; GFX11-LABEL: v_minimumnum_f32_fneg_fabs_rhs:
1313 ; GFX11:       ; %bb.0:
1314 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1315 ; GFX11-NEXT:    v_max_f32_e64 v1, -|v1|, -|v1|
1316 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
1317 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1318 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
1319 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1321 ; GFX12-LABEL: v_minimumnum_f32_fneg_fabs_rhs:
1322 ; GFX12:       ; %bb.0:
1323 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1324 ; GFX12-NEXT:    s_wait_expcnt 0x0
1325 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1326 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1327 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1328 ; GFX12-NEXT:    v_max_num_f32_e64 v1, -|v1|, -|v1|
1329 ; GFX12-NEXT:    v_max_num_f32_e32 v0, v0, v0
1330 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1331 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
1332 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1333   %fabs.y = call float @llvm.fabs.f32(float %y)
1334   %fneg.fabs.y = fneg float %fabs.y
1335   %result = call float @llvm.minimumnum.f32(float %x, float %fneg.fabs.y)
1336   ret float %result
1339 define float @v_minimumnum_f32_fabs(float %x, float %y) {
1340 ; GFX8-LABEL: v_minimumnum_f32_fabs:
1341 ; GFX8:       ; %bb.0:
1342 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1343 ; GFX8-NEXT:    v_mul_f32_e64 v1, 1.0, |v1|
1344 ; GFX8-NEXT:    v_mul_f32_e64 v0, 1.0, |v0|
1345 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
1346 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1348 ; GFX9-LABEL: v_minimumnum_f32_fabs:
1349 ; GFX9:       ; %bb.0:
1350 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1351 ; GFX9-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1352 ; GFX9-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1353 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
1354 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1356 ; GFX10-LABEL: v_minimumnum_f32_fabs:
1357 ; GFX10:       ; %bb.0:
1358 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1359 ; GFX10-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1360 ; GFX10-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1361 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
1362 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1364 ; GFX11-LABEL: v_minimumnum_f32_fabs:
1365 ; GFX11:       ; %bb.0:
1366 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1367 ; GFX11-NEXT:    v_max_f32_e64 v1, |v1|, |v1|
1368 ; GFX11-NEXT:    v_max_f32_e64 v0, |v0|, |v0|
1369 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1370 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
1371 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1373 ; GFX12-LABEL: v_minimumnum_f32_fabs:
1374 ; GFX12:       ; %bb.0:
1375 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1376 ; GFX12-NEXT:    s_wait_expcnt 0x0
1377 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1378 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1379 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1380 ; GFX12-NEXT:    v_max_num_f32_e64 v1, |v1|, |v1|
1381 ; GFX12-NEXT:    v_max_num_f32_e64 v0, |v0|, |v0|
1382 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1383 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
1384 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1385   %fabs.x = call float @llvm.fabs.f32(float %x)
1386   %fabs.y = call float @llvm.fabs.f32(float %y)
1387   %result = call float @llvm.minimumnum.f32(float %fabs.x, float %fabs.y)
1388   ret float %result
1391 define float @v_minimumnum_f32_fneg(float %x, float %y) {
1392 ; GFX8-LABEL: v_minimumnum_f32_fneg:
1393 ; GFX8:       ; %bb.0:
1394 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1395 ; GFX8-NEXT:    v_mul_f32_e32 v1, -1.0, v1
1396 ; GFX8-NEXT:    v_mul_f32_e32 v0, -1.0, v0
1397 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
1398 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1400 ; GFX9-LABEL: v_minimumnum_f32_fneg:
1401 ; GFX9:       ; %bb.0:
1402 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1403 ; GFX9-NEXT:    v_max_f32_e64 v1, -v1, -v1
1404 ; GFX9-NEXT:    v_max_f32_e64 v0, -v0, -v0
1405 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
1406 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1408 ; GFX10-LABEL: v_minimumnum_f32_fneg:
1409 ; GFX10:       ; %bb.0:
1410 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1411 ; GFX10-NEXT:    v_max_f32_e64 v1, -v1, -v1
1412 ; GFX10-NEXT:    v_max_f32_e64 v0, -v0, -v0
1413 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
1414 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1416 ; GFX11-LABEL: v_minimumnum_f32_fneg:
1417 ; GFX11:       ; %bb.0:
1418 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1419 ; GFX11-NEXT:    v_max_f32_e64 v1, -v1, -v1
1420 ; GFX11-NEXT:    v_max_f32_e64 v0, -v0, -v0
1421 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1422 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
1423 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1425 ; GFX12-LABEL: v_minimumnum_f32_fneg:
1426 ; GFX12:       ; %bb.0:
1427 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1428 ; GFX12-NEXT:    s_wait_expcnt 0x0
1429 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1430 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1431 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1432 ; GFX12-NEXT:    v_max_num_f32_e64 v1, -v1, -v1
1433 ; GFX12-NEXT:    v_max_num_f32_e64 v0, -v0, -v0
1434 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1435 ; GFX12-NEXT:    v_min_num_f32_e32 v0, v0, v1
1436 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1437   %fneg.x = fneg float %x
1438   %fneg.y = fneg float %y
1439   %result = call float @llvm.minimumnum.f32(float %fneg.x, float %fneg.y)
1440   ret float %result
1443 define half @v_minimumnum_f16_fabs_rhs(half %x, half %y) {
1444 ; GFX8-LABEL: v_minimumnum_f16_fabs_rhs:
1445 ; GFX8:       ; %bb.0:
1446 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1447 ; GFX8-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1448 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1449 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1450 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1452 ; GFX9-LABEL: v_minimumnum_f16_fabs_rhs:
1453 ; GFX9:       ; %bb.0:
1454 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1455 ; GFX9-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1456 ; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
1457 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
1458 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1460 ; GFX10-LABEL: v_minimumnum_f16_fabs_rhs:
1461 ; GFX10:       ; %bb.0:
1462 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1463 ; GFX10-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1464 ; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
1465 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
1466 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1468 ; GFX11-LABEL: v_minimumnum_f16_fabs_rhs:
1469 ; GFX11:       ; %bb.0:
1470 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1471 ; GFX11-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1472 ; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
1473 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1474 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
1475 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1477 ; GFX12-LABEL: v_minimumnum_f16_fabs_rhs:
1478 ; GFX12:       ; %bb.0:
1479 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1480 ; GFX12-NEXT:    s_wait_expcnt 0x0
1481 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1482 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1483 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1484 ; GFX12-NEXT:    v_max_num_f16_e64 v1, |v1|, |v1|
1485 ; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
1486 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1487 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
1488 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1489   %fabs.y = call half @llvm.fabs.f16(half %y)
1490   %result = call half @llvm.minimumnum.f16(half %x, half %fabs.y)
1491   ret half %result
1494 define half @v_minimumnum_f16_fneg_fabs_rhs(half %x, half %y) {
1495 ; GFX8-LABEL: v_minimumnum_f16_fneg_fabs_rhs:
1496 ; GFX8:       ; %bb.0:
1497 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1498 ; GFX8-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1499 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1500 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1501 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1503 ; GFX9-LABEL: v_minimumnum_f16_fneg_fabs_rhs:
1504 ; GFX9:       ; %bb.0:
1505 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1506 ; GFX9-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1507 ; GFX9-NEXT:    v_max_f16_e32 v0, v0, v0
1508 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
1509 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1511 ; GFX10-LABEL: v_minimumnum_f16_fneg_fabs_rhs:
1512 ; GFX10:       ; %bb.0:
1513 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1514 ; GFX10-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1515 ; GFX10-NEXT:    v_max_f16_e32 v0, v0, v0
1516 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
1517 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1519 ; GFX11-LABEL: v_minimumnum_f16_fneg_fabs_rhs:
1520 ; GFX11:       ; %bb.0:
1521 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1522 ; GFX11-NEXT:    v_max_f16_e64 v1, -|v1|, -|v1|
1523 ; GFX11-NEXT:    v_max_f16_e32 v0, v0, v0
1524 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1525 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
1526 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1528 ; GFX12-LABEL: v_minimumnum_f16_fneg_fabs_rhs:
1529 ; GFX12:       ; %bb.0:
1530 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1531 ; GFX12-NEXT:    s_wait_expcnt 0x0
1532 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1533 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1534 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1535 ; GFX12-NEXT:    v_max_num_f16_e64 v1, -|v1|, -|v1|
1536 ; GFX12-NEXT:    v_max_num_f16_e32 v0, v0, v0
1537 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1538 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
1539 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1540   %fabs.y = call half @llvm.fabs.f16(half %y)
1541   %fneg.fabs.y = fneg half %fabs.y
1542   %result = call half @llvm.minimumnum.f16(half %x, half %fneg.fabs.y)
1543   ret half %result
1546 define half @v_minimumnum_f16_fabs(half %x, half %y) {
1547 ; GFX8-LABEL: v_minimumnum_f16_fabs:
1548 ; GFX8:       ; %bb.0:
1549 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1550 ; GFX8-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1551 ; GFX8-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1552 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1553 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1555 ; GFX9-LABEL: v_minimumnum_f16_fabs:
1556 ; GFX9:       ; %bb.0:
1557 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1558 ; GFX9-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1559 ; GFX9-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1560 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
1561 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1563 ; GFX10-LABEL: v_minimumnum_f16_fabs:
1564 ; GFX10:       ; %bb.0:
1565 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1566 ; GFX10-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1567 ; GFX10-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1568 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
1569 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1571 ; GFX11-LABEL: v_minimumnum_f16_fabs:
1572 ; GFX11:       ; %bb.0:
1573 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1574 ; GFX11-NEXT:    v_max_f16_e64 v1, |v1|, |v1|
1575 ; GFX11-NEXT:    v_max_f16_e64 v0, |v0|, |v0|
1576 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1577 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
1578 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1580 ; GFX12-LABEL: v_minimumnum_f16_fabs:
1581 ; GFX12:       ; %bb.0:
1582 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1583 ; GFX12-NEXT:    s_wait_expcnt 0x0
1584 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1585 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1586 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1587 ; GFX12-NEXT:    v_max_num_f16_e64 v1, |v1|, |v1|
1588 ; GFX12-NEXT:    v_max_num_f16_e64 v0, |v0|, |v0|
1589 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1590 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
1591 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1592   %fabs.x = call half @llvm.fabs.f16(half %x)
1593   %fabs.y = call half @llvm.fabs.f16(half %y)
1594   %result = call half @llvm.minimumnum.f16(half %fabs.x, half %fabs.y)
1595   ret half %result
1598 define half @v_minimumnum_f16_fneg(half %x, half %y) {
1599 ; GFX8-LABEL: v_minimumnum_f16_fneg:
1600 ; GFX8:       ; %bb.0:
1601 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1602 ; GFX8-NEXT:    v_max_f16_e64 v1, -v1, -v1
1603 ; GFX8-NEXT:    v_max_f16_e64 v0, -v0, -v0
1604 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1605 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1607 ; GFX9-LABEL: v_minimumnum_f16_fneg:
1608 ; GFX9:       ; %bb.0:
1609 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1610 ; GFX9-NEXT:    v_max_f16_e64 v1, -v1, -v1
1611 ; GFX9-NEXT:    v_max_f16_e64 v0, -v0, -v0
1612 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
1613 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1615 ; GFX10-LABEL: v_minimumnum_f16_fneg:
1616 ; GFX10:       ; %bb.0:
1617 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1618 ; GFX10-NEXT:    v_max_f16_e64 v1, -v1, -v1
1619 ; GFX10-NEXT:    v_max_f16_e64 v0, -v0, -v0
1620 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
1621 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1623 ; GFX11-LABEL: v_minimumnum_f16_fneg:
1624 ; GFX11:       ; %bb.0:
1625 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1626 ; GFX11-NEXT:    v_max_f16_e64 v1, -v1, -v1
1627 ; GFX11-NEXT:    v_max_f16_e64 v0, -v0, -v0
1628 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1629 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
1630 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1632 ; GFX12-LABEL: v_minimumnum_f16_fneg:
1633 ; GFX12:       ; %bb.0:
1634 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1635 ; GFX12-NEXT:    s_wait_expcnt 0x0
1636 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1637 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1638 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1639 ; GFX12-NEXT:    v_max_num_f16_e64 v1, -v1, -v1
1640 ; GFX12-NEXT:    v_max_num_f16_e64 v0, -v0, -v0
1641 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1642 ; GFX12-NEXT:    v_min_num_f16_e32 v0, v0, v1
1643 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1644   %fneg.x = fneg half %x
1645   %fneg.y = fneg half %y
1646   %result = call half @llvm.minimumnum.f16(half %fneg.x, half %fneg.y)
1647   ret half %result
1650 define double @v_minimumnum_f64_fneg(double %x, double %y) {
1651 ; GFX8-LABEL: v_minimumnum_f64_fneg:
1652 ; GFX8:       ; %bb.0:
1653 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1654 ; GFX8-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1655 ; GFX8-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1656 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1657 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1659 ; GFX9-LABEL: v_minimumnum_f64_fneg:
1660 ; GFX9:       ; %bb.0:
1661 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1662 ; GFX9-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1663 ; GFX9-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1664 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1665 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1667 ; GFX10-LABEL: v_minimumnum_f64_fneg:
1668 ; GFX10:       ; %bb.0:
1669 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1670 ; GFX10-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1671 ; GFX10-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1672 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1673 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1675 ; GFX11-LABEL: v_minimumnum_f64_fneg:
1676 ; GFX11:       ; %bb.0:
1677 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1678 ; GFX11-NEXT:    v_max_f64 v[2:3], -v[2:3], -v[2:3]
1679 ; GFX11-NEXT:    v_max_f64 v[0:1], -v[0:1], -v[0:1]
1680 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1681 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[2:3]
1682 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1684 ; GFX12-LABEL: v_minimumnum_f64_fneg:
1685 ; GFX12:       ; %bb.0:
1686 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1687 ; GFX12-NEXT:    s_wait_expcnt 0x0
1688 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1689 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1690 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1691 ; GFX12-NEXT:    v_max_num_f64_e64 v[2:3], -v[2:3], -v[2:3]
1692 ; GFX12-NEXT:    v_max_num_f64_e64 v[0:1], -v[0:1], -v[0:1]
1693 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1694 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[2:3]
1695 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1696   %fneg.x = fneg double %x
1697   %fneg.y = fneg double %y
1698   %result = call double @llvm.minimumnum.f64(double %fneg.x, double %fneg.y)
1699   ret double %result
1702 define <2 x half> @v_minimumnum_v2f16(<2 x half> %x, <2 x half> %y) {
1703 ; GFX8-LABEL: v_minimumnum_v2f16:
1704 ; GFX8:       ; %bb.0:
1705 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1706 ; GFX8-NEXT:    v_max_f16_sdwa v2, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1707 ; GFX8-NEXT:    v_max_f16_sdwa v3, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1708 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
1709 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1710 ; GFX8-NEXT:    v_min_f16_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1711 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1712 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
1713 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1715 ; GFX9-LABEL: v_minimumnum_v2f16:
1716 ; GFX9:       ; %bb.0:
1717 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1718 ; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
1719 ; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
1720 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v1
1721 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1723 ; GFX10-LABEL: v_minimumnum_v2f16:
1724 ; GFX10:       ; %bb.0:
1725 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1726 ; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
1727 ; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
1728 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v1
1729 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1731 ; GFX11-LABEL: v_minimumnum_v2f16:
1732 ; GFX11:       ; %bb.0:
1733 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1734 ; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
1735 ; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
1736 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1737 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v1
1738 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1740 ; GFX12-LABEL: v_minimumnum_v2f16:
1741 ; GFX12:       ; %bb.0:
1742 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1743 ; GFX12-NEXT:    s_wait_expcnt 0x0
1744 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1745 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1746 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1747 ; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
1748 ; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
1749 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1750 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v1
1751 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1752   %result = call <2 x half> @llvm.minimumnum.v2f16(<2 x half> %x, <2 x half> %y)
1753   ret <2 x half> %result
1756 define <2 x half> @v_minimumnum_v2f16_nnan(<2 x half> %x, <2 x half> %y) {
1757 ; GFX8-LABEL: v_minimumnum_v2f16_nnan:
1758 ; GFX8:       ; %bb.0:
1759 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1760 ; GFX8-NEXT:    v_min_f16_sdwa v2, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1761 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
1762 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
1763 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1765 ; GFX9-LABEL: v_minimumnum_v2f16_nnan:
1766 ; GFX9:       ; %bb.0:
1767 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1768 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v1
1769 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1771 ; GFX10-LABEL: v_minimumnum_v2f16_nnan:
1772 ; GFX10:       ; %bb.0:
1773 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1774 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v1
1775 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1777 ; GFX11-LABEL: v_minimumnum_v2f16_nnan:
1778 ; GFX11:       ; %bb.0:
1779 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1780 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v1
1781 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1783 ; GFX12-LABEL: v_minimumnum_v2f16_nnan:
1784 ; GFX12:       ; %bb.0:
1785 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1786 ; GFX12-NEXT:    s_wait_expcnt 0x0
1787 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1788 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1789 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1790 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v1
1791 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1792   %result = call nnan <2 x half> @llvm.minimumnum.v2f16(<2 x half> %x, <2 x half> %y)
1793   ret <2 x half> %result
1796 define <3 x half> @v_minimumnum_v3f16(<3 x half> %x, <3 x half> %y) {
1797 ; GFX8-LABEL: v_minimumnum_v3f16:
1798 ; GFX8:       ; %bb.0:
1799 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1800 ; GFX8-NEXT:    v_max_f16_sdwa v4, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1801 ; GFX8-NEXT:    v_max_f16_sdwa v5, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1802 ; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
1803 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1804 ; GFX8-NEXT:    v_min_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1805 ; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
1806 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
1807 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1808 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1809 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
1810 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1812 ; GFX9-LABEL: v_minimumnum_v3f16:
1813 ; GFX9:       ; %bb.0:
1814 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1815 ; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
1816 ; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
1817 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1818 ; GFX9-NEXT:    v_pk_max_f16 v2, v3, v3
1819 ; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
1820 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v2
1821 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1823 ; GFX10-LABEL: v_minimumnum_v3f16:
1824 ; GFX10:       ; %bb.0:
1825 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1826 ; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
1827 ; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
1828 ; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
1829 ; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
1830 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1831 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1832 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1834 ; GFX11-LABEL: v_minimumnum_v3f16:
1835 ; GFX11:       ; %bb.0:
1836 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1837 ; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
1838 ; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
1839 ; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
1840 ; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
1841 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1842 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1843 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1844 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1846 ; GFX12-LABEL: v_minimumnum_v3f16:
1847 ; GFX12:       ; %bb.0:
1848 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1849 ; GFX12-NEXT:    s_wait_expcnt 0x0
1850 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1851 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1852 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1853 ; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
1854 ; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
1855 ; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
1856 ; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
1857 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1858 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v2
1859 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v3
1860 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1861   %result = call <3 x half> @llvm.minimumnum.v3f16(<3 x half> %x, <3 x half> %y)
1862   ret <3 x half> %result
1865 define <3 x half> @v_minimumnum_v3f16_nnan(<3 x half> %x, <3 x half> %y) {
1866 ; GFX8-LABEL: v_minimumnum_v3f16_nnan:
1867 ; GFX8:       ; %bb.0:
1868 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1869 ; GFX8-NEXT:    v_min_f16_sdwa v4, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1870 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1871 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1872 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
1873 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1875 ; GFX9-LABEL: v_minimumnum_v3f16_nnan:
1876 ; GFX9:       ; %bb.0:
1877 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1878 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1879 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
1880 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1882 ; GFX10-LABEL: v_minimumnum_v3f16_nnan:
1883 ; GFX10:       ; %bb.0:
1884 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1885 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1886 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1887 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1889 ; GFX11-LABEL: v_minimumnum_v3f16_nnan:
1890 ; GFX11:       ; %bb.0:
1891 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1892 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1893 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1894 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1896 ; GFX12-LABEL: v_minimumnum_v3f16_nnan:
1897 ; GFX12:       ; %bb.0:
1898 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1899 ; GFX12-NEXT:    s_wait_expcnt 0x0
1900 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1901 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1902 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1903 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v2
1904 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v3
1905 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1906   %result = call nnan <3 x half> @llvm.minimumnum.v3f16(<3 x half> %x, <3 x half> %y)
1907   ret <3 x half> %result
1910 define <4 x half> @v_minimumnum_v4f16(<4 x half> %x, <4 x half> %y) {
1911 ; GFX8-LABEL: v_minimumnum_v4f16:
1912 ; GFX8:       ; %bb.0:
1913 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1914 ; GFX8-NEXT:    v_max_f16_sdwa v4, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1915 ; GFX8-NEXT:    v_max_f16_sdwa v5, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1916 ; GFX8-NEXT:    v_min_f16_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1917 ; GFX8-NEXT:    v_max_f16_sdwa v5, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1918 ; GFX8-NEXT:    v_max_f16_sdwa v6, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1919 ; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
1920 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
1921 ; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
1922 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
1923 ; GFX8-NEXT:    v_min_f16_sdwa v5, v6, v5 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
1924 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1925 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1926 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
1927 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
1928 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1930 ; GFX9-LABEL: v_minimumnum_v4f16:
1931 ; GFX9:       ; %bb.0:
1932 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1933 ; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
1934 ; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
1935 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1936 ; GFX9-NEXT:    v_pk_max_f16 v2, v3, v3
1937 ; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
1938 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v2
1939 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1941 ; GFX10-LABEL: v_minimumnum_v4f16:
1942 ; GFX10:       ; %bb.0:
1943 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1944 ; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
1945 ; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
1946 ; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
1947 ; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
1948 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1949 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1950 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1952 ; GFX11-LABEL: v_minimumnum_v4f16:
1953 ; GFX11:       ; %bb.0:
1954 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1955 ; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
1956 ; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
1957 ; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
1958 ; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
1959 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1960 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1961 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1962 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1964 ; GFX12-LABEL: v_minimumnum_v4f16:
1965 ; GFX12:       ; %bb.0:
1966 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1967 ; GFX12-NEXT:    s_wait_expcnt 0x0
1968 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1969 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1970 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1971 ; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
1972 ; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
1973 ; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
1974 ; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
1975 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1976 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v2
1977 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v3
1978 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1979   %result = call <4 x half> @llvm.minimumnum.v4f16(<4 x half> %x, <4 x half> %y)
1980   ret <4 x half> %result
1983 define <4 x half> @v_minimumnum_v4f16_nnan(<4 x half> %x, <4 x half> %y) {
1984 ; GFX8-LABEL: v_minimumnum_v4f16_nnan:
1985 ; GFX8:       ; %bb.0:
1986 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1987 ; GFX8-NEXT:    v_min_f16_sdwa v4, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1988 ; GFX8-NEXT:    v_min_f16_sdwa v5, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
1989 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1990 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1991 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
1992 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
1993 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1995 ; GFX9-LABEL: v_minimumnum_v4f16_nnan:
1996 ; GFX9:       ; %bb.0:
1997 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1998 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1999 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
2000 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2002 ; GFX10-LABEL: v_minimumnum_v4f16_nnan:
2003 ; GFX10:       ; %bb.0:
2004 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2005 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
2006 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
2007 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2009 ; GFX11-LABEL: v_minimumnum_v4f16_nnan:
2010 ; GFX11:       ; %bb.0:
2011 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2012 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
2013 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
2014 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2016 ; GFX12-LABEL: v_minimumnum_v4f16_nnan:
2017 ; GFX12:       ; %bb.0:
2018 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2019 ; GFX12-NEXT:    s_wait_expcnt 0x0
2020 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2021 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2022 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2023 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v2
2024 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v3
2025 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2026   %result = call nnan <4 x half> @llvm.minimumnum.v4f16(<4 x half> %x, <4 x half> %y)
2027   ret <4 x half> %result
2030 define <6 x half> @v_minimumnum_v6f16(<6 x half> %x, <6 x half> %y) {
2031 ; GFX8-LABEL: v_minimumnum_v6f16:
2032 ; GFX8:       ; %bb.0:
2033 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2034 ; GFX8-NEXT:    v_max_f16_sdwa v6, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2035 ; GFX8-NEXT:    v_max_f16_sdwa v7, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2036 ; GFX8-NEXT:    v_min_f16_sdwa v6, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2037 ; GFX8-NEXT:    v_max_f16_sdwa v7, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2038 ; GFX8-NEXT:    v_max_f16_sdwa v8, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2039 ; GFX8-NEXT:    v_min_f16_sdwa v7, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2040 ; GFX8-NEXT:    v_max_f16_sdwa v8, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2041 ; GFX8-NEXT:    v_max_f16_sdwa v9, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2042 ; GFX8-NEXT:    v_max_f16_e32 v5, v5, v5
2043 ; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
2044 ; GFX8-NEXT:    v_max_f16_e32 v4, v4, v4
2045 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
2046 ; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
2047 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
2048 ; GFX8-NEXT:    v_min_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2049 ; GFX8-NEXT:    v_min_f16_e32 v2, v2, v5
2050 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v4
2051 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v3
2052 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v8
2053 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v7
2054 ; GFX8-NEXT:    v_or_b32_e32 v2, v2, v6
2055 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2057 ; GFX9-LABEL: v_minimumnum_v6f16:
2058 ; GFX9:       ; %bb.0:
2059 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2060 ; GFX9-NEXT:    v_pk_max_f16 v3, v3, v3
2061 ; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
2062 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v3
2063 ; GFX9-NEXT:    v_pk_max_f16 v3, v4, v4
2064 ; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
2065 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
2066 ; GFX9-NEXT:    v_pk_max_f16 v3, v5, v5
2067 ; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
2068 ; GFX9-NEXT:    v_pk_min_f16 v2, v2, v3
2069 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2071 ; GFX10-LABEL: v_minimumnum_v6f16:
2072 ; GFX10:       ; %bb.0:
2073 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2074 ; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
2075 ; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
2076 ; GFX10-NEXT:    v_pk_max_f16 v4, v4, v4
2077 ; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
2078 ; GFX10-NEXT:    v_pk_max_f16 v5, v5, v5
2079 ; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
2080 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v3
2081 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v4
2082 ; GFX10-NEXT:    v_pk_min_f16 v2, v2, v5
2083 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2085 ; GFX11-LABEL: v_minimumnum_v6f16:
2086 ; GFX11:       ; %bb.0:
2087 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2088 ; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
2089 ; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
2090 ; GFX11-NEXT:    v_pk_max_f16 v4, v4, v4
2091 ; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
2092 ; GFX11-NEXT:    v_pk_max_f16 v5, v5, v5
2093 ; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
2094 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v3
2095 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2096 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v4
2097 ; GFX11-NEXT:    v_pk_min_f16 v2, v2, v5
2098 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2100 ; GFX12-LABEL: v_minimumnum_v6f16:
2101 ; GFX12:       ; %bb.0:
2102 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2103 ; GFX12-NEXT:    s_wait_expcnt 0x0
2104 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2105 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2106 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2107 ; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
2108 ; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
2109 ; GFX12-NEXT:    v_pk_max_num_f16 v4, v4, v4
2110 ; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
2111 ; GFX12-NEXT:    v_pk_max_num_f16 v5, v5, v5
2112 ; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
2113 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v3
2114 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2115 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v4
2116 ; GFX12-NEXT:    v_pk_min_num_f16 v2, v2, v5
2117 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2118   %result = call <6 x half> @llvm.minimumnum.v6f16(<6 x half> %x, <6 x half> %y)
2119   ret <6 x half> %result
2122 define <8 x half> @v_minimumnum_v8f16(<8 x half> %x, <8 x half> %y) {
2123 ; GFX8-LABEL: v_minimumnum_v8f16:
2124 ; GFX8:       ; %bb.0:
2125 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2126 ; GFX8-NEXT:    v_max_f16_sdwa v8, v7, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2127 ; GFX8-NEXT:    v_max_f16_sdwa v9, v3, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2128 ; GFX8-NEXT:    v_min_f16_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2129 ; GFX8-NEXT:    v_max_f16_sdwa v9, v6, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2130 ; GFX8-NEXT:    v_max_f16_sdwa v10, v2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2131 ; GFX8-NEXT:    v_min_f16_sdwa v9, v10, v9 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2132 ; GFX8-NEXT:    v_max_f16_sdwa v10, v5, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2133 ; GFX8-NEXT:    v_max_f16_sdwa v11, v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2134 ; GFX8-NEXT:    v_min_f16_sdwa v10, v11, v10 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2135 ; GFX8-NEXT:    v_max_f16_sdwa v11, v4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2136 ; GFX8-NEXT:    v_max_f16_sdwa v12, v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:WORD_1
2137 ; GFX8-NEXT:    v_max_f16_e32 v7, v7, v7
2138 ; GFX8-NEXT:    v_max_f16_e32 v3, v3, v3
2139 ; GFX8-NEXT:    v_max_f16_e32 v6, v6, v6
2140 ; GFX8-NEXT:    v_max_f16_e32 v2, v2, v2
2141 ; GFX8-NEXT:    v_max_f16_e32 v5, v5, v5
2142 ; GFX8-NEXT:    v_max_f16_e32 v1, v1, v1
2143 ; GFX8-NEXT:    v_max_f16_e32 v4, v4, v4
2144 ; GFX8-NEXT:    v_max_f16_e32 v0, v0, v0
2145 ; GFX8-NEXT:    v_min_f16_sdwa v11, v12, v11 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
2146 ; GFX8-NEXT:    v_min_f16_e32 v3, v3, v7
2147 ; GFX8-NEXT:    v_min_f16_e32 v2, v2, v6
2148 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v5
2149 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v4
2150 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v11
2151 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v10
2152 ; GFX8-NEXT:    v_or_b32_e32 v2, v2, v9
2153 ; GFX8-NEXT:    v_or_b32_e32 v3, v3, v8
2154 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2156 ; GFX9-LABEL: v_minimumnum_v8f16:
2157 ; GFX9:       ; %bb.0:
2158 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2159 ; GFX9-NEXT:    v_pk_max_f16 v4, v4, v4
2160 ; GFX9-NEXT:    v_pk_max_f16 v0, v0, v0
2161 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v4
2162 ; GFX9-NEXT:    v_pk_max_f16 v4, v5, v5
2163 ; GFX9-NEXT:    v_pk_max_f16 v1, v1, v1
2164 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v4
2165 ; GFX9-NEXT:    v_pk_max_f16 v4, v6, v6
2166 ; GFX9-NEXT:    v_pk_max_f16 v2, v2, v2
2167 ; GFX9-NEXT:    v_pk_min_f16 v2, v2, v4
2168 ; GFX9-NEXT:    v_pk_max_f16 v4, v7, v7
2169 ; GFX9-NEXT:    v_pk_max_f16 v3, v3, v3
2170 ; GFX9-NEXT:    v_pk_min_f16 v3, v3, v4
2171 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2173 ; GFX10-LABEL: v_minimumnum_v8f16:
2174 ; GFX10:       ; %bb.0:
2175 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2176 ; GFX10-NEXT:    v_pk_max_f16 v4, v4, v4
2177 ; GFX10-NEXT:    v_pk_max_f16 v0, v0, v0
2178 ; GFX10-NEXT:    v_pk_max_f16 v5, v5, v5
2179 ; GFX10-NEXT:    v_pk_max_f16 v1, v1, v1
2180 ; GFX10-NEXT:    v_pk_max_f16 v6, v6, v6
2181 ; GFX10-NEXT:    v_pk_max_f16 v2, v2, v2
2182 ; GFX10-NEXT:    v_pk_max_f16 v7, v7, v7
2183 ; GFX10-NEXT:    v_pk_max_f16 v3, v3, v3
2184 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v4
2185 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v5
2186 ; GFX10-NEXT:    v_pk_min_f16 v2, v2, v6
2187 ; GFX10-NEXT:    v_pk_min_f16 v3, v3, v7
2188 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2190 ; GFX11-LABEL: v_minimumnum_v8f16:
2191 ; GFX11:       ; %bb.0:
2192 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2193 ; GFX11-NEXT:    v_pk_max_f16 v4, v4, v4
2194 ; GFX11-NEXT:    v_pk_max_f16 v0, v0, v0
2195 ; GFX11-NEXT:    v_pk_max_f16 v5, v5, v5
2196 ; GFX11-NEXT:    v_pk_max_f16 v1, v1, v1
2197 ; GFX11-NEXT:    v_pk_max_f16 v6, v6, v6
2198 ; GFX11-NEXT:    v_pk_max_f16 v2, v2, v2
2199 ; GFX11-NEXT:    v_pk_max_f16 v7, v7, v7
2200 ; GFX11-NEXT:    v_pk_max_f16 v3, v3, v3
2201 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v4
2202 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v5
2203 ; GFX11-NEXT:    v_pk_min_f16 v2, v2, v6
2204 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2205 ; GFX11-NEXT:    v_pk_min_f16 v3, v3, v7
2206 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2208 ; GFX12-LABEL: v_minimumnum_v8f16:
2209 ; GFX12:       ; %bb.0:
2210 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2211 ; GFX12-NEXT:    s_wait_expcnt 0x0
2212 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2213 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2214 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2215 ; GFX12-NEXT:    v_pk_max_num_f16 v4, v4, v4
2216 ; GFX12-NEXT:    v_pk_max_num_f16 v0, v0, v0
2217 ; GFX12-NEXT:    v_pk_max_num_f16 v5, v5, v5
2218 ; GFX12-NEXT:    v_pk_max_num_f16 v1, v1, v1
2219 ; GFX12-NEXT:    v_pk_max_num_f16 v6, v6, v6
2220 ; GFX12-NEXT:    v_pk_max_num_f16 v2, v2, v2
2221 ; GFX12-NEXT:    v_pk_max_num_f16 v7, v7, v7
2222 ; GFX12-NEXT:    v_pk_max_num_f16 v3, v3, v3
2223 ; GFX12-NEXT:    v_pk_min_num_f16 v0, v0, v4
2224 ; GFX12-NEXT:    v_pk_min_num_f16 v1, v1, v5
2225 ; GFX12-NEXT:    v_pk_min_num_f16 v2, v2, v6
2226 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2227 ; GFX12-NEXT:    v_pk_min_num_f16 v3, v3, v7
2228 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2229   %result = call <8 x half> @llvm.minimumnum.v8f16(<8 x half> %x, <8 x half> %y)
2230   ret <8 x half> %result
2233 define <2 x float> @v_minimumnum_v2f32(<2 x float> %x, <2 x float> %y) {
2234 ; GFX8-LABEL: v_minimumnum_v2f32:
2235 ; GFX8:       ; %bb.0:
2236 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2237 ; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
2238 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2239 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v2
2240 ; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v3
2241 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2242 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v2
2243 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2245 ; GFX9-LABEL: v_minimumnum_v2f32:
2246 ; GFX9:       ; %bb.0:
2247 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2248 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
2249 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
2250 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v2
2251 ; GFX9-NEXT:    v_max_f32_e32 v2, v3, v3
2252 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
2253 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v2
2254 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2256 ; GFX10-LABEL: v_minimumnum_v2f32:
2257 ; GFX10:       ; %bb.0:
2258 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2259 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
2260 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
2261 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
2262 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
2263 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v2
2264 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v3
2265 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2267 ; GFX11-LABEL: v_minimumnum_v2f32:
2268 ; GFX11:       ; %bb.0:
2269 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2270 ; GFX11-NEXT:    v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
2271 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
2272 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2273 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v3
2274 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2276 ; GFX12-LABEL: v_minimumnum_v2f32:
2277 ; GFX12:       ; %bb.0:
2278 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2279 ; GFX12-NEXT:    s_wait_expcnt 0x0
2280 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2281 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2282 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2283 ; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
2284 ; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
2285 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2286 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v3
2287 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2288   %result = call <2 x float> @llvm.minimumnum.v2f32(<2 x float> %x, <2 x float> %y)
2289   ret <2 x float> %result
2292 define <2 x float> @v_minimumnum_v2f32_nnan(<2 x float> %x, <2 x float> %y) {
2293 ; GFX8-LABEL: v_minimumnum_v2f32_nnan:
2294 ; GFX8:       ; %bb.0:
2295 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2296 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v2
2297 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v3
2298 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2300 ; GFX9-LABEL: v_minimumnum_v2f32_nnan:
2301 ; GFX9:       ; %bb.0:
2302 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2303 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v2
2304 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v3
2305 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2307 ; GFX10-LABEL: v_minimumnum_v2f32_nnan:
2308 ; GFX10:       ; %bb.0:
2309 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2310 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v2
2311 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v3
2312 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2314 ; GFX11-LABEL: v_minimumnum_v2f32_nnan:
2315 ; GFX11:       ; %bb.0:
2316 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2317 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v2 :: v_dual_min_f32 v1, v1, v3
2318 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2320 ; GFX12-LABEL: v_minimumnum_v2f32_nnan:
2321 ; GFX12:       ; %bb.0:
2322 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2323 ; GFX12-NEXT:    s_wait_expcnt 0x0
2324 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2325 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2326 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2327 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v2 :: v_dual_min_num_f32 v1, v1, v3
2328 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2329   %result = call nnan <2 x float> @llvm.minimumnum.v2f32(<2 x float> %x, <2 x float> %y)
2330   ret <2 x float> %result
2333 define <3 x float> @v_minimumnum_v3f32(<3 x float> %x, <3 x float> %y) {
2334 ; GFX8-LABEL: v_minimumnum_v3f32:
2335 ; GFX8:       ; %bb.0:
2336 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2337 ; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v3
2338 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2339 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v3
2340 ; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v4
2341 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2342 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v3
2343 ; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v5
2344 ; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
2345 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v3
2346 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2348 ; GFX9-LABEL: v_minimumnum_v3f32:
2349 ; GFX9:       ; %bb.0:
2350 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2351 ; GFX9-NEXT:    v_max_f32_e32 v3, v3, v3
2352 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
2353 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v3
2354 ; GFX9-NEXT:    v_max_f32_e32 v3, v4, v4
2355 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
2356 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v3
2357 ; GFX9-NEXT:    v_max_f32_e32 v3, v5, v5
2358 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
2359 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v3
2360 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2362 ; GFX10-LABEL: v_minimumnum_v3f32:
2363 ; GFX10:       ; %bb.0:
2364 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2365 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
2366 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
2367 ; GFX10-NEXT:    v_max_f32_e32 v4, v4, v4
2368 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
2369 ; GFX10-NEXT:    v_max_f32_e32 v5, v5, v5
2370 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
2371 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v3
2372 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v4
2373 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v5
2374 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2376 ; GFX11-LABEL: v_minimumnum_v3f32:
2377 ; GFX11:       ; %bb.0:
2378 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2379 ; GFX11-NEXT:    v_dual_max_f32 v3, v3, v3 :: v_dual_max_f32 v0, v0, v0
2380 ; GFX11-NEXT:    v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v1, v1, v1
2381 ; GFX11-NEXT:    v_dual_max_f32 v5, v5, v5 :: v_dual_max_f32 v2, v2, v2
2382 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2383 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v3 :: v_dual_min_f32 v1, v1, v4
2384 ; GFX11-NEXT:    v_min_f32_e32 v2, v2, v5
2385 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2387 ; GFX12-LABEL: v_minimumnum_v3f32:
2388 ; GFX12:       ; %bb.0:
2389 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2390 ; GFX12-NEXT:    s_wait_expcnt 0x0
2391 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2392 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2393 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2394 ; GFX12-NEXT:    v_dual_max_num_f32 v3, v3, v3 :: v_dual_max_num_f32 v0, v0, v0
2395 ; GFX12-NEXT:    v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v1, v1, v1
2396 ; GFX12-NEXT:    v_dual_max_num_f32 v5, v5, v5 :: v_dual_max_num_f32 v2, v2, v2
2397 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2398 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v3 :: v_dual_min_num_f32 v1, v1, v4
2399 ; GFX12-NEXT:    v_min_num_f32_e32 v2, v2, v5
2400 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2401   %result = call <3 x float> @llvm.minimumnum.v3f32(<3 x float> %x, <3 x float> %y)
2402   ret <3 x float> %result
2405 define <3 x float> @v_minimumnum_v3f32_nnan(<3 x float> %x, <3 x float> %y) {
2406 ; GFX8-LABEL: v_minimumnum_v3f32_nnan:
2407 ; GFX8:       ; %bb.0:
2408 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2409 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v3
2410 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v4
2411 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v5
2412 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2414 ; GFX9-LABEL: v_minimumnum_v3f32_nnan:
2415 ; GFX9:       ; %bb.0:
2416 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2417 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v3
2418 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v4
2419 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v5
2420 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2422 ; GFX10-LABEL: v_minimumnum_v3f32_nnan:
2423 ; GFX10:       ; %bb.0:
2424 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2425 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v3
2426 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v4
2427 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v5
2428 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2430 ; GFX11-LABEL: v_minimumnum_v3f32_nnan:
2431 ; GFX11:       ; %bb.0:
2432 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2433 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v3 :: v_dual_min_f32 v1, v1, v4
2434 ; GFX11-NEXT:    v_min_f32_e32 v2, v2, v5
2435 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2437 ; GFX12-LABEL: v_minimumnum_v3f32_nnan:
2438 ; GFX12:       ; %bb.0:
2439 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2440 ; GFX12-NEXT:    s_wait_expcnt 0x0
2441 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2442 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2443 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2444 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v3 :: v_dual_min_num_f32 v1, v1, v4
2445 ; GFX12-NEXT:    v_min_num_f32_e32 v2, v2, v5
2446 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2447   %result = call nnan <3 x float> @llvm.minimumnum.v3f32(<3 x float> %x, <3 x float> %y)
2448   ret <3 x float> %result
2451 define <4 x float> @v_minimumnum_v4f32(<4 x float> %x, <4 x float> %y) {
2452 ; GFX8-LABEL: v_minimumnum_v4f32:
2453 ; GFX8:       ; %bb.0:
2454 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2455 ; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v4
2456 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2457 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v4
2458 ; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v5
2459 ; GFX8-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2460 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v4
2461 ; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v6
2462 ; GFX8-NEXT:    v_mul_f32_e32 v2, 1.0, v2
2463 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v4
2464 ; GFX8-NEXT:    v_mul_f32_e32 v4, 1.0, v7
2465 ; GFX8-NEXT:    v_mul_f32_e32 v3, 1.0, v3
2466 ; GFX8-NEXT:    v_min_f32_e32 v3, v3, v4
2467 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2469 ; GFX9-LABEL: v_minimumnum_v4f32:
2470 ; GFX9:       ; %bb.0:
2471 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2472 ; GFX9-NEXT:    v_max_f32_e32 v4, v4, v4
2473 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
2474 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v4
2475 ; GFX9-NEXT:    v_max_f32_e32 v4, v5, v5
2476 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v1
2477 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v4
2478 ; GFX9-NEXT:    v_max_f32_e32 v4, v6, v6
2479 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v2
2480 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v4
2481 ; GFX9-NEXT:    v_max_f32_e32 v4, v7, v7
2482 ; GFX9-NEXT:    v_max_f32_e32 v3, v3, v3
2483 ; GFX9-NEXT:    v_min_f32_e32 v3, v3, v4
2484 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2486 ; GFX10-LABEL: v_minimumnum_v4f32:
2487 ; GFX10:       ; %bb.0:
2488 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2489 ; GFX10-NEXT:    v_max_f32_e32 v4, v4, v4
2490 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
2491 ; GFX10-NEXT:    v_max_f32_e32 v5, v5, v5
2492 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v1
2493 ; GFX10-NEXT:    v_max_f32_e32 v6, v6, v6
2494 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v2
2495 ; GFX10-NEXT:    v_max_f32_e32 v7, v7, v7
2496 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v3
2497 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v4
2498 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v5
2499 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v6
2500 ; GFX10-NEXT:    v_min_f32_e32 v3, v3, v7
2501 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2503 ; GFX11-LABEL: v_minimumnum_v4f32:
2504 ; GFX11:       ; %bb.0:
2505 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2506 ; GFX11-NEXT:    v_dual_max_f32 v4, v4, v4 :: v_dual_max_f32 v5, v5, v5
2507 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v0 :: v_dual_max_f32 v1, v1, v1
2508 ; GFX11-NEXT:    v_dual_max_f32 v6, v6, v6 :: v_dual_max_f32 v7, v7, v7
2509 ; GFX11-NEXT:    v_dual_max_f32 v2, v2, v2 :: v_dual_max_f32 v3, v3, v3
2510 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2511 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v4 :: v_dual_min_f32 v1, v1, v5
2512 ; GFX11-NEXT:    v_dual_min_f32 v2, v2, v6 :: v_dual_min_f32 v3, v3, v7
2513 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2515 ; GFX12-LABEL: v_minimumnum_v4f32:
2516 ; GFX12:       ; %bb.0:
2517 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2518 ; GFX12-NEXT:    s_wait_expcnt 0x0
2519 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2520 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2521 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2522 ; GFX12-NEXT:    v_dual_max_num_f32 v4, v4, v4 :: v_dual_max_num_f32 v5, v5, v5
2523 ; GFX12-NEXT:    v_dual_max_num_f32 v0, v0, v0 :: v_dual_max_num_f32 v1, v1, v1
2524 ; GFX12-NEXT:    v_dual_max_num_f32 v6, v6, v6 :: v_dual_max_num_f32 v7, v7, v7
2525 ; GFX12-NEXT:    v_dual_max_num_f32 v2, v2, v2 :: v_dual_max_num_f32 v3, v3, v3
2526 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2527 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v4 :: v_dual_min_num_f32 v1, v1, v5
2528 ; GFX12-NEXT:    v_dual_min_num_f32 v2, v2, v6 :: v_dual_min_num_f32 v3, v3, v7
2529 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2530   %result = call <4 x float> @llvm.minimumnum.v4f32(<4 x float> %x, <4 x float> %y)
2531   ret <4 x float> %result
2534 define <4 x float> @v_minimumnum_v4f32_nnan(<4 x float> %x, <4 x float> %y) {
2535 ; GFX8-LABEL: v_minimumnum_v4f32_nnan:
2536 ; GFX8:       ; %bb.0:
2537 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2538 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v4
2539 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v5
2540 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v6
2541 ; GFX8-NEXT:    v_min_f32_e32 v3, v3, v7
2542 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2544 ; GFX9-LABEL: v_minimumnum_v4f32_nnan:
2545 ; GFX9:       ; %bb.0:
2546 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2547 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v4
2548 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v5
2549 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v6
2550 ; GFX9-NEXT:    v_min_f32_e32 v3, v3, v7
2551 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2553 ; GFX10-LABEL: v_minimumnum_v4f32_nnan:
2554 ; GFX10:       ; %bb.0:
2555 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2556 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v4
2557 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v5
2558 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v6
2559 ; GFX10-NEXT:    v_min_f32_e32 v3, v3, v7
2560 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2562 ; GFX11-LABEL: v_minimumnum_v4f32_nnan:
2563 ; GFX11:       ; %bb.0:
2564 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2565 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v4 :: v_dual_min_f32 v1, v1, v5
2566 ; GFX11-NEXT:    v_dual_min_f32 v2, v2, v6 :: v_dual_min_f32 v3, v3, v7
2567 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2569 ; GFX12-LABEL: v_minimumnum_v4f32_nnan:
2570 ; GFX12:       ; %bb.0:
2571 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2572 ; GFX12-NEXT:    s_wait_expcnt 0x0
2573 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2574 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2575 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2576 ; GFX12-NEXT:    v_dual_min_num_f32 v0, v0, v4 :: v_dual_min_num_f32 v1, v1, v5
2577 ; GFX12-NEXT:    v_dual_min_num_f32 v2, v2, v6 :: v_dual_min_num_f32 v3, v3, v7
2578 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2579   %result = call nnan <4 x float> @llvm.minimumnum.v4f32(<4 x float> %x, <4 x float> %y)
2580   ret <4 x float> %result
2583 define <2 x double> @v_minimumnum_v2f64(<2 x double> %x, <2 x double> %y) {
2584 ; GFX8-LABEL: v_minimumnum_v2f64:
2585 ; GFX8:       ; %bb.0:
2586 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2587 ; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2588 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2589 ; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2590 ; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2591 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2592 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2593 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2595 ; GFX9-LABEL: v_minimumnum_v2f64:
2596 ; GFX9:       ; %bb.0:
2597 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2598 ; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2599 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2600 ; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2601 ; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2602 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2603 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2604 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2606 ; GFX10-LABEL: v_minimumnum_v2f64:
2607 ; GFX10:       ; %bb.0:
2608 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2609 ; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2610 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2611 ; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2612 ; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2613 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2614 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2615 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2617 ; GFX11-LABEL: v_minimumnum_v2f64:
2618 ; GFX11:       ; %bb.0:
2619 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2620 ; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2621 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2622 ; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2623 ; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2625 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2626 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2627 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2629 ; GFX12-LABEL: v_minimumnum_v2f64:
2630 ; GFX12:       ; %bb.0:
2631 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2632 ; GFX12-NEXT:    s_wait_expcnt 0x0
2633 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2634 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2635 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2636 ; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
2637 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
2638 ; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
2639 ; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
2640 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2641 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[4:5]
2642 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[6:7]
2643 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2644   %result = call <2 x double> @llvm.minimumnum.v2f64(<2 x double> %x, <2 x double> %y)
2645   ret <2 x double> %result
2648 define <2 x double> @v_minimumnum_v2f64_nnan(<2 x double> %x, <2 x double> %y) {
2649 ; GFX8-LABEL: v_minimumnum_v2f64_nnan:
2650 ; GFX8:       ; %bb.0:
2651 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2652 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2653 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2654 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2656 ; GFX9-LABEL: v_minimumnum_v2f64_nnan:
2657 ; GFX9:       ; %bb.0:
2658 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2659 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2660 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2661 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2663 ; GFX10-LABEL: v_minimumnum_v2f64_nnan:
2664 ; GFX10:       ; %bb.0:
2665 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2666 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2667 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2668 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2670 ; GFX11-LABEL: v_minimumnum_v2f64_nnan:
2671 ; GFX11:       ; %bb.0:
2672 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2673 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[4:5]
2674 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[6:7]
2675 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2677 ; GFX12-LABEL: v_minimumnum_v2f64_nnan:
2678 ; GFX12:       ; %bb.0:
2679 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2680 ; GFX12-NEXT:    s_wait_expcnt 0x0
2681 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2682 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2683 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2684 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[4:5]
2685 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[6:7]
2686 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2687   %result = call nnan <2 x double> @llvm.minimumnum.v2f64(<2 x double> %x, <2 x double> %y)
2688   ret <2 x double> %result
2691 define <3 x double> @v_minimumnum_v3f64(<3 x double> %x, <3 x double> %y) {
2692 ; GFX8-LABEL: v_minimumnum_v3f64:
2693 ; GFX8:       ; %bb.0:
2694 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2695 ; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2696 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2697 ; GFX8-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2698 ; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2699 ; GFX8-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2700 ; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2701 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2702 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2703 ; GFX8-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2704 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2706 ; GFX9-LABEL: v_minimumnum_v3f64:
2707 ; GFX9:       ; %bb.0:
2708 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2709 ; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2710 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2711 ; GFX9-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2712 ; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2713 ; GFX9-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2714 ; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2715 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2716 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2717 ; GFX9-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2718 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2720 ; GFX10-LABEL: v_minimumnum_v3f64:
2721 ; GFX10:       ; %bb.0:
2722 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2723 ; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2724 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2725 ; GFX10-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2726 ; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2727 ; GFX10-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2728 ; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2729 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2730 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2731 ; GFX10-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2732 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2734 ; GFX11-LABEL: v_minimumnum_v3f64:
2735 ; GFX11:       ; %bb.0:
2736 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2737 ; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2738 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2739 ; GFX11-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2740 ; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2741 ; GFX11-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2742 ; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2743 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2744 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2745 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2746 ; GFX11-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2747 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2749 ; GFX12-LABEL: v_minimumnum_v3f64:
2750 ; GFX12:       ; %bb.0:
2751 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2752 ; GFX12-NEXT:    s_wait_expcnt 0x0
2753 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2754 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2755 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2756 ; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
2757 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
2758 ; GFX12-NEXT:    v_max_num_f64_e32 v[8:9], v[8:9], v[8:9]
2759 ; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
2760 ; GFX12-NEXT:    v_max_num_f64_e32 v[10:11], v[10:11], v[10:11]
2761 ; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
2762 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[6:7]
2763 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
2764 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[8:9]
2765 ; GFX12-NEXT:    v_min_num_f64_e32 v[4:5], v[4:5], v[10:11]
2766 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2767   %result = call <3 x double> @llvm.minimumnum.v3f64(<3 x double> %x, <3 x double> %y)
2768   ret <3 x double> %result
2771 define <3 x double> @v_minimumnum_v3f64_nnan(<3 x double> %x, <3 x double> %y) {
2772 ; GFX8-LABEL: v_minimumnum_v3f64_nnan:
2773 ; GFX8:       ; %bb.0:
2774 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2775 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2776 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2777 ; GFX8-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2778 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2780 ; GFX9-LABEL: v_minimumnum_v3f64_nnan:
2781 ; GFX9:       ; %bb.0:
2782 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2783 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2784 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2785 ; GFX9-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2786 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2788 ; GFX10-LABEL: v_minimumnum_v3f64_nnan:
2789 ; GFX10:       ; %bb.0:
2790 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2791 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2792 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2793 ; GFX10-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2794 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2796 ; GFX11-LABEL: v_minimumnum_v3f64_nnan:
2797 ; GFX11:       ; %bb.0:
2798 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2799 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[6:7]
2800 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[8:9]
2801 ; GFX11-NEXT:    v_min_f64 v[4:5], v[4:5], v[10:11]
2802 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2804 ; GFX12-LABEL: v_minimumnum_v3f64_nnan:
2805 ; GFX12:       ; %bb.0:
2806 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2807 ; GFX12-NEXT:    s_wait_expcnt 0x0
2808 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2809 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2810 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2811 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[6:7]
2812 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[8:9]
2813 ; GFX12-NEXT:    v_min_num_f64_e32 v[4:5], v[4:5], v[10:11]
2814 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2815   %result = call nnan <3 x double> @llvm.minimumnum.v3f64(<3 x double> %x, <3 x double> %y)
2816   ret <3 x double> %result
2819 define <4 x double> @v_minimumnum_v4f64(<4 x double> %x, <4 x double> %y) {
2820 ; GFX8-LABEL: v_minimumnum_v4f64:
2821 ; GFX8:       ; %bb.0:
2822 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2823 ; GFX8-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2824 ; GFX8-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2825 ; GFX8-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2826 ; GFX8-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2827 ; GFX8-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
2828 ; GFX8-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2829 ; GFX8-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
2830 ; GFX8-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2831 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2832 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2833 ; GFX8-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2834 ; GFX8-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2835 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2837 ; GFX9-LABEL: v_minimumnum_v4f64:
2838 ; GFX9:       ; %bb.0:
2839 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2840 ; GFX9-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2841 ; GFX9-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2842 ; GFX9-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2843 ; GFX9-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2844 ; GFX9-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
2845 ; GFX9-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2846 ; GFX9-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
2847 ; GFX9-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2848 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2849 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2850 ; GFX9-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2851 ; GFX9-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2852 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2854 ; GFX10-LABEL: v_minimumnum_v4f64:
2855 ; GFX10:       ; %bb.0:
2856 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2857 ; GFX10-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2858 ; GFX10-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2859 ; GFX10-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2860 ; GFX10-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2861 ; GFX10-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
2862 ; GFX10-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2863 ; GFX10-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
2864 ; GFX10-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2865 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2866 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2867 ; GFX10-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2868 ; GFX10-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2869 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2871 ; GFX11-LABEL: v_minimumnum_v4f64:
2872 ; GFX11:       ; %bb.0:
2873 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2874 ; GFX11-NEXT:    v_max_f64 v[8:9], v[8:9], v[8:9]
2875 ; GFX11-NEXT:    v_max_f64 v[0:1], v[0:1], v[0:1]
2876 ; GFX11-NEXT:    v_max_f64 v[10:11], v[10:11], v[10:11]
2877 ; GFX11-NEXT:    v_max_f64 v[2:3], v[2:3], v[2:3]
2878 ; GFX11-NEXT:    v_max_f64 v[12:13], v[12:13], v[12:13]
2879 ; GFX11-NEXT:    v_max_f64 v[4:5], v[4:5], v[4:5]
2880 ; GFX11-NEXT:    v_max_f64 v[14:15], v[14:15], v[14:15]
2881 ; GFX11-NEXT:    v_max_f64 v[6:7], v[6:7], v[6:7]
2882 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2883 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2884 ; GFX11-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2885 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2886 ; GFX11-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2887 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2889 ; GFX12-LABEL: v_minimumnum_v4f64:
2890 ; GFX12:       ; %bb.0:
2891 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2892 ; GFX12-NEXT:    s_wait_expcnt 0x0
2893 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2894 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2895 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2896 ; GFX12-NEXT:    v_max_num_f64_e32 v[8:9], v[8:9], v[8:9]
2897 ; GFX12-NEXT:    v_max_num_f64_e32 v[0:1], v[0:1], v[0:1]
2898 ; GFX12-NEXT:    v_max_num_f64_e32 v[10:11], v[10:11], v[10:11]
2899 ; GFX12-NEXT:    v_max_num_f64_e32 v[2:3], v[2:3], v[2:3]
2900 ; GFX12-NEXT:    v_max_num_f64_e32 v[12:13], v[12:13], v[12:13]
2901 ; GFX12-NEXT:    v_max_num_f64_e32 v[4:5], v[4:5], v[4:5]
2902 ; GFX12-NEXT:    v_max_num_f64_e32 v[14:15], v[14:15], v[14:15]
2903 ; GFX12-NEXT:    v_max_num_f64_e32 v[6:7], v[6:7], v[6:7]
2904 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[8:9]
2905 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[10:11]
2906 ; GFX12-NEXT:    v_min_num_f64_e32 v[4:5], v[4:5], v[12:13]
2907 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2908 ; GFX12-NEXT:    v_min_num_f64_e32 v[6:7], v[6:7], v[14:15]
2909 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2910   %result = call <4 x double> @llvm.minimumnum.v4f64(<4 x double> %x, <4 x double> %y)
2911   ret <4 x double> %result
2914 define <4 x double> @v_minimumnum_v4f64_nnan(<4 x double> %x, <4 x double> %y) {
2915 ; GFX8-LABEL: v_minimumnum_v4f64_nnan:
2916 ; GFX8:       ; %bb.0:
2917 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2918 ; GFX8-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2919 ; GFX8-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2920 ; GFX8-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2921 ; GFX8-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2922 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2924 ; GFX9-LABEL: v_minimumnum_v4f64_nnan:
2925 ; GFX9:       ; %bb.0:
2926 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2927 ; GFX9-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2928 ; GFX9-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2929 ; GFX9-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2930 ; GFX9-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2931 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2933 ; GFX10-LABEL: v_minimumnum_v4f64_nnan:
2934 ; GFX10:       ; %bb.0:
2935 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2936 ; GFX10-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2937 ; GFX10-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2938 ; GFX10-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2939 ; GFX10-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2940 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2942 ; GFX11-LABEL: v_minimumnum_v4f64_nnan:
2943 ; GFX11:       ; %bb.0:
2944 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2945 ; GFX11-NEXT:    v_min_f64 v[0:1], v[0:1], v[8:9]
2946 ; GFX11-NEXT:    v_min_f64 v[2:3], v[2:3], v[10:11]
2947 ; GFX11-NEXT:    v_min_f64 v[4:5], v[4:5], v[12:13]
2948 ; GFX11-NEXT:    v_min_f64 v[6:7], v[6:7], v[14:15]
2949 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2951 ; GFX12-LABEL: v_minimumnum_v4f64_nnan:
2952 ; GFX12:       ; %bb.0:
2953 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2954 ; GFX12-NEXT:    s_wait_expcnt 0x0
2955 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2956 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2957 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2958 ; GFX12-NEXT:    v_min_num_f64_e32 v[0:1], v[0:1], v[8:9]
2959 ; GFX12-NEXT:    v_min_num_f64_e32 v[2:3], v[2:3], v[10:11]
2960 ; GFX12-NEXT:    v_min_num_f64_e32 v[4:5], v[4:5], v[12:13]
2961 ; GFX12-NEXT:    v_min_num_f64_e32 v[6:7], v[6:7], v[14:15]
2962 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2963   %result = call nnan <4 x double> @llvm.minimumnum.v4f64(<4 x double> %x, <4 x double> %y)
2964   ret <4 x double> %result