Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.minimum.f16.ll
blob01effc24e741d16b2c2ad31e1af8d532a20ce73a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; xUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx703 < %s | FileCheck -check-prefixes=GCN,GFX7 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx803 < %s | FileCheck -check-prefixes=GCN,GFX8 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GCN,GFX940 %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1030 < %s | FileCheck -check-prefixes=GCN,GFX10 %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GCN,GFX11 %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1200 < %s | FileCheck -check-prefixes=GCN,GFX12 %s
10 define half @v_minimum_f16(half %src0, half %src1) {
11 ; GFX8-LABEL: v_minimum_f16:
12 ; GFX8:       ; %bb.0:
13 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14 ; GFX8-NEXT:    v_min_f16_e32 v2, v0, v1
15 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0x7e00
16 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
17 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
18 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
20 ; GFX9-LABEL: v_minimum_f16:
21 ; GFX9:       ; %bb.0:
22 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23 ; GFX9-NEXT:    v_min_f16_e32 v2, v0, v1
24 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
25 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
26 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
27 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29 ; GFX940-LABEL: v_minimum_f16:
30 ; GFX940:       ; %bb.0:
31 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32 ; GFX940-NEXT:    v_min_f16_e32 v2, v0, v1
33 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
34 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
35 ; GFX940-NEXT:    s_nop 1
36 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
37 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
39 ; GFX10-LABEL: v_minimum_f16:
40 ; GFX10:       ; %bb.0:
41 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42 ; GFX10-NEXT:    v_min_f16_e32 v2, v0, v1
43 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
44 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
45 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
47 ; GFX11-LABEL: v_minimum_f16:
48 ; GFX11:       ; %bb.0:
49 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
50 ; GFX11-NEXT:    v_min_f16_e32 v2, v0, v1
51 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
52 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
53 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
54 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
56 ; GFX12-LABEL: v_minimum_f16:
57 ; GFX12:       ; %bb.0:
58 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
59 ; GFX12-NEXT:    s_wait_expcnt 0x0
60 ; GFX12-NEXT:    s_wait_samplecnt 0x0
61 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
62 ; GFX12-NEXT:    s_wait_kmcnt 0x0
63 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
64 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
65   %op = call half @llvm.minimum.f16(half %src0, half %src1)
66   ret half %op
69 define half @v_minimum_f16__nnan(half %src0, half %src1) {
70 ; GFX8-LABEL: v_minimum_f16__nnan:
71 ; GFX8:       ; %bb.0:
72 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
73 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
74 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
76 ; GFX9-LABEL: v_minimum_f16__nnan:
77 ; GFX9:       ; %bb.0:
78 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
79 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
80 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
82 ; GFX940-LABEL: v_minimum_f16__nnan:
83 ; GFX940:       ; %bb.0:
84 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
85 ; GFX940-NEXT:    v_min_f16_e32 v0, v0, v1
86 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
88 ; GFX10-LABEL: v_minimum_f16__nnan:
89 ; GFX10:       ; %bb.0:
90 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
91 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
92 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
94 ; GFX11-LABEL: v_minimum_f16__nnan:
95 ; GFX11:       ; %bb.0:
96 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
97 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
98 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
100 ; GFX12-LABEL: v_minimum_f16__nnan:
101 ; GFX12:       ; %bb.0:
102 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
103 ; GFX12-NEXT:    s_wait_expcnt 0x0
104 ; GFX12-NEXT:    s_wait_samplecnt 0x0
105 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
106 ; GFX12-NEXT:    s_wait_kmcnt 0x0
107 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
108 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
109   %op = call nnan half @llvm.minimum.f16(half %src0, half %src1)
110   ret half %op
113 define half @v_minimum_f16__nsz(half %src0, half %src1) {
114 ; GFX8-LABEL: v_minimum_f16__nsz:
115 ; GFX8:       ; %bb.0:
116 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GFX8-NEXT:    v_min_f16_e32 v2, v0, v1
118 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0x7e00
119 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
120 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
121 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX9-LABEL: v_minimum_f16__nsz:
124 ; GFX9:       ; %bb.0:
125 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX9-NEXT:    v_min_f16_e32 v2, v0, v1
127 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
128 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
129 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
130 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
132 ; GFX940-LABEL: v_minimum_f16__nsz:
133 ; GFX940:       ; %bb.0:
134 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
135 ; GFX940-NEXT:    v_min_f16_e32 v2, v0, v1
136 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
137 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
138 ; GFX940-NEXT:    s_nop 1
139 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
140 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
142 ; GFX10-LABEL: v_minimum_f16__nsz:
143 ; GFX10:       ; %bb.0:
144 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
145 ; GFX10-NEXT:    v_min_f16_e32 v2, v0, v1
146 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
147 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
148 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
150 ; GFX11-LABEL: v_minimum_f16__nsz:
151 ; GFX11:       ; %bb.0:
152 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
153 ; GFX11-NEXT:    v_min_f16_e32 v2, v0, v1
154 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
155 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
156 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
157 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
159 ; GFX12-LABEL: v_minimum_f16__nsz:
160 ; GFX12:       ; %bb.0:
161 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
162 ; GFX12-NEXT:    s_wait_expcnt 0x0
163 ; GFX12-NEXT:    s_wait_samplecnt 0x0
164 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
165 ; GFX12-NEXT:    s_wait_kmcnt 0x0
166 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
167 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
168   %op = call nsz half @llvm.minimum.f16(half %src0, half %src1)
169   ret half %op
172 define half @v_minimum_f16__nnan_nsz(half %src0, half %src1) {
173 ; GFX8-LABEL: v_minimum_f16__nnan_nsz:
174 ; GFX8:       ; %bb.0:
175 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
176 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
177 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
179 ; GFX9-LABEL: v_minimum_f16__nnan_nsz:
180 ; GFX9:       ; %bb.0:
181 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
182 ; GFX9-NEXT:    v_min_f16_e32 v0, v0, v1
183 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
185 ; GFX940-LABEL: v_minimum_f16__nnan_nsz:
186 ; GFX940:       ; %bb.0:
187 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
188 ; GFX940-NEXT:    v_min_f16_e32 v0, v0, v1
189 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
191 ; GFX10-LABEL: v_minimum_f16__nnan_nsz:
192 ; GFX10:       ; %bb.0:
193 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
194 ; GFX10-NEXT:    v_min_f16_e32 v0, v0, v1
195 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
197 ; GFX11-LABEL: v_minimum_f16__nnan_nsz:
198 ; GFX11:       ; %bb.0:
199 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
200 ; GFX11-NEXT:    v_min_f16_e32 v0, v0, v1
201 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
203 ; GFX12-LABEL: v_minimum_f16__nnan_nsz:
204 ; GFX12:       ; %bb.0:
205 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
206 ; GFX12-NEXT:    s_wait_expcnt 0x0
207 ; GFX12-NEXT:    s_wait_samplecnt 0x0
208 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
209 ; GFX12-NEXT:    s_wait_kmcnt 0x0
210 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
211 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
212   %op = call nnan nsz half @llvm.minimum.f16(half %src0, half %src1)
213   ret half %op
216 define half @v_minimum_f16__nnan_src0(half %arg0, half %src1) {
217 ; GFX8-LABEL: v_minimum_f16__nnan_src0:
218 ; GFX8:       ; %bb.0:
219 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
220 ; GFX8-NEXT:    v_add_f16_e32 v0, 1.0, v0
221 ; GFX8-NEXT:    v_min_f16_e32 v2, v0, v1
222 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0x7e00
223 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
224 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
225 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
227 ; GFX9-LABEL: v_minimum_f16__nnan_src0:
228 ; GFX9:       ; %bb.0:
229 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
230 ; GFX9-NEXT:    v_add_f16_e32 v0, 1.0, v0
231 ; GFX9-NEXT:    v_min_f16_e32 v2, v0, v1
232 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
233 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
234 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
235 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
237 ; GFX940-LABEL: v_minimum_f16__nnan_src0:
238 ; GFX940:       ; %bb.0:
239 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
240 ; GFX940-NEXT:    v_add_f16_e32 v0, 1.0, v0
241 ; GFX940-NEXT:    v_min_f16_e32 v2, v0, v1
242 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
243 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
244 ; GFX940-NEXT:    s_nop 1
245 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
246 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
248 ; GFX10-LABEL: v_minimum_f16__nnan_src0:
249 ; GFX10:       ; %bb.0:
250 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
251 ; GFX10-NEXT:    v_add_f16_e32 v0, 1.0, v0
252 ; GFX10-NEXT:    v_min_f16_e32 v2, v0, v1
253 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
254 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
255 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
257 ; GFX11-LABEL: v_minimum_f16__nnan_src0:
258 ; GFX11:       ; %bb.0:
259 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
260 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
261 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
262 ; GFX11-NEXT:    v_min_f16_e32 v2, v0, v1
263 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
264 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
265 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
267 ; GFX12-LABEL: v_minimum_f16__nnan_src0:
268 ; GFX12:       ; %bb.0:
269 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
270 ; GFX12-NEXT:    s_wait_expcnt 0x0
271 ; GFX12-NEXT:    s_wait_samplecnt 0x0
272 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
273 ; GFX12-NEXT:    s_wait_kmcnt 0x0
274 ; GFX12-NEXT:    v_add_f16_e32 v0, 1.0, v0
275 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
276 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
277 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
278   %src0 = fadd nnan half %arg0, 1.0
279   %op = call half @llvm.minimum.f16(half %src0, half %src1)
280   ret half %op
283 define half @v_minimum_f16__nnan_src1(half %src0, half %arg1) {
284 ; GFX8-LABEL: v_minimum_f16__nnan_src1:
285 ; GFX8:       ; %bb.0:
286 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
287 ; GFX8-NEXT:    v_add_f16_e32 v1, 1.0, v1
288 ; GFX8-NEXT:    v_min_f16_e32 v2, v0, v1
289 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0x7e00
290 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
291 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
292 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
294 ; GFX9-LABEL: v_minimum_f16__nnan_src1:
295 ; GFX9:       ; %bb.0:
296 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
297 ; GFX9-NEXT:    v_add_f16_e32 v1, 1.0, v1
298 ; GFX9-NEXT:    v_min_f16_e32 v2, v0, v1
299 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
300 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
301 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
302 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
304 ; GFX940-LABEL: v_minimum_f16__nnan_src1:
305 ; GFX940:       ; %bb.0:
306 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307 ; GFX940-NEXT:    v_add_f16_e32 v1, 1.0, v1
308 ; GFX940-NEXT:    v_min_f16_e32 v2, v0, v1
309 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
310 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
311 ; GFX940-NEXT:    s_nop 1
312 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
313 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
315 ; GFX10-LABEL: v_minimum_f16__nnan_src1:
316 ; GFX10:       ; %bb.0:
317 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
318 ; GFX10-NEXT:    v_add_f16_e32 v1, 1.0, v1
319 ; GFX10-NEXT:    v_min_f16_e32 v2, v0, v1
320 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
321 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
322 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
324 ; GFX11-LABEL: v_minimum_f16__nnan_src1:
325 ; GFX11:       ; %bb.0:
326 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
327 ; GFX11-NEXT:    v_add_f16_e32 v1, 1.0, v1
328 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
329 ; GFX11-NEXT:    v_min_f16_e32 v2, v0, v1
330 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
331 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
332 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
334 ; GFX12-LABEL: v_minimum_f16__nnan_src1:
335 ; GFX12:       ; %bb.0:
336 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
337 ; GFX12-NEXT:    s_wait_expcnt 0x0
338 ; GFX12-NEXT:    s_wait_samplecnt 0x0
339 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
340 ; GFX12-NEXT:    s_wait_kmcnt 0x0
341 ; GFX12-NEXT:    v_add_f16_e32 v1, 1.0, v1
342 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
343 ; GFX12-NEXT:    v_minimum_f16 v0, v0, v1
344 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
345   %src1 = fadd nnan half %arg1, 1.0
346   %op = call half @llvm.minimum.f16(half %src0, half %src1)
347   ret half %op
350 define void @s_minimum_f16(half inreg %src0, half inreg %src1) {
351 ; GFX8-LABEL: s_minimum_f16:
352 ; GFX8:       ; %bb.0:
353 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
354 ; GFX8-NEXT:    v_mov_b32_e32 v0, s7
355 ; GFX8-NEXT:    v_min_f16_e32 v1, s6, v0
356 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0x7e00
357 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, s6, v0
358 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
359 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
360 ; GFX8-NEXT:    ;;#ASMSTART
361 ; GFX8-NEXT:    ; use v0
362 ; GFX8-NEXT:    ;;#ASMEND
363 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
365 ; GFX9-LABEL: s_minimum_f16:
366 ; GFX9:       ; %bb.0:
367 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
368 ; GFX9-NEXT:    v_mov_b32_e32 v0, s7
369 ; GFX9-NEXT:    v_min_f16_e32 v1, s6, v0
370 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x7e00
371 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, s6, v0
372 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
373 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
374 ; GFX9-NEXT:    ;;#ASMSTART
375 ; GFX9-NEXT:    ; use v0
376 ; GFX9-NEXT:    ;;#ASMEND
377 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
379 ; GFX940-LABEL: s_minimum_f16:
380 ; GFX940:       ; %bb.0:
381 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
382 ; GFX940-NEXT:    v_mov_b32_e32 v0, s1
383 ; GFX940-NEXT:    v_min_f16_e32 v1, s0, v0
384 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0x7e00
385 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, s0, v0
386 ; GFX940-NEXT:    s_nop 1
387 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
388 ; GFX940-NEXT:    v_and_b32_e32 v0, 0xffff, v0
389 ; GFX940-NEXT:    ;;#ASMSTART
390 ; GFX940-NEXT:    ; use v0
391 ; GFX940-NEXT:    ;;#ASMEND
392 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
394 ; GFX10-LABEL: s_minimum_f16:
395 ; GFX10:       ; %bb.0:
396 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
397 ; GFX10-NEXT:    v_min_f16_e64 v0, s6, s7
398 ; GFX10-NEXT:    v_cmp_o_f16_e64 vcc_lo, s6, s7
399 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v0, vcc_lo
400 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
401 ; GFX10-NEXT:    ;;#ASMSTART
402 ; GFX10-NEXT:    ; use v0
403 ; GFX10-NEXT:    ;;#ASMEND
404 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
406 ; GFX11-LABEL: s_minimum_f16:
407 ; GFX11:       ; %bb.0:
408 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX11-NEXT:    v_min_f16_e64 v0, s0, s1
410 ; GFX11-NEXT:    v_cmp_o_f16_e64 vcc_lo, s0, s1
411 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
412 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v0, vcc_lo
413 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
414 ; GFX11-NEXT:    ;;#ASMSTART
415 ; GFX11-NEXT:    ; use v0
416 ; GFX11-NEXT:    ;;#ASMEND
417 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
419 ; GFX12-LABEL: s_minimum_f16:
420 ; GFX12:       ; %bb.0:
421 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
422 ; GFX12-NEXT:    s_wait_expcnt 0x0
423 ; GFX12-NEXT:    s_wait_samplecnt 0x0
424 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
425 ; GFX12-NEXT:    s_wait_kmcnt 0x0
426 ; GFX12-NEXT:    s_minimum_f16 s0, s0, s1
427 ; GFX12-NEXT:    s_delay_alu instid0(SALU_CYCLE_3)
428 ; GFX12-NEXT:    s_and_b32 s0, 0xffff, s0
429 ; GFX12-NEXT:    ;;#ASMSTART
430 ; GFX12-NEXT:    ; use s0
431 ; GFX12-NEXT:    ;;#ASMEND
432 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
433   %op = call half @llvm.minimum.f16(half %src0, half %src1)
434   %cast = bitcast half %op to i16
435   %zext = zext i16 %cast to i32
436   call void asm sideeffect "; use $0", "s"(i32 %zext)
437   ret void
440 define <2 x half> @v_minimum_v2f16(<2 x half> %src0, <2 x half> %src1) {
441 ; GFX8-LABEL: v_minimum_v2f16:
442 ; GFX8:       ; %bb.0:
443 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
444 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v1
445 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
446 ; GFX8-NEXT:    v_min_f16_e32 v4, v3, v2
447 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0x7e00
448 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v3, v2
449 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v5, v4, vcc
450 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v1
451 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
452 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
453 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
454 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
455 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
457 ; GFX9-LABEL: v_minimum_v2f16:
458 ; GFX9:       ; %bb.0:
459 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
460 ; GFX9-NEXT:    v_pk_min_f16 v2, v0, v1
461 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
462 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
463 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v3, v2, vcc
464 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
465 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
466 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
467 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
468 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
469 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
471 ; GFX940-LABEL: v_minimum_v2f16:
472 ; GFX940:       ; %bb.0:
473 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
474 ; GFX940-NEXT:    v_pk_min_f16 v2, v0, v1
475 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
476 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
477 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
478 ; GFX940-NEXT:    s_nop 0
479 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v3, v2, vcc
480 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
481 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
482 ; GFX940-NEXT:    s_nop 1
483 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
484 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
485 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
487 ; GFX10-LABEL: v_minimum_v2f16:
488 ; GFX10:       ; %bb.0:
489 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490 ; GFX10-NEXT:    v_pk_min_f16 v2, v0, v1
491 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
492 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
493 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v2, vcc_lo
494 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
495 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v3, vcc_lo
496 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x5040100
497 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
499 ; GFX11-LABEL: v_minimum_v2f16:
500 ; GFX11:       ; %bb.0:
501 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
502 ; GFX11-NEXT:    v_pk_min_f16 v2, v0, v1
503 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
504 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v0
505 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
506 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
507 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
508 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
509 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v4, v3
510 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
511 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v5, vcc_lo
512 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
513 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
515 ; GFX12-LABEL: v_minimum_v2f16:
516 ; GFX12:       ; %bb.0:
517 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
518 ; GFX12-NEXT:    s_wait_expcnt 0x0
519 ; GFX12-NEXT:    s_wait_samplecnt 0x0
520 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
521 ; GFX12-NEXT:    s_wait_kmcnt 0x0
522 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v1
523 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
524   %op = call <2 x half> @llvm.minimum.v2f16(<2 x half> %src0, <2 x half> %src1)
525   ret <2 x half> %op
528 define <2 x half> @v_minimum_v2f16__nnan(<2 x half> %src0, <2 x half> %src1) {
529 ; GFX8-LABEL: v_minimum_v2f16__nnan:
530 ; GFX8:       ; %bb.0:
531 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
532 ; 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
533 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
534 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
535 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
537 ; GFX9-LABEL: v_minimum_v2f16__nnan:
538 ; GFX9:       ; %bb.0:
539 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
540 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v1
541 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
543 ; GFX940-LABEL: v_minimum_v2f16__nnan:
544 ; GFX940:       ; %bb.0:
545 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
546 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v1
547 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
549 ; GFX10-LABEL: v_minimum_v2f16__nnan:
550 ; GFX10:       ; %bb.0:
551 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
552 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v1
553 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
555 ; GFX11-LABEL: v_minimum_v2f16__nnan:
556 ; GFX11:       ; %bb.0:
557 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
558 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v1
559 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
561 ; GFX12-LABEL: v_minimum_v2f16__nnan:
562 ; GFX12:       ; %bb.0:
563 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
564 ; GFX12-NEXT:    s_wait_expcnt 0x0
565 ; GFX12-NEXT:    s_wait_samplecnt 0x0
566 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
567 ; GFX12-NEXT:    s_wait_kmcnt 0x0
568 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v1
569 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
570   %op = call nnan <2 x half> @llvm.minimum.v2f16(<2 x half> %src0, <2 x half> %src1)
571   ret <2 x half> %op
574 define <2 x half> @v_minimum_v2f16__nsz(<2 x half> %src0, <2 x half> %src1) {
575 ; GFX8-LABEL: v_minimum_v2f16__nsz:
576 ; GFX8:       ; %bb.0:
577 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
578 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v1
579 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
580 ; GFX8-NEXT:    v_min_f16_e32 v4, v3, v2
581 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0x7e00
582 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v3, v2
583 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v5, v4, vcc
584 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v1
585 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
586 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
587 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
588 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
589 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
591 ; GFX9-LABEL: v_minimum_v2f16__nsz:
592 ; GFX9:       ; %bb.0:
593 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
594 ; GFX9-NEXT:    v_pk_min_f16 v2, v0, v1
595 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x7e00
596 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
597 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v3, v2, vcc
598 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
599 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
600 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
601 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
602 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
603 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
605 ; GFX940-LABEL: v_minimum_v2f16__nsz:
606 ; GFX940:       ; %bb.0:
607 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
608 ; GFX940-NEXT:    v_pk_min_f16 v2, v0, v1
609 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0x7e00
610 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v1
611 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
612 ; GFX940-NEXT:    s_nop 0
613 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v3, v2, vcc
614 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
615 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
616 ; GFX940-NEXT:    s_nop 1
617 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
618 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
619 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
621 ; GFX10-LABEL: v_minimum_v2f16__nsz:
622 ; GFX10:       ; %bb.0:
623 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
624 ; GFX10-NEXT:    v_pk_min_f16 v2, v0, v1
625 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
626 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
627 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v2, vcc_lo
628 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v1 src0_sel:WORD_1 src1_sel:WORD_1
629 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v3, vcc_lo
630 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x5040100
631 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
633 ; GFX11-LABEL: v_minimum_v2f16__nsz:
634 ; GFX11:       ; %bb.0:
635 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
636 ; GFX11-NEXT:    v_pk_min_f16 v2, v0, v1
637 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
638 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v0
639 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v1
640 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
641 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
642 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v2, vcc_lo
643 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v4, v3
644 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
645 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v5, vcc_lo
646 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
647 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
649 ; GFX12-LABEL: v_minimum_v2f16__nsz:
650 ; GFX12:       ; %bb.0:
651 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
652 ; GFX12-NEXT:    s_wait_expcnt 0x0
653 ; GFX12-NEXT:    s_wait_samplecnt 0x0
654 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
655 ; GFX12-NEXT:    s_wait_kmcnt 0x0
656 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v1
657 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
658   %op = call nsz <2 x half> @llvm.minimum.v2f16(<2 x half> %src0, <2 x half> %src1)
659   ret <2 x half> %op
662 define <2 x half> @v_minimum_v2f16__nnan_nsz(<2 x half> %src0, <2 x half> %src1) {
663 ; GFX8-LABEL: v_minimum_v2f16__nnan_nsz:
664 ; GFX8:       ; %bb.0:
665 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
666 ; 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
667 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v1
668 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v2
669 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
671 ; GFX9-LABEL: v_minimum_v2f16__nnan_nsz:
672 ; GFX9:       ; %bb.0:
673 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
674 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v1
675 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
677 ; GFX940-LABEL: v_minimum_v2f16__nnan_nsz:
678 ; GFX940:       ; %bb.0:
679 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
680 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v1
681 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
683 ; GFX10-LABEL: v_minimum_v2f16__nnan_nsz:
684 ; GFX10:       ; %bb.0:
685 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
686 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v1
687 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
689 ; GFX11-LABEL: v_minimum_v2f16__nnan_nsz:
690 ; GFX11:       ; %bb.0:
691 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
692 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v1
693 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
695 ; GFX12-LABEL: v_minimum_v2f16__nnan_nsz:
696 ; GFX12:       ; %bb.0:
697 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
698 ; GFX12-NEXT:    s_wait_expcnt 0x0
699 ; GFX12-NEXT:    s_wait_samplecnt 0x0
700 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
701 ; GFX12-NEXT:    s_wait_kmcnt 0x0
702 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v1
703 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
704   %op = call nnan nsz <2 x half> @llvm.minimum.v2f16(<2 x half> %src0, <2 x half> %src1)
705   ret <2 x half> %op
708 define void @s_minimum_v2f16(<2 x half> inreg %src0, <2 x half> inreg %src1) {
709 ; GFX8-LABEL: s_minimum_v2f16:
710 ; GFX8:       ; %bb.0:
711 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; GFX8-NEXT:    s_lshr_b32 s4, s7, 16
713 ; GFX8-NEXT:    s_lshr_b32 s5, s6, 16
714 ; GFX8-NEXT:    v_mov_b32_e32 v0, s4
715 ; GFX8-NEXT:    v_min_f16_e32 v1, s5, v0
716 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0x7e00
717 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, s5, v0
718 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
719 ; GFX8-NEXT:    v_mov_b32_e32 v1, s7
720 ; GFX8-NEXT:    v_min_f16_e32 v3, s6, v1
721 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, s6, v1
722 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
723 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
724 ; GFX8-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
725 ; GFX8-NEXT:    ;;#ASMSTART
726 ; GFX8-NEXT:    ; use v0
727 ; GFX8-NEXT:    ;;#ASMEND
728 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
730 ; GFX9-LABEL: s_minimum_v2f16:
731 ; GFX9:       ; %bb.0:
732 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
733 ; GFX9-NEXT:    v_mov_b32_e32 v0, s7
734 ; GFX9-NEXT:    v_mov_b32_e32 v1, s7
735 ; GFX9-NEXT:    s_lshr_b32 s4, s7, 16
736 ; GFX9-NEXT:    v_pk_min_f16 v1, s6, v1
737 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x7e00
738 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, s6, v0
739 ; GFX9-NEXT:    s_lshr_b32 s5, s6, 16
740 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
741 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
742 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
743 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, s5, v3
744 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
745 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
746 ; GFX9-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
747 ; GFX9-NEXT:    ;;#ASMSTART
748 ; GFX9-NEXT:    ; use v0
749 ; GFX9-NEXT:    ;;#ASMEND
750 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
752 ; GFX940-LABEL: s_minimum_v2f16:
753 ; GFX940:       ; %bb.0:
754 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
755 ; GFX940-NEXT:    v_mov_b32_e32 v0, s1
756 ; GFX940-NEXT:    v_mov_b32_e32 v1, s1
757 ; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
758 ; GFX940-NEXT:    v_pk_min_f16 v1, s0, v1
759 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0x7e00
760 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, s0, v0
761 ; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
762 ; GFX940-NEXT:    v_mov_b32_e32 v3, s1
763 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
764 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
765 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, s0, v3
766 ; GFX940-NEXT:    v_and_b32_e32 v0, 0xffff, v0
767 ; GFX940-NEXT:    s_nop 0
768 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
769 ; GFX940-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
770 ; GFX940-NEXT:    ;;#ASMSTART
771 ; GFX940-NEXT:    ; use v0
772 ; GFX940-NEXT:    ;;#ASMEND
773 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
775 ; GFX10-LABEL: s_minimum_v2f16:
776 ; GFX10:       ; %bb.0:
777 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
778 ; GFX10-NEXT:    v_pk_min_f16 v0, s6, s7
779 ; GFX10-NEXT:    v_cmp_o_f16_e64 vcc_lo, s6, s7
780 ; GFX10-NEXT:    s_lshr_b32 s4, s7, 16
781 ; GFX10-NEXT:    s_lshr_b32 s5, s6, 16
782 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
783 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v0, vcc_lo
784 ; GFX10-NEXT:    v_cmp_o_f16_e64 vcc_lo, s5, s4
785 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
786 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v1, vcc_lo
787 ; GFX10-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
788 ; GFX10-NEXT:    ;;#ASMSTART
789 ; GFX10-NEXT:    ; use v0
790 ; GFX10-NEXT:    ;;#ASMEND
791 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
793 ; GFX11-LABEL: s_minimum_v2f16:
794 ; GFX11:       ; %bb.0:
795 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
796 ; GFX11-NEXT:    v_pk_min_f16 v0, s0, s1
797 ; GFX11-NEXT:    v_cmp_o_f16_e64 vcc_lo, s0, s1
798 ; GFX11-NEXT:    s_lshr_b32 s2, s1, 16
799 ; GFX11-NEXT:    s_lshr_b32 s0, s0, 16
800 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
801 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
802 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v0, vcc_lo
803 ; GFX11-NEXT:    v_cmp_o_f16_e64 vcc_lo, s0, s2
804 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
805 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
806 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v1, vcc_lo
807 ; GFX11-NEXT:    v_lshl_or_b32 v0, v1, 16, v0
808 ; GFX11-NEXT:    ;;#ASMSTART
809 ; GFX11-NEXT:    ; use v0
810 ; GFX11-NEXT:    ;;#ASMEND
811 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
813 ; GFX12-LABEL: s_minimum_v2f16:
814 ; GFX12:       ; %bb.0:
815 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
816 ; GFX12-NEXT:    s_wait_expcnt 0x0
817 ; GFX12-NEXT:    s_wait_samplecnt 0x0
818 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
819 ; GFX12-NEXT:    s_wait_kmcnt 0x0
820 ; GFX12-NEXT:    v_pk_minimum_f16 v0, s0, s1
821 ; GFX12-NEXT:    ;;#ASMSTART
822 ; GFX12-NEXT:    ; use v0
823 ; GFX12-NEXT:    ;;#ASMEND
824 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
825   %op = call <2 x half> @llvm.minimum.v2f16(<2 x half> %src0, <2 x half> %src1)
826   %cast = bitcast <2 x half> %op to i32
827   call void asm sideeffect "; use $0", "s"(i32 %cast)
828   ret void
831 define <3 x half> @v_minimum_v3f16(<3 x half> %src0, <3 x half> %src1) {
832 ; GFX8-LABEL: v_minimum_v3f16:
833 ; GFX8:       ; %bb.0:
834 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
835 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
836 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v0
837 ; GFX8-NEXT:    v_min_f16_e32 v6, v5, v4
838 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0x7e00
839 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v5, v4
840 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v7, v6, vcc
841 ; GFX8-NEXT:    v_min_f16_e32 v5, v1, v3
842 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
843 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v5, vcc
844 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v2
845 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
846 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v7, v3, vcc
847 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
848 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
849 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
851 ; GFX9-LABEL: v_minimum_v3f16:
852 ; GFX9:       ; %bb.0:
853 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
854 ; GFX9-NEXT:    v_pk_min_f16 v4, v1, v3
855 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x7e00
856 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
857 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
858 ; GFX9-NEXT:    v_pk_min_f16 v3, v0, v2
859 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
860 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
861 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
862 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
863 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
864 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
865 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
866 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
868 ; GFX940-LABEL: v_minimum_v3f16:
869 ; GFX940:       ; %bb.0:
870 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
871 ; GFX940-NEXT:    v_pk_min_f16 v4, v1, v3
872 ; GFX940-NEXT:    v_mov_b32_e32 v5, 0x7e00
873 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
874 ; GFX940-NEXT:    v_pk_min_f16 v3, v0, v2
875 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
876 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
877 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
878 ; GFX940-NEXT:    s_nop 1
879 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
880 ; GFX940-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
881 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
882 ; GFX940-NEXT:    s_nop 1
883 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
884 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
885 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
887 ; GFX10-LABEL: v_minimum_v3f16:
888 ; GFX10:       ; %bb.0:
889 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
890 ; GFX10-NEXT:    v_pk_min_f16 v4, v0, v2
891 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
892 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 16, v4
893 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, 0x7e00, v4, vcc_lo
894 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
895 ; GFX10-NEXT:    v_pk_min_f16 v2, v1, v3
896 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo
897 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
898 ; GFX10-NEXT:    v_perm_b32 v0, v0, v4, 0x5040100
899 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v2, vcc_lo
900 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
902 ; GFX11-LABEL: v_minimum_v3f16:
903 ; GFX11:       ; %bb.0:
904 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
905 ; GFX11-NEXT:    v_pk_min_f16 v4, v0, v2
906 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
907 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
908 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
909 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
910 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v4
911 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v4, vcc_lo
912 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v5
913 ; GFX11-NEXT:    v_pk_min_f16 v4, v1, v3
914 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
915 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v7, vcc_lo
916 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
917 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
918 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
919 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
920 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
922 ; GFX12-LABEL: v_minimum_v3f16:
923 ; GFX12:       ; %bb.0:
924 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
925 ; GFX12-NEXT:    s_wait_expcnt 0x0
926 ; GFX12-NEXT:    s_wait_samplecnt 0x0
927 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
928 ; GFX12-NEXT:    s_wait_kmcnt 0x0
929 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
930 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
931 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
932   %op = call <3 x half> @llvm.minimum.v3f16(<3 x half> %src0, <3 x half> %src1)
933   ret <3 x half> %op
936 define <3 x half> @v_minimum_v3f16__nnan(<3 x half> %src0, <3 x half> %src1) {
937 ; GFX8-LABEL: v_minimum_v3f16__nnan:
938 ; GFX8:       ; %bb.0:
939 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
940 ; 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
941 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
942 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
943 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
944 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
946 ; GFX9-LABEL: v_minimum_v3f16__nnan:
947 ; GFX9:       ; %bb.0:
948 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
949 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
950 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
951 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
953 ; GFX940-LABEL: v_minimum_v3f16__nnan:
954 ; GFX940:       ; %bb.0:
955 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
956 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v2
957 ; GFX940-NEXT:    v_pk_min_f16 v1, v1, v3
958 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
960 ; GFX10-LABEL: v_minimum_v3f16__nnan:
961 ; GFX10:       ; %bb.0:
962 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
963 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
964 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
965 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
967 ; GFX11-LABEL: v_minimum_v3f16__nnan:
968 ; GFX11:       ; %bb.0:
969 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
970 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
971 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
972 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
974 ; GFX12-LABEL: v_minimum_v3f16__nnan:
975 ; GFX12:       ; %bb.0:
976 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
977 ; GFX12-NEXT:    s_wait_expcnt 0x0
978 ; GFX12-NEXT:    s_wait_samplecnt 0x0
979 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
980 ; GFX12-NEXT:    s_wait_kmcnt 0x0
981 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
982 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
983 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
984   %op = call nnan <3 x half> @llvm.minimum.v3f16(<3 x half> %src0, <3 x half> %src1)
985   ret <3 x half> %op
988 define <3 x half> @v_minimum_v3f16__nsz(<3 x half> %src0, <3 x half> %src1) {
989 ; GFX8-LABEL: v_minimum_v3f16__nsz:
990 ; GFX8:       ; %bb.0:
991 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
992 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
993 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v0
994 ; GFX8-NEXT:    v_min_f16_e32 v6, v5, v4
995 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0x7e00
996 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v5, v4
997 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v7, v6, vcc
998 ; GFX8-NEXT:    v_min_f16_e32 v5, v1, v3
999 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1000 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v5, vcc
1001 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v2
1002 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1003 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v7, v3, vcc
1004 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
1005 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1006 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1008 ; GFX9-LABEL: v_minimum_v3f16__nsz:
1009 ; GFX9:       ; %bb.0:
1010 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1011 ; GFX9-NEXT:    v_pk_min_f16 v4, v1, v3
1012 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x7e00
1013 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1014 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1015 ; GFX9-NEXT:    v_pk_min_f16 v3, v0, v2
1016 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1017 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1018 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1019 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1020 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1021 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
1022 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
1023 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1025 ; GFX940-LABEL: v_minimum_v3f16__nsz:
1026 ; GFX940:       ; %bb.0:
1027 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1028 ; GFX940-NEXT:    v_pk_min_f16 v4, v1, v3
1029 ; GFX940-NEXT:    v_mov_b32_e32 v5, 0x7e00
1030 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1031 ; GFX940-NEXT:    v_pk_min_f16 v3, v0, v2
1032 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
1033 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1034 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1035 ; GFX940-NEXT:    s_nop 1
1036 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1037 ; GFX940-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1038 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1039 ; GFX940-NEXT:    s_nop 1
1040 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1041 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
1042 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1044 ; GFX10-LABEL: v_minimum_v3f16__nsz:
1045 ; GFX10:       ; %bb.0:
1046 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1047 ; GFX10-NEXT:    v_pk_min_f16 v4, v0, v2
1048 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1049 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 16, v4
1050 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, 0x7e00, v4, vcc_lo
1051 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1052 ; GFX10-NEXT:    v_pk_min_f16 v2, v1, v3
1053 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v5, vcc_lo
1054 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1055 ; GFX10-NEXT:    v_perm_b32 v0, v0, v4, 0x5040100
1056 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v2, vcc_lo
1057 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1059 ; GFX11-LABEL: v_minimum_v3f16__nsz:
1060 ; GFX11:       ; %bb.0:
1061 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1062 ; GFX11-NEXT:    v_pk_min_f16 v4, v0, v2
1063 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
1064 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
1065 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1066 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
1067 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v4
1068 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v4, vcc_lo
1069 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v5
1070 ; GFX11-NEXT:    v_pk_min_f16 v4, v1, v3
1071 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1072 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v7, vcc_lo
1073 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1074 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
1075 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
1076 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
1077 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1079 ; GFX12-LABEL: v_minimum_v3f16__nsz:
1080 ; GFX12:       ; %bb.0:
1081 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1082 ; GFX12-NEXT:    s_wait_expcnt 0x0
1083 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1084 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1085 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1086 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1087 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1088 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1089   %op = call nsz <3 x half> @llvm.minimum.v3f16(<3 x half> %src0, <3 x half> %src1)
1090   ret <3 x half> %op
1093 define <3 x half> @v_minimum_v3f16__nnan_nsz(<3 x half> %src0, <3 x half> %src1) {
1094 ; GFX8-LABEL: v_minimum_v3f16__nnan_nsz:
1095 ; GFX8:       ; %bb.0:
1096 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1097 ; 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
1098 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1099 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1100 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v4
1101 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1103 ; GFX9-LABEL: v_minimum_v3f16__nnan_nsz:
1104 ; GFX9:       ; %bb.0:
1105 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1106 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1107 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
1108 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1110 ; GFX940-LABEL: v_minimum_v3f16__nnan_nsz:
1111 ; GFX940:       ; %bb.0:
1112 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1113 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v2
1114 ; GFX940-NEXT:    v_pk_min_f16 v1, v1, v3
1115 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1117 ; GFX10-LABEL: v_minimum_v3f16__nnan_nsz:
1118 ; GFX10:       ; %bb.0:
1119 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1120 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1121 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1122 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1124 ; GFX11-LABEL: v_minimum_v3f16__nnan_nsz:
1125 ; GFX11:       ; %bb.0:
1126 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1127 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1128 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1129 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1131 ; GFX12-LABEL: v_minimum_v3f16__nnan_nsz:
1132 ; GFX12:       ; %bb.0:
1133 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1134 ; GFX12-NEXT:    s_wait_expcnt 0x0
1135 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1136 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1137 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1138 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1139 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1140 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1141   %op = call nnan nsz <3 x half> @llvm.minimum.v3f16(<3 x half> %src0, <3 x half> %src1)
1142   ret <3 x half> %op
1145 define <4 x half> @v_minimum_v4f16(<4 x half> %src0, <4 x half> %src1) {
1146 ; GFX8-LABEL: v_minimum_v4f16:
1147 ; GFX8:       ; %bb.0:
1148 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1149 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v3
1150 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v1
1151 ; GFX8-NEXT:    v_min_f16_e32 v6, v5, v4
1152 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0x7e00
1153 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v5, v4
1154 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v7, v6, vcc
1155 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
1156 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
1157 ; GFX8-NEXT:    v_min_f16_e32 v8, v6, v5
1158 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v6, v5
1159 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v7, v8, vcc
1160 ; GFX8-NEXT:    v_min_f16_e32 v6, v1, v3
1161 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1162 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v6, vcc
1163 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v2
1164 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1165 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v7, v3, vcc
1166 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
1167 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1168 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
1169 ; GFX8-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1170 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1172 ; GFX9-LABEL: v_minimum_v4f16:
1173 ; GFX9:       ; %bb.0:
1174 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1175 ; GFX9-NEXT:    v_pk_min_f16 v4, v1, v3
1176 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x7e00
1177 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1178 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
1179 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1180 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1181 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1182 ; GFX9-NEXT:    v_pk_min_f16 v3, v0, v2
1183 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1184 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1185 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1186 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1187 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1188 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
1189 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
1190 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
1191 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1193 ; GFX940-LABEL: v_minimum_v4f16:
1194 ; GFX940:       ; %bb.0:
1195 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1196 ; GFX940-NEXT:    v_pk_min_f16 v4, v1, v3
1197 ; GFX940-NEXT:    v_mov_b32_e32 v5, 0x7e00
1198 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1199 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
1200 ; GFX940-NEXT:    s_nop 0
1201 ; GFX940-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
1202 ; GFX940-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1203 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1204 ; GFX940-NEXT:    v_pk_min_f16 v3, v0, v2
1205 ; GFX940-NEXT:    s_nop 0
1206 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1207 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1208 ; GFX940-NEXT:    v_perm_b32 v1, v1, v6, s0
1209 ; GFX940-NEXT:    s_nop 0
1210 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1211 ; GFX940-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1212 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1213 ; GFX940-NEXT:    s_nop 1
1214 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1215 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
1216 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1218 ; GFX10-LABEL: v_minimum_v4f16:
1219 ; GFX10:       ; %bb.0:
1220 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1221 ; GFX10-NEXT:    v_pk_min_f16 v4, v1, v3
1222 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1223 ; GFX10-NEXT:    v_pk_min_f16 v5, v0, v2
1224 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v4, vcc_lo
1225 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1226 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 16, v5
1227 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1228 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, 0x7e00, v5, vcc_lo
1229 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1230 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v7, vcc_lo
1231 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1232 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x5040100
1233 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
1234 ; GFX10-NEXT:    v_perm_b32 v1, v1, v6, 0x5040100
1235 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1237 ; GFX11-LABEL: v_minimum_v4f16:
1238 ; GFX11:       ; %bb.0:
1239 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1240 ; GFX11-NEXT:    v_pk_min_f16 v4, v1, v3
1241 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1242 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v3
1243 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
1244 ; GFX11-NEXT:    v_pk_min_f16 v7, v0, v2
1245 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v2
1246 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
1247 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
1248 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1249 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 16, v7
1250 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1251 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v7, vcc_lo
1252 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v8
1253 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1254 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v9, vcc_lo
1255 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v5
1256 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
1257 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v4, vcc_lo
1258 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1259 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
1260 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1262 ; GFX12-LABEL: v_minimum_v4f16:
1263 ; GFX12:       ; %bb.0:
1264 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1265 ; GFX12-NEXT:    s_wait_expcnt 0x0
1266 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1267 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1268 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1269 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1270 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1271 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1272   %op = call <4 x half> @llvm.minimum.v4f16(<4 x half> %src0, <4 x half> %src1)
1273   ret <4 x half> %op
1276 define <4 x half> @v_minimum_v4f16__nnan(<4 x half> %src0, <4 x half> %src1) {
1277 ; GFX8-LABEL: v_minimum_v4f16__nnan:
1278 ; GFX8:       ; %bb.0:
1279 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1280 ; 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
1281 ; 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
1282 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1283 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1284 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
1285 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
1286 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1288 ; GFX9-LABEL: v_minimum_v4f16__nnan:
1289 ; GFX9:       ; %bb.0:
1290 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1291 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1292 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
1293 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1295 ; GFX940-LABEL: v_minimum_v4f16__nnan:
1296 ; GFX940:       ; %bb.0:
1297 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1298 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v2
1299 ; GFX940-NEXT:    v_pk_min_f16 v1, v1, v3
1300 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1302 ; GFX10-LABEL: v_minimum_v4f16__nnan:
1303 ; GFX10:       ; %bb.0:
1304 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1305 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1306 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1307 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1309 ; GFX11-LABEL: v_minimum_v4f16__nnan:
1310 ; GFX11:       ; %bb.0:
1311 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1312 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1313 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1314 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1316 ; GFX12-LABEL: v_minimum_v4f16__nnan:
1317 ; GFX12:       ; %bb.0:
1318 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1319 ; GFX12-NEXT:    s_wait_expcnt 0x0
1320 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1321 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1322 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1323 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1324 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1325 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1326   %op = call nnan <4 x half> @llvm.minimum.v4f16(<4 x half> %src0, <4 x half> %src1)
1327   ret <4 x half> %op
1330 define <4 x half> @v_minimum_v4f16__nsz(<4 x half> %src0, <4 x half> %src1) {
1331 ; GFX8-LABEL: v_minimum_v4f16__nsz:
1332 ; GFX8:       ; %bb.0:
1333 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1334 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v3
1335 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v1
1336 ; GFX8-NEXT:    v_min_f16_e32 v6, v5, v4
1337 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0x7e00
1338 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v5, v4
1339 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v7, v6, vcc
1340 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v2
1341 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v0
1342 ; GFX8-NEXT:    v_min_f16_e32 v8, v6, v5
1343 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v6, v5
1344 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v7, v8, vcc
1345 ; GFX8-NEXT:    v_min_f16_e32 v6, v1, v3
1346 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1347 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v6, vcc
1348 ; GFX8-NEXT:    v_min_f16_e32 v3, v0, v2
1349 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1350 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v7, v3, vcc
1351 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
1352 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1353 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
1354 ; GFX8-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1355 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1357 ; GFX9-LABEL: v_minimum_v4f16__nsz:
1358 ; GFX9:       ; %bb.0:
1359 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1360 ; GFX9-NEXT:    v_pk_min_f16 v4, v1, v3
1361 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x7e00
1362 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1363 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
1364 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1365 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1366 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1367 ; GFX9-NEXT:    v_pk_min_f16 v3, v0, v2
1368 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1369 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1370 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1371 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1372 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1373 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
1374 ; GFX9-NEXT:    v_perm_b32 v0, v0, v4, s4
1375 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
1376 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1378 ; GFX940-LABEL: v_minimum_v4f16__nsz:
1379 ; GFX940:       ; %bb.0:
1380 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1381 ; GFX940-NEXT:    v_pk_min_f16 v4, v1, v3
1382 ; GFX940-NEXT:    v_mov_b32_e32 v5, 0x7e00
1383 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v3
1384 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
1385 ; GFX940-NEXT:    s_nop 0
1386 ; GFX940-NEXT:    v_cndmask_b32_e32 v6, v5, v4, vcc
1387 ; GFX940-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1388 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1389 ; GFX940-NEXT:    v_pk_min_f16 v3, v0, v2
1390 ; GFX940-NEXT:    s_nop 0
1391 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
1392 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v2
1393 ; GFX940-NEXT:    v_perm_b32 v1, v1, v6, s0
1394 ; GFX940-NEXT:    s_nop 0
1395 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v3, vcc
1396 ; GFX940-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1397 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1398 ; GFX940-NEXT:    s_nop 1
1399 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v5, v3, vcc
1400 ; GFX940-NEXT:    v_perm_b32 v0, v0, v4, s0
1401 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1403 ; GFX10-LABEL: v_minimum_v4f16__nsz:
1404 ; GFX10:       ; %bb.0:
1405 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1406 ; GFX10-NEXT:    v_pk_min_f16 v4, v1, v3
1407 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1408 ; GFX10-NEXT:    v_pk_min_f16 v5, v0, v2
1409 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v4, vcc_lo
1410 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1411 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 16, v5
1412 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1413 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, 0x7e00, v5, vcc_lo
1414 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v2 src0_sel:WORD_1 src1_sel:WORD_1
1415 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v7, vcc_lo
1416 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v1, v3 src0_sel:WORD_1 src1_sel:WORD_1
1417 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x5040100
1418 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
1419 ; GFX10-NEXT:    v_perm_b32 v1, v1, v6, 0x5040100
1420 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1422 ; GFX11-LABEL: v_minimum_v4f16__nsz:
1423 ; GFX11:       ; %bb.0:
1424 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1425 ; GFX11-NEXT:    v_pk_min_f16 v4, v1, v3
1426 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v3
1427 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v3
1428 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
1429 ; GFX11-NEXT:    v_pk_min_f16 v7, v0, v2
1430 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v2
1431 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v4, vcc_lo
1432 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v0
1433 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v2
1434 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 16, v7
1435 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
1436 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v7, vcc_lo
1437 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v8
1438 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1439 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v9, vcc_lo
1440 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v5
1441 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
1442 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v4, vcc_lo
1443 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1444 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
1445 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1447 ; GFX12-LABEL: v_minimum_v4f16__nsz:
1448 ; GFX12:       ; %bb.0:
1449 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1450 ; GFX12-NEXT:    s_wait_expcnt 0x0
1451 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1452 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1453 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1454 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1455 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1456 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1457   %op = call nsz <4 x half> @llvm.minimum.v4f16(<4 x half> %src0, <4 x half> %src1)
1458   ret <4 x half> %op
1461 define <4 x half> @v_minimum_v4f16__nnan_nsz(<4 x half> %src0, <4 x half> %src1) {
1462 ; GFX8-LABEL: v_minimum_v4f16__nnan_nsz:
1463 ; GFX8:       ; %bb.0:
1464 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1465 ; 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
1466 ; 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
1467 ; GFX8-NEXT:    v_min_f16_e32 v1, v1, v3
1468 ; GFX8-NEXT:    v_min_f16_e32 v0, v0, v2
1469 ; GFX8-NEXT:    v_or_b32_e32 v0, v0, v5
1470 ; GFX8-NEXT:    v_or_b32_e32 v1, v1, v4
1471 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1473 ; GFX9-LABEL: v_minimum_v4f16__nnan_nsz:
1474 ; GFX9:       ; %bb.0:
1475 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1476 ; GFX9-NEXT:    v_pk_min_f16 v0, v0, v2
1477 ; GFX9-NEXT:    v_pk_min_f16 v1, v1, v3
1478 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1480 ; GFX940-LABEL: v_minimum_v4f16__nnan_nsz:
1481 ; GFX940:       ; %bb.0:
1482 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1483 ; GFX940-NEXT:    v_pk_min_f16 v0, v0, v2
1484 ; GFX940-NEXT:    v_pk_min_f16 v1, v1, v3
1485 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1487 ; GFX10-LABEL: v_minimum_v4f16__nnan_nsz:
1488 ; GFX10:       ; %bb.0:
1489 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1490 ; GFX10-NEXT:    v_pk_min_f16 v0, v0, v2
1491 ; GFX10-NEXT:    v_pk_min_f16 v1, v1, v3
1492 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1494 ; GFX11-LABEL: v_minimum_v4f16__nnan_nsz:
1495 ; GFX11:       ; %bb.0:
1496 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1497 ; GFX11-NEXT:    v_pk_min_f16 v0, v0, v2
1498 ; GFX11-NEXT:    v_pk_min_f16 v1, v1, v3
1499 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1501 ; GFX12-LABEL: v_minimum_v4f16__nnan_nsz:
1502 ; GFX12:       ; %bb.0:
1503 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1504 ; GFX12-NEXT:    s_wait_expcnt 0x0
1505 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1506 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1507 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1508 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v2
1509 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v3
1510 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1511   %op = call nnan nsz <4 x half> @llvm.minimum.v4f16(<4 x half> %src0, <4 x half> %src1)
1512   ret <4 x half> %op
1515 define <8 x half> @v_minimum_v8f16(<8 x half> %src0, <8 x half> %src1) {
1516 ; GFX8-LABEL: v_minimum_v8f16:
1517 ; GFX8:       ; %bb.0:
1518 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1519 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v7
1520 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v3
1521 ; GFX8-NEXT:    v_min_f16_e32 v10, v9, v8
1522 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0x7e00
1523 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v9, v8
1524 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v11, v10, vcc
1525 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v6
1526 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
1527 ; GFX8-NEXT:    v_min_f16_e32 v12, v10, v9
1528 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v10, v9
1529 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v11, v12, vcc
1530 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v5
1531 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v1
1532 ; GFX8-NEXT:    v_min_f16_e32 v13, v12, v10
1533 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v12, v10
1534 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v11, v13, vcc
1535 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v4
1536 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v0
1537 ; GFX8-NEXT:    v_min_f16_e32 v14, v13, v12
1538 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v13, v12
1539 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v11, v14, vcc
1540 ; GFX8-NEXT:    v_min_f16_e32 v13, v3, v7
1541 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v3, v7
1542 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v13, vcc
1543 ; GFX8-NEXT:    v_min_f16_e32 v7, v2, v6
1544 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v2, v6
1545 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v11, v7, vcc
1546 ; GFX8-NEXT:    v_min_f16_e32 v6, v1, v5
1547 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v5
1548 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v11, v6, vcc
1549 ; GFX8-NEXT:    v_min_f16_e32 v5, v0, v4
1550 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v4
1551 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v11, v5, vcc
1552 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v12
1553 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1554 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v10
1555 ; GFX8-NEXT:    v_or_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1556 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v9
1557 ; GFX8-NEXT:    v_or_b32_sdwa v2, v2, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1558 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
1559 ; GFX8-NEXT:    v_or_b32_sdwa v3, v3, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1560 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1562 ; GFX9-LABEL: v_minimum_v8f16:
1563 ; GFX9:       ; %bb.0:
1564 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1565 ; GFX9-NEXT:    v_pk_min_f16 v8, v3, v7
1566 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0x7e00
1567 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v3, v7
1568 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v9, v8, vcc
1569 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1570 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v7 src0_sel:WORD_1 src1_sel:WORD_1
1571 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v9, v8, vcc
1572 ; GFX9-NEXT:    v_pk_min_f16 v7, v2, v6
1573 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v2, v6
1574 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v9, v7, vcc
1575 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1576 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v2, v6 src0_sel:WORD_1 src1_sel:WORD_1
1577 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v9, v7, vcc
1578 ; GFX9-NEXT:    v_pk_min_f16 v6, v1, v5
1579 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v5
1580 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v9, v6, vcc
1581 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1582 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v5 src0_sel:WORD_1 src1_sel:WORD_1
1583 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v6, vcc
1584 ; GFX9-NEXT:    v_pk_min_f16 v5, v0, v4
1585 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v4
1586 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v9, v5, vcc
1587 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1588 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v4 src0_sel:WORD_1 src1_sel:WORD_1
1589 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v9, v5, vcc
1590 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
1591 ; GFX9-NEXT:    v_perm_b32 v0, v0, v6, s4
1592 ; GFX9-NEXT:    v_perm_b32 v1, v1, v7, s4
1593 ; GFX9-NEXT:    v_perm_b32 v2, v2, v8, s4
1594 ; GFX9-NEXT:    v_perm_b32 v3, v3, v10, s4
1595 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1597 ; GFX940-LABEL: v_minimum_v8f16:
1598 ; GFX940:       ; %bb.0:
1599 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1600 ; GFX940-NEXT:    v_pk_min_f16 v8, v3, v7
1601 ; GFX940-NEXT:    v_mov_b32_e32 v9, 0x7e00
1602 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v3, v7
1603 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
1604 ; GFX940-NEXT:    s_nop 0
1605 ; GFX940-NEXT:    v_cndmask_b32_e32 v10, v9, v8, vcc
1606 ; GFX940-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1607 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v7 src0_sel:WORD_1 src1_sel:WORD_1
1608 ; GFX940-NEXT:    v_pk_min_f16 v7, v2, v6
1609 ; GFX940-NEXT:    s_nop 0
1610 ; GFX940-NEXT:    v_cndmask_b32_e32 v3, v9, v8, vcc
1611 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v2, v6
1612 ; GFX940-NEXT:    v_perm_b32 v3, v3, v10, s0
1613 ; GFX940-NEXT:    s_nop 0
1614 ; GFX940-NEXT:    v_cndmask_b32_e32 v8, v9, v7, vcc
1615 ; GFX940-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1616 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v2, v6 src0_sel:WORD_1 src1_sel:WORD_1
1617 ; GFX940-NEXT:    v_pk_min_f16 v6, v1, v5
1618 ; GFX940-NEXT:    s_nop 0
1619 ; GFX940-NEXT:    v_cndmask_b32_e32 v2, v9, v7, vcc
1620 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v5
1621 ; GFX940-NEXT:    v_perm_b32 v2, v2, v8, s0
1622 ; GFX940-NEXT:    s_nop 0
1623 ; GFX940-NEXT:    v_cndmask_b32_e32 v7, v9, v6, vcc
1624 ; GFX940-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1625 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v5 src0_sel:WORD_1 src1_sel:WORD_1
1626 ; GFX940-NEXT:    v_pk_min_f16 v5, v0, v4
1627 ; GFX940-NEXT:    s_nop 0
1628 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v9, v6, vcc
1629 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v4
1630 ; GFX940-NEXT:    v_perm_b32 v1, v1, v7, s0
1631 ; GFX940-NEXT:    s_nop 0
1632 ; GFX940-NEXT:    v_cndmask_b32_e32 v6, v9, v5, vcc
1633 ; GFX940-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1634 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v4 src0_sel:WORD_1 src1_sel:WORD_1
1635 ; GFX940-NEXT:    s_nop 1
1636 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v9, v5, vcc
1637 ; GFX940-NEXT:    v_perm_b32 v0, v0, v6, s0
1638 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1640 ; GFX10-LABEL: v_minimum_v8f16:
1641 ; GFX10:       ; %bb.0:
1642 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1643 ; GFX10-NEXT:    v_pk_min_f16 v8, v3, v7
1644 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v7
1645 ; GFX10-NEXT:    v_pk_min_f16 v9, v2, v6
1646 ; GFX10-NEXT:    v_pk_min_f16 v12, v1, v5
1647 ; GFX10-NEXT:    v_pk_min_f16 v13, v0, v4
1648 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, 0x7e00, v8, vcc_lo
1649 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v2, v6
1650 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 16, v9
1651 ; GFX10-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1652 ; GFX10-NEXT:    v_cndmask_b32_e32 v9, 0x7e00, v9, vcc_lo
1653 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v2, v6 src0_sel:WORD_1 src1_sel:WORD_1
1654 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v11, vcc_lo
1655 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v5
1656 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 16, v13
1657 ; GFX10-NEXT:    v_perm_b32 v2, v2, v9, 0x5040100
1658 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v12, vcc_lo
1659 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v4
1660 ; GFX10-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
1661 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, 0x7e00, v13, vcc_lo
1662 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v4 src0_sel:WORD_1 src1_sel:WORD_1
1663 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v11, vcc_lo
1664 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v1, v5 src0_sel:WORD_1 src1_sel:WORD_1
1665 ; GFX10-NEXT:    v_perm_b32 v0, v0, v13, 0x5040100
1666 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v12, vcc_lo
1667 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v3, v7 src0_sel:WORD_1 src1_sel:WORD_1
1668 ; GFX10-NEXT:    v_perm_b32 v1, v1, v6, 0x5040100
1669 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v8, vcc_lo
1670 ; GFX10-NEXT:    v_perm_b32 v3, v3, v10, 0x5040100
1671 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1673 ; GFX11-LABEL: v_minimum_v8f16:
1674 ; GFX11:       ; %bb.0:
1675 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1676 ; GFX11-NEXT:    v_pk_min_f16 v8, v3, v7
1677 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v7
1678 ; GFX11-NEXT:    v_pk_min_f16 v10, v2, v6
1679 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 16, v6
1680 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 16, v2
1681 ; GFX11-NEXT:    v_pk_min_f16 v14, v1, v5
1682 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, 0x7e00, v8, vcc_lo
1683 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v2, v6
1684 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 16, v10
1685 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1686 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1687 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1688 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v10, vcc_lo
1689 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v12, v11
1690 ; GFX11-NEXT:    v_pk_min_f16 v11, v0, v4
1691 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 16, v4
1692 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v13, vcc_lo
1693 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v5
1694 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 16, v0
1695 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1696 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1697 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 16, v11
1698 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, 0x7e00, v14, vcc_lo
1699 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v4
1700 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1701 ; GFX11-NEXT:    v_perm_b32 v2, v6, v2, 0x5040100
1702 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v11, vcc_lo
1703 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v13, v12
1704 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x7e00, v15, vcc_lo
1705 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v5
1706 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
1707 ; GFX11-NEXT:    v_perm_b32 v0, v4, v0, 0x5040100
1708 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v14, vcc_lo
1709 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v7
1710 ; GFX11-NEXT:    v_perm_b32 v1, v1, v10, 0x5040100
1711 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v8, vcc_lo
1712 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1713 ; GFX11-NEXT:    v_perm_b32 v3, v3, v9, 0x5040100
1714 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1716 ; GFX12-LABEL: v_minimum_v8f16:
1717 ; GFX12:       ; %bb.0:
1718 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1719 ; GFX12-NEXT:    s_wait_expcnt 0x0
1720 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1721 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1722 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1723 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v4
1724 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v5
1725 ; GFX12-NEXT:    v_pk_minimum_f16 v2, v2, v6
1726 ; GFX12-NEXT:    v_pk_minimum_f16 v3, v3, v7
1727 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1728   %op = call <8 x half> @llvm.minimum.v8f16(<8 x half> %src0, <8 x half> %src1)
1729   ret <8 x half> %op
1732 define <16 x half> @v_minimum_v16f16(<16 x half> %src0, <16 x half> %src1) {
1733 ; GFX8-LABEL: v_minimum_v16f16:
1734 ; GFX8:       ; %bb.0:
1735 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1736 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v15
1737 ; GFX8-NEXT:    v_lshrrev_b32_e32 v17, 16, v7
1738 ; GFX8-NEXT:    v_min_f16_e32 v18, v17, v16
1739 ; GFX8-NEXT:    v_mov_b32_e32 v19, 0x7e00
1740 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v17, v16
1741 ; GFX8-NEXT:    v_cndmask_b32_e32 v16, v19, v18, vcc
1742 ; GFX8-NEXT:    v_lshrrev_b32_e32 v17, 16, v14
1743 ; GFX8-NEXT:    v_lshrrev_b32_e32 v18, 16, v6
1744 ; GFX8-NEXT:    v_min_f16_e32 v20, v18, v17
1745 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v18, v17
1746 ; GFX8-NEXT:    v_cndmask_b32_e32 v17, v19, v20, vcc
1747 ; GFX8-NEXT:    v_lshrrev_b32_e32 v18, 16, v13
1748 ; GFX8-NEXT:    v_lshrrev_b32_e32 v20, 16, v5
1749 ; GFX8-NEXT:    v_min_f16_e32 v21, v20, v18
1750 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v20, v18
1751 ; GFX8-NEXT:    v_cndmask_b32_e32 v18, v19, v21, vcc
1752 ; GFX8-NEXT:    v_lshrrev_b32_e32 v20, 16, v12
1753 ; GFX8-NEXT:    v_lshrrev_b32_e32 v21, 16, v4
1754 ; GFX8-NEXT:    v_min_f16_e32 v22, v21, v20
1755 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v21, v20
1756 ; GFX8-NEXT:    v_cndmask_b32_e32 v20, v19, v22, vcc
1757 ; GFX8-NEXT:    v_lshrrev_b32_e32 v21, 16, v11
1758 ; GFX8-NEXT:    v_lshrrev_b32_e32 v22, 16, v3
1759 ; GFX8-NEXT:    v_min_f16_e32 v23, v22, v21
1760 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v22, v21
1761 ; GFX8-NEXT:    v_cndmask_b32_e32 v21, v19, v23, vcc
1762 ; GFX8-NEXT:    v_lshrrev_b32_e32 v22, 16, v10
1763 ; GFX8-NEXT:    v_lshrrev_b32_e32 v23, 16, v2
1764 ; GFX8-NEXT:    v_min_f16_e32 v24, v23, v22
1765 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v23, v22
1766 ; GFX8-NEXT:    v_cndmask_b32_e32 v22, v19, v24, vcc
1767 ; GFX8-NEXT:    v_lshrrev_b32_e32 v23, 16, v9
1768 ; GFX8-NEXT:    v_lshrrev_b32_e32 v24, 16, v1
1769 ; GFX8-NEXT:    v_min_f16_e32 v25, v24, v23
1770 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v24, v23
1771 ; GFX8-NEXT:    v_cndmask_b32_e32 v23, v19, v25, vcc
1772 ; GFX8-NEXT:    v_lshrrev_b32_e32 v24, 16, v8
1773 ; GFX8-NEXT:    v_lshrrev_b32_e32 v25, 16, v0
1774 ; GFX8-NEXT:    v_min_f16_e32 v26, v25, v24
1775 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v25, v24
1776 ; GFX8-NEXT:    v_cndmask_b32_e32 v24, v19, v26, vcc
1777 ; GFX8-NEXT:    v_min_f16_e32 v25, v7, v15
1778 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v7, v15
1779 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v19, v25, vcc
1780 ; GFX8-NEXT:    v_min_f16_e32 v15, v6, v14
1781 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v6, v14
1782 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v19, v15, vcc
1783 ; GFX8-NEXT:    v_min_f16_e32 v14, v5, v13
1784 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v5, v13
1785 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v19, v14, vcc
1786 ; GFX8-NEXT:    v_min_f16_e32 v13, v4, v12
1787 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v4, v12
1788 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v19, v13, vcc
1789 ; GFX8-NEXT:    v_min_f16_e32 v12, v3, v11
1790 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v3, v11
1791 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v19, v12, vcc
1792 ; GFX8-NEXT:    v_min_f16_e32 v11, v2, v10
1793 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v2, v10
1794 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v19, v11, vcc
1795 ; GFX8-NEXT:    v_min_f16_e32 v10, v1, v9
1796 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v1, v9
1797 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v19, v10, vcc
1798 ; GFX8-NEXT:    v_min_f16_e32 v9, v0, v8
1799 ; GFX8-NEXT:    v_cmp_o_f16_e32 vcc, v0, v8
1800 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v19, v9, vcc
1801 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v24
1802 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1803 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v23
1804 ; GFX8-NEXT:    v_or_b32_sdwa v1, v1, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1805 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v22
1806 ; GFX8-NEXT:    v_or_b32_sdwa v2, v2, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1807 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v21
1808 ; GFX8-NEXT:    v_or_b32_sdwa v3, v3, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1809 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v20
1810 ; GFX8-NEXT:    v_or_b32_sdwa v4, v4, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1811 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v18
1812 ; GFX8-NEXT:    v_or_b32_sdwa v5, v5, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1813 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v17
1814 ; GFX8-NEXT:    v_or_b32_sdwa v6, v6, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1815 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v16
1816 ; GFX8-NEXT:    v_or_b32_sdwa v7, v7, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1817 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1819 ; GFX9-LABEL: v_minimum_v16f16:
1820 ; GFX9:       ; %bb.0:
1821 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1822 ; GFX9-NEXT:    v_pk_min_f16 v16, v7, v15
1823 ; GFX9-NEXT:    v_mov_b32_e32 v17, 0x7e00
1824 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v7, v15
1825 ; GFX9-NEXT:    v_cndmask_b32_e32 v18, v17, v16, vcc
1826 ; GFX9-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
1827 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v7, v15 src0_sel:WORD_1 src1_sel:WORD_1
1828 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v17, v16, vcc
1829 ; GFX9-NEXT:    v_pk_min_f16 v15, v6, v14
1830 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v6, v14
1831 ; GFX9-NEXT:    v_cndmask_b32_e32 v16, v17, v15, vcc
1832 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
1833 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v6, v14 src0_sel:WORD_1 src1_sel:WORD_1
1834 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v17, v15, vcc
1835 ; GFX9-NEXT:    v_pk_min_f16 v14, v5, v13
1836 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v5, v13
1837 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v17, v14, vcc
1838 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1839 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v5, v13 src0_sel:WORD_1 src1_sel:WORD_1
1840 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v17, v14, vcc
1841 ; GFX9-NEXT:    v_pk_min_f16 v13, v4, v12
1842 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v4, v12
1843 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v13, vcc
1844 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
1845 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v4, v12 src0_sel:WORD_1 src1_sel:WORD_1
1846 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v17, v13, vcc
1847 ; GFX9-NEXT:    v_pk_min_f16 v12, v3, v11
1848 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v3, v11
1849 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v17, v12, vcc
1850 ; GFX9-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
1851 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v11 src0_sel:WORD_1 src1_sel:WORD_1
1852 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v17, v12, vcc
1853 ; GFX9-NEXT:    v_pk_min_f16 v11, v2, v10
1854 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v2, v10
1855 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v17, v11, vcc
1856 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
1857 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v2, v10 src0_sel:WORD_1 src1_sel:WORD_1
1858 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v17, v11, vcc
1859 ; GFX9-NEXT:    v_pk_min_f16 v10, v1, v9
1860 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v1, v9
1861 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v17, v10, vcc
1862 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
1863 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v9 src0_sel:WORD_1 src1_sel:WORD_1
1864 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v10, vcc
1865 ; GFX9-NEXT:    v_pk_min_f16 v9, v0, v8
1866 ; GFX9-NEXT:    v_cmp_o_f16_e32 vcc, v0, v8
1867 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v17, v9, vcc
1868 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
1869 ; GFX9-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v8 src0_sel:WORD_1 src1_sel:WORD_1
1870 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v17, v9, vcc
1871 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
1872 ; GFX9-NEXT:    v_perm_b32 v0, v0, v10, s4
1873 ; GFX9-NEXT:    v_perm_b32 v1, v1, v11, s4
1874 ; GFX9-NEXT:    v_perm_b32 v2, v2, v12, s4
1875 ; GFX9-NEXT:    v_perm_b32 v3, v3, v13, s4
1876 ; GFX9-NEXT:    v_perm_b32 v4, v4, v14, s4
1877 ; GFX9-NEXT:    v_perm_b32 v5, v5, v15, s4
1878 ; GFX9-NEXT:    v_perm_b32 v6, v6, v16, s4
1879 ; GFX9-NEXT:    v_perm_b32 v7, v7, v18, s4
1880 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1882 ; GFX940-LABEL: v_minimum_v16f16:
1883 ; GFX940:       ; %bb.0:
1884 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1885 ; GFX940-NEXT:    v_pk_min_f16 v16, v7, v15
1886 ; GFX940-NEXT:    v_mov_b32_e32 v17, 0x7e00
1887 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v7, v15
1888 ; GFX940-NEXT:    s_mov_b32 s0, 0x5040100
1889 ; GFX940-NEXT:    s_nop 0
1890 ; GFX940-NEXT:    v_cndmask_b32_e32 v18, v17, v16, vcc
1891 ; GFX940-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
1892 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v7, v15 src0_sel:WORD_1 src1_sel:WORD_1
1893 ; GFX940-NEXT:    v_pk_min_f16 v15, v6, v14
1894 ; GFX940-NEXT:    s_nop 0
1895 ; GFX940-NEXT:    v_cndmask_b32_e32 v7, v17, v16, vcc
1896 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v6, v14
1897 ; GFX940-NEXT:    v_perm_b32 v7, v7, v18, s0
1898 ; GFX940-NEXT:    s_nop 0
1899 ; GFX940-NEXT:    v_cndmask_b32_e32 v16, v17, v15, vcc
1900 ; GFX940-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
1901 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v6, v14 src0_sel:WORD_1 src1_sel:WORD_1
1902 ; GFX940-NEXT:    v_pk_min_f16 v14, v5, v13
1903 ; GFX940-NEXT:    s_nop 0
1904 ; GFX940-NEXT:    v_cndmask_b32_e32 v6, v17, v15, vcc
1905 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v5, v13
1906 ; GFX940-NEXT:    v_perm_b32 v6, v6, v16, s0
1907 ; GFX940-NEXT:    s_nop 0
1908 ; GFX940-NEXT:    v_cndmask_b32_e32 v15, v17, v14, vcc
1909 ; GFX940-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1910 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v5, v13 src0_sel:WORD_1 src1_sel:WORD_1
1911 ; GFX940-NEXT:    v_pk_min_f16 v13, v4, v12
1912 ; GFX940-NEXT:    s_nop 0
1913 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v17, v14, vcc
1914 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v4, v12
1915 ; GFX940-NEXT:    v_perm_b32 v5, v5, v15, s0
1916 ; GFX940-NEXT:    s_nop 0
1917 ; GFX940-NEXT:    v_cndmask_b32_e32 v14, v17, v13, vcc
1918 ; GFX940-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
1919 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v4, v12 src0_sel:WORD_1 src1_sel:WORD_1
1920 ; GFX940-NEXT:    v_pk_min_f16 v12, v3, v11
1921 ; GFX940-NEXT:    s_nop 0
1922 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v17, v13, vcc
1923 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v3, v11
1924 ; GFX940-NEXT:    v_perm_b32 v4, v4, v14, s0
1925 ; GFX940-NEXT:    s_nop 0
1926 ; GFX940-NEXT:    v_cndmask_b32_e32 v13, v17, v12, vcc
1927 ; GFX940-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
1928 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v3, v11 src0_sel:WORD_1 src1_sel:WORD_1
1929 ; GFX940-NEXT:    v_pk_min_f16 v11, v2, v10
1930 ; GFX940-NEXT:    s_nop 0
1931 ; GFX940-NEXT:    v_cndmask_b32_e32 v3, v17, v12, vcc
1932 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v2, v10
1933 ; GFX940-NEXT:    v_perm_b32 v3, v3, v13, s0
1934 ; GFX940-NEXT:    s_nop 0
1935 ; GFX940-NEXT:    v_cndmask_b32_e32 v12, v17, v11, vcc
1936 ; GFX940-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
1937 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v2, v10 src0_sel:WORD_1 src1_sel:WORD_1
1938 ; GFX940-NEXT:    v_pk_min_f16 v10, v1, v9
1939 ; GFX940-NEXT:    s_nop 0
1940 ; GFX940-NEXT:    v_cndmask_b32_e32 v2, v17, v11, vcc
1941 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v1, v9
1942 ; GFX940-NEXT:    v_perm_b32 v2, v2, v12, s0
1943 ; GFX940-NEXT:    s_nop 0
1944 ; GFX940-NEXT:    v_cndmask_b32_e32 v11, v17, v10, vcc
1945 ; GFX940-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
1946 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v1, v9 src0_sel:WORD_1 src1_sel:WORD_1
1947 ; GFX940-NEXT:    v_pk_min_f16 v9, v0, v8
1948 ; GFX940-NEXT:    s_nop 0
1949 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v17, v10, vcc
1950 ; GFX940-NEXT:    v_cmp_o_f16_e32 vcc, v0, v8
1951 ; GFX940-NEXT:    v_perm_b32 v1, v1, v11, s0
1952 ; GFX940-NEXT:    s_nop 0
1953 ; GFX940-NEXT:    v_cndmask_b32_e32 v10, v17, v9, vcc
1954 ; GFX940-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
1955 ; GFX940-NEXT:    v_cmp_o_f16_sdwa vcc, v0, v8 src0_sel:WORD_1 src1_sel:WORD_1
1956 ; GFX940-NEXT:    s_nop 1
1957 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v17, v9, vcc
1958 ; GFX940-NEXT:    v_perm_b32 v0, v0, v10, s0
1959 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1961 ; GFX10-LABEL: v_minimum_v16f16:
1962 ; GFX10:       ; %bb.0:
1963 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1964 ; GFX10-NEXT:    v_pk_min_f16 v16, v7, v15
1965 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v7, v15
1966 ; GFX10-NEXT:    v_pk_min_f16 v18, v6, v14
1967 ; GFX10-NEXT:    v_pk_min_f16 v19, v3, v11
1968 ; GFX10-NEXT:    v_pk_min_f16 v20, v2, v10
1969 ; GFX10-NEXT:    v_lshrrev_b32_e32 v17, 16, v16
1970 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, 0x7e00, v16, vcc_lo
1971 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v7, v15 src0_sel:WORD_1 src1_sel:WORD_1
1972 ; GFX10-NEXT:    v_lshrrev_b32_e32 v15, 16, v18
1973 ; GFX10-NEXT:    v_pk_min_f16 v21, v0, v8
1974 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, 0x7e00, v17, vcc_lo
1975 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v14
1976 ; GFX10-NEXT:    v_pk_min_f16 v17, v5, v13
1977 ; GFX10-NEXT:    v_lshrrev_b32_e32 v23, 16, v21
1978 ; GFX10-NEXT:    v_perm_b32 v7, v7, v16, 0x5040100
1979 ; GFX10-NEXT:    v_cndmask_b32_e32 v18, 0x7e00, v18, vcc_lo
1980 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v6, v14 src0_sel:WORD_1 src1_sel:WORD_1
1981 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v17
1982 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v15, vcc_lo
1983 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v5, v13
1984 ; GFX10-NEXT:    v_perm_b32 v6, v6, v18, 0x5040100
1985 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, 0x7e00, v17, vcc_lo
1986 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v5, v13 src0_sel:WORD_1 src1_sel:WORD_1
1987 ; GFX10-NEXT:    v_pk_min_f16 v17, v4, v12
1988 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, 0x7e00, v14, vcc_lo
1989 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v4, v12
1990 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v17
1991 ; GFX10-NEXT:    v_perm_b32 v5, v5, v15, 0x5040100
1992 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, 0x7e00, v17, vcc_lo
1993 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v11
1994 ; GFX10-NEXT:    v_lshrrev_b32_e32 v17, 16, v19
1995 ; GFX10-NEXT:    v_cndmask_b32_e32 v19, 0x7e00, v19, vcc_lo
1996 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v3, v11 src0_sel:WORD_1 src1_sel:WORD_1
1997 ; GFX10-NEXT:    v_pk_min_f16 v11, v1, v9
1998 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v17, vcc_lo
1999 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v2, v10
2000 ; GFX10-NEXT:    v_lshrrev_b32_e32 v22, 16, v11
2001 ; GFX10-NEXT:    v_perm_b32 v3, v3, v19, 0x5040100
2002 ; GFX10-NEXT:    v_cndmask_b32_e32 v17, 0x7e00, v20, vcc_lo
2003 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v9
2004 ; GFX10-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
2005 ; GFX10-NEXT:    v_cndmask_b32_e32 v11, 0x7e00, v11, vcc_lo
2006 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v1, v9 src0_sel:WORD_1 src1_sel:WORD_1
2007 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v22, vcc_lo
2008 ; GFX10-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v8
2009 ; GFX10-NEXT:    v_perm_b32 v1, v1, v11, 0x5040100
2010 ; GFX10-NEXT:    v_cndmask_b32_e32 v9, 0x7e00, v21, vcc_lo
2011 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v0, v8 src0_sel:WORD_1 src1_sel:WORD_1
2012 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v23, vcc_lo
2013 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v2, v10 src0_sel:WORD_1 src1_sel:WORD_1
2014 ; GFX10-NEXT:    v_perm_b32 v0, v0, v9, 0x5040100
2015 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v20, vcc_lo
2016 ; GFX10-NEXT:    v_cmp_o_f16_sdwa vcc_lo, v4, v12 src0_sel:WORD_1 src1_sel:WORD_1
2017 ; GFX10-NEXT:    v_perm_b32 v2, v2, v17, 0x5040100
2018 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, 0x7e00, v14, vcc_lo
2019 ; GFX10-NEXT:    v_perm_b32 v4, v4, v13, 0x5040100
2020 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2022 ; GFX11-LABEL: v_minimum_v16f16:
2023 ; GFX11:       ; %bb.0:
2024 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2025 ; GFX11-NEXT:    v_pk_min_f16 v16, v7, v15
2026 ; GFX11-NEXT:    v_lshrrev_b32_e32 v17, 16, v15
2027 ; GFX11-NEXT:    v_lshrrev_b32_e32 v18, 16, v7
2028 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v7, v15
2029 ; GFX11-NEXT:    v_pk_min_f16 v15, v6, v14
2030 ; GFX11-NEXT:    v_lshrrev_b32_e32 v19, 16, v16
2031 ; GFX11-NEXT:    v_pk_min_f16 v20, v4, v12
2032 ; GFX11-NEXT:    v_pk_min_f16 v22, v2, v10
2033 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, 0x7e00, v16, vcc_lo
2034 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v18, v17
2035 ; GFX11-NEXT:    v_lshrrev_b32_e32 v17, 16, v14
2036 ; GFX11-NEXT:    v_lshrrev_b32_e32 v18, 16, v6
2037 ; GFX11-NEXT:    v_lshrrev_b32_e32 v23, 16, v8
2038 ; GFX11-NEXT:    v_lshrrev_b32_e32 v24, 16, v0
2039 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, 0x7e00, v19, vcc_lo
2040 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v6, v14
2041 ; GFX11-NEXT:    v_lshrrev_b32_e32 v19, 16, v15
2042 ; GFX11-NEXT:    v_pk_min_f16 v14, v5, v13
2043 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2044 ; GFX11-NEXT:    v_perm_b32 v7, v16, v7, 0x5040100
2045 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, 0x7e00, v15, vcc_lo
2046 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v18, v17
2047 ; GFX11-NEXT:    v_lshrrev_b32_e32 v17, 16, v13
2048 ; GFX11-NEXT:    v_lshrrev_b32_e32 v18, 16, v5
2049 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, 0x7e00, v19, vcc_lo
2050 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v5, v13
2051 ; GFX11-NEXT:    v_lshrrev_b32_e32 v19, 16, v14
2052 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
2053 ; GFX11-NEXT:    v_perm_b32 v6, v15, v6, 0x5040100
2054 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, 0x7e00, v14, vcc_lo
2055 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v18, v17
2056 ; GFX11-NEXT:    v_pk_min_f16 v17, v3, v11
2057 ; GFX11-NEXT:    v_lshrrev_b32_e32 v18, 16, v20
2058 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, 0x7e00, v19, vcc_lo
2059 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v4, v12
2060 ; GFX11-NEXT:    v_lshrrev_b32_e32 v19, 16, v11
2061 ; GFX11-NEXT:    v_lshrrev_b32_e32 v21, 16, v17
2062 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
2063 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2064 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, 0x7e00, v20, vcc_lo
2065 ; GFX11-NEXT:    v_lshrrev_b32_e32 v20, 16, v3
2066 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v3, v11
2067 ; GFX11-NEXT:    v_perm_b32 v5, v13, v5, 0x5040100
2068 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x7e00, v17, vcc_lo
2069 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2070 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v20, v19
2071 ; GFX11-NEXT:    v_pk_min_f16 v19, v1, v9
2072 ; GFX11-NEXT:    v_lshrrev_b32_e32 v20, 16, v22
2073 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, 0x7e00, v21, vcc_lo
2074 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v2, v10
2075 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
2076 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2077 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2078 ; GFX11-NEXT:    v_perm_b32 v3, v11, v3, 0x5040100
2079 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, 0x7e00, v22, vcc_lo
2080 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v9
2081 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
2082 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2083 ; GFX11-NEXT:    v_pk_min_f16 v22, v0, v8
2084 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, 0x7e00, v19, vcc_lo
2085 ; GFX11-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
2086 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
2087 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v1, v9
2088 ; GFX11-NEXT:    v_lshrrev_b32_e32 v25, 16, v22
2089 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2090 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x7e00, v19, vcc_lo
2091 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v0, v8
2092 ; GFX11-NEXT:    v_perm_b32 v1, v1, v21, 0x5040100
2093 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7e00, v22, vcc_lo
2094 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v24, v23
2095 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, 0x7e00, v25, vcc_lo
2096 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v2, v10
2097 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
2098 ; GFX11-NEXT:    v_perm_b32 v0, v8, v0, 0x5040100
2099 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x7e00, v20, vcc_lo
2100 ; GFX11-NEXT:    v_cmp_o_f16_e32 vcc_lo, v4, v12
2101 ; GFX11-NEXT:    v_perm_b32 v2, v2, v17, 0x5040100
2102 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x7e00, v18, vcc_lo
2103 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2104 ; GFX11-NEXT:    v_perm_b32 v4, v4, v14, 0x5040100
2105 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2107 ; GFX12-LABEL: v_minimum_v16f16:
2108 ; GFX12:       ; %bb.0:
2109 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2110 ; GFX12-NEXT:    s_wait_expcnt 0x0
2111 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2112 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2113 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2114 ; GFX12-NEXT:    v_pk_minimum_f16 v0, v0, v8
2115 ; GFX12-NEXT:    v_pk_minimum_f16 v1, v1, v9
2116 ; GFX12-NEXT:    v_pk_minimum_f16 v2, v2, v10
2117 ; GFX12-NEXT:    v_pk_minimum_f16 v3, v3, v11
2118 ; GFX12-NEXT:    v_pk_minimum_f16 v4, v4, v12
2119 ; GFX12-NEXT:    v_pk_minimum_f16 v5, v5, v13
2120 ; GFX12-NEXT:    v_pk_minimum_f16 v6, v6, v14
2121 ; GFX12-NEXT:    v_pk_minimum_f16 v7, v7, v15
2122 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2123   %op = call <16 x half> @llvm.minimum.v16f16(<16 x half> %src0, <16 x half> %src1)
2124   ret <16 x half> %op
2126 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
2127 ; GCN: {{.*}}