Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / bf16.ll
blob16ffdd7ebe421f1d8016fa7e0f40fc82798efd78
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=amdgcn | FileCheck %s -check-prefixes=GCN
3 ; RUN: llc < %s -mtriple=amdgcn -mcpu=hawaii | FileCheck %s -check-prefixes=GFX7
4 ; RUN: llc < %s -mtriple=amdgcn -mcpu=tonga | FileCheck %s -check-prefixes=GFX8
5 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx900 | FileCheck %s -check-prefixes=GFX9
6 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1010 | FileCheck %s -check-prefixes=GFX10
7 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 | FileCheck %s -check-prefix=GFX11
8 ; RUN: llc < %s -mtriple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 | FileCheck %s -check-prefix=GFX11
10 define void @test_load_store(ptr addrspace(1) %in, ptr addrspace(1) %out) {
11 ; GCN-LABEL: test_load_store:
12 ; GCN:       ; %bb.0:
13 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14 ; GCN-NEXT:    s_mov_b32 s6, 0
15 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
16 ; GCN-NEXT:    s_mov_b32 s4, s6
17 ; GCN-NEXT:    s_mov_b32 s5, s6
18 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
19 ; GCN-NEXT:    s_waitcnt vmcnt(0)
20 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
21 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
22 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24 ; GFX7-LABEL: test_load_store:
25 ; GFX7:       ; %bb.0:
26 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27 ; GFX7-NEXT:    s_mov_b32 s6, 0
28 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
29 ; GFX7-NEXT:    s_mov_b32 s4, s6
30 ; GFX7-NEXT:    s_mov_b32 s5, s6
31 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
32 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
33 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
34 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
37 ; GFX8-LABEL: test_load_store:
38 ; GFX8:       ; %bb.0:
39 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
41 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
42 ; GFX8-NEXT:    flat_store_short v[2:3], v0
43 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
44 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
46 ; GFX9-LABEL: test_load_store:
47 ; GFX9:       ; %bb.0:
48 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
49 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
50 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
51 ; GFX9-NEXT:    global_store_short v[2:3], v0, off
52 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
53 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
55 ; GFX10-LABEL: test_load_store:
56 ; GFX10:       ; %bb.0:
57 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
58 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
59 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
60 ; GFX10-NEXT:    global_store_short v[2:3], v0, off
61 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
63 ; GFX11-LABEL: test_load_store:
64 ; GFX11:       ; %bb.0:
65 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
66 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
67 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX11-NEXT:    global_store_b16 v[2:3], v0, off
69 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
70   %val = load bfloat, ptr addrspace(1) %in
71   store bfloat %val, ptr addrspace(1) %out
72   ret void
75 define <2 x bfloat> @v_load_global_v2bf16(ptr addrspace(1) %ptr) {
76 ; GCN-LABEL: v_load_global_v2bf16:
77 ; GCN:       ; %bb.0:
78 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
79 ; GCN-NEXT:    s_mov_b32 s6, 0
80 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
81 ; GCN-NEXT:    s_mov_b32 s4, s6
82 ; GCN-NEXT:    s_mov_b32 s5, s6
83 ; GCN-NEXT:    buffer_load_dword v1, v[0:1], s[4:7], 0 addr64
84 ; GCN-NEXT:    s_waitcnt vmcnt(0)
85 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
86 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
87 ; GCN-NEXT:    s_setpc_b64 s[30:31]
89 ; GFX7-LABEL: v_load_global_v2bf16:
90 ; GFX7:       ; %bb.0:
91 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
92 ; GFX7-NEXT:    s_mov_b32 s6, 0
93 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
94 ; GFX7-NEXT:    s_mov_b32 s4, s6
95 ; GFX7-NEXT:    s_mov_b32 s5, s6
96 ; GFX7-NEXT:    buffer_load_dword v1, v[0:1], s[4:7], 0 addr64
97 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
98 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
99 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
100 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
102 ; GFX8-LABEL: v_load_global_v2bf16:
103 ; GFX8:       ; %bb.0:
104 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
105 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
106 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
107 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
109 ; GFX9-LABEL: v_load_global_v2bf16:
110 ; GFX9:       ; %bb.0:
111 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
112 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
113 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
114 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
116 ; GFX10-LABEL: v_load_global_v2bf16:
117 ; GFX10:       ; %bb.0:
118 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
119 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
120 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
121 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX11-LABEL: v_load_global_v2bf16:
124 ; GFX11:       ; %bb.0:
125 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
127 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
128 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
129   %load = load <2 x bfloat>, ptr addrspace(1) %ptr
130   ret <2 x bfloat> %load
133 define <3 x bfloat> @v_load_global_v3bf16(ptr addrspace(1) %ptr) {
134 ; GCN-LABEL: v_load_global_v3bf16:
135 ; GCN:       ; %bb.0:
136 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
137 ; GCN-NEXT:    s_mov_b32 s6, 0
138 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
139 ; GCN-NEXT:    s_mov_b32 s4, s6
140 ; GCN-NEXT:    s_mov_b32 s5, s6
141 ; GCN-NEXT:    buffer_load_dwordx2 v[1:2], v[0:1], s[4:7], 0 addr64
142 ; GCN-NEXT:    s_waitcnt vmcnt(0)
143 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
144 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
145 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
146 ; GCN-NEXT:    s_setpc_b64 s[30:31]
148 ; GFX7-LABEL: v_load_global_v3bf16:
149 ; GFX7:       ; %bb.0:
150 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
151 ; GFX7-NEXT:    s_mov_b32 s6, 0
152 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
153 ; GFX7-NEXT:    s_mov_b32 s4, s6
154 ; GFX7-NEXT:    s_mov_b32 s5, s6
155 ; GFX7-NEXT:    buffer_load_dwordx2 v[1:2], v[0:1], s[4:7], 0 addr64
156 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
157 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
158 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
159 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
160 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
162 ; GFX8-LABEL: v_load_global_v3bf16:
163 ; GFX8:       ; %bb.0:
164 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
165 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
166 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
167 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
169 ; GFX9-LABEL: v_load_global_v3bf16:
170 ; GFX9:       ; %bb.0:
171 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
172 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
173 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
174 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
176 ; GFX10-LABEL: v_load_global_v3bf16:
177 ; GFX10:       ; %bb.0:
178 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
179 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
180 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
181 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
183 ; GFX11-LABEL: v_load_global_v3bf16:
184 ; GFX11:       ; %bb.0:
185 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
186 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
187 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
188 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
189   %load = load <3 x bfloat>, ptr addrspace(1) %ptr
190   ret <3 x bfloat> %load
193 define <4 x bfloat> @v_load_global_v4bf16(ptr addrspace(1) %ptr) {
194 ; GCN-LABEL: v_load_global_v4bf16:
195 ; GCN:       ; %bb.0:
196 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
197 ; GCN-NEXT:    s_mov_b32 s6, 0
198 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
199 ; GCN-NEXT:    s_mov_b32 s4, s6
200 ; GCN-NEXT:    s_mov_b32 s5, s6
201 ; GCN-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
202 ; GCN-NEXT:    s_waitcnt vmcnt(0)
203 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
204 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
205 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
206 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
207 ; GCN-NEXT:    s_setpc_b64 s[30:31]
209 ; GFX7-LABEL: v_load_global_v4bf16:
210 ; GFX7:       ; %bb.0:
211 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
212 ; GFX7-NEXT:    s_mov_b32 s6, 0
213 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
214 ; GFX7-NEXT:    s_mov_b32 s4, s6
215 ; GFX7-NEXT:    s_mov_b32 s5, s6
216 ; GFX7-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
217 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
218 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
219 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
220 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
221 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
222 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
224 ; GFX8-LABEL: v_load_global_v4bf16:
225 ; GFX8:       ; %bb.0:
226 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
227 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
228 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
229 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
231 ; GFX9-LABEL: v_load_global_v4bf16:
232 ; GFX9:       ; %bb.0:
233 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
234 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
235 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
236 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
238 ; GFX10-LABEL: v_load_global_v4bf16:
239 ; GFX10:       ; %bb.0:
240 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
241 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
242 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
243 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
245 ; GFX11-LABEL: v_load_global_v4bf16:
246 ; GFX11:       ; %bb.0:
247 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
248 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
249 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
250 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
251   %load = load <4 x bfloat>, ptr addrspace(1) %ptr
252   ret <4 x bfloat> %load
255 define <6 x bfloat> @v_load_global_v6bf16(ptr addrspace(1) %ptr) {
256 ; GCN-LABEL: v_load_global_v6bf16:
257 ; GCN:       ; %bb.0:
258 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
259 ; GCN-NEXT:    s_mov_b32 s6, 0
260 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
261 ; GCN-NEXT:    s_mov_b32 s4, s6
262 ; GCN-NEXT:    s_mov_b32 s5, s6
263 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64
264 ; GCN-NEXT:    s_waitcnt vmcnt(0)
265 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
266 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
267 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
268 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
269 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
270 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
271 ; GCN-NEXT:    s_setpc_b64 s[30:31]
273 ; GFX7-LABEL: v_load_global_v6bf16:
274 ; GFX7:       ; %bb.0:
275 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
276 ; GFX7-NEXT:    s_mov_b32 s6, 0
277 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
278 ; GFX7-NEXT:    s_mov_b32 s4, s6
279 ; GFX7-NEXT:    s_mov_b32 s5, s6
280 ; GFX7-NEXT:    buffer_load_dwordx3 v[3:5], v[0:1], s[4:7], 0 addr64
281 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
282 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
283 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
284 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
285 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
286 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
287 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
288 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
290 ; GFX8-LABEL: v_load_global_v6bf16:
291 ; GFX8:       ; %bb.0:
292 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
293 ; GFX8-NEXT:    flat_load_dwordx3 v[0:2], v[0:1]
294 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
295 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
297 ; GFX9-LABEL: v_load_global_v6bf16:
298 ; GFX9:       ; %bb.0:
299 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
300 ; GFX9-NEXT:    global_load_dwordx3 v[0:2], v[0:1], off
301 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
302 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
304 ; GFX10-LABEL: v_load_global_v6bf16:
305 ; GFX10:       ; %bb.0:
306 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307 ; GFX10-NEXT:    global_load_dwordx3 v[0:2], v[0:1], off
308 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
309 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
311 ; GFX11-LABEL: v_load_global_v6bf16:
312 ; GFX11:       ; %bb.0:
313 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
314 ; GFX11-NEXT:    global_load_b96 v[0:2], v[0:1], off
315 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
317   %load = load <6 x bfloat>, ptr addrspace(1) %ptr
318   ret <6 x bfloat> %load
321 define <8 x bfloat> @v_load_global_v8bf16(ptr addrspace(1) %ptr) {
322 ; GCN-LABEL: v_load_global_v8bf16:
323 ; GCN:       ; %bb.0:
324 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
325 ; GCN-NEXT:    s_mov_b32 s6, 0
326 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
327 ; GCN-NEXT:    s_mov_b32 s4, s6
328 ; GCN-NEXT:    s_mov_b32 s5, s6
329 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
330 ; GCN-NEXT:    s_waitcnt vmcnt(0)
331 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
332 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
333 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
334 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
335 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
336 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
337 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
338 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
339 ; GCN-NEXT:    s_setpc_b64 s[30:31]
341 ; GFX7-LABEL: v_load_global_v8bf16:
342 ; GFX7:       ; %bb.0:
343 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
344 ; GFX7-NEXT:    s_mov_b32 s6, 0
345 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
346 ; GFX7-NEXT:    s_mov_b32 s4, s6
347 ; GFX7-NEXT:    s_mov_b32 s5, s6
348 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
349 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
350 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
351 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
352 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
353 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
354 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
355 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
356 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
357 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
358 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
360 ; GFX8-LABEL: v_load_global_v8bf16:
361 ; GFX8:       ; %bb.0:
362 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
363 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
364 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
365 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
367 ; GFX9-LABEL: v_load_global_v8bf16:
368 ; GFX9:       ; %bb.0:
369 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
370 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
371 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
372 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
374 ; GFX10-LABEL: v_load_global_v8bf16:
375 ; GFX10:       ; %bb.0:
376 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
377 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
378 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
379 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
381 ; GFX11-LABEL: v_load_global_v8bf16:
382 ; GFX11:       ; %bb.0:
383 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
384 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
385 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
386 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
387   %load = load <8 x bfloat>, ptr addrspace(1) %ptr
388   ret <8 x bfloat> %load
391 define <16 x bfloat> @v_load_global_v16bf16(ptr addrspace(1) %ptr) {
392 ; GCN-LABEL: v_load_global_v16bf16:
393 ; GCN:       ; %bb.0:
394 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
395 ; GCN-NEXT:    s_mov_b32 s6, 0
396 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
397 ; GCN-NEXT:    s_mov_b32 s4, s6
398 ; GCN-NEXT:    s_mov_b32 s5, s6
399 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
400 ; GCN-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
401 ; GCN-NEXT:    s_waitcnt vmcnt(1)
402 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
403 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
404 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
405 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
406 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
407 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
408 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
409 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
410 ; GCN-NEXT:    s_waitcnt vmcnt(0)
411 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
412 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
413 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
414 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
415 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
416 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
417 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
418 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
419 ; GCN-NEXT:    s_setpc_b64 s[30:31]
421 ; GFX7-LABEL: v_load_global_v16bf16:
422 ; GFX7:       ; %bb.0:
423 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
424 ; GFX7-NEXT:    s_mov_b32 s6, 0
425 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
426 ; GFX7-NEXT:    s_mov_b32 s4, s6
427 ; GFX7-NEXT:    s_mov_b32 s5, s6
428 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
429 ; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
430 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
431 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
432 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
433 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
434 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
435 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
436 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
437 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
438 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
439 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
440 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
441 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
442 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
443 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
444 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
445 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
446 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
447 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
448 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
450 ; GFX8-LABEL: v_load_global_v16bf16:
451 ; GFX8:       ; %bb.0:
452 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
453 ; GFX8-NEXT:    v_mov_b32_e32 v5, v1
454 ; GFX8-NEXT:    v_mov_b32_e32 v4, v0
455 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[4:5]
456 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v4
457 ; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
458 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
459 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
460 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
462 ; GFX9-LABEL: v_load_global_v16bf16:
463 ; GFX9:       ; %bb.0:
464 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
465 ; GFX9-NEXT:    v_mov_b32_e32 v9, v1
466 ; GFX9-NEXT:    v_mov_b32_e32 v8, v0
467 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[8:9], off
468 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[8:9], off offset:16
469 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
470 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
472 ; GFX10-LABEL: v_load_global_v16bf16:
473 ; GFX10:       ; %bb.0:
474 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
475 ; GFX10-NEXT:    v_mov_b32_e32 v9, v1
476 ; GFX10-NEXT:    v_mov_b32_e32 v8, v0
477 ; GFX10-NEXT:    s_clause 0x1
478 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[8:9], off
479 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[8:9], off offset:16
480 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
481 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
483 ; GFX11-LABEL: v_load_global_v16bf16:
484 ; GFX11:       ; %bb.0:
485 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
486 ; GFX11-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
487 ; GFX11-NEXT:    s_clause 0x1
488 ; GFX11-NEXT:    global_load_b128 v[0:3], v[4:5], off
489 ; GFX11-NEXT:    global_load_b128 v[4:7], v[4:5], off offset:16
490 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
491 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
492   %load = load <16 x bfloat>, ptr addrspace(1) %ptr
493   ret <16 x bfloat> %load
496 define <32 x bfloat> @v_load_global_v32bf16(ptr addrspace(1) %ptr) {
497 ; GCN-LABEL: v_load_global_v32bf16:
498 ; GCN:       ; %bb.0:
499 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
500 ; GCN-NEXT:    s_mov_b32 s6, 0
501 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
502 ; GCN-NEXT:    s_mov_b32 s4, s6
503 ; GCN-NEXT:    s_mov_b32 s5, s6
504 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
505 ; GCN-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
506 ; GCN-NEXT:    buffer_load_dwordx4 v[20:23], v[0:1], s[4:7], 0 addr64 offset:32
507 ; GCN-NEXT:    buffer_load_dwordx4 v[28:31], v[0:1], s[4:7], 0 addr64 offset:48
508 ; GCN-NEXT:    s_waitcnt vmcnt(3)
509 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
510 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
511 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
512 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
513 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
514 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
515 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
516 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
517 ; GCN-NEXT:    s_waitcnt vmcnt(2)
518 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
519 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
520 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
521 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
522 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
523 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
524 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
525 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
526 ; GCN-NEXT:    s_waitcnt vmcnt(1)
527 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
528 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
529 ; GCN-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
530 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
531 ; GCN-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
532 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
533 ; GCN-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
534 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
535 ; GCN-NEXT:    s_waitcnt vmcnt(0)
536 ; GCN-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
537 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
538 ; GCN-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
539 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
540 ; GCN-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
541 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
542 ; GCN-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
543 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
544 ; GCN-NEXT:    s_setpc_b64 s[30:31]
546 ; GFX7-LABEL: v_load_global_v32bf16:
547 ; GFX7:       ; %bb.0:
548 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
549 ; GFX7-NEXT:    s_mov_b32 s6, 0
550 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
551 ; GFX7-NEXT:    s_mov_b32 s4, s6
552 ; GFX7-NEXT:    s_mov_b32 s5, s6
553 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
554 ; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
555 ; GFX7-NEXT:    buffer_load_dwordx4 v[20:23], v[0:1], s[4:7], 0 addr64 offset:32
556 ; GFX7-NEXT:    buffer_load_dwordx4 v[28:31], v[0:1], s[4:7], 0 addr64 offset:48
557 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
558 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
559 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
560 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
561 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
562 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
563 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
564 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
565 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
566 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
567 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
568 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
569 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
570 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
571 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
572 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
573 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
574 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
575 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
576 ; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
577 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
578 ; GFX7-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
579 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
580 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
581 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
582 ; GFX7-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
583 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
584 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
585 ; GFX7-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
586 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
587 ; GFX7-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
588 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
589 ; GFX7-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
590 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
591 ; GFX7-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
592 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
593 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
595 ; GFX8-LABEL: v_load_global_v32bf16:
596 ; GFX8:       ; %bb.0:
597 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
598 ; GFX8-NEXT:    v_mov_b32_e32 v12, v0
599 ; GFX8-NEXT:    v_mov_b32_e32 v13, v1
600 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v12
601 ; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v13, vcc
602 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 32, v12
603 ; GFX8-NEXT:    v_addc_u32_e32 v9, vcc, 0, v13, vcc
604 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[12:13]
605 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, 48, v12
606 ; GFX8-NEXT:    v_addc_u32_e32 v13, vcc, 0, v13, vcc
607 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
608 ; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]
609 ; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[12:13]
610 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
611 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
613 ; GFX9-LABEL: v_load_global_v32bf16:
614 ; GFX9:       ; %bb.0:
615 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
616 ; GFX9-NEXT:    v_mov_b32_e32 v17, v1
617 ; GFX9-NEXT:    v_mov_b32_e32 v16, v0
618 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[16:17], off
619 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[16:17], off offset:16
620 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[16:17], off offset:32
621 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[16:17], off offset:48
622 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
623 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
625 ; GFX10-LABEL: v_load_global_v32bf16:
626 ; GFX10:       ; %bb.0:
627 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
628 ; GFX10-NEXT:    v_mov_b32_e32 v17, v1
629 ; GFX10-NEXT:    v_mov_b32_e32 v16, v0
630 ; GFX10-NEXT:    s_clause 0x3
631 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[16:17], off
632 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[16:17], off offset:16
633 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[16:17], off offset:32
634 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[16:17], off offset:48
635 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
636 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
638 ; GFX11-LABEL: v_load_global_v32bf16:
639 ; GFX11:       ; %bb.0:
640 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
641 ; GFX11-NEXT:    v_dual_mov_b32 v13, v1 :: v_dual_mov_b32 v12, v0
642 ; GFX11-NEXT:    s_clause 0x3
643 ; GFX11-NEXT:    global_load_b128 v[0:3], v[12:13], off
644 ; GFX11-NEXT:    global_load_b128 v[4:7], v[12:13], off offset:16
645 ; GFX11-NEXT:    global_load_b128 v[8:11], v[12:13], off offset:32
646 ; GFX11-NEXT:    global_load_b128 v[12:15], v[12:13], off offset:48
647 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
648 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
649   %load = load <32 x bfloat>, ptr addrspace(1) %ptr
650   ret <32 x bfloat> %load
653 define <64 x bfloat> @v_load_global_v64bf16(ptr addrspace(1) %ptr) {
654 ; GCN-LABEL: v_load_global_v64bf16:
655 ; GCN:       ; %bb.0:
656 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
657 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
658 ; GCN-NEXT:    s_mov_b32 s6, 0
659 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 0x7c, v0
660 ; GCN-NEXT:    v_add_i32_e32 v8, vcc, 0x78, v0
661 ; GCN-NEXT:    v_add_i32_e32 v9, vcc, 0x74, v0
662 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, 0x70, v0
663 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 0x6c, v0
664 ; GCN-NEXT:    v_add_i32_e32 v12, vcc, 0x68, v0
665 ; GCN-NEXT:    v_add_i32_e32 v13, vcc, 0x64, v0
666 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, 0x60, v0
667 ; GCN-NEXT:    s_mov_b32 s4, s6
668 ; GCN-NEXT:    s_mov_b32 s5, s6
669 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:112
670 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 0x5c, v0
671 ; GCN-NEXT:    v_add_i32_e32 v16, vcc, 0x58, v0
672 ; GCN-NEXT:    v_add_i32_e32 v17, vcc, 0x54, v0
673 ; GCN-NEXT:    s_waitcnt vmcnt(0)
674 ; GCN-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
675 ; GCN-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen
676 ; GCN-NEXT:    buffer_store_dword v4, v9, s[0:3], 0 offen
677 ; GCN-NEXT:    buffer_store_dword v3, v10, s[0:3], 0 offen
678 ; GCN-NEXT:    s_waitcnt expcnt(0)
679 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:96
680 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 0x50, v0
681 ; GCN-NEXT:    v_add_i32_e32 v8, vcc, 0x4c, v0
682 ; GCN-NEXT:    v_add_i32_e32 v9, vcc, 0x48, v0
683 ; GCN-NEXT:    s_waitcnt vmcnt(0)
684 ; GCN-NEXT:    buffer_store_dword v6, v11, s[0:3], 0 offen
685 ; GCN-NEXT:    buffer_store_dword v5, v12, s[0:3], 0 offen
686 ; GCN-NEXT:    buffer_store_dword v4, v13, s[0:3], 0 offen
687 ; GCN-NEXT:    buffer_store_dword v3, v14, s[0:3], 0 offen
688 ; GCN-NEXT:    s_waitcnt expcnt(0)
689 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:80
690 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, 0x44, v0
691 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 64, v0
692 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 60, v0
693 ; GCN-NEXT:    s_waitcnt vmcnt(0)
694 ; GCN-NEXT:    buffer_store_dword v6, v15, s[0:3], 0 offen
695 ; GCN-NEXT:    buffer_store_dword v5, v16, s[0:3], 0 offen
696 ; GCN-NEXT:    buffer_store_dword v4, v17, s[0:3], 0 offen
697 ; GCN-NEXT:    buffer_store_dword v3, v7, s[0:3], 0 offen
698 ; GCN-NEXT:    s_waitcnt expcnt(0)
699 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:64
700 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 56, v0
701 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 52, v0
702 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 48, v0
703 ; GCN-NEXT:    s_waitcnt vmcnt(0)
704 ; GCN-NEXT:    buffer_store_dword v6, v8, s[0:3], 0 offen
705 ; GCN-NEXT:    buffer_store_dword v5, v9, s[0:3], 0 offen
706 ; GCN-NEXT:    buffer_store_dword v4, v10, s[0:3], 0 offen
707 ; GCN-NEXT:    buffer_store_dword v3, v11, s[0:3], 0 offen
708 ; GCN-NEXT:    s_waitcnt expcnt(0)
709 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:48
710 ; GCN-NEXT:    buffer_load_dwordx4 v[7:10], v[1:2], s[4:7], 0 addr64 offset:32
711 ; GCN-NEXT:    buffer_load_dwordx4 v[11:14], v[1:2], s[4:7], 0 addr64
712 ; GCN-NEXT:    buffer_load_dwordx4 v[15:18], v[1:2], s[4:7], 0 addr64 offset:16
713 ; GCN-NEXT:    s_waitcnt vmcnt(3)
714 ; GCN-NEXT:    buffer_store_dword v6, v19, s[0:3], 0 offen
715 ; GCN-NEXT:    v_add_i32_e32 v1, vcc, 44, v0
716 ; GCN-NEXT:    buffer_store_dword v5, v20, s[0:3], 0 offen
717 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 40, v0
718 ; GCN-NEXT:    buffer_store_dword v4, v21, s[0:3], 0 offen
719 ; GCN-NEXT:    s_waitcnt expcnt(0)
720 ; GCN-NEXT:    v_add_i32_e32 v4, vcc, 36, v0
721 ; GCN-NEXT:    buffer_store_dword v3, v22, s[0:3], 0 offen
722 ; GCN-NEXT:    s_waitcnt expcnt(0)
723 ; GCN-NEXT:    v_add_i32_e32 v3, vcc, 32, v0
724 ; GCN-NEXT:    v_add_i32_e32 v5, vcc, 28, v0
725 ; GCN-NEXT:    v_add_i32_e32 v6, vcc, 24, v0
726 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 20, v0
727 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 16, v0
728 ; GCN-NEXT:    s_waitcnt vmcnt(6)
729 ; GCN-NEXT:    buffer_store_dword v10, v1, s[0:3], 0 offen
730 ; GCN-NEXT:    v_add_i32_e32 v1, vcc, 12, v0
731 ; GCN-NEXT:    buffer_store_dword v9, v2, s[0:3], 0 offen
732 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 8, v0
733 ; GCN-NEXT:    buffer_store_dword v8, v4, s[0:3], 0 offen
734 ; GCN-NEXT:    v_add_i32_e32 v4, vcc, 4, v0
735 ; GCN-NEXT:    buffer_store_dword v7, v3, s[0:3], 0 offen
736 ; GCN-NEXT:    s_waitcnt vmcnt(8)
737 ; GCN-NEXT:    buffer_store_dword v18, v5, s[0:3], 0 offen
738 ; GCN-NEXT:    buffer_store_dword v17, v6, s[0:3], 0 offen
739 ; GCN-NEXT:    buffer_store_dword v16, v19, s[0:3], 0 offen
740 ; GCN-NEXT:    buffer_store_dword v15, v20, s[0:3], 0 offen
741 ; GCN-NEXT:    buffer_store_dword v14, v1, s[0:3], 0 offen
742 ; GCN-NEXT:    buffer_store_dword v13, v2, s[0:3], 0 offen
743 ; GCN-NEXT:    buffer_store_dword v12, v4, s[0:3], 0 offen
744 ; GCN-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen
745 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
746 ; GCN-NEXT:    s_setpc_b64 s[30:31]
748 ; GFX7-LABEL: v_load_global_v64bf16:
749 ; GFX7:       ; %bb.0:
750 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
751 ; GFX7-NEXT:    s_mov_b32 s6, 0
752 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
753 ; GFX7-NEXT:    s_mov_b32 s4, s6
754 ; GFX7-NEXT:    s_mov_b32 s5, s6
755 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:112
756 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 0x7c, v0
757 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x78, v0
758 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x74, v0
759 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 0x70, v0
760 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, 52, v0
761 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, 48, v0
762 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, 44, v0
763 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, 40, v0
764 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, 36, v0
765 ; GFX7-NEXT:    v_add_i32_e32 v24, vcc, 32, v0
766 ; GFX7-NEXT:    v_add_i32_e32 v25, vcc, 28, v0
767 ; GFX7-NEXT:    v_add_i32_e32 v26, vcc, 24, v0
768 ; GFX7-NEXT:    v_add_i32_e32 v27, vcc, 20, v0
769 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
770 ; GFX7-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
771 ; GFX7-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen
772 ; GFX7-NEXT:    buffer_store_dword v4, v9, s[0:3], 0 offen
773 ; GFX7-NEXT:    buffer_store_dword v3, v10, s[0:3], 0 offen
774 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:96
775 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 0x6c, v0
776 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x68, v0
777 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x64, v0
778 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 0x60, v0
779 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
780 ; GFX7-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
781 ; GFX7-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen
782 ; GFX7-NEXT:    buffer_store_dword v4, v9, s[0:3], 0 offen
783 ; GFX7-NEXT:    buffer_store_dword v3, v10, s[0:3], 0 offen
784 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:80
785 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 0x5c, v0
786 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x58, v0
787 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x54, v0
788 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 0x50, v0
789 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
790 ; GFX7-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
791 ; GFX7-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen
792 ; GFX7-NEXT:    buffer_store_dword v4, v9, s[0:3], 0 offen
793 ; GFX7-NEXT:    buffer_store_dword v3, v10, s[0:3], 0 offen
794 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:64
795 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 0x4c, v0
796 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x48, v0
797 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x44, v0
798 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 64, v0
799 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
800 ; GFX7-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
801 ; GFX7-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen
802 ; GFX7-NEXT:    buffer_store_dword v4, v9, s[0:3], 0 offen
803 ; GFX7-NEXT:    buffer_store_dword v3, v10, s[0:3], 0 offen
804 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[1:2], s[4:7], 0 addr64 offset:48
805 ; GFX7-NEXT:    buffer_load_dwordx4 v[7:10], v[1:2], s[4:7], 0 addr64 offset:32
806 ; GFX7-NEXT:    buffer_load_dwordx4 v[11:14], v[1:2], s[4:7], 0 addr64 offset:16
807 ; GFX7-NEXT:    buffer_load_dwordx4 v[15:18], v[1:2], s[4:7], 0 addr64
808 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, 60, v0
809 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 56, v0
810 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
811 ; GFX7-NEXT:    buffer_store_dword v6, v1, s[0:3], 0 offen
812 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, 16, v0
813 ; GFX7-NEXT:    buffer_store_dword v5, v2, s[0:3], 0 offen
814 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 12, v0
815 ; GFX7-NEXT:    buffer_store_dword v4, v19, s[0:3], 0 offen
816 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 8, v0
817 ; GFX7-NEXT:    buffer_store_dword v3, v20, s[0:3], 0 offen
818 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v0
819 ; GFX7-NEXT:    s_waitcnt vmcnt(6)
820 ; GFX7-NEXT:    buffer_store_dword v10, v21, s[0:3], 0 offen
821 ; GFX7-NEXT:    buffer_store_dword v9, v22, s[0:3], 0 offen
822 ; GFX7-NEXT:    buffer_store_dword v8, v23, s[0:3], 0 offen
823 ; GFX7-NEXT:    buffer_store_dword v7, v24, s[0:3], 0 offen
824 ; GFX7-NEXT:    s_waitcnt vmcnt(9)
825 ; GFX7-NEXT:    buffer_store_dword v14, v25, s[0:3], 0 offen
826 ; GFX7-NEXT:    buffer_store_dword v13, v26, s[0:3], 0 offen
827 ; GFX7-NEXT:    buffer_store_dword v12, v27, s[0:3], 0 offen
828 ; GFX7-NEXT:    buffer_store_dword v11, v1, s[0:3], 0 offen
829 ; GFX7-NEXT:    s_waitcnt vmcnt(12)
830 ; GFX7-NEXT:    buffer_store_dword v18, v2, s[0:3], 0 offen
831 ; GFX7-NEXT:    buffer_store_dword v17, v4, s[0:3], 0 offen
832 ; GFX7-NEXT:    buffer_store_dword v16, v3, s[0:3], 0 offen
833 ; GFX7-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen
834 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
835 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
837 ; GFX8-LABEL: v_load_global_v64bf16:
838 ; GFX8:       ; %bb.0:
839 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
840 ; GFX8-NEXT:    v_mov_b32_e32 v28, v0
841 ; GFX8-NEXT:    v_mov_b32_e32 v29, v1
842 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v28
843 ; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v29, vcc
844 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 32, v28
845 ; GFX8-NEXT:    v_addc_u32_e32 v9, vcc, 0, v29, vcc
846 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, 48, v28
847 ; GFX8-NEXT:    v_addc_u32_e32 v13, vcc, 0, v29, vcc
848 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, 64, v28
849 ; GFX8-NEXT:    v_addc_u32_e32 v17, vcc, 0, v29, vcc
850 ; GFX8-NEXT:    s_movk_i32 s4, 0x50
851 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, s4, v28
852 ; GFX8-NEXT:    v_addc_u32_e32 v21, vcc, 0, v29, vcc
853 ; GFX8-NEXT:    s_movk_i32 s4, 0x60
854 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, s4, v28
855 ; GFX8-NEXT:    v_addc_u32_e32 v25, vcc, 0, v29, vcc
856 ; GFX8-NEXT:    s_movk_i32 s4, 0x70
857 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[28:29]
858 ; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[12:13]
859 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v28
860 ; GFX8-NEXT:    v_addc_u32_e32 v29, vcc, 0, v29, vcc
861 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
862 ; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]
863 ; GFX8-NEXT:    flat_load_dwordx4 v[16:19], v[16:17]
864 ; GFX8-NEXT:    flat_load_dwordx4 v[20:23], v[20:21]
865 ; GFX8-NEXT:    flat_load_dwordx4 v[24:27], v[24:25]
866 ; GFX8-NEXT:    flat_load_dwordx4 v[28:31], v[28:29]
867 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
868 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
870 ; GFX9-LABEL: v_load_global_v64bf16:
871 ; GFX9:       ; %bb.0:
872 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
873 ; GFX9-NEXT:    v_mov_b32_e32 v29, v1
874 ; GFX9-NEXT:    v_mov_b32_e32 v28, v0
875 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[28:29], off
876 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[28:29], off offset:16
877 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[28:29], off offset:32
878 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[28:29], off offset:48
879 ; GFX9-NEXT:    global_load_dwordx4 v[16:19], v[28:29], off offset:64
880 ; GFX9-NEXT:    global_load_dwordx4 v[20:23], v[28:29], off offset:80
881 ; GFX9-NEXT:    global_load_dwordx4 v[24:27], v[28:29], off offset:96
882 ; GFX9-NEXT:    s_nop 0
883 ; GFX9-NEXT:    global_load_dwordx4 v[28:31], v[28:29], off offset:112
884 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
885 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
887 ; GFX10-LABEL: v_load_global_v64bf16:
888 ; GFX10:       ; %bb.0:
889 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
890 ; GFX10-NEXT:    v_mov_b32_e32 v33, v1
891 ; GFX10-NEXT:    v_mov_b32_e32 v32, v0
892 ; GFX10-NEXT:    s_clause 0x7
893 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[32:33], off
894 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[32:33], off offset:16
895 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[32:33], off offset:32
896 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[32:33], off offset:48
897 ; GFX10-NEXT:    global_load_dwordx4 v[16:19], v[32:33], off offset:64
898 ; GFX10-NEXT:    global_load_dwordx4 v[20:23], v[32:33], off offset:80
899 ; GFX10-NEXT:    global_load_dwordx4 v[24:27], v[32:33], off offset:96
900 ; GFX10-NEXT:    global_load_dwordx4 v[28:31], v[32:33], off offset:112
901 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
902 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
904 ; GFX11-LABEL: v_load_global_v64bf16:
905 ; GFX11:       ; %bb.0:
906 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
907 ; GFX11-NEXT:    v_dual_mov_b32 v29, v1 :: v_dual_mov_b32 v28, v0
908 ; GFX11-NEXT:    s_clause 0x7
909 ; GFX11-NEXT:    global_load_b128 v[0:3], v[28:29], off
910 ; GFX11-NEXT:    global_load_b128 v[4:7], v[28:29], off offset:16
911 ; GFX11-NEXT:    global_load_b128 v[8:11], v[28:29], off offset:32
912 ; GFX11-NEXT:    global_load_b128 v[12:15], v[28:29], off offset:48
913 ; GFX11-NEXT:    global_load_b128 v[16:19], v[28:29], off offset:64
914 ; GFX11-NEXT:    global_load_b128 v[20:23], v[28:29], off offset:80
915 ; GFX11-NEXT:    global_load_b128 v[24:27], v[28:29], off offset:96
916 ; GFX11-NEXT:    global_load_b128 v[28:31], v[28:29], off offset:112
917 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
918 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
919   %load = load <64 x bfloat>, ptr addrspace(1) %ptr
920   ret <64 x bfloat> %load
923 define void @v_store_global_v2bf16(<2 x bfloat> %val, ptr addrspace(1) %ptr) {
924 ; GCN-LABEL: v_store_global_v2bf16:
925 ; GCN:       ; %bb.0:
926 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
927 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
928 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
929 ; GCN-NEXT:    s_mov_b32 s6, 0
930 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
931 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
932 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
933 ; GCN-NEXT:    s_mov_b32 s4, s6
934 ; GCN-NEXT:    s_mov_b32 s5, s6
935 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
936 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
937 ; GCN-NEXT:    s_setpc_b64 s[30:31]
939 ; GFX7-LABEL: v_store_global_v2bf16:
940 ; GFX7:       ; %bb.0:
941 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
942 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
943 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
944 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
945 ; GFX7-NEXT:    s_mov_b32 s6, 0
946 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
947 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
948 ; GFX7-NEXT:    s_mov_b32 s4, s6
949 ; GFX7-NEXT:    s_mov_b32 s5, s6
950 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
951 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
952 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
954 ; GFX8-LABEL: v_store_global_v2bf16:
955 ; GFX8:       ; %bb.0:
956 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
957 ; GFX8-NEXT:    flat_store_dword v[1:2], v0
958 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
959 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
961 ; GFX9-LABEL: v_store_global_v2bf16:
962 ; GFX9:       ; %bb.0:
963 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
964 ; GFX9-NEXT:    global_store_dword v[1:2], v0, off
965 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
966 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
968 ; GFX10-LABEL: v_store_global_v2bf16:
969 ; GFX10:       ; %bb.0:
970 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
971 ; GFX10-NEXT:    global_store_dword v[1:2], v0, off
972 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
974 ; GFX11-LABEL: v_store_global_v2bf16:
975 ; GFX11:       ; %bb.0:
976 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
977 ; GFX11-NEXT:    global_store_b32 v[1:2], v0, off
978 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
979   store <2 x bfloat> %val, ptr addrspace(1) %ptr
980   ret void
983 define void @v_store_global_v3bf16(<3 x bfloat> %val, ptr addrspace(1) %ptr) {
984 ; GCN-LABEL: v_store_global_v3bf16:
985 ; GCN:       ; %bb.0:
986 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
987 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
988 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
989 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
990 ; GCN-NEXT:    s_mov_b32 s6, 0
991 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
992 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
993 ; GCN-NEXT:    s_mov_b32 s4, s6
994 ; GCN-NEXT:    s_mov_b32 s5, s6
995 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
996 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
997 ; GCN-NEXT:    buffer_store_short v2, v[3:4], s[4:7], 0 addr64 offset:4
998 ; GCN-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
999 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1000 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1002 ; GFX7-LABEL: v_store_global_v3bf16:
1003 ; GFX7:       ; %bb.0:
1004 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1005 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1006 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1007 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1008 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1009 ; GFX7-NEXT:    s_mov_b32 s6, 0
1010 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v2
1011 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1012 ; GFX7-NEXT:    s_mov_b32 s4, s6
1013 ; GFX7-NEXT:    s_mov_b32 s5, s6
1014 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1015 ; GFX7-NEXT:    buffer_store_short v1, v[3:4], s[4:7], 0 addr64 offset:4
1016 ; GFX7-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
1017 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1018 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1020 ; GFX8-LABEL: v_store_global_v3bf16:
1021 ; GFX8:       ; %bb.0:
1022 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1023 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
1024 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v2
1025 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1026 ; GFX8-NEXT:    flat_store_short v[2:3], v1
1027 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1028 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1030 ; GFX9-LABEL: v_store_global_v3bf16:
1031 ; GFX9:       ; %bb.0:
1032 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1033 ; GFX9-NEXT:    global_store_short v[2:3], v1, off offset:4
1034 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
1035 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1036 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1038 ; GFX10-LABEL: v_store_global_v3bf16:
1039 ; GFX10:       ; %bb.0:
1040 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1041 ; GFX10-NEXT:    global_store_short v[2:3], v1, off offset:4
1042 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
1043 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1045 ; GFX11-LABEL: v_store_global_v3bf16:
1046 ; GFX11:       ; %bb.0:
1047 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1048 ; GFX11-NEXT:    s_clause 0x1
1049 ; GFX11-NEXT:    global_store_b16 v[2:3], v1, off offset:4
1050 ; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
1051 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1052   store <3 x bfloat> %val, ptr addrspace(1) %ptr
1053   ret void
1056 define void @v_store_global_v4bf16(<4 x bfloat> %val, ptr addrspace(1) %ptr) {
1057 ; GCN-LABEL: v_store_global_v4bf16:
1058 ; GCN:       ; %bb.0:
1059 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1060 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1061 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1062 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1063 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1064 ; GCN-NEXT:    s_mov_b32 s6, 0
1065 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1066 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
1067 ; GCN-NEXT:    v_alignbit_b32 v1, v3, v2, 16
1068 ; GCN-NEXT:    v_alignbit_b32 v0, v6, v0, 16
1069 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1070 ; GCN-NEXT:    s_mov_b32 s4, s6
1071 ; GCN-NEXT:    s_mov_b32 s5, s6
1072 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[4:5], s[4:7], 0 addr64
1073 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1074 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1076 ; GFX7-LABEL: v_store_global_v4bf16:
1077 ; GFX7:       ; %bb.0:
1078 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1079 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1080 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1081 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1082 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1083 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1084 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1085 ; GFX7-NEXT:    s_mov_b32 s6, 0
1086 ; GFX7-NEXT:    v_alignbit_b32 v2, v3, v2, 16
1087 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
1088 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1089 ; GFX7-NEXT:    s_mov_b32 s4, s6
1090 ; GFX7-NEXT:    s_mov_b32 s5, s6
1091 ; GFX7-NEXT:    buffer_store_dwordx2 v[1:2], v[4:5], s[4:7], 0 addr64
1092 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1093 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1095 ; GFX8-LABEL: v_store_global_v4bf16:
1096 ; GFX8:       ; %bb.0:
1097 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1098 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1099 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1100 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1102 ; GFX9-LABEL: v_store_global_v4bf16:
1103 ; GFX9:       ; %bb.0:
1104 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1105 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1106 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1107 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1109 ; GFX10-LABEL: v_store_global_v4bf16:
1110 ; GFX10:       ; %bb.0:
1111 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1112 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1113 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1115 ; GFX11-LABEL: v_store_global_v4bf16:
1116 ; GFX11:       ; %bb.0:
1117 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1118 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1119 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1120   store <4 x bfloat> %val, ptr addrspace(1) %ptr
1121   ret void
1124 define void @v_store_global_v8bf16(<8 x bfloat> %val, ptr addrspace(1) %ptr) {
1125 ; GCN-LABEL: v_store_global_v8bf16:
1126 ; GCN:       ; %bb.0:
1127 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1128 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1129 ; GCN-NEXT:    s_mov_b32 s6, 0
1130 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1131 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1132 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1133 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1134 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1135 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v2
1136 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1137 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1138 ; GCN-NEXT:    s_mov_b32 s4, s6
1139 ; GCN-NEXT:    s_mov_b32 s5, s6
1140 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v7
1141 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1142 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v3
1143 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v1
1144 ; GCN-NEXT:    v_alignbit_b32 v3, v2, v6, 16
1145 ; GCN-NEXT:    v_alignbit_b32 v2, v5, v4, 16
1146 ; GCN-NEXT:    v_alignbit_b32 v1, v7, v10, 16
1147 ; GCN-NEXT:    v_alignbit_b32 v0, v11, v0, 16
1148 ; GCN-NEXT:    buffer_store_dwordx4 v[0:3], v[8:9], s[4:7], 0 addr64
1149 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1150 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1152 ; GFX7-LABEL: v_store_global_v8bf16:
1153 ; GFX7:       ; %bb.0:
1154 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1155 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1156 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1157 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1158 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1159 ; GFX7-NEXT:    s_mov_b32 s6, 0
1160 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1161 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1162 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1163 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1164 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1165 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1166 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1167 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1168 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1169 ; GFX7-NEXT:    s_mov_b32 s4, s6
1170 ; GFX7-NEXT:    s_mov_b32 s5, s6
1171 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
1172 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
1173 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
1174 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
1175 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[8:9], s[4:7], 0 addr64
1176 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1177 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1179 ; GFX8-LABEL: v_store_global_v8bf16:
1180 ; GFX8:       ; %bb.0:
1181 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1182 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1183 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1184 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1186 ; GFX9-LABEL: v_store_global_v8bf16:
1187 ; GFX9:       ; %bb.0:
1188 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1189 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
1190 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1191 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1193 ; GFX10-LABEL: v_store_global_v8bf16:
1194 ; GFX10:       ; %bb.0:
1195 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1196 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
1197 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1199 ; GFX11-LABEL: v_store_global_v8bf16:
1200 ; GFX11:       ; %bb.0:
1201 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1202 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
1203 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1204   store <8 x bfloat> %val, ptr addrspace(1) %ptr
1205   ret void
1208 define void @v_store_global_v16bf16(<16 x bfloat> %val, ptr addrspace(1) %ptr) {
1209 ; GCN-LABEL: v_store_global_v16bf16:
1210 ; GCN:       ; %bb.0:
1211 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1212 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1213 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1214 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1215 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1216 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1217 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v2
1218 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1219 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1220 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1221 ; GCN-NEXT:    s_mov_b32 s6, 0
1222 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v15
1223 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
1224 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
1225 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
1226 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
1227 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
1228 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
1229 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
1230 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1231 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1232 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v3
1233 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v1
1234 ; GCN-NEXT:    s_mov_b32 s4, s6
1235 ; GCN-NEXT:    s_mov_b32 s5, s6
1236 ; GCN-NEXT:    v_lshrrev_b32_e32 v20, 16, v2
1237 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
1238 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
1239 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
1240 ; GCN-NEXT:    v_alignbit_b32 v3, v7, v6, 16
1241 ; GCN-NEXT:    v_alignbit_b32 v2, v5, v4, 16
1242 ; GCN-NEXT:    v_alignbit_b32 v1, v15, v18, 16
1243 ; GCN-NEXT:    v_alignbit_b32 v0, v19, v0, 16
1244 ; GCN-NEXT:    v_alignbit_b32 v7, v20, v14, 16
1245 ; GCN-NEXT:    v_alignbit_b32 v6, v13, v12, 16
1246 ; GCN-NEXT:    v_alignbit_b32 v5, v11, v10, 16
1247 ; GCN-NEXT:    v_alignbit_b32 v4, v9, v8, 16
1248 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[16:17], s[4:7], 0 addr64 offset:16
1249 ; GCN-NEXT:    buffer_store_dwordx4 v[0:3], v[16:17], s[4:7], 0 addr64
1250 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1251 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1253 ; GFX7-LABEL: v_store_global_v16bf16:
1254 ; GFX7:       ; %bb.0:
1255 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1256 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1257 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1258 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1259 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
1260 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1261 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1262 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1263 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1264 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1265 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
1266 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
1267 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
1268 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v15
1269 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1270 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v14
1271 ; GFX7-NEXT:    v_alignbit_b32 v14, v0, v1, 16
1272 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v13
1273 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1274 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v12
1275 ; GFX7-NEXT:    v_alignbit_b32 v13, v0, v1, 16
1276 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v11
1277 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1278 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v10
1279 ; GFX7-NEXT:    v_alignbit_b32 v12, v0, v1, 16
1280 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v9
1281 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1282 ; GFX7-NEXT:    s_mov_b32 s6, 0
1283 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1284 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v8
1285 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1286 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1287 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1288 ; GFX7-NEXT:    s_mov_b32 s4, s6
1289 ; GFX7-NEXT:    s_mov_b32 s5, s6
1290 ; GFX7-NEXT:    v_alignbit_b32 v11, v0, v1, 16
1291 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
1292 ; GFX7-NEXT:    buffer_store_dwordx4 v[11:14], v[16:17], s[4:7], 0 addr64 offset:16
1293 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[16:17], s[4:7], 0 addr64
1294 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1295 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1297 ; GFX8-LABEL: v_store_global_v16bf16:
1298 ; GFX8:       ; %bb.0:
1299 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1300 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
1301 ; GFX8-NEXT:    s_nop 0
1302 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v8
1303 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v9, vcc
1304 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
1305 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1306 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1308 ; GFX9-LABEL: v_store_global_v16bf16:
1309 ; GFX9:       ; %bb.0:
1310 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1311 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
1312 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
1313 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1314 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1316 ; GFX10-LABEL: v_store_global_v16bf16:
1317 ; GFX10:       ; %bb.0:
1318 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1319 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
1320 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
1321 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1323 ; GFX11-LABEL: v_store_global_v16bf16:
1324 ; GFX11:       ; %bb.0:
1325 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1326 ; GFX11-NEXT:    s_clause 0x1
1327 ; GFX11-NEXT:    global_store_b128 v[8:9], v[4:7], off offset:16
1328 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
1329 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1330   store <16 x bfloat> %val, ptr addrspace(1) %ptr
1331   ret void
1334 define void @v_store_global_v32bf16(<32 x bfloat> %val, ptr addrspace(1) %ptr) {
1335 ; GCN-LABEL: v_store_global_v32bf16:
1336 ; GCN:       ; %bb.0:
1337 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1338 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1339 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1340 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1341 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1342 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1343 ; GCN-NEXT:    v_lshrrev_b32_e32 v31, 16, v5
1344 ; GCN-NEXT:    v_alignbit_b32 v5, v7, v6, 16
1345 ; GCN-NEXT:    v_alignbit_b32 v4, v31, v4, 16
1346 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1347 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1348 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1349 ; GCN-NEXT:    v_alignbit_b32 v3, v3, v2, 16
1350 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1351 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1352 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1353 ; GCN-NEXT:    v_alignbit_b32 v2, v1, v0, 16
1354 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v15
1355 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v14
1356 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v13
1357 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v12
1358 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1359 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1360 ; GCN-NEXT:    v_alignbit_b32 v13, v0, v1, 16
1361 ; GCN-NEXT:    v_alignbit_b32 v12, v6, v7, 16
1362 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v11
1363 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v10
1364 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1365 ; GCN-NEXT:    v_alignbit_b32 v11, v0, v1, 16
1366 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v9
1367 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v8
1368 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1369 ; GCN-NEXT:    v_alignbit_b32 v10, v0, v1, 16
1370 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v23
1371 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v22
1372 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v21
1373 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v20
1374 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1375 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1376 ; GCN-NEXT:    v_alignbit_b32 v9, v0, v1, 16
1377 ; GCN-NEXT:    v_alignbit_b32 v8, v6, v7, 16
1378 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v19
1379 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v18
1380 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1381 ; GCN-NEXT:    v_alignbit_b32 v7, v0, v1, 16
1382 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v17
1383 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v16
1384 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1385 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v29
1386 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v28
1387 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v27
1388 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v26
1389 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1390 ; GCN-NEXT:    v_lshrrev_b32_e32 v16, 16, v6
1391 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
1392 ; GCN-NEXT:    v_alignbit_b32 v6, v0, v1, 16
1393 ; GCN-NEXT:    v_alignbit_b32 v16, v16, v14, 16
1394 ; GCN-NEXT:    v_alignbit_b32 v15, v15, v17, 16
1395 ; GCN-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:8
1396 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v25
1397 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v24
1398 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1399 ; GCN-NEXT:    v_alignbit_b32 v14, v0, v14, 16
1400 ; GCN-NEXT:    buffer_load_dword v17, off, s[0:3], s32
1401 ; GCN-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:4
1402 ; GCN-NEXT:    s_mov_b32 s6, 0
1403 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v30
1404 ; GCN-NEXT:    s_mov_b32 s4, s6
1405 ; GCN-NEXT:    s_mov_b32 s5, s6
1406 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1407 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
1408 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1409 ; GCN-NEXT:    buffer_store_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:32
1410 ; GCN-NEXT:    buffer_store_dwordx4 v[10:13], v[0:1], s[4:7], 0 addr64 offset:16
1411 ; GCN-NEXT:    s_waitcnt expcnt(1)
1412 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v17
1413 ; GCN-NEXT:    v_alignbit_b32 v17, v6, v18, 16
1414 ; GCN-NEXT:    buffer_store_dwordx4 v[14:17], v[0:1], s[4:7], 0 addr64 offset:48
1415 ; GCN-NEXT:    buffer_store_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
1416 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1417 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1419 ; GFX7-LABEL: v_store_global_v32bf16:
1420 ; GFX7:       ; %bb.0:
1421 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1422 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1423 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1424 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1425 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1426 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1427 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1428 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v2, 16
1429 ; GFX7-NEXT:    v_alignbit_b32 v2, v1, v0, 16
1430 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v14
1431 ; GFX7-NEXT:    buffer_load_dword v14, off, s[0:3], s32
1432 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1433 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v15
1434 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1435 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1436 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1437 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1438 ; GFX7-NEXT:    v_lshrrev_b32_e32 v31, 16, v5
1439 ; GFX7-NEXT:    v_alignbit_b32 v5, v7, v6, 16
1440 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v13
1441 ; GFX7-NEXT:    v_alignbit_b32 v13, v0, v1, 16
1442 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v11
1443 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1444 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v10
1445 ; GFX7-NEXT:    v_alignbit_b32 v11, v0, v1, 16
1446 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:8
1447 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:4
1448 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1449 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v12
1450 ; GFX7-NEXT:    v_alignbit_b32 v12, v6, v7, 16
1451 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v9
1452 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1453 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v8
1454 ; GFX7-NEXT:    v_alignbit_b32 v10, v6, v7, 16
1455 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v23
1456 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1457 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v22
1458 ; GFX7-NEXT:    v_alignbit_b32 v9, v6, v7, 16
1459 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v21
1460 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1461 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v20
1462 ; GFX7-NEXT:    v_alignbit_b32 v8, v6, v7, 16
1463 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v19
1464 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1465 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v18
1466 ; GFX7-NEXT:    v_alignbit_b32 v7, v6, v7, 16
1467 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v17
1468 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1469 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v16
1470 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v15, 16
1471 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v30
1472 ; GFX7-NEXT:    s_mov_b32 s6, 0
1473 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v24
1474 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1475 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1476 ; GFX7-NEXT:    s_mov_b32 s4, s6
1477 ; GFX7-NEXT:    s_mov_b32 s5, s6
1478 ; GFX7-NEXT:    v_alignbit_b32 v4, v31, v4, 16
1479 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
1480 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
1481 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1482 ; GFX7-NEXT:    v_alignbit_b32 v17, v14, v15, 16
1483 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v29
1484 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1485 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v28
1486 ; GFX7-NEXT:    v_alignbit_b32 v16, v14, v15, 16
1487 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v27
1488 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1489 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v26
1490 ; GFX7-NEXT:    v_alignbit_b32 v15, v14, v15, 16
1491 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v25
1492 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1493 ; GFX7-NEXT:    v_alignbit_b32 v14, v14, v18, 16
1494 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1495 ; GFX7-NEXT:    buffer_store_dwordx4 v[14:17], v[0:1], s[4:7], 0 addr64 offset:48
1496 ; GFX7-NEXT:    buffer_store_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:32
1497 ; GFX7-NEXT:    buffer_store_dwordx4 v[10:13], v[0:1], s[4:7], 0 addr64 offset:16
1498 ; GFX7-NEXT:    buffer_store_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
1499 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1500 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1502 ; GFX8-LABEL: v_store_global_v32bf16:
1503 ; GFX8:       ; %bb.0:
1504 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1505 ; GFX8-NEXT:    flat_store_dwordx4 v[16:17], v[0:3]
1506 ; GFX8-NEXT:    s_nop 0
1507 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 48, v16
1508 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v17, vcc
1509 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[12:15]
1510 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 32, v16
1511 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v17, vcc
1512 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
1513 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v16
1514 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v17, vcc
1515 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
1516 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1517 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1519 ; GFX9-LABEL: v_store_global_v32bf16:
1520 ; GFX9:       ; %bb.0:
1521 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1522 ; GFX9-NEXT:    global_store_dwordx4 v[16:17], v[12:15], off offset:48
1523 ; GFX9-NEXT:    global_store_dwordx4 v[16:17], v[8:11], off offset:32
1524 ; GFX9-NEXT:    global_store_dwordx4 v[16:17], v[4:7], off offset:16
1525 ; GFX9-NEXT:    global_store_dwordx4 v[16:17], v[0:3], off
1526 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1527 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1529 ; GFX10-LABEL: v_store_global_v32bf16:
1530 ; GFX10:       ; %bb.0:
1531 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1532 ; GFX10-NEXT:    global_store_dwordx4 v[16:17], v[12:15], off offset:48
1533 ; GFX10-NEXT:    global_store_dwordx4 v[16:17], v[8:11], off offset:32
1534 ; GFX10-NEXT:    global_store_dwordx4 v[16:17], v[4:7], off offset:16
1535 ; GFX10-NEXT:    global_store_dwordx4 v[16:17], v[0:3], off
1536 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1538 ; GFX11-LABEL: v_store_global_v32bf16:
1539 ; GFX11:       ; %bb.0:
1540 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1541 ; GFX11-NEXT:    s_clause 0x3
1542 ; GFX11-NEXT:    global_store_b128 v[16:17], v[12:15], off offset:48
1543 ; GFX11-NEXT:    global_store_b128 v[16:17], v[8:11], off offset:32
1544 ; GFX11-NEXT:    global_store_b128 v[16:17], v[4:7], off offset:16
1545 ; GFX11-NEXT:    global_store_b128 v[16:17], v[0:3], off
1546 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1547   store <32 x bfloat> %val, ptr addrspace(1) %ptr
1548   ret void
1551 define void @v_store_global_v64bf16(<64 x bfloat> %val, ptr addrspace(1) %ptr) {
1552 ; GCN-LABEL: v_store_global_v64bf16:
1553 ; GCN:       ; %bb.0:
1554 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1555 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
1556 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
1557 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
1558 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
1559 ; GCN-NEXT:    v_lshrrev_b32_e32 v23, 16, v23
1560 ; GCN-NEXT:    v_lshrrev_b32_e32 v31, 16, v21
1561 ; GCN-NEXT:    v_alignbit_b32 v21, v23, v22, 16
1562 ; GCN-NEXT:    v_alignbit_b32 v20, v31, v20, 16
1563 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
1564 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
1565 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
1566 ; GCN-NEXT:    v_alignbit_b32 v19, v19, v18, 16
1567 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v17
1568 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v16
1569 ; GCN-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:136
1570 ; GCN-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:132
1571 ; GCN-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
1572 ; GCN-NEXT:    v_alignbit_b32 v18, v18, v22, 16
1573 ; GCN-NEXT:    s_mov_b32 s6, 0
1574 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
1575 ; GCN-NEXT:    s_mov_b32 s4, s6
1576 ; GCN-NEXT:    s_mov_b32 s5, s6
1577 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1578 ; GCN-NEXT:    buffer_store_dwordx4 v[18:21], v[16:17], s[4:7], 0 addr64 offset:32
1579 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
1580 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
1581 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
1582 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
1583 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
1584 ; GCN-NEXT:    s_waitcnt expcnt(0)
1585 ; GCN-NEXT:    v_lshrrev_b32_e32 v18, 16, v13
1586 ; GCN-NEXT:    v_alignbit_b32 v13, v15, v14, 16
1587 ; GCN-NEXT:    v_alignbit_b32 v12, v18, v12, 16
1588 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
1589 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
1590 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
1591 ; GCN-NEXT:    v_alignbit_b32 v11, v11, v10, 16
1592 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
1593 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
1594 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
1595 ; GCN-NEXT:    v_alignbit_b32 v10, v9, v8, 16
1596 ; GCN-NEXT:    buffer_store_dwordx4 v[10:13], v[16:17], s[4:7], 0 addr64 offset:16
1597 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:128
1598 ; GCN-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:124
1599 ; GCN-NEXT:    s_waitcnt expcnt(0)
1600 ; GCN-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:120
1601 ; GCN-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:116
1602 ; GCN-NEXT:    s_waitcnt vmcnt(3)
1603 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
1604 ; GCN-NEXT:    s_waitcnt vmcnt(2)
1605 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
1606 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1607 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
1608 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1609 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v11
1610 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1611 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
1612 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:112
1613 ; GCN-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:108
1614 ; GCN-NEXT:    v_alignbit_b32 v11, v8, v9, 16
1615 ; GCN-NEXT:    v_alignbit_b32 v10, v10, v12, 16
1616 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1617 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v13
1618 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1619 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v14
1620 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:104
1621 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:100
1622 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1623 ; GCN-NEXT:    v_alignbit_b32 v9, v8, v9, 16
1624 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1625 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v12
1626 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1627 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v13
1628 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1629 ; GCN-NEXT:    v_alignbit_b32 v8, v8, v12, 16
1630 ; GCN-NEXT:    buffer_store_dwordx4 v[8:11], v[16:17], s[4:7], 0 addr64 offset:112
1631 ; GCN-NEXT:    s_waitcnt expcnt(0)
1632 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:96
1633 ; GCN-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:92
1634 ; GCN-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:88
1635 ; GCN-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:84
1636 ; GCN-NEXT:    s_waitcnt vmcnt(3)
1637 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
1638 ; GCN-NEXT:    s_waitcnt vmcnt(2)
1639 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
1640 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1641 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
1642 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1643 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v11
1644 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1645 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
1646 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:80
1647 ; GCN-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:76
1648 ; GCN-NEXT:    v_alignbit_b32 v11, v8, v9, 16
1649 ; GCN-NEXT:    v_alignbit_b32 v10, v10, v12, 16
1650 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1651 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v13
1652 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1653 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v14
1654 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:72
1655 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:68
1656 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1657 ; GCN-NEXT:    v_alignbit_b32 v9, v8, v9, 16
1658 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1659 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v12
1660 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1661 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v13
1662 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1663 ; GCN-NEXT:    v_alignbit_b32 v8, v8, v12, 16
1664 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1665 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1666 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1667 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1668 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v3
1669 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v2
1670 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v1
1671 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1672 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v30
1673 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v29
1674 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v28
1675 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v27
1676 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v26
1677 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v25
1678 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v24
1679 ; GCN-NEXT:    buffer_store_dwordx4 v[8:11], v[16:17], s[4:7], 0 addr64 offset:96
1680 ; GCN-NEXT:    s_waitcnt expcnt(0)
1681 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32
1682 ; GCN-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:32
1683 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
1684 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v5
1685 ; GCN-NEXT:    v_alignbit_b32 v3, v1, v6, 16
1686 ; GCN-NEXT:    v_alignbit_b32 v2, v2, v4, 16
1687 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:28
1688 ; GCN-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:24
1689 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v12
1690 ; GCN-NEXT:    v_alignbit_b32 v1, v1, v13, 16
1691 ; GCN-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:20
1692 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:16
1693 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v14
1694 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v18
1695 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v20
1696 ; GCN-NEXT:    v_alignbit_b32 v0, v4, v0, 16
1697 ; GCN-NEXT:    v_alignbit_b32 v6, v5, v19, 16
1698 ; GCN-NEXT:    v_alignbit_b32 v5, v13, v21, 16
1699 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:12
1700 ; GCN-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:8
1701 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v22
1702 ; GCN-NEXT:    v_alignbit_b32 v4, v4, v23, 16
1703 ; GCN-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:4
1704 ; GCN-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:64
1705 ; GCN-NEXT:    s_waitcnt vmcnt(9)
1706 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
1707 ; GCN-NEXT:    s_waitcnt vmcnt(8)
1708 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
1709 ; GCN-NEXT:    s_waitcnt vmcnt(7)
1710 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v7
1711 ; GCN-NEXT:    s_waitcnt vmcnt(6)
1712 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v10
1713 ; GCN-NEXT:    s_waitcnt vmcnt(5)
1714 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v11
1715 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1716 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
1717 ; GCN-NEXT:    v_lshrrev_b32_e32 v21, 16, v7
1718 ; GCN-NEXT:    v_alignbit_b32 v7, v8, v15, 16
1719 ; GCN-NEXT:    v_alignbit_b32 v11, v9, v20, 16
1720 ; GCN-NEXT:    v_alignbit_b32 v10, v21, v10, 16
1721 ; GCN-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:60
1722 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:56
1723 ; GCN-NEXT:    s_waitcnt vmcnt(6)
1724 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v12
1725 ; GCN-NEXT:    s_waitcnt vmcnt(5)
1726 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v13
1727 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1728 ; GCN-NEXT:    v_alignbit_b32 v9, v8, v9, 16
1729 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:52
1730 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:48
1731 ; GCN-NEXT:    s_waitcnt vmcnt(6)
1732 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v14
1733 ; GCN-NEXT:    s_waitcnt vmcnt(5)
1734 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v18
1735 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
1736 ; GCN-NEXT:    v_alignbit_b32 v8, v8, v14, 16
1737 ; GCN-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:44
1738 ; GCN-NEXT:    s_waitcnt vmcnt(5)
1739 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v19
1740 ; GCN-NEXT:    s_waitcnt vmcnt(4)
1741 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
1742 ; GCN-NEXT:    s_waitcnt vmcnt(3)
1743 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v20
1744 ; GCN-NEXT:    s_waitcnt vmcnt(2)
1745 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
1746 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1747 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
1748 ; GCN-NEXT:    v_alignbit_b32 v15, v14, v15, 16
1749 ; GCN-NEXT:    v_alignbit_b32 v14, v19, v12, 16
1750 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:40
1751 ; GCN-NEXT:    s_waitcnt vmcnt(2)
1752 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
1753 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1754 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
1755 ; GCN-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:36
1756 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
1757 ; GCN-NEXT:    v_alignbit_b32 v13, v13, v18, 16
1758 ; GCN-NEXT:    s_waitcnt vmcnt(1)
1759 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
1760 ; GCN-NEXT:    s_waitcnt vmcnt(0)
1761 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v19
1762 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
1763 ; GCN-NEXT:    v_alignbit_b32 v12, v12, v18, 16
1764 ; GCN-NEXT:    buffer_store_dwordx4 v[12:15], v[16:17], s[4:7], 0 addr64 offset:80
1765 ; GCN-NEXT:    buffer_store_dwordx4 v[8:11], v[16:17], s[4:7], 0 addr64 offset:64
1766 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[16:17], s[4:7], 0 addr64 offset:48
1767 ; GCN-NEXT:    buffer_store_dwordx4 v[0:3], v[16:17], s[4:7], 0 addr64
1768 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1769 ; GCN-NEXT:    s_setpc_b64 s[30:31]
1771 ; GFX7-LABEL: v_store_global_v64bf16:
1772 ; GFX7:       ; %bb.0:
1773 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1774 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:128
1775 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
1776 ; GFX7-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:120
1777 ; GFX7-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:116
1778 ; GFX7-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:112
1779 ; GFX7-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:108
1780 ; GFX7-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:104
1781 ; GFX7-NEXT:    buffer_load_dword v48, off, s[0:3], s32 offset:100
1782 ; GFX7-NEXT:    s_mov_b32 s6, 0
1783 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
1784 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1785 ; GFX7-NEXT:    s_mov_b32 s4, s6
1786 ; GFX7-NEXT:    s_mov_b32 s5, s6
1787 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1788 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
1789 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1790 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
1791 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1792 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
1793 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
1794 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1795 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1796 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v2, 16
1797 ; GFX7-NEXT:    v_alignbit_b32 v2, v1, v0, 16
1798 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v15
1799 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v14
1800 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1801 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
1802 ; GFX7-NEXT:    s_waitcnt vmcnt(7)
1803 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
1804 ; GFX7-NEXT:    s_waitcnt vmcnt(6)
1805 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
1806 ; GFX7-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
1807 ; GFX7-NEXT:    s_waitcnt vmcnt(5)
1808 ; GFX7-NEXT:    v_mul_f32_e32 v33, 1.0, v33
1809 ; GFX7-NEXT:    v_alignbit_b32 v36, v31, v32, 16
1810 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
1811 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v37
1812 ; GFX7-NEXT:    v_mul_f32_e32 v34, 1.0, v34
1813 ; GFX7-NEXT:    v_lshrrev_b32_e32 v33, 16, v33
1814 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
1815 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v38
1816 ; GFX7-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
1817 ; GFX7-NEXT:    v_alignbit_b32 v35, v33, v34, 16
1818 ; GFX7-NEXT:    v_alignbit_b32 v34, v31, v32, 16
1819 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
1820 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v39
1821 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1822 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v48
1823 ; GFX7-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
1824 ; GFX7-NEXT:    v_alignbit_b32 v33, v31, v32, 16
1825 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:136
1826 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:132
1827 ; GFX7-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:96
1828 ; GFX7-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:92
1829 ; GFX7-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:88
1830 ; GFX7-NEXT:    buffer_load_dword v48, off, s[0:3], s32 offset:84
1831 ; GFX7-NEXT:    buffer_load_dword v49, off, s[0:3], s32 offset:80
1832 ; GFX7-NEXT:    buffer_load_dword v50, off, s[0:3], s32 offset:76
1833 ; GFX7-NEXT:    s_waitcnt vmcnt(6)
1834 ; GFX7-NEXT:    buffer_store_dwordx4 v[33:36], v[31:32], s[4:7], 0 addr64 offset:112
1835 ; GFX7-NEXT:    s_nop 0
1836 ; GFX7-NEXT:    v_lshrrev_b32_e32 v33, 16, v5
1837 ; GFX7-NEXT:    v_alignbit_b32 v5, v7, v6, 16
1838 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v13
1839 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v12
1840 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1841 ; GFX7-NEXT:    v_alignbit_b32 v12, v6, v7, 16
1842 ; GFX7-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:72
1843 ; GFX7-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:68
1844 ; GFX7-NEXT:    buffer_load_dword v15, off, s[0:3], s32
1845 ; GFX7-NEXT:    v_alignbit_b32 v13, v0, v1, 16
1846 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v11
1847 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1848 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v10
1849 ; GFX7-NEXT:    v_alignbit_b32 v11, v0, v1, 16
1850 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v9
1851 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1852 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v8
1853 ; GFX7-NEXT:    v_alignbit_b32 v10, v0, v1, 16
1854 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v23
1855 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1856 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v22
1857 ; GFX7-NEXT:    v_alignbit_b32 v9, v0, v1, 16
1858 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v21
1859 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1860 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v20
1861 ; GFX7-NEXT:    v_alignbit_b32 v8, v0, v1, 16
1862 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v19
1863 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1864 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v18
1865 ; GFX7-NEXT:    v_alignbit_b32 v7, v0, v1, 16
1866 ; GFX7-NEXT:    s_waitcnt vmcnt(9)
1867 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v37
1868 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v28
1869 ; GFX7-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:64
1870 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1871 ; GFX7-NEXT:    s_waitcnt vmcnt(9)
1872 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v38
1873 ; GFX7-NEXT:    v_alignbit_b32 v4, v33, v4, 16
1874 ; GFX7-NEXT:    s_waitcnt vmcnt(8)
1875 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v39
1876 ; GFX7-NEXT:    v_alignbit_b32 v36, v0, v1, 16
1877 ; GFX7-NEXT:    s_waitcnt vmcnt(6)
1878 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v49
1879 ; GFX7-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
1880 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v48
1881 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1882 ; GFX7-NEXT:    s_waitcnt vmcnt(5)
1883 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v50
1884 ; GFX7-NEXT:    v_alignbit_b32 v35, v18, v19, 16
1885 ; GFX7-NEXT:    v_alignbit_b32 v34, v0, v1, 16
1886 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:32
1887 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:28
1888 ; GFX7-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:24
1889 ; GFX7-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:20
1890 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:16
1891 ; GFX7-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:12
1892 ; GFX7-NEXT:    s_waitcnt vmcnt(8)
1893 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
1894 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
1895 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1896 ; GFX7-NEXT:    v_alignbit_b32 v33, v6, v14, 16
1897 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v17
1898 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
1899 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v16
1900 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v14, 16
1901 ; GFX7-NEXT:    s_waitcnt vmcnt(7)
1902 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v15
1903 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1904 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v30
1905 ; GFX7-NEXT:    buffer_store_dwordx4 v[33:36], v[31:32], s[4:7], 0 addr64 offset:96
1906 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v29
1907 ; GFX7-NEXT:    v_alignbit_b32 v17, v14, v15, 16
1908 ; GFX7-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:52
1909 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v27
1910 ; GFX7-NEXT:    buffer_load_dword v27, off, s[0:3], s32 offset:48
1911 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v26
1912 ; GFX7-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:44
1913 ; GFX7-NEXT:    buffer_load_dword v29, off, s[0:3], s32 offset:8
1914 ; GFX7-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:4
1915 ; GFX7-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:60
1916 ; GFX7-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:56
1917 ; GFX7-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:40
1918 ; GFX7-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:36
1919 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1920 ; GFX7-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
1921 ; GFX7-NEXT:    v_alignbit_b32 v15, v14, v15, 16
1922 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v25
1923 ; GFX7-NEXT:    v_alignbit_b32 v16, v16, v20, 16
1924 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
1925 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v24
1926 ; GFX7-NEXT:    v_alignbit_b32 v14, v14, v20, 16
1927 ; GFX7-NEXT:    s_waitcnt vmcnt(14)
1928 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
1929 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1930 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
1931 ; GFX7-NEXT:    v_alignbit_b32 v21, v0, v1, 16
1932 ; GFX7-NEXT:    s_waitcnt vmcnt(13)
1933 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v18
1934 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1935 ; GFX7-NEXT:    s_waitcnt vmcnt(12)
1936 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v19
1937 ; GFX7-NEXT:    v_alignbit_b32 v20, v0, v1, 16
1938 ; GFX7-NEXT:    s_waitcnt vmcnt(11)
1939 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v22
1940 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1941 ; GFX7-NEXT:    s_waitcnt vmcnt(10)
1942 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v23
1943 ; GFX7-NEXT:    v_alignbit_b32 v19, v0, v1, 16
1944 ; GFX7-NEXT:    s_waitcnt vmcnt(8)
1945 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v35
1946 ; GFX7-NEXT:    s_waitcnt vmcnt(5)
1947 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v29
1948 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1949 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
1950 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v30
1951 ; GFX7-NEXT:    v_alignbit_b32 v18, v0, v1, 16
1952 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v28
1953 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1954 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
1955 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v33
1956 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
1957 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v34
1958 ; GFX7-NEXT:    v_alignbit_b32 v25, v0, v1, 16
1959 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v27
1960 ; GFX7-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
1961 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1962 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v26
1963 ; GFX7-NEXT:    v_alignbit_b32 v24, v22, v23, 16
1964 ; GFX7-NEXT:    v_alignbit_b32 v23, v0, v1, 16
1965 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
1966 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v36
1967 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
1968 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1969 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v37
1970 ; GFX7-NEXT:    v_alignbit_b32 v22, v0, v1, 16
1971 ; GFX7-NEXT:    buffer_store_dwordx4 v[22:25], v[31:32], s[4:7], 0 addr64 offset:80
1972 ; GFX7-NEXT:    buffer_store_dwordx4 v[18:21], v[31:32], s[4:7], 0 addr64 offset:64
1973 ; GFX7-NEXT:    buffer_store_dwordx4 v[14:17], v[31:32], s[4:7], 0 addr64 offset:48
1974 ; GFX7-NEXT:    buffer_store_dwordx4 v[6:9], v[31:32], s[4:7], 0 addr64 offset:32
1975 ; GFX7-NEXT:    buffer_store_dwordx4 v[10:13], v[31:32], s[4:7], 0 addr64 offset:16
1976 ; GFX7-NEXT:    buffer_store_dwordx4 v[2:5], v[31:32], s[4:7], 0 addr64
1977 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1978 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1980 ; GFX8-LABEL: v_store_global_v64bf16:
1981 ; GFX8:       ; %bb.0:
1982 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1983 ; GFX8-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
1984 ; GFX8-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
1985 ; GFX8-NEXT:    buffer_load_dword v31, off, s[0:3], s32
1986 ; GFX8-NEXT:    s_movk_i32 s4, 0x70
1987 ; GFX8-NEXT:    s_movk_i32 s5, 0x50
1988 ; GFX8-NEXT:    s_waitcnt vmcnt(2)
1989 ; GFX8-NEXT:    v_add_u32_e32 v34, vcc, s4, v32
1990 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
1991 ; GFX8-NEXT:    v_addc_u32_e32 v35, vcc, 0, v33, vcc
1992 ; GFX8-NEXT:    s_movk_i32 s4, 0x60
1993 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1994 ; GFX8-NEXT:    flat_store_dwordx4 v[34:35], v[28:31]
1995 ; GFX8-NEXT:    flat_store_dwordx4 v[32:33], v[0:3]
1996 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v32
1997 ; GFX8-NEXT:    v_addc_u32_e32 v29, vcc, 0, v33, vcc
1998 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s5, v32
1999 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v33, vcc
2000 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 64, v32
2001 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v33, vcc
2002 ; GFX8-NEXT:    flat_store_dwordx4 v[28:29], v[24:27]
2003 ; GFX8-NEXT:    s_nop 0
2004 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, 48, v32
2005 ; GFX8-NEXT:    v_addc_u32_e32 v25, vcc, 0, v33, vcc
2006 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, 32, v32
2007 ; GFX8-NEXT:    v_addc_u32_e32 v27, vcc, 0, v33, vcc
2008 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, 16, v32
2009 ; GFX8-NEXT:    v_addc_u32_e32 v29, vcc, 0, v33, vcc
2010 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[20:23]
2011 ; GFX8-NEXT:    flat_store_dwordx4 v[2:3], v[16:19]
2012 ; GFX8-NEXT:    flat_store_dwordx4 v[24:25], v[12:15]
2013 ; GFX8-NEXT:    flat_store_dwordx4 v[26:27], v[8:11]
2014 ; GFX8-NEXT:    flat_store_dwordx4 v[28:29], v[4:7]
2015 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2016 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2018 ; GFX9-LABEL: v_store_global_v64bf16:
2019 ; GFX9:       ; %bb.0:
2020 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2021 ; GFX9-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
2022 ; GFX9-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
2023 ; GFX9-NEXT:    buffer_load_dword v31, off, s[0:3], s32
2024 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2025 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[28:31], off offset:112
2026 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[24:27], off offset:96
2027 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[20:23], off offset:80
2028 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[16:19], off offset:64
2029 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[12:15], off offset:48
2030 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[8:11], off offset:32
2031 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[4:7], off offset:16
2032 ; GFX9-NEXT:    global_store_dwordx4 v[32:33], v[0:3], off
2033 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2034 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2036 ; GFX10-LABEL: v_store_global_v64bf16:
2037 ; GFX10:       ; %bb.0:
2038 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2039 ; GFX10-NEXT:    s_clause 0x2
2040 ; GFX10-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
2041 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
2042 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32
2043 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2044 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[28:31], off offset:112
2045 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[24:27], off offset:96
2046 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[20:23], off offset:80
2047 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[16:19], off offset:64
2048 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[12:15], off offset:48
2049 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[8:11], off offset:32
2050 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[4:7], off offset:16
2051 ; GFX10-NEXT:    global_store_dwordx4 v[32:33], v[0:3], off
2052 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2054 ; GFX11-LABEL: v_store_global_v64bf16:
2055 ; GFX11:       ; %bb.0:
2056 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2057 ; GFX11-NEXT:    s_clause 0x2
2058 ; GFX11-NEXT:    scratch_load_b32 v33, off, s32 offset:8
2059 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32 offset:4
2060 ; GFX11-NEXT:    scratch_load_b32 v31, off, s32
2061 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2062 ; GFX11-NEXT:    s_clause 0x7
2063 ; GFX11-NEXT:    global_store_b128 v[32:33], v[28:31], off offset:112
2064 ; GFX11-NEXT:    global_store_b128 v[32:33], v[24:27], off offset:96
2065 ; GFX11-NEXT:    global_store_b128 v[32:33], v[20:23], off offset:80
2066 ; GFX11-NEXT:    global_store_b128 v[32:33], v[16:19], off offset:64
2067 ; GFX11-NEXT:    global_store_b128 v[32:33], v[12:15], off offset:48
2068 ; GFX11-NEXT:    global_store_b128 v[32:33], v[8:11], off offset:32
2069 ; GFX11-NEXT:    global_store_b128 v[32:33], v[4:7], off offset:16
2070 ; GFX11-NEXT:    global_store_b128 v[32:33], v[0:3], off
2071 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2072   store <64 x bfloat> %val, ptr addrspace(1) %ptr
2073   ret void
2076 define void @test_store_fpimm(ptr addrspace(1) %ptr0, ptr addrspace(1) %ptr1) {
2077 ; GCN-LABEL: test_store_fpimm:
2078 ; GCN:       ; %bb.0:
2079 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2080 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2081 ; GCN-NEXT:    s_mov_b32 s6, 0
2082 ; GCN-NEXT:    v_mov_b32_e32 v4, 0x3f80
2083 ; GCN-NEXT:    v_mov_b32_e32 v5, 0x4228
2084 ; GCN-NEXT:    s_mov_b32 s4, s6
2085 ; GCN-NEXT:    s_mov_b32 s5, s6
2086 ; GCN-NEXT:    buffer_store_short v4, v[0:1], s[4:7], 0 addr64
2087 ; GCN-NEXT:    buffer_store_short v5, v[2:3], s[4:7], 0 addr64
2088 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2089 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2091 ; GFX7-LABEL: test_store_fpimm:
2092 ; GFX7:       ; %bb.0:
2093 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2094 ; GFX7-NEXT:    s_mov_b32 s6, 0
2095 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2096 ; GFX7-NEXT:    s_mov_b32 s4, s6
2097 ; GFX7-NEXT:    s_mov_b32 s5, s6
2098 ; GFX7-NEXT:    v_mov_b32_e32 v4, 0x3f80
2099 ; GFX7-NEXT:    buffer_store_short v4, v[0:1], s[4:7], 0 addr64
2100 ; GFX7-NEXT:    v_mov_b32_e32 v0, 0x4228
2101 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
2102 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2103 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2105 ; GFX8-LABEL: test_store_fpimm:
2106 ; GFX8:       ; %bb.0:
2107 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2108 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0x3f80
2109 ; GFX8-NEXT:    flat_store_short v[0:1], v4
2110 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0x4228
2111 ; GFX8-NEXT:    flat_store_short v[2:3], v0
2112 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2113 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2115 ; GFX9-LABEL: test_store_fpimm:
2116 ; GFX9:       ; %bb.0:
2117 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2118 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0x3f80
2119 ; GFX9-NEXT:    global_store_short v[0:1], v4, off
2120 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x4228
2121 ; GFX9-NEXT:    global_store_short v[2:3], v0, off
2122 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2123 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2125 ; GFX10-LABEL: test_store_fpimm:
2126 ; GFX10:       ; %bb.0:
2127 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2128 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0x3f80
2129 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0x4228
2130 ; GFX10-NEXT:    global_store_short v[0:1], v4, off
2131 ; GFX10-NEXT:    global_store_short v[2:3], v5, off
2132 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2134 ; GFX11-LABEL: test_store_fpimm:
2135 ; GFX11:       ; %bb.0:
2136 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2137 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0x3f80
2138 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0x4228
2139 ; GFX11-NEXT:    global_store_b16 v[0:1], v4, off
2140 ; GFX11-NEXT:    global_store_b16 v[2:3], v5, off
2141 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2142   store bfloat 1.0, ptr addrspace(1) %ptr0
2143   store bfloat 42.0, ptr addrspace(1) %ptr1
2144   ret void
2147 define void @test_load_store_f32_to_bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2148 ; GCN-LABEL: test_load_store_f32_to_bf16:
2149 ; GCN:       ; %bb.0:
2150 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2151 ; GCN-NEXT:    s_mov_b32 s6, 0
2152 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2153 ; GCN-NEXT:    s_mov_b32 s4, s6
2154 ; GCN-NEXT:    s_mov_b32 s5, s6
2155 ; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
2156 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2157 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2158 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2159 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
2160 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2161 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2163 ; GFX7-LABEL: test_load_store_f32_to_bf16:
2164 ; GFX7:       ; %bb.0:
2165 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2166 ; GFX7-NEXT:    s_mov_b32 s6, 0
2167 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2168 ; GFX7-NEXT:    s_mov_b32 s4, s6
2169 ; GFX7-NEXT:    s_mov_b32 s5, s6
2170 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
2171 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2172 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2173 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2174 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
2175 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2176 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2178 ; GFX8-LABEL: test_load_store_f32_to_bf16:
2179 ; GFX8:       ; %bb.0:
2180 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2181 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
2182 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2183 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
2184 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
2185 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
2186 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
2187 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
2188 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc
2189 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2190 ; GFX8-NEXT:    flat_store_short v[2:3], v0
2191 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2192 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2194 ; GFX9-LABEL: test_load_store_f32_to_bf16:
2195 ; GFX9:       ; %bb.0:
2196 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2197 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
2198 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
2199 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2200 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
2201 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
2202 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
2203 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
2204 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc
2205 ; GFX9-NEXT:    global_store_short_d16_hi v[2:3], v0, off
2206 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2207 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2209 ; GFX10-LABEL: test_load_store_f32_to_bf16:
2210 ; GFX10:       ; %bb.0:
2211 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2212 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
2213 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2214 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
2215 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v0
2216 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
2217 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
2218 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc_lo
2219 ; GFX10-NEXT:    global_store_short_d16_hi v[2:3], v0, off
2220 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2222 ; GFX11-LABEL: test_load_store_f32_to_bf16:
2223 ; GFX11:       ; %bb.0:
2224 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2225 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
2226 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2227 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
2228 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v0
2229 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
2230 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
2231 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
2232 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc_lo
2233 ; GFX11-NEXT:    global_store_d16_hi_b16 v[2:3], v0, off
2234 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2235   %val = load float, ptr addrspace(1) %in
2236   %val.bf16 = fptrunc float %val to bfloat
2237   store bfloat %val.bf16, ptr addrspace(1) %out
2238   ret void
2241 define void @test_load_store_f64_to_bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2242 ; GCN-LABEL: test_load_store_f64_to_bf16:
2243 ; GCN:       ; %bb.0:
2244 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2245 ; GCN-NEXT:    s_mov_b32 s6, 0
2246 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2247 ; GCN-NEXT:    s_mov_b32 s4, s6
2248 ; GCN-NEXT:    s_mov_b32 s5, s6
2249 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
2250 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2251 ; GCN-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2252 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2253 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
2254 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2255 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2257 ; GFX7-LABEL: test_load_store_f64_to_bf16:
2258 ; GFX7:       ; %bb.0:
2259 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2260 ; GFX7-NEXT:    s_mov_b32 s6, 0
2261 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2262 ; GFX7-NEXT:    s_mov_b32 s4, s6
2263 ; GFX7-NEXT:    s_mov_b32 s5, s6
2264 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
2265 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2266 ; GFX7-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2267 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2268 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
2269 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2270 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2272 ; GFX8-LABEL: test_load_store_f64_to_bf16:
2273 ; GFX8:       ; %bb.0:
2274 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2275 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2276 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2277 ; GFX8-NEXT:    v_cvt_f32_f64_e64 v6, |v[0:1]|
2278 ; GFX8-NEXT:    v_and_b32_e32 v7, 0x80000000, v1
2279 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
2280 ; GFX8-NEXT:    v_and_b32_e32 v8, 1, v6
2281 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
2282 ; GFX8-NEXT:    v_cmp_gt_f64_e64 s[4:5], |v[0:1]|, v[4:5]
2283 ; GFX8-NEXT:    v_cmp_nlg_f64_e64 s[6:7], |v[0:1]|, v[4:5]
2284 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, -1, 1, s[4:5]
2285 ; GFX8-NEXT:    v_add_u32_e64 v4, s[4:5], v6, v4
2286 ; GFX8-NEXT:    s_or_b64 vcc, s[6:7], vcc
2287 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc
2288 ; GFX8-NEXT:    v_or_b32_e32 v5, v4, v7
2289 ; GFX8-NEXT:    v_bfe_u32 v4, v4, 16, 1
2290 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v5
2291 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
2292 ; GFX8-NEXT:    v_cmp_u_f64_e32 vcc, v[0:1], v[0:1]
2293 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v5
2294 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
2295 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2296 ; GFX8-NEXT:    flat_store_short v[2:3], v0
2297 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2298 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2300 ; GFX9-LABEL: test_load_store_f64_to_bf16:
2301 ; GFX9:       ; %bb.0:
2302 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2303 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
2304 ; GFX9-NEXT:    s_brev_b32 s8, 1
2305 ; GFX9-NEXT:    s_movk_i32 s9, 0x7fff
2306 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2307 ; GFX9-NEXT:    v_cvt_f32_f64_e64 v6, |v[0:1]|
2308 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
2309 ; GFX9-NEXT:    v_and_b32_e32 v7, 1, v6
2310 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
2311 ; GFX9-NEXT:    v_cmp_gt_f64_e64 s[6:7], |v[0:1]|, v[4:5]
2312 ; GFX9-NEXT:    v_cmp_nlg_f64_e64 s[4:5], |v[0:1]|, v[4:5]
2313 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, -1, 1, s[6:7]
2314 ; GFX9-NEXT:    v_add_u32_e32 v4, v6, v4
2315 ; GFX9-NEXT:    s_or_b64 vcc, s[4:5], vcc
2316 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc
2317 ; GFX9-NEXT:    v_cmp_u_f64_e32 vcc, v[0:1], v[0:1]
2318 ; GFX9-NEXT:    v_and_or_b32 v5, v1, s8, v4
2319 ; GFX9-NEXT:    v_bfe_u32 v4, v4, 16, 1
2320 ; GFX9-NEXT:    v_add3_u32 v4, v4, v5, s9
2321 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v5
2322 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
2323 ; GFX9-NEXT:    global_store_short_d16_hi v[2:3], v0, off
2324 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2325 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2327 ; GFX10-LABEL: test_load_store_f64_to_bf16:
2328 ; GFX10:       ; %bb.0:
2329 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2330 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
2331 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2332 ; GFX10-NEXT:    v_cvt_f32_f64_e64 v6, |v[0:1]|
2333 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
2334 ; GFX10-NEXT:    v_and_b32_e32 v7, 1, v6
2335 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
2336 ; GFX10-NEXT:    v_cmp_gt_f64_e64 s5, |v[0:1]|, v[4:5]
2337 ; GFX10-NEXT:    v_cmp_nlg_f64_e64 s4, |v[0:1]|, v[4:5]
2338 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, -1, 1, s5
2339 ; GFX10-NEXT:    s_or_b32 vcc_lo, s4, vcc_lo
2340 ; GFX10-NEXT:    v_add_nc_u32_e32 v4, v6, v4
2341 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc_lo
2342 ; GFX10-NEXT:    v_cmp_u_f64_e32 vcc_lo, v[0:1], v[0:1]
2343 ; GFX10-NEXT:    v_and_or_b32 v5, 0x80000000, v1, v4
2344 ; GFX10-NEXT:    v_bfe_u32 v4, v4, 16, 1
2345 ; GFX10-NEXT:    v_add3_u32 v4, v4, v5, 0x7fff
2346 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v5
2347 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc_lo
2348 ; GFX10-NEXT:    global_store_short_d16_hi v[2:3], v0, off
2349 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2351 ; GFX11-LABEL: test_load_store_f64_to_bf16:
2352 ; GFX11:       ; %bb.0:
2353 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2354 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
2355 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2356 ; GFX11-NEXT:    v_cvt_f32_f64_e64 v6, |v[0:1]|
2357 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2358 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
2359 ; GFX11-NEXT:    v_and_b32_e32 v7, 1, v6
2360 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
2361 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2362 ; GFX11-NEXT:    v_cmp_gt_f64_e64 s1, |v[0:1]|, v[4:5]
2363 ; GFX11-NEXT:    v_cmp_nlg_f64_e64 s0, |v[0:1]|, v[4:5]
2364 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, -1, 1, s1
2365 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2366 ; GFX11-NEXT:    s_or_b32 vcc_lo, s0, vcc_lo
2367 ; GFX11-NEXT:    v_add_nc_u32_e32 v4, v6, v4
2368 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2369 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc_lo
2370 ; GFX11-NEXT:    v_cmp_u_f64_e32 vcc_lo, v[0:1], v[0:1]
2371 ; GFX11-NEXT:    v_and_or_b32 v5, 0x80000000, v1, v4
2372 ; GFX11-NEXT:    v_bfe_u32 v4, v4, 16, 1
2373 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2374 ; GFX11-NEXT:    v_add3_u32 v4, v4, v5, 0x7fff
2375 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v5
2376 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc_lo
2377 ; GFX11-NEXT:    global_store_d16_hi_b16 v[2:3], v0, off
2378 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2379   %val = load double, ptr addrspace(1) %in
2380   %val.bf16 = fptrunc double %val to bfloat
2381   store bfloat %val.bf16, ptr addrspace(1) %out
2382   ret void
2385 define void @test_load_store_bf16_to_f32(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2386 ; GCN-LABEL: test_load_store_bf16_to_f32:
2387 ; GCN:       ; %bb.0:
2388 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2389 ; GCN-NEXT:    s_mov_b32 s6, 0
2390 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2391 ; GCN-NEXT:    s_mov_b32 s4, s6
2392 ; GCN-NEXT:    s_mov_b32 s5, s6
2393 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
2394 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2395 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2396 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2397 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2398 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2400 ; GFX7-LABEL: test_load_store_bf16_to_f32:
2401 ; GFX7:       ; %bb.0:
2402 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2403 ; GFX7-NEXT:    s_mov_b32 s6, 0
2404 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2405 ; GFX7-NEXT:    s_mov_b32 s4, s6
2406 ; GFX7-NEXT:    s_mov_b32 s5, s6
2407 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
2408 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2409 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2410 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2411 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2412 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2414 ; GFX8-LABEL: test_load_store_bf16_to_f32:
2415 ; GFX8:       ; %bb.0:
2416 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2417 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
2418 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2419 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2420 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
2421 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2422 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2424 ; GFX9-LABEL: test_load_store_bf16_to_f32:
2425 ; GFX9:       ; %bb.0:
2426 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2427 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
2428 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2429 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2430 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
2431 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2432 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2434 ; GFX10-LABEL: test_load_store_bf16_to_f32:
2435 ; GFX10:       ; %bb.0:
2436 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2437 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
2438 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2439 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2440 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
2441 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2443 ; GFX11-LABEL: test_load_store_bf16_to_f32:
2444 ; GFX11:       ; %bb.0:
2445 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2446 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
2447 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2448 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2449 ; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
2450 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2451   %val = load bfloat, ptr addrspace(1) %in
2452   %val.f32 = fpext bfloat %val to float
2453   store float %val.f32, ptr addrspace(1) %out
2454   ret void
2457 define void @test_load_store_bf16_to_f64(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2458 ; GCN-LABEL: test_load_store_bf16_to_f64:
2459 ; GCN:       ; %bb.0:
2460 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2461 ; GCN-NEXT:    s_mov_b32 s6, 0
2462 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2463 ; GCN-NEXT:    s_mov_b32 s4, s6
2464 ; GCN-NEXT:    s_mov_b32 s5, s6
2465 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
2466 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2467 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2468 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2469 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
2470 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2471 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2473 ; GFX7-LABEL: test_load_store_bf16_to_f64:
2474 ; GFX7:       ; %bb.0:
2475 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2476 ; GFX7-NEXT:    s_mov_b32 s6, 0
2477 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2478 ; GFX7-NEXT:    s_mov_b32 s4, s6
2479 ; GFX7-NEXT:    s_mov_b32 s5, s6
2480 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
2481 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2482 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2483 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2484 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
2485 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2486 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2488 ; GFX8-LABEL: test_load_store_bf16_to_f64:
2489 ; GFX8:       ; %bb.0:
2490 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2491 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
2492 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2493 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2494 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2495 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2496 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2497 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2499 ; GFX9-LABEL: test_load_store_bf16_to_f64:
2500 ; GFX9:       ; %bb.0:
2501 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2502 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
2503 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2504 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2505 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2506 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
2507 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2508 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2510 ; GFX10-LABEL: test_load_store_bf16_to_f64:
2511 ; GFX10:       ; %bb.0:
2512 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2513 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
2514 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2515 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2516 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2517 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
2518 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2520 ; GFX11-LABEL: test_load_store_bf16_to_f64:
2521 ; GFX11:       ; %bb.0:
2522 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2523 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
2524 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2525 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
2526 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2527 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
2528 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
2529 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2530   %val = load bfloat, ptr addrspace(1) %in
2531   %val.f64 = fpext bfloat %val to double
2532   store double %val.f64, ptr addrspace(1) %out
2533   ret void
2536 define void @test_load_store_v2bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2537 ; GCN-LABEL: test_load_store_v2bf16:
2538 ; GCN:       ; %bb.0:
2539 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2540 ; GCN-NEXT:    s_mov_b32 s6, 0
2541 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2542 ; GCN-NEXT:    s_mov_b32 s4, s6
2543 ; GCN-NEXT:    s_mov_b32 s5, s6
2544 ; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
2545 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2546 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2547 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2548 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2550 ; GFX7-LABEL: test_load_store_v2bf16:
2551 ; GFX7:       ; %bb.0:
2552 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2553 ; GFX7-NEXT:    s_mov_b32 s6, 0
2554 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2555 ; GFX7-NEXT:    s_mov_b32 s4, s6
2556 ; GFX7-NEXT:    s_mov_b32 s5, s6
2557 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
2558 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2559 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2560 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2561 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2563 ; GFX8-LABEL: test_load_store_v2bf16:
2564 ; GFX8:       ; %bb.0:
2565 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2566 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
2567 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2568 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
2569 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2570 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2572 ; GFX9-LABEL: test_load_store_v2bf16:
2573 ; GFX9:       ; %bb.0:
2574 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2575 ; GFX9-NEXT:    global_load_dword v0, v[0:1], off
2576 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2577 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
2578 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2579 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2581 ; GFX10-LABEL: test_load_store_v2bf16:
2582 ; GFX10:       ; %bb.0:
2583 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2584 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
2585 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2586 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
2587 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2589 ; GFX11-LABEL: test_load_store_v2bf16:
2590 ; GFX11:       ; %bb.0:
2591 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2592 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
2593 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2594 ; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
2595 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2596   %val = load <2 x bfloat>, ptr addrspace(1) %in
2597   store <2 x bfloat> %val, ptr addrspace(1) %out
2598   ret void
2601 define void @test_load_store_v4bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2602 ; GCN-LABEL: test_load_store_v4bf16:
2603 ; GCN:       ; %bb.0:
2604 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2605 ; GCN-NEXT:    s_mov_b32 s6, 0
2606 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2607 ; GCN-NEXT:    s_mov_b32 s4, s6
2608 ; GCN-NEXT:    s_mov_b32 s5, s6
2609 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
2610 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2611 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
2612 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2613 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2615 ; GFX7-LABEL: test_load_store_v4bf16:
2616 ; GFX7:       ; %bb.0:
2617 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2618 ; GFX7-NEXT:    s_mov_b32 s6, 0
2619 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2620 ; GFX7-NEXT:    s_mov_b32 s4, s6
2621 ; GFX7-NEXT:    s_mov_b32 s5, s6
2622 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
2623 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2624 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], v[2:3], s[4:7], 0 addr64
2625 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2626 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2628 ; GFX8-LABEL: test_load_store_v4bf16:
2629 ; GFX8:       ; %bb.0:
2630 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2631 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2632 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2633 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2634 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2635 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2637 ; GFX9-LABEL: test_load_store_v4bf16:
2638 ; GFX9:       ; %bb.0:
2639 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2640 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
2641 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2642 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
2643 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2644 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2646 ; GFX10-LABEL: test_load_store_v4bf16:
2647 ; GFX10:       ; %bb.0:
2648 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2649 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
2650 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2651 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
2652 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2654 ; GFX11-LABEL: test_load_store_v4bf16:
2655 ; GFX11:       ; %bb.0:
2656 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2657 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
2658 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2659 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
2660 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2661   %val = load <4 x bfloat>, ptr addrspace(1) %in
2662   store <4 x bfloat> %val, ptr addrspace(1) %out
2663   ret void
2666 define void @test_load_store_v8bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2667 ; GCN-LABEL: test_load_store_v8bf16:
2668 ; GCN:       ; %bb.0:
2669 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2670 ; GCN-NEXT:    s_mov_b32 s6, 0
2671 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2672 ; GCN-NEXT:    s_mov_b32 s4, s6
2673 ; GCN-NEXT:    s_mov_b32 s5, s6
2674 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
2675 ; GCN-NEXT:    s_waitcnt vmcnt(0)
2676 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64
2677 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2678 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2680 ; GFX7-LABEL: test_load_store_v8bf16:
2681 ; GFX7:       ; %bb.0:
2682 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2683 ; GFX7-NEXT:    s_mov_b32 s6, 0
2684 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2685 ; GFX7-NEXT:    s_mov_b32 s4, s6
2686 ; GFX7-NEXT:    s_mov_b32 s5, s6
2687 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
2688 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2689 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64
2690 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2691 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2693 ; GFX8-LABEL: test_load_store_v8bf16:
2694 ; GFX8:       ; %bb.0:
2695 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2696 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
2697 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2698 ; GFX8-NEXT:    flat_store_dwordx4 v[2:3], v[4:7]
2699 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2700 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2702 ; GFX9-LABEL: test_load_store_v8bf16:
2703 ; GFX9:       ; %bb.0:
2704 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2705 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
2706 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2707 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
2708 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2709 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2711 ; GFX10-LABEL: test_load_store_v8bf16:
2712 ; GFX10:       ; %bb.0:
2713 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2714 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
2715 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2716 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off
2717 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2719 ; GFX11-LABEL: test_load_store_v8bf16:
2720 ; GFX11:       ; %bb.0:
2721 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2722 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
2723 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2724 ; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off
2725 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2726   %val = load <8 x bfloat>, ptr addrspace(1) %in
2727   store <8 x bfloat> %val, ptr addrspace(1) %out
2728   ret void
2731 define void @test_load_store_v16bf16(ptr addrspace(1) %in, ptr addrspace(1) %out) {
2732 ; GCN-LABEL: test_load_store_v16bf16:
2733 ; GCN:       ; %bb.0:
2734 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2735 ; GCN-NEXT:    s_mov_b32 s6, 0
2736 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2737 ; GCN-NEXT:    s_mov_b32 s4, s6
2738 ; GCN-NEXT:    s_mov_b32 s5, s6
2739 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16
2740 ; GCN-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64
2741 ; GCN-NEXT:    s_waitcnt vmcnt(1)
2742 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64 offset:16
2743 ; GCN-NEXT:    s_waitcnt vmcnt(1)
2744 ; GCN-NEXT:    buffer_store_dwordx4 v[8:11], v[2:3], s[4:7], 0 addr64
2745 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2746 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2748 ; GFX7-LABEL: test_load_store_v16bf16:
2749 ; GFX7:       ; %bb.0:
2750 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2751 ; GFX7-NEXT:    s_mov_b32 s6, 0
2752 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2753 ; GFX7-NEXT:    s_mov_b32 s4, s6
2754 ; GFX7-NEXT:    s_mov_b32 s5, s6
2755 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16
2756 ; GFX7-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64
2757 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
2758 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], v[2:3], s[4:7], 0 addr64 offset:16
2759 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
2760 ; GFX7-NEXT:    buffer_store_dwordx4 v[8:11], v[2:3], s[4:7], 0 addr64
2761 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2762 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2764 ; GFX8-LABEL: test_load_store_v16bf16:
2765 ; GFX8:       ; %bb.0:
2766 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2767 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 16, v0
2768 ; GFX8-NEXT:    v_addc_u32_e32 v9, vcc, 0, v1, vcc
2769 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
2770 ; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[8:9]
2771 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v2
2772 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v3, vcc
2773 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
2774 ; GFX8-NEXT:    flat_store_dwordx4 v[2:3], v[4:7]
2775 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
2776 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[8:11]
2777 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2778 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2780 ; GFX9-LABEL: test_load_store_v16bf16:
2781 ; GFX9:       ; %bb.0:
2782 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2783 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
2784 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
2785 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
2786 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
2787 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
2788 ; GFX9-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
2789 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2790 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2792 ; GFX10-LABEL: test_load_store_v16bf16:
2793 ; GFX10:       ; %bb.0:
2794 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2795 ; GFX10-NEXT:    s_clause 0x1
2796 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
2797 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off
2798 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
2799 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[4:7], off offset:16
2800 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2801 ; GFX10-NEXT:    global_store_dwordx4 v[2:3], v[8:11], off
2802 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2804 ; GFX11-LABEL: test_load_store_v16bf16:
2805 ; GFX11:       ; %bb.0:
2806 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2807 ; GFX11-NEXT:    s_clause 0x1
2808 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off offset:16
2809 ; GFX11-NEXT:    global_load_b128 v[8:11], v[0:1], off
2810 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
2811 ; GFX11-NEXT:    global_store_b128 v[2:3], v[4:7], off offset:16
2812 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2813 ; GFX11-NEXT:    global_store_b128 v[2:3], v[8:11], off
2814 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2815   %val = load <16 x bfloat>, ptr addrspace(1) %in
2816   store <16 x bfloat> %val, ptr addrspace(1) %out
2817   ret void
2820 define void @test_arg_store(bfloat %in, ptr addrspace(1) %out) {
2821 ; GCN-LABEL: test_arg_store:
2822 ; GCN:       ; %bb.0:
2823 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2824 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2825 ; GCN-NEXT:    s_mov_b32 s6, 0
2826 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2827 ; GCN-NEXT:    s_mov_b32 s4, s6
2828 ; GCN-NEXT:    s_mov_b32 s5, s6
2829 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2830 ; GCN-NEXT:    buffer_store_short v0, v[1:2], s[4:7], 0 addr64
2831 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2832 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2834 ; GFX7-LABEL: test_arg_store:
2835 ; GFX7:       ; %bb.0:
2836 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2837 ; GFX7-NEXT:    s_mov_b32 s6, 0
2838 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2839 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2840 ; GFX7-NEXT:    s_mov_b32 s4, s6
2841 ; GFX7-NEXT:    s_mov_b32 s5, s6
2842 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
2843 ; GFX7-NEXT:    buffer_store_short v0, v[1:2], s[4:7], 0 addr64
2844 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2845 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2847 ; GFX8-LABEL: test_arg_store:
2848 ; GFX8:       ; %bb.0:
2849 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2850 ; GFX8-NEXT:    flat_store_short v[1:2], v0
2851 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2852 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2854 ; GFX9-LABEL: test_arg_store:
2855 ; GFX9:       ; %bb.0:
2856 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2857 ; GFX9-NEXT:    global_store_short v[1:2], v0, off
2858 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2859 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2861 ; GFX10-LABEL: test_arg_store:
2862 ; GFX10:       ; %bb.0:
2863 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2864 ; GFX10-NEXT:    global_store_short v[1:2], v0, off
2865 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2867 ; GFX11-LABEL: test_arg_store:
2868 ; GFX11:       ; %bb.0:
2869 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2870 ; GFX11-NEXT:    global_store_b16 v[1:2], v0, off
2871 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2872   store bfloat %in, ptr addrspace(1) %out
2873   ret void
2876 define void @test_arg_store_v2bf16(<2 x bfloat> %in, ptr addrspace(1) %out) {
2877 ; GCN-LABEL: test_arg_store_v2bf16:
2878 ; GCN:       ; %bb.0:
2879 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2880 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2881 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2882 ; GCN-NEXT:    s_mov_b32 s6, 0
2883 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2884 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2885 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2886 ; GCN-NEXT:    s_mov_b32 s4, s6
2887 ; GCN-NEXT:    s_mov_b32 s5, s6
2888 ; GCN-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2889 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2890 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2892 ; GFX7-LABEL: test_arg_store_v2bf16:
2893 ; GFX7:       ; %bb.0:
2894 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2895 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2896 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2897 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2898 ; GFX7-NEXT:    s_mov_b32 s6, 0
2899 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2900 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2901 ; GFX7-NEXT:    s_mov_b32 s4, s6
2902 ; GFX7-NEXT:    s_mov_b32 s5, s6
2903 ; GFX7-NEXT:    buffer_store_dword v0, v[2:3], s[4:7], 0 addr64
2904 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2905 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2907 ; GFX8-LABEL: test_arg_store_v2bf16:
2908 ; GFX8:       ; %bb.0:
2909 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2910 ; GFX8-NEXT:    flat_store_dword v[1:2], v0
2911 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2912 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2914 ; GFX9-LABEL: test_arg_store_v2bf16:
2915 ; GFX9:       ; %bb.0:
2916 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2917 ; GFX9-NEXT:    global_store_dword v[1:2], v0, off
2918 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2919 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2921 ; GFX10-LABEL: test_arg_store_v2bf16:
2922 ; GFX10:       ; %bb.0:
2923 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2924 ; GFX10-NEXT:    global_store_dword v[1:2], v0, off
2925 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2927 ; GFX11-LABEL: test_arg_store_v2bf16:
2928 ; GFX11:       ; %bb.0:
2929 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2930 ; GFX11-NEXT:    global_store_b32 v[1:2], v0, off
2931 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2932   store <2 x bfloat> %in, ptr addrspace(1) %out
2933   ret void
2936 define void @test_arg_store_v3bf16(<3 x bfloat> %in, ptr addrspace(1) %out) {
2937 ; GCN-LABEL: test_arg_store_v3bf16:
2938 ; GCN:       ; %bb.0:
2939 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2940 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2941 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2942 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
2943 ; GCN-NEXT:    s_mov_b32 s6, 0
2944 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
2945 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2946 ; GCN-NEXT:    s_mov_b32 s4, s6
2947 ; GCN-NEXT:    s_mov_b32 s5, s6
2948 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2949 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2950 ; GCN-NEXT:    buffer_store_short v2, v[3:4], s[4:7], 0 addr64 offset:4
2951 ; GCN-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
2952 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2953 ; GCN-NEXT:    s_setpc_b64 s[30:31]
2955 ; GFX7-LABEL: test_arg_store_v3bf16:
2956 ; GFX7:       ; %bb.0:
2957 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2958 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
2959 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2960 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
2961 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2962 ; GFX7-NEXT:    s_mov_b32 s6, 0
2963 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v2
2964 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
2965 ; GFX7-NEXT:    s_mov_b32 s4, s6
2966 ; GFX7-NEXT:    s_mov_b32 s5, s6
2967 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2968 ; GFX7-NEXT:    buffer_store_short v1, v[3:4], s[4:7], 0 addr64 offset:4
2969 ; GFX7-NEXT:    buffer_store_dword v0, v[3:4], s[4:7], 0 addr64
2970 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2971 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2973 ; GFX8-LABEL: test_arg_store_v3bf16:
2974 ; GFX8:       ; %bb.0:
2975 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2976 ; GFX8-NEXT:    flat_store_dword v[2:3], v0
2977 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v2
2978 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
2979 ; GFX8-NEXT:    flat_store_short v[2:3], v1
2980 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2981 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2983 ; GFX9-LABEL: test_arg_store_v3bf16:
2984 ; GFX9:       ; %bb.0:
2985 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2986 ; GFX9-NEXT:    global_store_short v[2:3], v1, off offset:4
2987 ; GFX9-NEXT:    global_store_dword v[2:3], v0, off
2988 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2989 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2991 ; GFX10-LABEL: test_arg_store_v3bf16:
2992 ; GFX10:       ; %bb.0:
2993 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2994 ; GFX10-NEXT:    global_store_short v[2:3], v1, off offset:4
2995 ; GFX10-NEXT:    global_store_dword v[2:3], v0, off
2996 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2998 ; GFX11-LABEL: test_arg_store_v3bf16:
2999 ; GFX11:       ; %bb.0:
3000 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3001 ; GFX11-NEXT:    s_clause 0x1
3002 ; GFX11-NEXT:    global_store_b16 v[2:3], v1, off offset:4
3003 ; GFX11-NEXT:    global_store_b32 v[2:3], v0, off
3004 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3005   store <3 x bfloat> %in, ptr addrspace(1) %out
3006   ret void
3009 define void @test_arg_store_v4bf16(<4 x bfloat> %in, ptr addrspace(1) %out) {
3010 ; GCN-LABEL: test_arg_store_v4bf16:
3011 ; GCN:       ; %bb.0:
3012 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3013 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3014 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
3015 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3016 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3017 ; GCN-NEXT:    s_mov_b32 s6, 0
3018 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
3019 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v1
3020 ; GCN-NEXT:    v_alignbit_b32 v1, v3, v2, 16
3021 ; GCN-NEXT:    v_alignbit_b32 v0, v6, v0, 16
3022 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
3023 ; GCN-NEXT:    s_mov_b32 s4, s6
3024 ; GCN-NEXT:    s_mov_b32 s5, s6
3025 ; GCN-NEXT:    buffer_store_dwordx2 v[0:1], v[4:5], s[4:7], 0 addr64
3026 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3027 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3029 ; GFX7-LABEL: test_arg_store_v4bf16:
3030 ; GFX7:       ; %bb.0:
3031 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3032 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3033 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3034 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
3035 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
3036 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3037 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3038 ; GFX7-NEXT:    s_mov_b32 s6, 0
3039 ; GFX7-NEXT:    v_alignbit_b32 v2, v3, v2, 16
3040 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
3041 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3042 ; GFX7-NEXT:    s_mov_b32 s4, s6
3043 ; GFX7-NEXT:    s_mov_b32 s5, s6
3044 ; GFX7-NEXT:    buffer_store_dwordx2 v[1:2], v[4:5], s[4:7], 0 addr64
3045 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3046 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3048 ; GFX8-LABEL: test_arg_store_v4bf16:
3049 ; GFX8:       ; %bb.0:
3050 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3051 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
3052 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3053 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3055 ; GFX9-LABEL: test_arg_store_v4bf16:
3056 ; GFX9:       ; %bb.0:
3057 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3058 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
3059 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3060 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3062 ; GFX10-LABEL: test_arg_store_v4bf16:
3063 ; GFX10:       ; %bb.0:
3064 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3065 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
3066 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3068 ; GFX11-LABEL: test_arg_store_v4bf16:
3069 ; GFX11:       ; %bb.0:
3070 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3071 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
3072 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3073   store <4 x bfloat> %in, ptr addrspace(1)  %out
3074   ret void
3077 define void @test_arg_store_v8bf16(<8 x bfloat> %in, ptr addrspace(1) %out) {
3078 ; GCN-LABEL: test_arg_store_v8bf16:
3079 ; GCN:       ; %bb.0:
3080 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3081 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
3082 ; GCN-NEXT:    s_mov_b32 s6, 0
3083 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
3084 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
3085 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
3086 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
3087 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3088 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v2
3089 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3090 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3091 ; GCN-NEXT:    s_mov_b32 s4, s6
3092 ; GCN-NEXT:    s_mov_b32 s5, s6
3093 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v7
3094 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
3095 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v3
3096 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v1
3097 ; GCN-NEXT:    v_alignbit_b32 v3, v2, v6, 16
3098 ; GCN-NEXT:    v_alignbit_b32 v2, v5, v4, 16
3099 ; GCN-NEXT:    v_alignbit_b32 v1, v7, v10, 16
3100 ; GCN-NEXT:    v_alignbit_b32 v0, v11, v0, 16
3101 ; GCN-NEXT:    buffer_store_dwordx4 v[0:3], v[8:9], s[4:7], 0 addr64
3102 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3103 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3105 ; GFX7-LABEL: test_arg_store_v8bf16:
3106 ; GFX7:       ; %bb.0:
3107 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3108 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
3109 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
3110 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3111 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3112 ; GFX7-NEXT:    s_mov_b32 s6, 0
3113 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
3114 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
3115 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
3116 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
3117 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
3118 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
3119 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3120 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3121 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3122 ; GFX7-NEXT:    s_mov_b32 s4, s6
3123 ; GFX7-NEXT:    s_mov_b32 s5, s6
3124 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
3125 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
3126 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
3127 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
3128 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[8:9], s[4:7], 0 addr64
3129 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3130 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3132 ; GFX8-LABEL: test_arg_store_v8bf16:
3133 ; GFX8:       ; %bb.0:
3134 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3135 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3136 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3137 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3139 ; GFX9-LABEL: test_arg_store_v8bf16:
3140 ; GFX9:       ; %bb.0:
3141 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3142 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
3143 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3144 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3146 ; GFX10-LABEL: test_arg_store_v8bf16:
3147 ; GFX10:       ; %bb.0:
3148 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3149 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
3150 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3152 ; GFX11-LABEL: test_arg_store_v8bf16:
3153 ; GFX11:       ; %bb.0:
3154 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3155 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
3156 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3157   store <8 x bfloat> %in, ptr addrspace(1) %out
3158   ret void
3161 define void @test_arg_store_v16bf16(<16 x bfloat> %in, ptr addrspace(1) %out) {
3162 ; GCN-LABEL: test_arg_store_v16bf16:
3163 ; GCN:       ; %bb.0:
3164 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3165 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
3166 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
3167 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
3168 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
3169 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3170 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v2
3171 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3172 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3173 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
3174 ; GCN-NEXT:    s_mov_b32 s6, 0
3175 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v15
3176 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
3177 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
3178 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
3179 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
3180 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
3181 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
3182 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
3183 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
3184 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
3185 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v3
3186 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v1
3187 ; GCN-NEXT:    s_mov_b32 s4, s6
3188 ; GCN-NEXT:    s_mov_b32 s5, s6
3189 ; GCN-NEXT:    v_lshrrev_b32_e32 v20, 16, v2
3190 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
3191 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
3192 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
3193 ; GCN-NEXT:    v_alignbit_b32 v3, v7, v6, 16
3194 ; GCN-NEXT:    v_alignbit_b32 v2, v5, v4, 16
3195 ; GCN-NEXT:    v_alignbit_b32 v1, v15, v18, 16
3196 ; GCN-NEXT:    v_alignbit_b32 v0, v19, v0, 16
3197 ; GCN-NEXT:    v_alignbit_b32 v7, v20, v14, 16
3198 ; GCN-NEXT:    v_alignbit_b32 v6, v13, v12, 16
3199 ; GCN-NEXT:    v_alignbit_b32 v5, v11, v10, 16
3200 ; GCN-NEXT:    v_alignbit_b32 v4, v9, v8, 16
3201 ; GCN-NEXT:    buffer_store_dwordx4 v[4:7], v[16:17], s[4:7], 0 addr64 offset:16
3202 ; GCN-NEXT:    buffer_store_dwordx4 v[0:3], v[16:17], s[4:7], 0 addr64
3203 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3204 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3206 ; GFX7-LABEL: test_arg_store_v16bf16:
3207 ; GFX7:       ; %bb.0:
3208 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3209 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
3210 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
3211 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3212 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
3213 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
3214 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
3215 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
3216 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3217 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3218 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v4, 16
3219 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v2, 16
3220 ; GFX7-NEXT:    v_alignbit_b32 v3, v1, v0, 16
3221 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v15
3222 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3223 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v14
3224 ; GFX7-NEXT:    v_alignbit_b32 v14, v0, v1, 16
3225 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v13
3226 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3227 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v12
3228 ; GFX7-NEXT:    v_alignbit_b32 v13, v0, v1, 16
3229 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v11
3230 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3231 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v10
3232 ; GFX7-NEXT:    v_alignbit_b32 v12, v0, v1, 16
3233 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v9
3234 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
3235 ; GFX7-NEXT:    s_mov_b32 s6, 0
3236 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3237 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v8
3238 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
3239 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
3240 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3241 ; GFX7-NEXT:    s_mov_b32 s4, s6
3242 ; GFX7-NEXT:    s_mov_b32 s5, s6
3243 ; GFX7-NEXT:    v_alignbit_b32 v11, v0, v1, 16
3244 ; GFX7-NEXT:    v_alignbit_b32 v6, v7, v6, 16
3245 ; GFX7-NEXT:    buffer_store_dwordx4 v[11:14], v[16:17], s[4:7], 0 addr64 offset:16
3246 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], v[16:17], s[4:7], 0 addr64
3247 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3248 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3250 ; GFX8-LABEL: test_arg_store_v16bf16:
3251 ; GFX8:       ; %bb.0:
3252 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3253 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
3254 ; GFX8-NEXT:    s_nop 0
3255 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v8
3256 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v9, vcc
3257 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
3258 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3259 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3261 ; GFX9-LABEL: test_arg_store_v16bf16:
3262 ; GFX9:       ; %bb.0:
3263 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3264 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
3265 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3266 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3267 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3269 ; GFX10-LABEL: test_arg_store_v16bf16:
3270 ; GFX10:       ; %bb.0:
3271 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3272 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[4:7], off offset:16
3273 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3274 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3276 ; GFX11-LABEL: test_arg_store_v16bf16:
3277 ; GFX11:       ; %bb.0:
3278 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3279 ; GFX11-NEXT:    s_clause 0x1
3280 ; GFX11-NEXT:    global_store_b128 v[8:9], v[4:7], off offset:16
3281 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
3282 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3283   store <16 x bfloat> %in, ptr addrspace(1) %out
3284   ret void
3287 define amdgpu_gfx void @test_inreg_arg_store(bfloat inreg %in, ptr addrspace(1) %out) {
3288 ; GCN-LABEL: test_inreg_arg_store:
3289 ; GCN:       ; %bb.0:
3290 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3291 ; GCN-NEXT:    s_mov_b32 s39, 0xf000
3292 ; GCN-NEXT:    s_mov_b32 s38, 0
3293 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s4
3294 ; GCN-NEXT:    s_mov_b32 s36, s38
3295 ; GCN-NEXT:    s_mov_b32 s37, s38
3296 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
3297 ; GCN-NEXT:    buffer_store_short v2, v[0:1], s[36:39], 0 addr64
3298 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3299 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3301 ; GFX7-LABEL: test_inreg_arg_store:
3302 ; GFX7:       ; %bb.0:
3303 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3304 ; GFX7-NEXT:    s_mov_b32 s38, 0
3305 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s4
3306 ; GFX7-NEXT:    s_mov_b32 s39, 0xf000
3307 ; GFX7-NEXT:    s_mov_b32 s36, s38
3308 ; GFX7-NEXT:    s_mov_b32 s37, s38
3309 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
3310 ; GFX7-NEXT:    buffer_store_short v2, v[0:1], s[36:39], 0 addr64
3311 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3312 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3314 ; GFX8-LABEL: test_inreg_arg_store:
3315 ; GFX8:       ; %bb.0:
3316 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3317 ; GFX8-NEXT:    v_mov_b32_e32 v2, s4
3318 ; GFX8-NEXT:    flat_store_short v[0:1], v2
3319 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3320 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3322 ; GFX9-LABEL: test_inreg_arg_store:
3323 ; GFX9:       ; %bb.0:
3324 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3325 ; GFX9-NEXT:    v_mov_b32_e32 v2, s4
3326 ; GFX9-NEXT:    global_store_short v[0:1], v2, off
3327 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3328 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3330 ; GFX10-LABEL: test_inreg_arg_store:
3331 ; GFX10:       ; %bb.0:
3332 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3333 ; GFX10-NEXT:    v_mov_b32_e32 v2, s4
3334 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
3335 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3337 ; GFX11-LABEL: test_inreg_arg_store:
3338 ; GFX11:       ; %bb.0:
3339 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3340 ; GFX11-NEXT:    v_mov_b32_e32 v2, s4
3341 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
3342 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3343   store bfloat %in, ptr addrspace(1) %out
3344   ret void
3347 define bfloat @test_byval(ptr addrspace(5) byval(bfloat) %bv, bfloat %val) {
3348 ; GCN-LABEL: test_byval:
3349 ; GCN:       ; %bb.0:
3350 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3351 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v0
3352 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3353 ; GCN-NEXT:    buffer_store_short v1, off, s[0:3], s32
3354 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3355 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3357 ; GFX7-LABEL: test_byval:
3358 ; GFX7:       ; %bb.0:
3359 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3360 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v0
3361 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3362 ; GFX7-NEXT:    buffer_store_short v1, off, s[0:3], s32
3363 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3364 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3366 ; GFX8-LABEL: test_byval:
3367 ; GFX8:       ; %bb.0:
3368 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3369 ; GFX8-NEXT:    buffer_store_short v0, off, s[0:3], s32
3370 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3371 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3373 ; GFX9-LABEL: test_byval:
3374 ; GFX9:       ; %bb.0:
3375 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3376 ; GFX9-NEXT:    buffer_store_short v0, off, s[0:3], s32
3377 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3378 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3380 ; GFX10-LABEL: test_byval:
3381 ; GFX10:       ; %bb.0:
3382 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3383 ; GFX10-NEXT:    buffer_store_short v0, off, s[0:3], s32
3384 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3386 ; GFX11-LABEL: test_byval:
3387 ; GFX11:       ; %bb.0:
3388 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3389 ; GFX11-NEXT:    scratch_store_b16 off, v0, s32
3390 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3391   store bfloat %val, ptr addrspace(5) %bv
3392   %retval = load bfloat, ptr addrspace(5) %bv
3393   ret bfloat %retval
3396 define void @test_sret(ptr addrspace(5) sret(bfloat) %sret, bfloat %val) {
3397 ; GCN-LABEL: test_sret:
3398 ; GCN:       ; %bb.0:
3399 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3400 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3401 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3402 ; GCN-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3403 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3404 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3406 ; GFX7-LABEL: test_sret:
3407 ; GFX7:       ; %bb.0:
3408 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3409 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3410 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3411 ; GFX7-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3412 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3413 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3415 ; GFX8-LABEL: test_sret:
3416 ; GFX8:       ; %bb.0:
3417 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3418 ; GFX8-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3419 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3420 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3422 ; GFX9-LABEL: test_sret:
3423 ; GFX9:       ; %bb.0:
3424 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3425 ; GFX9-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3426 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3427 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3429 ; GFX10-LABEL: test_sret:
3430 ; GFX10:       ; %bb.0:
3431 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3432 ; GFX10-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
3433 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3435 ; GFX11-LABEL: test_sret:
3436 ; GFX11:       ; %bb.0:
3437 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3438 ; GFX11-NEXT:    scratch_store_b16 v0, v1, off
3439 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3440   store bfloat %val, ptr addrspace(5) %sret
3441   ret void
3444 define void @test_bitcast_from_bfloat(ptr addrspace(1) %in, ptr addrspace(1) %out) {
3445 ; GCN-LABEL: test_bitcast_from_bfloat:
3446 ; GCN:       ; %bb.0:
3447 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3448 ; GCN-NEXT:    s_mov_b32 s6, 0
3449 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
3450 ; GCN-NEXT:    s_mov_b32 s4, s6
3451 ; GCN-NEXT:    s_mov_b32 s5, s6
3452 ; GCN-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
3453 ; GCN-NEXT:    s_waitcnt vmcnt(0)
3454 ; GCN-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
3455 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3456 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3458 ; GFX7-LABEL: test_bitcast_from_bfloat:
3459 ; GFX7:       ; %bb.0:
3460 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3461 ; GFX7-NEXT:    s_mov_b32 s6, 0
3462 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3463 ; GFX7-NEXT:    s_mov_b32 s4, s6
3464 ; GFX7-NEXT:    s_mov_b32 s5, s6
3465 ; GFX7-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64
3466 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3467 ; GFX7-NEXT:    buffer_store_short v0, v[2:3], s[4:7], 0 addr64
3468 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3469 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3471 ; GFX8-LABEL: test_bitcast_from_bfloat:
3472 ; GFX8:       ; %bb.0:
3473 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3474 ; GFX8-NEXT:    flat_load_ushort v0, v[0:1]
3475 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3476 ; GFX8-NEXT:    flat_store_short v[2:3], v0
3477 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3478 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3480 ; GFX9-LABEL: test_bitcast_from_bfloat:
3481 ; GFX9:       ; %bb.0:
3482 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3483 ; GFX9-NEXT:    global_load_ushort v0, v[0:1], off
3484 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3485 ; GFX9-NEXT:    global_store_short v[2:3], v0, off
3486 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3487 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3489 ; GFX10-LABEL: test_bitcast_from_bfloat:
3490 ; GFX10:       ; %bb.0:
3491 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3492 ; GFX10-NEXT:    global_load_ushort v0, v[0:1], off
3493 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3494 ; GFX10-NEXT:    global_store_short v[2:3], v0, off
3495 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3497 ; GFX11-LABEL: test_bitcast_from_bfloat:
3498 ; GFX11:       ; %bb.0:
3499 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3500 ; GFX11-NEXT:    global_load_u16 v0, v[0:1], off
3501 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3502 ; GFX11-NEXT:    global_store_b16 v[2:3], v0, off
3503 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3504   %val = load bfloat, ptr addrspace(1) %in
3505   %val_int = bitcast bfloat %val to i16
3506   store i16 %val_int, ptr addrspace(1) %out
3507   ret void
3510 define void @test_bitcast_to_bfloat(ptr addrspace(1) %out, ptr addrspace(1) %in) {
3511 ; GCN-LABEL: test_bitcast_to_bfloat:
3512 ; GCN:       ; %bb.0:
3513 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3514 ; GCN-NEXT:    s_mov_b32 s6, 0
3515 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
3516 ; GCN-NEXT:    s_mov_b32 s4, s6
3517 ; GCN-NEXT:    s_mov_b32 s5, s6
3518 ; GCN-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64
3519 ; GCN-NEXT:    s_waitcnt vmcnt(0)
3520 ; GCN-NEXT:    buffer_store_short v2, v[0:1], s[4:7], 0 addr64
3521 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3522 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3524 ; GFX7-LABEL: test_bitcast_to_bfloat:
3525 ; GFX7:       ; %bb.0:
3526 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3527 ; GFX7-NEXT:    s_mov_b32 s6, 0
3528 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3529 ; GFX7-NEXT:    s_mov_b32 s4, s6
3530 ; GFX7-NEXT:    s_mov_b32 s5, s6
3531 ; GFX7-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64
3532 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3533 ; GFX7-NEXT:    buffer_store_short v2, v[0:1], s[4:7], 0 addr64
3534 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3535 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3537 ; GFX8-LABEL: test_bitcast_to_bfloat:
3538 ; GFX8:       ; %bb.0:
3539 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3540 ; GFX8-NEXT:    flat_load_ushort v2, v[2:3]
3541 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3542 ; GFX8-NEXT:    flat_store_short v[0:1], v2
3543 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3544 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3546 ; GFX9-LABEL: test_bitcast_to_bfloat:
3547 ; GFX9:       ; %bb.0:
3548 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3549 ; GFX9-NEXT:    global_load_ushort v2, v[2:3], off
3550 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3551 ; GFX9-NEXT:    global_store_short v[0:1], v2, off
3552 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3553 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3555 ; GFX10-LABEL: test_bitcast_to_bfloat:
3556 ; GFX10:       ; %bb.0:
3557 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3558 ; GFX10-NEXT:    global_load_ushort v2, v[2:3], off
3559 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3560 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
3561 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3563 ; GFX11-LABEL: test_bitcast_to_bfloat:
3564 ; GFX11:       ; %bb.0:
3565 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3566 ; GFX11-NEXT:    global_load_u16 v2, v[2:3], off
3567 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3568 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
3569 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3570   %val = load i16, ptr addrspace(1) %in
3571   %val_fp = bitcast i16 %val to bfloat
3572   store bfloat %val_fp, ptr addrspace(1) %out
3573   ret void
3576 define bfloat @test_ret(bfloat %in) {
3577 ; GCN-LABEL: test_ret:
3578 ; GCN:       ; %bb.0: ; %entry
3579 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3580 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3582 ; GFX7-LABEL: test_ret:
3583 ; GFX7:       ; %bb.0: ; %entry
3584 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3585 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3587 ; GFX8-LABEL: test_ret:
3588 ; GFX8:       ; %bb.0: ; %entry
3589 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3590 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3592 ; GFX9-LABEL: test_ret:
3593 ; GFX9:       ; %bb.0: ; %entry
3594 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3595 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3597 ; GFX10-LABEL: test_ret:
3598 ; GFX10:       ; %bb.0: ; %entry
3599 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3600 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3602 ; GFX11-LABEL: test_ret:
3603 ; GFX11:       ; %bb.0: ; %entry
3604 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3605 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3606 entry:
3607   ret bfloat %in
3610 define <2 x bfloat> @test_ret_v2bf16(<2 x bfloat> %in) {
3611 ; GCN-LABEL: test_ret_v2bf16:
3612 ; GCN:       ; %bb.0: ; %entry
3613 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3614 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3616 ; GFX7-LABEL: test_ret_v2bf16:
3617 ; GFX7:       ; %bb.0: ; %entry
3618 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3619 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3621 ; GFX8-LABEL: test_ret_v2bf16:
3622 ; GFX8:       ; %bb.0: ; %entry
3623 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3624 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3626 ; GFX9-LABEL: test_ret_v2bf16:
3627 ; GFX9:       ; %bb.0: ; %entry
3628 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3629 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3631 ; GFX10-LABEL: test_ret_v2bf16:
3632 ; GFX10:       ; %bb.0: ; %entry
3633 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3634 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3636 ; GFX11-LABEL: test_ret_v2bf16:
3637 ; GFX11:       ; %bb.0: ; %entry
3638 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3639 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3640 entry:
3641   ret <2 x bfloat> %in
3644 define <3 x bfloat> @test_ret_v3bf16(<3 x bfloat> %in) {
3645 ; GCN-LABEL: test_ret_v3bf16:
3646 ; GCN:       ; %bb.0: ; %entry
3647 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3648 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3650 ; GFX7-LABEL: test_ret_v3bf16:
3651 ; GFX7:       ; %bb.0: ; %entry
3652 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3653 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3655 ; GFX8-LABEL: test_ret_v3bf16:
3656 ; GFX8:       ; %bb.0: ; %entry
3657 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3658 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3660 ; GFX9-LABEL: test_ret_v3bf16:
3661 ; GFX9:       ; %bb.0: ; %entry
3662 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3663 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3665 ; GFX10-LABEL: test_ret_v3bf16:
3666 ; GFX10:       ; %bb.0: ; %entry
3667 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3668 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3670 ; GFX11-LABEL: test_ret_v3bf16:
3671 ; GFX11:       ; %bb.0: ; %entry
3672 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3673 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3674 entry:
3675   ret <3 x bfloat> %in
3678 define <4 x bfloat> @test_ret_v4bf16(<4 x bfloat> %in) {
3679 ; GCN-LABEL: test_ret_v4bf16:
3680 ; GCN:       ; %bb.0: ; %entry
3681 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3682 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3684 ; GFX7-LABEL: test_ret_v4bf16:
3685 ; GFX7:       ; %bb.0: ; %entry
3686 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3687 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3689 ; GFX8-LABEL: test_ret_v4bf16:
3690 ; GFX8:       ; %bb.0: ; %entry
3691 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3692 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3694 ; GFX9-LABEL: test_ret_v4bf16:
3695 ; GFX9:       ; %bb.0: ; %entry
3696 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3697 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3699 ; GFX10-LABEL: test_ret_v4bf16:
3700 ; GFX10:       ; %bb.0: ; %entry
3701 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3702 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3704 ; GFX11-LABEL: test_ret_v4bf16:
3705 ; GFX11:       ; %bb.0: ; %entry
3706 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3707 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3708 entry:
3709   ret <4 x bfloat> %in
3712 define <8 x bfloat> @test_ret_v8bf16(<8 x bfloat> %in) {
3713 ; GCN-LABEL: test_ret_v8bf16:
3714 ; GCN:       ; %bb.0: ; %entry
3715 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3716 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3718 ; GFX7-LABEL: test_ret_v8bf16:
3719 ; GFX7:       ; %bb.0: ; %entry
3720 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3721 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3723 ; GFX8-LABEL: test_ret_v8bf16:
3724 ; GFX8:       ; %bb.0: ; %entry
3725 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3728 ; GFX9-LABEL: test_ret_v8bf16:
3729 ; GFX9:       ; %bb.0: ; %entry
3730 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3731 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3733 ; GFX10-LABEL: test_ret_v8bf16:
3734 ; GFX10:       ; %bb.0: ; %entry
3735 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3736 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3738 ; GFX11-LABEL: test_ret_v8bf16:
3739 ; GFX11:       ; %bb.0: ; %entry
3740 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3741 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3742 entry:
3743   ret <8 x bfloat> %in
3746 define <16 x bfloat> @test_ret_v16bf16(<16 x bfloat> %in) {
3747 ; GCN-LABEL: test_ret_v16bf16:
3748 ; GCN:       ; %bb.0: ; %entry
3749 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3750 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3752 ; GFX7-LABEL: test_ret_v16bf16:
3753 ; GFX7:       ; %bb.0: ; %entry
3754 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3755 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3757 ; GFX8-LABEL: test_ret_v16bf16:
3758 ; GFX8:       ; %bb.0: ; %entry
3759 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3760 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3762 ; GFX9-LABEL: test_ret_v16bf16:
3763 ; GFX9:       ; %bb.0: ; %entry
3764 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3765 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3767 ; GFX10-LABEL: test_ret_v16bf16:
3768 ; GFX10:       ; %bb.0: ; %entry
3769 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3770 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3772 ; GFX11-LABEL: test_ret_v16bf16:
3773 ; GFX11:       ; %bb.0: ; %entry
3774 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3775 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3776 entry:
3777   ret <16 x bfloat> %in
3780 define void @test_call(bfloat %in, ptr addrspace(5) %out) {
3781 ; GCN-LABEL: test_call:
3782 ; GCN:       ; %bb.0: ; %entry
3783 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3784 ; GCN-NEXT:    s_mov_b32 s18, s33
3785 ; GCN-NEXT:    s_mov_b32 s33, s32
3786 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
3787 ; GCN-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
3788 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
3789 ; GCN-NEXT:    s_addk_i32 s32, 0x400
3790 ; GCN-NEXT:    s_waitcnt expcnt(0)
3791 ; GCN-NEXT:    v_writelane_b32 v2, s30, 0
3792 ; GCN-NEXT:    v_writelane_b32 v2, s31, 1
3793 ; GCN-NEXT:    s_getpc_b64 s[16:17]
3794 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store@gotpcrel32@lo+4
3795 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store@gotpcrel32@hi+12
3796 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3797 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
3798 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3799 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3800 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3801 ; GCN-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
3802 ; GCN-NEXT:    s_waitcnt vmcnt(0)
3803 ; GCN-NEXT:    v_readlane_b32 s31, v2, 1
3804 ; GCN-NEXT:    v_readlane_b32 s30, v2, 0
3805 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
3806 ; GCN-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
3807 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
3808 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
3809 ; GCN-NEXT:    s_mov_b32 s33, s18
3810 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
3811 ; GCN-NEXT:    s_setpc_b64 s[30:31]
3813 ; GFX7-LABEL: test_call:
3814 ; GFX7:       ; %bb.0: ; %entry
3815 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3816 ; GFX7-NEXT:    s_mov_b32 s18, s33
3817 ; GFX7-NEXT:    s_mov_b32 s33, s32
3818 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
3819 ; GFX7-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
3820 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
3821 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
3822 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
3823 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store@gotpcrel32@lo+4
3824 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store@gotpcrel32@hi+12
3825 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3826 ; GFX7-NEXT:    v_writelane_b32 v2, s30, 0
3827 ; GFX7-NEXT:    v_writelane_b32 v2, s31, 1
3828 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
3829 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3830 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3831 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3832 ; GFX7-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
3833 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3834 ; GFX7-NEXT:    v_readlane_b32 s31, v2, 1
3835 ; GFX7-NEXT:    v_readlane_b32 s30, v2, 0
3836 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
3837 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
3838 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
3839 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
3840 ; GFX7-NEXT:    s_mov_b32 s33, s18
3841 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3842 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3844 ; GFX8-LABEL: test_call:
3845 ; GFX8:       ; %bb.0: ; %entry
3846 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3847 ; GFX8-NEXT:    s_mov_b32 s18, s33
3848 ; GFX8-NEXT:    s_mov_b32 s33, s32
3849 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
3850 ; GFX8-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
3851 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
3852 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
3853 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
3854 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store@gotpcrel32@lo+4
3855 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store@gotpcrel32@hi+12
3856 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3857 ; GFX8-NEXT:    v_writelane_b32 v2, s30, 0
3858 ; GFX8-NEXT:    v_writelane_b32 v2, s31, 1
3859 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
3860 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3861 ; GFX8-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
3862 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3863 ; GFX8-NEXT:    v_readlane_b32 s31, v2, 1
3864 ; GFX8-NEXT:    v_readlane_b32 s30, v2, 0
3865 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
3866 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
3867 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
3868 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
3869 ; GFX8-NEXT:    s_mov_b32 s33, s18
3870 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3871 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3873 ; GFX9-LABEL: test_call:
3874 ; GFX9:       ; %bb.0: ; %entry
3875 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3876 ; GFX9-NEXT:    s_mov_b32 s18, s33
3877 ; GFX9-NEXT:    s_mov_b32 s33, s32
3878 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
3879 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
3880 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
3881 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
3882 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
3883 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store@gotpcrel32@lo+4
3884 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store@gotpcrel32@hi+12
3885 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3886 ; GFX9-NEXT:    v_writelane_b32 v2, s30, 0
3887 ; GFX9-NEXT:    v_writelane_b32 v2, s31, 1
3888 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3889 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3890 ; GFX9-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
3891 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3892 ; GFX9-NEXT:    v_readlane_b32 s31, v2, 1
3893 ; GFX9-NEXT:    v_readlane_b32 s30, v2, 0
3894 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
3895 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
3896 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
3897 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
3898 ; GFX9-NEXT:    s_mov_b32 s33, s18
3899 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3900 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3902 ; GFX10-LABEL: test_call:
3903 ; GFX10:       ; %bb.0: ; %entry
3904 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3905 ; GFX10-NEXT:    s_mov_b32 s18, s33
3906 ; GFX10-NEXT:    s_mov_b32 s33, s32
3907 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
3908 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
3909 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3910 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
3911 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
3912 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
3913 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store@gotpcrel32@lo+4
3914 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store@gotpcrel32@hi+12
3915 ; GFX10-NEXT:    v_writelane_b32 v2, s30, 0
3916 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3917 ; GFX10-NEXT:    v_writelane_b32 v2, s31, 1
3918 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3919 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3920 ; GFX10-NEXT:    buffer_store_short v0, v1, s[0:3], 0 offen
3921 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
3922 ; GFX10-NEXT:    v_readlane_b32 s31, v2, 1
3923 ; GFX10-NEXT:    v_readlane_b32 s30, v2, 0
3924 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
3925 ; GFX10-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
3926 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
3927 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
3928 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
3929 ; GFX10-NEXT:    s_mov_b32 s33, s18
3930 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3931 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3933 ; GFX11-LABEL: test_call:
3934 ; GFX11:       ; %bb.0: ; %entry
3935 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3936 ; GFX11-NEXT:    s_mov_b32 s2, s33
3937 ; GFX11-NEXT:    s_mov_b32 s33, s32
3938 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
3939 ; GFX11-NEXT:    scratch_store_b32 off, v2, s33 ; 4-byte Folded Spill
3940 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
3941 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
3942 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
3943 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store@gotpcrel32@lo+4
3944 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store@gotpcrel32@hi+12
3945 ; GFX11-NEXT:    v_writelane_b32 v2, s30, 0
3946 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
3947 ; GFX11-NEXT:    v_writelane_b32 v2, s31, 1
3948 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3949 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
3950 ; GFX11-NEXT:    scratch_store_b16 v1, v0, off dlc
3951 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
3952 ; GFX11-NEXT:    v_readlane_b32 s31, v2, 1
3953 ; GFX11-NEXT:    v_readlane_b32 s30, v2, 0
3954 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
3955 ; GFX11-NEXT:    scratch_load_b32 v2, off, s33 ; 4-byte Folded Reload
3956 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
3957 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
3958 ; GFX11-NEXT:    s_mov_b32 s33, s2
3959 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3960 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3961 entry:
3962   %result = call bfloat @test_arg_store(bfloat %in)
3963   store volatile bfloat %result, ptr addrspace(5) %out
3964   ret void
3967 define void @test_call_v2bf16(<2 x bfloat> %in, ptr addrspace(5) %out) {
3968 ; GCN-LABEL: test_call_v2bf16:
3969 ; GCN:       ; %bb.0: ; %entry
3970 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3971 ; GCN-NEXT:    s_mov_b32 s18, s33
3972 ; GCN-NEXT:    s_mov_b32 s33, s32
3973 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
3974 ; GCN-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
3975 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
3976 ; GCN-NEXT:    s_addk_i32 s32, 0x400
3977 ; GCN-NEXT:    s_waitcnt expcnt(0)
3978 ; GCN-NEXT:    v_writelane_b32 v4, s30, 0
3979 ; GCN-NEXT:    v_writelane_b32 v4, s31, 1
3980 ; GCN-NEXT:    s_getpc_b64 s[16:17]
3981 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
3982 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
3983 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
3984 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
3985 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3986 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
3987 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
3988 ; GCN-NEXT:    v_add_i32_e32 v3, vcc, 2, v2
3989 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
3990 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
3991 ; GCN-NEXT:    buffer_store_short v1, v3, s[0:3], 0 offen
3992 ; GCN-NEXT:    s_waitcnt vmcnt(0)
3993 ; GCN-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
3994 ; GCN-NEXT:    s_waitcnt vmcnt(0)
3995 ; GCN-NEXT:    v_readlane_b32 s31, v4, 1
3996 ; GCN-NEXT:    v_readlane_b32 s30, v4, 0
3997 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
3998 ; GCN-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
3999 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
4000 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
4001 ; GCN-NEXT:    s_mov_b32 s33, s18
4002 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4003 ; GCN-NEXT:    s_setpc_b64 s[30:31]
4005 ; GFX7-LABEL: test_call_v2bf16:
4006 ; GFX7:       ; %bb.0: ; %entry
4007 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4008 ; GFX7-NEXT:    s_mov_b32 s18, s33
4009 ; GFX7-NEXT:    s_mov_b32 s33, s32
4010 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4011 ; GFX7-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
4012 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
4013 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
4014 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
4015 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4016 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4017 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4018 ; GFX7-NEXT:    v_writelane_b32 v4, s30, 0
4019 ; GFX7-NEXT:    v_writelane_b32 v4, s31, 1
4020 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
4021 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4022 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4023 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4024 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4025 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 2, v2
4026 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4027 ; GFX7-NEXT:    buffer_store_short v1, v3, s[0:3], 0 offen
4028 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4029 ; GFX7-NEXT:    buffer_store_short v0, v2, s[0:3], 0 offen
4030 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4031 ; GFX7-NEXT:    v_readlane_b32 s31, v4, 1
4032 ; GFX7-NEXT:    v_readlane_b32 s30, v4, 0
4033 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4034 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
4035 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
4036 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
4037 ; GFX7-NEXT:    s_mov_b32 s33, s18
4038 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4039 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4041 ; GFX8-LABEL: test_call_v2bf16:
4042 ; GFX8:       ; %bb.0: ; %entry
4043 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4044 ; GFX8-NEXT:    s_mov_b32 s18, s33
4045 ; GFX8-NEXT:    s_mov_b32 s33, s32
4046 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4047 ; GFX8-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
4048 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
4049 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
4050 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
4051 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4052 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4053 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4054 ; GFX8-NEXT:    v_writelane_b32 v2, s30, 0
4055 ; GFX8-NEXT:    v_writelane_b32 v2, s31, 1
4056 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
4057 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4058 ; GFX8-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
4059 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4060 ; GFX8-NEXT:    v_readlane_b32 s31, v2, 1
4061 ; GFX8-NEXT:    v_readlane_b32 s30, v2, 0
4062 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4063 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
4064 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
4065 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
4066 ; GFX8-NEXT:    s_mov_b32 s33, s18
4067 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4068 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4070 ; GFX9-LABEL: test_call_v2bf16:
4071 ; GFX9:       ; %bb.0: ; %entry
4072 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4073 ; GFX9-NEXT:    s_mov_b32 s18, s33
4074 ; GFX9-NEXT:    s_mov_b32 s33, s32
4075 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4076 ; GFX9-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
4077 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
4078 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4079 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
4080 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4081 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4082 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4083 ; GFX9-NEXT:    v_writelane_b32 v2, s30, 0
4084 ; GFX9-NEXT:    v_writelane_b32 v2, s31, 1
4085 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4086 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4087 ; GFX9-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
4088 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4089 ; GFX9-NEXT:    v_readlane_b32 s31, v2, 1
4090 ; GFX9-NEXT:    v_readlane_b32 s30, v2, 0
4091 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4092 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
4093 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
4094 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4095 ; GFX9-NEXT:    s_mov_b32 s33, s18
4096 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4097 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4099 ; GFX10-LABEL: test_call_v2bf16:
4100 ; GFX10:       ; %bb.0: ; %entry
4101 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4102 ; GFX10-NEXT:    s_mov_b32 s18, s33
4103 ; GFX10-NEXT:    s_mov_b32 s33, s32
4104 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
4105 ; GFX10-NEXT:    buffer_store_dword v2, off, s[0:3], s33 ; 4-byte Folded Spill
4106 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4107 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
4108 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4109 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
4110 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4111 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4112 ; GFX10-NEXT:    v_writelane_b32 v2, s30, 0
4113 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4114 ; GFX10-NEXT:    v_writelane_b32 v2, s31, 1
4115 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4116 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4117 ; GFX10-NEXT:    buffer_store_dword v0, v1, s[0:3], 0 offen
4118 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4119 ; GFX10-NEXT:    v_readlane_b32 s31, v2, 1
4120 ; GFX10-NEXT:    v_readlane_b32 s30, v2, 0
4121 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
4122 ; GFX10-NEXT:    buffer_load_dword v2, off, s[0:3], s33 ; 4-byte Folded Reload
4123 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4124 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
4125 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4126 ; GFX10-NEXT:    s_mov_b32 s33, s18
4127 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4128 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4130 ; GFX11-LABEL: test_call_v2bf16:
4131 ; GFX11:       ; %bb.0: ; %entry
4132 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4133 ; GFX11-NEXT:    s_mov_b32 s2, s33
4134 ; GFX11-NEXT:    s_mov_b32 s33, s32
4135 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4136 ; GFX11-NEXT:    scratch_store_b32 off, v2, s33 ; 4-byte Folded Spill
4137 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4138 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4139 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
4140 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store_v2bf16@gotpcrel32@lo+4
4141 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store_v2bf16@gotpcrel32@hi+12
4142 ; GFX11-NEXT:    v_writelane_b32 v2, s30, 0
4143 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
4144 ; GFX11-NEXT:    v_writelane_b32 v2, s31, 1
4145 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4146 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4147 ; GFX11-NEXT:    scratch_store_b32 v1, v0, off dlc
4148 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4149 ; GFX11-NEXT:    v_readlane_b32 s31, v2, 1
4150 ; GFX11-NEXT:    v_readlane_b32 s30, v2, 0
4151 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4152 ; GFX11-NEXT:    scratch_load_b32 v2, off, s33 ; 4-byte Folded Reload
4153 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4154 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4155 ; GFX11-NEXT:    s_mov_b32 s33, s2
4156 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4157 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4158 entry:
4159   %result = call <2 x bfloat> @test_arg_store_v2bf16(<2 x bfloat> %in)
4160   store volatile <2 x bfloat> %result, ptr addrspace(5) %out
4161   ret void
4164 define void @test_call_v3bf16(<3 x bfloat> %in, ptr addrspace(5) %out) {
4165 ; GCN-LABEL: test_call_v3bf16:
4166 ; GCN:       ; %bb.0: ; %entry
4167 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4168 ; GCN-NEXT:    s_mov_b32 s18, s33
4169 ; GCN-NEXT:    s_mov_b32 s33, s32
4170 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4171 ; GCN-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
4172 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
4173 ; GCN-NEXT:    s_addk_i32 s32, 0x400
4174 ; GCN-NEXT:    s_waitcnt expcnt(0)
4175 ; GCN-NEXT:    v_writelane_b32 v5, s30, 0
4176 ; GCN-NEXT:    v_writelane_b32 v5, s31, 1
4177 ; GCN-NEXT:    s_getpc_b64 s[16:17]
4178 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4179 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4180 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4181 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
4182 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4183 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4184 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4185 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4186 ; GCN-NEXT:    v_add_i32_e32 v4, vcc, 4, v3
4187 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4188 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4189 ; GCN-NEXT:    v_alignbit_b32 v0, v1, v0, 16
4190 ; GCN-NEXT:    buffer_store_short v2, v4, s[0:3], 0 offen
4191 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4192 ; GCN-NEXT:    buffer_store_dword v0, v3, s[0:3], 0 offen
4193 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4194 ; GCN-NEXT:    v_readlane_b32 s31, v5, 1
4195 ; GCN-NEXT:    v_readlane_b32 s30, v5, 0
4196 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4197 ; GCN-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
4198 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
4199 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
4200 ; GCN-NEXT:    s_mov_b32 s33, s18
4201 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4202 ; GCN-NEXT:    s_setpc_b64 s[30:31]
4204 ; GFX7-LABEL: test_call_v3bf16:
4205 ; GFX7:       ; %bb.0: ; %entry
4206 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4207 ; GFX7-NEXT:    s_mov_b32 s18, s33
4208 ; GFX7-NEXT:    s_mov_b32 s33, s32
4209 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4210 ; GFX7-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
4211 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
4212 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
4213 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
4214 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4215 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4216 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4217 ; GFX7-NEXT:    v_writelane_b32 v4, s30, 0
4218 ; GFX7-NEXT:    v_writelane_b32 v4, s31, 1
4219 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
4220 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4221 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4222 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4223 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4224 ; GFX7-NEXT:    v_alignbit_b32 v0, v1, v0, 16
4225 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v2
4226 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4227 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 4, v3
4228 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
4229 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4230 ; GFX7-NEXT:    buffer_store_dword v0, v3, s[0:3], 0 offen
4231 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4232 ; GFX7-NEXT:    v_readlane_b32 s31, v4, 1
4233 ; GFX7-NEXT:    v_readlane_b32 s30, v4, 0
4234 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4235 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
4236 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
4237 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
4238 ; GFX7-NEXT:    s_mov_b32 s33, s18
4239 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4240 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4242 ; GFX8-LABEL: test_call_v3bf16:
4243 ; GFX8:       ; %bb.0: ; %entry
4244 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4245 ; GFX8-NEXT:    s_mov_b32 s18, s33
4246 ; GFX8-NEXT:    s_mov_b32 s33, s32
4247 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4248 ; GFX8-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
4249 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
4250 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
4251 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
4252 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4253 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4254 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4255 ; GFX8-NEXT:    v_writelane_b32 v4, s30, 0
4256 ; GFX8-NEXT:    v_writelane_b32 v4, s31, 1
4257 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
4258 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4259 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 4, v2
4260 ; GFX8-NEXT:    buffer_store_short v1, v3, s[0:3], 0 offen
4261 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4262 ; GFX8-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4263 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4264 ; GFX8-NEXT:    v_readlane_b32 s31, v4, 1
4265 ; GFX8-NEXT:    v_readlane_b32 s30, v4, 0
4266 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4267 ; GFX8-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
4268 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
4269 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
4270 ; GFX8-NEXT:    s_mov_b32 s33, s18
4271 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4272 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4274 ; GFX9-LABEL: test_call_v3bf16:
4275 ; GFX9:       ; %bb.0: ; %entry
4276 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4277 ; GFX9-NEXT:    s_mov_b32 s18, s33
4278 ; GFX9-NEXT:    s_mov_b32 s33, s32
4279 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4280 ; GFX9-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
4281 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
4282 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4283 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
4284 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4285 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4286 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4287 ; GFX9-NEXT:    v_writelane_b32 v3, s30, 0
4288 ; GFX9-NEXT:    v_writelane_b32 v3, s31, 1
4289 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4290 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4291 ; GFX9-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
4292 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4293 ; GFX9-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4294 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4295 ; GFX9-NEXT:    v_readlane_b32 s31, v3, 1
4296 ; GFX9-NEXT:    v_readlane_b32 s30, v3, 0
4297 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4298 ; GFX9-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
4299 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
4300 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4301 ; GFX9-NEXT:    s_mov_b32 s33, s18
4302 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4303 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4305 ; GFX10-LABEL: test_call_v3bf16:
4306 ; GFX10:       ; %bb.0: ; %entry
4307 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4308 ; GFX10-NEXT:    s_mov_b32 s18, s33
4309 ; GFX10-NEXT:    s_mov_b32 s33, s32
4310 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
4311 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
4312 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4313 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
4314 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4315 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
4316 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4317 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4318 ; GFX10-NEXT:    v_writelane_b32 v3, s30, 0
4319 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4320 ; GFX10-NEXT:    v_writelane_b32 v3, s31, 1
4321 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4322 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4323 ; GFX10-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen offset:4
4324 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4325 ; GFX10-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4326 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4327 ; GFX10-NEXT:    v_readlane_b32 s31, v3, 1
4328 ; GFX10-NEXT:    v_readlane_b32 s30, v3, 0
4329 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
4330 ; GFX10-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
4331 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4332 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
4333 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4334 ; GFX10-NEXT:    s_mov_b32 s33, s18
4335 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4336 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4338 ; GFX11-LABEL: test_call_v3bf16:
4339 ; GFX11:       ; %bb.0: ; %entry
4340 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4341 ; GFX11-NEXT:    s_mov_b32 s2, s33
4342 ; GFX11-NEXT:    s_mov_b32 s33, s32
4343 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4344 ; GFX11-NEXT:    scratch_store_b32 off, v3, s33 ; 4-byte Folded Spill
4345 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4346 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4347 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
4348 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store_v2bf16@gotpcrel32@lo+4
4349 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store_v2bf16@gotpcrel32@hi+12
4350 ; GFX11-NEXT:    v_writelane_b32 v3, s30, 0
4351 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
4352 ; GFX11-NEXT:    v_writelane_b32 v3, s31, 1
4353 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4354 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4355 ; GFX11-NEXT:    scratch_store_b16 v2, v1, off offset:4 dlc
4356 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4357 ; GFX11-NEXT:    scratch_store_b32 v2, v0, off dlc
4358 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4359 ; GFX11-NEXT:    v_readlane_b32 s31, v3, 1
4360 ; GFX11-NEXT:    v_readlane_b32 s30, v3, 0
4361 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4362 ; GFX11-NEXT:    scratch_load_b32 v3, off, s33 ; 4-byte Folded Reload
4363 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4364 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4365 ; GFX11-NEXT:    s_mov_b32 s33, s2
4366 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4367 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4368 entry:
4369   %result = call <3 x bfloat> @test_arg_store_v2bf16(<3 x bfloat> %in)
4370   store volatile <3 x bfloat> %result, ptr addrspace(5) %out
4371   ret void
4374 define void @test_call_v4bf16(<4 x bfloat> %in, ptr addrspace(5) %out) {
4375 ; GCN-LABEL: test_call_v4bf16:
4376 ; GCN:       ; %bb.0: ; %entry
4377 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4378 ; GCN-NEXT:    s_mov_b32 s18, s33
4379 ; GCN-NEXT:    s_mov_b32 s33, s32
4380 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4381 ; GCN-NEXT:    buffer_store_dword v8, off, s[0:3], s33 ; 4-byte Folded Spill
4382 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
4383 ; GCN-NEXT:    s_addk_i32 s32, 0x400
4384 ; GCN-NEXT:    s_waitcnt expcnt(0)
4385 ; GCN-NEXT:    v_writelane_b32 v8, s30, 0
4386 ; GCN-NEXT:    v_writelane_b32 v8, s31, 1
4387 ; GCN-NEXT:    s_getpc_b64 s[16:17]
4388 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4389 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4390 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4391 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
4392 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4393 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4394 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4395 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4396 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
4397 ; GCN-NEXT:    v_add_i32_e32 v5, vcc, 6, v4
4398 ; GCN-NEXT:    v_add_i32_e32 v6, vcc, 4, v4
4399 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 2, v4
4400 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4401 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4402 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4403 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
4404 ; GCN-NEXT:    buffer_store_short v3, v5, s[0:3], 0 offen
4405 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4406 ; GCN-NEXT:    buffer_store_short v2, v6, s[0:3], 0 offen
4407 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4408 ; GCN-NEXT:    buffer_store_short v1, v7, s[0:3], 0 offen
4409 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4410 ; GCN-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
4411 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4412 ; GCN-NEXT:    v_readlane_b32 s31, v8, 1
4413 ; GCN-NEXT:    v_readlane_b32 s30, v8, 0
4414 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4415 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s33 ; 4-byte Folded Reload
4416 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
4417 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
4418 ; GCN-NEXT:    s_mov_b32 s33, s18
4419 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4420 ; GCN-NEXT:    s_setpc_b64 s[30:31]
4422 ; GFX7-LABEL: test_call_v4bf16:
4423 ; GFX7:       ; %bb.0: ; %entry
4424 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4425 ; GFX7-NEXT:    s_mov_b32 s18, s33
4426 ; GFX7-NEXT:    s_mov_b32 s33, s32
4427 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4428 ; GFX7-NEXT:    buffer_store_dword v6, off, s[0:3], s33 ; 4-byte Folded Spill
4429 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
4430 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
4431 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
4432 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4433 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4434 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4435 ; GFX7-NEXT:    v_writelane_b32 v6, s30, 0
4436 ; GFX7-NEXT:    v_writelane_b32 v6, s31, 1
4437 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
4438 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4439 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
4440 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4441 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
4442 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 6, v4
4443 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4444 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4445 ; GFX7-NEXT:    buffer_store_short v3, v5, s[0:3], 0 offen
4446 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4447 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v4
4448 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4449 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4450 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
4451 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4452 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v4
4453 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4454 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
4455 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4456 ; GFX7-NEXT:    buffer_store_short v0, v4, s[0:3], 0 offen
4457 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4458 ; GFX7-NEXT:    v_readlane_b32 s31, v6, 1
4459 ; GFX7-NEXT:    v_readlane_b32 s30, v6, 0
4460 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4461 ; GFX7-NEXT:    buffer_load_dword v6, off, s[0:3], s33 ; 4-byte Folded Reload
4462 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
4463 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
4464 ; GFX7-NEXT:    s_mov_b32 s33, s18
4465 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4466 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4468 ; GFX8-LABEL: test_call_v4bf16:
4469 ; GFX8:       ; %bb.0: ; %entry
4470 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4471 ; GFX8-NEXT:    s_mov_b32 s18, s33
4472 ; GFX8-NEXT:    s_mov_b32 s33, s32
4473 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4474 ; GFX8-NEXT:    buffer_store_dword v4, off, s[0:3], s33 ; 4-byte Folded Spill
4475 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
4476 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
4477 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
4478 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4479 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4480 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4481 ; GFX8-NEXT:    v_writelane_b32 v4, s30, 0
4482 ; GFX8-NEXT:    v_writelane_b32 v4, s31, 1
4483 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
4484 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4485 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 4, v2
4486 ; GFX8-NEXT:    buffer_store_dword v1, v3, s[0:3], 0 offen
4487 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4488 ; GFX8-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4489 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4490 ; GFX8-NEXT:    v_readlane_b32 s31, v4, 1
4491 ; GFX8-NEXT:    v_readlane_b32 s30, v4, 0
4492 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4493 ; GFX8-NEXT:    buffer_load_dword v4, off, s[0:3], s33 ; 4-byte Folded Reload
4494 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
4495 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
4496 ; GFX8-NEXT:    s_mov_b32 s33, s18
4497 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4498 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4500 ; GFX9-LABEL: test_call_v4bf16:
4501 ; GFX9:       ; %bb.0: ; %entry
4502 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4503 ; GFX9-NEXT:    s_mov_b32 s18, s33
4504 ; GFX9-NEXT:    s_mov_b32 s33, s32
4505 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4506 ; GFX9-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
4507 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
4508 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4509 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
4510 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4511 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4512 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4513 ; GFX9-NEXT:    v_writelane_b32 v3, s30, 0
4514 ; GFX9-NEXT:    v_writelane_b32 v3, s31, 1
4515 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4516 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4517 ; GFX9-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen offset:4
4518 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4519 ; GFX9-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4520 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4521 ; GFX9-NEXT:    v_readlane_b32 s31, v3, 1
4522 ; GFX9-NEXT:    v_readlane_b32 s30, v3, 0
4523 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4524 ; GFX9-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
4525 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
4526 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4527 ; GFX9-NEXT:    s_mov_b32 s33, s18
4528 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4529 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4531 ; GFX10-LABEL: test_call_v4bf16:
4532 ; GFX10:       ; %bb.0: ; %entry
4533 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4534 ; GFX10-NEXT:    s_mov_b32 s18, s33
4535 ; GFX10-NEXT:    s_mov_b32 s33, s32
4536 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
4537 ; GFX10-NEXT:    buffer_store_dword v3, off, s[0:3], s33 ; 4-byte Folded Spill
4538 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4539 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
4540 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4541 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
4542 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4543 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4544 ; GFX10-NEXT:    v_writelane_b32 v3, s30, 0
4545 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4546 ; GFX10-NEXT:    v_writelane_b32 v3, s31, 1
4547 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4548 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4549 ; GFX10-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen offset:4
4550 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4551 ; GFX10-NEXT:    buffer_store_dword v0, v2, s[0:3], 0 offen
4552 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4553 ; GFX10-NEXT:    v_readlane_b32 s31, v3, 1
4554 ; GFX10-NEXT:    v_readlane_b32 s30, v3, 0
4555 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
4556 ; GFX10-NEXT:    buffer_load_dword v3, off, s[0:3], s33 ; 4-byte Folded Reload
4557 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4558 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
4559 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4560 ; GFX10-NEXT:    s_mov_b32 s33, s18
4561 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4562 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4564 ; GFX11-LABEL: test_call_v4bf16:
4565 ; GFX11:       ; %bb.0: ; %entry
4566 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4567 ; GFX11-NEXT:    s_mov_b32 s2, s33
4568 ; GFX11-NEXT:    s_mov_b32 s33, s32
4569 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4570 ; GFX11-NEXT:    scratch_store_b32 off, v3, s33 ; 4-byte Folded Spill
4571 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4572 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4573 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
4574 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store_v2bf16@gotpcrel32@lo+4
4575 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store_v2bf16@gotpcrel32@hi+12
4576 ; GFX11-NEXT:    v_writelane_b32 v3, s30, 0
4577 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
4578 ; GFX11-NEXT:    v_writelane_b32 v3, s31, 1
4579 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4580 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4581 ; GFX11-NEXT:    scratch_store_b64 v2, v[0:1], off dlc
4582 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4583 ; GFX11-NEXT:    v_readlane_b32 s31, v3, 1
4584 ; GFX11-NEXT:    v_readlane_b32 s30, v3, 0
4585 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4586 ; GFX11-NEXT:    scratch_load_b32 v3, off, s33 ; 4-byte Folded Reload
4587 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4588 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4589 ; GFX11-NEXT:    s_mov_b32 s33, s2
4590 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4591 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4592 entry:
4593   %result = call <4 x bfloat> @test_arg_store_v2bf16(<4 x bfloat> %in)
4594   store volatile <4 x bfloat> %result, ptr addrspace(5) %out
4595   ret void
4598 define void @test_call_v8bf16(<8 x bfloat> %in, ptr addrspace(5) %out) {
4599 ; GCN-LABEL: test_call_v8bf16:
4600 ; GCN:       ; %bb.0: ; %entry
4601 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4602 ; GCN-NEXT:    s_mov_b32 s18, s33
4603 ; GCN-NEXT:    s_mov_b32 s33, s32
4604 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4605 ; GCN-NEXT:    buffer_store_dword v16, off, s[0:3], s33 ; 4-byte Folded Spill
4606 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
4607 ; GCN-NEXT:    s_addk_i32 s32, 0x400
4608 ; GCN-NEXT:    s_waitcnt expcnt(0)
4609 ; GCN-NEXT:    v_writelane_b32 v16, s30, 0
4610 ; GCN-NEXT:    v_writelane_b32 v16, s31, 1
4611 ; GCN-NEXT:    s_getpc_b64 s[16:17]
4612 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4613 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4614 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4615 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
4616 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4617 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4618 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4619 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4620 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
4621 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
4622 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
4623 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
4624 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
4625 ; GCN-NEXT:    v_add_i32_e32 v9, vcc, 14, v8
4626 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, 12, v8
4627 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 10, v8
4628 ; GCN-NEXT:    v_add_i32_e32 v12, vcc, 8, v8
4629 ; GCN-NEXT:    v_add_i32_e32 v13, vcc, 6, v8
4630 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, 4, v8
4631 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 2, v8
4632 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4633 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4634 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4635 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
4636 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
4637 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
4638 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
4639 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
4640 ; GCN-NEXT:    buffer_store_short v7, v9, s[0:3], 0 offen
4641 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4642 ; GCN-NEXT:    buffer_store_short v6, v10, s[0:3], 0 offen
4643 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4644 ; GCN-NEXT:    buffer_store_short v5, v11, s[0:3], 0 offen
4645 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4646 ; GCN-NEXT:    buffer_store_short v4, v12, s[0:3], 0 offen
4647 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4648 ; GCN-NEXT:    buffer_store_short v3, v13, s[0:3], 0 offen
4649 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4650 ; GCN-NEXT:    buffer_store_short v2, v14, s[0:3], 0 offen
4651 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4652 ; GCN-NEXT:    buffer_store_short v1, v15, s[0:3], 0 offen
4653 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4654 ; GCN-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
4655 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4656 ; GCN-NEXT:    v_readlane_b32 s31, v16, 1
4657 ; GCN-NEXT:    v_readlane_b32 s30, v16, 0
4658 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4659 ; GCN-NEXT:    buffer_load_dword v16, off, s[0:3], s33 ; 4-byte Folded Reload
4660 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
4661 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
4662 ; GCN-NEXT:    s_mov_b32 s33, s18
4663 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4664 ; GCN-NEXT:    s_setpc_b64 s[30:31]
4666 ; GFX7-LABEL: test_call_v8bf16:
4667 ; GFX7:       ; %bb.0: ; %entry
4668 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4669 ; GFX7-NEXT:    s_mov_b32 s18, s33
4670 ; GFX7-NEXT:    s_mov_b32 s33, s32
4671 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4672 ; GFX7-NEXT:    buffer_store_dword v10, off, s[0:3], s33 ; 4-byte Folded Spill
4673 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
4674 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
4675 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
4676 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4677 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4678 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4679 ; GFX7-NEXT:    v_writelane_b32 v10, s30, 0
4680 ; GFX7-NEXT:    v_writelane_b32 v10, s31, 1
4681 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
4682 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4683 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
4684 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
4685 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
4686 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 14, v8
4687 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
4688 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
4689 ; GFX7-NEXT:    buffer_store_short v7, v9, s[0:3], 0 offen
4690 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4691 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 12, v8
4692 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
4693 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
4694 ; GFX7-NEXT:    buffer_store_short v6, v7, s[0:3], 0 offen
4695 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4696 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 10, v8
4697 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
4698 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
4699 ; GFX7-NEXT:    buffer_store_short v5, v6, s[0:3], 0 offen
4700 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4701 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 8, v8
4702 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4703 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
4704 ; GFX7-NEXT:    buffer_store_short v4, v5, s[0:3], 0 offen
4705 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4706 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 6, v8
4707 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4708 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4709 ; GFX7-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen
4710 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4711 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v8
4712 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4713 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4714 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
4715 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4716 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v8
4717 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4718 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
4719 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4720 ; GFX7-NEXT:    buffer_store_short v0, v8, s[0:3], 0 offen
4721 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4722 ; GFX7-NEXT:    v_readlane_b32 s31, v10, 1
4723 ; GFX7-NEXT:    v_readlane_b32 s30, v10, 0
4724 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4725 ; GFX7-NEXT:    buffer_load_dword v10, off, s[0:3], s33 ; 4-byte Folded Reload
4726 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
4727 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
4728 ; GFX7-NEXT:    s_mov_b32 s33, s18
4729 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4730 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4732 ; GFX8-LABEL: test_call_v8bf16:
4733 ; GFX8:       ; %bb.0: ; %entry
4734 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4735 ; GFX8-NEXT:    s_mov_b32 s18, s33
4736 ; GFX8-NEXT:    s_mov_b32 s33, s32
4737 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4738 ; GFX8-NEXT:    buffer_store_dword v6, off, s[0:3], s33 ; 4-byte Folded Spill
4739 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
4740 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
4741 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
4742 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4743 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4744 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4745 ; GFX8-NEXT:    v_writelane_b32 v6, s30, 0
4746 ; GFX8-NEXT:    v_writelane_b32 v6, s31, 1
4747 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
4748 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4749 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 12, v4
4750 ; GFX8-NEXT:    buffer_store_dword v3, v5, s[0:3], 0 offen
4751 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4752 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 8, v4
4753 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
4754 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4755 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v4
4756 ; GFX8-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
4757 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4758 ; GFX8-NEXT:    buffer_store_dword v0, v4, s[0:3], 0 offen
4759 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4760 ; GFX8-NEXT:    v_readlane_b32 s31, v6, 1
4761 ; GFX8-NEXT:    v_readlane_b32 s30, v6, 0
4762 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4763 ; GFX8-NEXT:    buffer_load_dword v6, off, s[0:3], s33 ; 4-byte Folded Reload
4764 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
4765 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
4766 ; GFX8-NEXT:    s_mov_b32 s33, s18
4767 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4768 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4770 ; GFX9-LABEL: test_call_v8bf16:
4771 ; GFX9:       ; %bb.0: ; %entry
4772 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4773 ; GFX9-NEXT:    s_mov_b32 s18, s33
4774 ; GFX9-NEXT:    s_mov_b32 s33, s32
4775 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4776 ; GFX9-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
4777 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
4778 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
4779 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
4780 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4781 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4782 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4783 ; GFX9-NEXT:    v_writelane_b32 v5, s30, 0
4784 ; GFX9-NEXT:    v_writelane_b32 v5, s31, 1
4785 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4786 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4787 ; GFX9-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen offset:12
4788 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4789 ; GFX9-NEXT:    buffer_store_dword v2, v4, s[0:3], 0 offen offset:8
4790 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4791 ; GFX9-NEXT:    buffer_store_dword v1, v4, s[0:3], 0 offen offset:4
4792 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4793 ; GFX9-NEXT:    buffer_store_dword v0, v4, s[0:3], 0 offen
4794 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4795 ; GFX9-NEXT:    v_readlane_b32 s31, v5, 1
4796 ; GFX9-NEXT:    v_readlane_b32 s30, v5, 0
4797 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4798 ; GFX9-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
4799 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
4800 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
4801 ; GFX9-NEXT:    s_mov_b32 s33, s18
4802 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4803 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4805 ; GFX10-LABEL: test_call_v8bf16:
4806 ; GFX10:       ; %bb.0: ; %entry
4807 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4808 ; GFX10-NEXT:    s_mov_b32 s18, s33
4809 ; GFX10-NEXT:    s_mov_b32 s33, s32
4810 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
4811 ; GFX10-NEXT:    buffer_store_dword v5, off, s[0:3], s33 ; 4-byte Folded Spill
4812 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4813 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
4814 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
4815 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
4816 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4817 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4818 ; GFX10-NEXT:    v_writelane_b32 v5, s30, 0
4819 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4820 ; GFX10-NEXT:    v_writelane_b32 v5, s31, 1
4821 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4822 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4823 ; GFX10-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen offset:12
4824 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4825 ; GFX10-NEXT:    buffer_store_dword v2, v4, s[0:3], 0 offen offset:8
4826 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4827 ; GFX10-NEXT:    buffer_store_dword v1, v4, s[0:3], 0 offen offset:4
4828 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4829 ; GFX10-NEXT:    buffer_store_dword v0, v4, s[0:3], 0 offen
4830 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4831 ; GFX10-NEXT:    v_readlane_b32 s31, v5, 1
4832 ; GFX10-NEXT:    v_readlane_b32 s30, v5, 0
4833 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
4834 ; GFX10-NEXT:    buffer_load_dword v5, off, s[0:3], s33 ; 4-byte Folded Reload
4835 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4836 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
4837 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
4838 ; GFX10-NEXT:    s_mov_b32 s33, s18
4839 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4840 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4842 ; GFX11-LABEL: test_call_v8bf16:
4843 ; GFX11:       ; %bb.0: ; %entry
4844 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4845 ; GFX11-NEXT:    s_mov_b32 s2, s33
4846 ; GFX11-NEXT:    s_mov_b32 s33, s32
4847 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4848 ; GFX11-NEXT:    scratch_store_b32 off, v5, s33 ; 4-byte Folded Spill
4849 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4850 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
4851 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
4852 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store_v2bf16@gotpcrel32@lo+4
4853 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store_v2bf16@gotpcrel32@hi+12
4854 ; GFX11-NEXT:    v_writelane_b32 v5, s30, 0
4855 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
4856 ; GFX11-NEXT:    v_writelane_b32 v5, s31, 1
4857 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4858 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
4859 ; GFX11-NEXT:    scratch_store_b128 v4, v[0:3], off dlc
4860 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4861 ; GFX11-NEXT:    v_readlane_b32 s31, v5, 1
4862 ; GFX11-NEXT:    v_readlane_b32 s30, v5, 0
4863 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
4864 ; GFX11-NEXT:    scratch_load_b32 v5, off, s33 ; 4-byte Folded Reload
4865 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
4866 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
4867 ; GFX11-NEXT:    s_mov_b32 s33, s2
4868 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4869 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4870 entry:
4871   %result = call <8 x bfloat> @test_arg_store_v2bf16(<8 x bfloat> %in)
4872   store volatile <8 x bfloat> %result, ptr addrspace(5) %out
4873   ret void
4876 define void @test_call_v16bf16(<16 x bfloat> %in, ptr addrspace(5) %out) {
4877 ; GCN-LABEL: test_call_v16bf16:
4878 ; GCN:       ; %bb.0: ; %entry
4879 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4880 ; GCN-NEXT:    s_mov_b32 s18, s33
4881 ; GCN-NEXT:    s_mov_b32 s33, s32
4882 ; GCN-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4883 ; GCN-NEXT:    buffer_store_dword v21, off, s[0:3], s33 ; 4-byte Folded Spill
4884 ; GCN-NEXT:    s_mov_b64 exec, s[16:17]
4885 ; GCN-NEXT:    s_addk_i32 s32, 0x400
4886 ; GCN-NEXT:    s_waitcnt expcnt(0)
4887 ; GCN-NEXT:    v_writelane_b32 v21, s30, 0
4888 ; GCN-NEXT:    v_writelane_b32 v21, s31, 1
4889 ; GCN-NEXT:    s_getpc_b64 s[16:17]
4890 ; GCN-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4891 ; GCN-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4892 ; GCN-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4893 ; GCN-NEXT:    s_waitcnt lgkmcnt(0)
4894 ; GCN-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4895 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
4896 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
4897 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
4898 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
4899 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
4900 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
4901 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
4902 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
4903 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
4904 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
4905 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
4906 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
4907 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
4908 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
4909 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
4910 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
4911 ; GCN-NEXT:    v_add_i32_e32 v17, vcc, 30, v16
4912 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 28, v16
4913 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 26, v16
4914 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 24, v16
4915 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
4916 ; GCN-NEXT:    buffer_store_short v15, v17, s[0:3], 0 offen
4917 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4918 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 22, v16
4919 ; GCN-NEXT:    v_add_i32_e32 v17, vcc, 20, v16
4920 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
4921 ; GCN-NEXT:    buffer_store_short v14, v18, s[0:3], 0 offen
4922 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4923 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, 18, v16
4924 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 16, v16
4925 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
4926 ; GCN-NEXT:    buffer_store_short v13, v19, s[0:3], 0 offen
4927 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4928 ; GCN-NEXT:    v_add_i32_e32 v13, vcc, 14, v16
4929 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 12, v16
4930 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
4931 ; GCN-NEXT:    buffer_store_short v12, v20, s[0:3], 0 offen
4932 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4933 ; GCN-NEXT:    v_add_i32_e32 v12, vcc, 10, v16
4934 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 8, v16
4935 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
4936 ; GCN-NEXT:    buffer_store_short v11, v15, s[0:3], 0 offen
4937 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4938 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 6, v16
4939 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 4, v16
4940 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
4941 ; GCN-NEXT:    buffer_store_short v10, v17, s[0:3], 0 offen
4942 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4943 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, 2, v16
4944 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4945 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
4946 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
4947 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
4948 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
4949 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
4950 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
4951 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
4952 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
4953 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
4954 ; GCN-NEXT:    buffer_store_short v9, v14, s[0:3], 0 offen
4955 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4956 ; GCN-NEXT:    buffer_store_short v8, v18, s[0:3], 0 offen
4957 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4958 ; GCN-NEXT:    buffer_store_short v7, v13, s[0:3], 0 offen
4959 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4960 ; GCN-NEXT:    buffer_store_short v6, v19, s[0:3], 0 offen
4961 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4962 ; GCN-NEXT:    buffer_store_short v5, v12, s[0:3], 0 offen
4963 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4964 ; GCN-NEXT:    buffer_store_short v4, v20, s[0:3], 0 offen
4965 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4966 ; GCN-NEXT:    buffer_store_short v3, v11, s[0:3], 0 offen
4967 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4968 ; GCN-NEXT:    buffer_store_short v2, v15, s[0:3], 0 offen
4969 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4970 ; GCN-NEXT:    buffer_store_short v1, v10, s[0:3], 0 offen
4971 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4972 ; GCN-NEXT:    buffer_store_short v0, v16, s[0:3], 0 offen
4973 ; GCN-NEXT:    s_waitcnt vmcnt(0)
4974 ; GCN-NEXT:    v_readlane_b32 s31, v21, 1
4975 ; GCN-NEXT:    v_readlane_b32 s30, v21, 0
4976 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
4977 ; GCN-NEXT:    buffer_load_dword v21, off, s[0:3], s33 ; 4-byte Folded Reload
4978 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
4979 ; GCN-NEXT:    s_addk_i32 s32, 0xfc00
4980 ; GCN-NEXT:    s_mov_b32 s33, s18
4981 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4982 ; GCN-NEXT:    s_setpc_b64 s[30:31]
4984 ; GFX7-LABEL: test_call_v16bf16:
4985 ; GFX7:       ; %bb.0: ; %entry
4986 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4987 ; GFX7-NEXT:    s_mov_b32 s18, s33
4988 ; GFX7-NEXT:    s_mov_b32 s33, s32
4989 ; GFX7-NEXT:    s_xor_saveexec_b64 s[16:17], -1
4990 ; GFX7-NEXT:    buffer_store_dword v18, off, s[0:3], s33 ; 4-byte Folded Spill
4991 ; GFX7-NEXT:    s_mov_b64 exec, s[16:17]
4992 ; GFX7-NEXT:    s_addk_i32 s32, 0x400
4993 ; GFX7-NEXT:    s_getpc_b64 s[16:17]
4994 ; GFX7-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
4995 ; GFX7-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
4996 ; GFX7-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
4997 ; GFX7-NEXT:    v_writelane_b32 v18, s30, 0
4998 ; GFX7-NEXT:    v_writelane_b32 v18, s31, 1
4999 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
5000 ; GFX7-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5001 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
5002 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
5003 ; GFX7-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
5004 ; GFX7-NEXT:    v_add_i32_e32 v17, vcc, 30, v16
5005 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
5006 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
5007 ; GFX7-NEXT:    buffer_store_short v15, v17, s[0:3], 0 offen
5008 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5009 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 28, v16
5010 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
5011 ; GFX7-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
5012 ; GFX7-NEXT:    buffer_store_short v14, v15, s[0:3], 0 offen
5013 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5014 ; GFX7-NEXT:    v_add_i32_e32 v14, vcc, 26, v16
5015 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
5016 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
5017 ; GFX7-NEXT:    buffer_store_short v13, v14, s[0:3], 0 offen
5018 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5019 ; GFX7-NEXT:    v_add_i32_e32 v13, vcc, 24, v16
5020 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
5021 ; GFX7-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
5022 ; GFX7-NEXT:    buffer_store_short v12, v13, s[0:3], 0 offen
5023 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5024 ; GFX7-NEXT:    v_add_i32_e32 v12, vcc, 22, v16
5025 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
5026 ; GFX7-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
5027 ; GFX7-NEXT:    buffer_store_short v11, v12, s[0:3], 0 offen
5028 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5029 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, 20, v16
5030 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
5031 ; GFX7-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
5032 ; GFX7-NEXT:    buffer_store_short v10, v11, s[0:3], 0 offen
5033 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5034 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, 18, v16
5035 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
5036 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
5037 ; GFX7-NEXT:    buffer_store_short v9, v10, s[0:3], 0 offen
5038 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5039 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 16, v16
5040 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
5041 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
5042 ; GFX7-NEXT:    buffer_store_short v8, v9, s[0:3], 0 offen
5043 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5044 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 14, v16
5045 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
5046 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
5047 ; GFX7-NEXT:    buffer_store_short v7, v8, s[0:3], 0 offen
5048 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5049 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 12, v16
5050 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
5051 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
5052 ; GFX7-NEXT:    buffer_store_short v6, v7, s[0:3], 0 offen
5053 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5054 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 10, v16
5055 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
5056 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
5057 ; GFX7-NEXT:    buffer_store_short v5, v6, s[0:3], 0 offen
5058 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5059 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 8, v16
5060 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
5061 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
5062 ; GFX7-NEXT:    buffer_store_short v4, v5, s[0:3], 0 offen
5063 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5064 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 6, v16
5065 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
5066 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
5067 ; GFX7-NEXT:    buffer_store_short v3, v4, s[0:3], 0 offen
5068 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5069 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 4, v16
5070 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5071 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
5072 ; GFX7-NEXT:    buffer_store_short v2, v3, s[0:3], 0 offen
5073 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5074 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 2, v16
5075 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5076 ; GFX7-NEXT:    buffer_store_short v1, v2, s[0:3], 0 offen
5077 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5078 ; GFX7-NEXT:    buffer_store_short v0, v16, s[0:3], 0 offen
5079 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5080 ; GFX7-NEXT:    v_readlane_b32 s31, v18, 1
5081 ; GFX7-NEXT:    v_readlane_b32 s30, v18, 0
5082 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
5083 ; GFX7-NEXT:    buffer_load_dword v18, off, s[0:3], s33 ; 4-byte Folded Reload
5084 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
5085 ; GFX7-NEXT:    s_addk_i32 s32, 0xfc00
5086 ; GFX7-NEXT:    s_mov_b32 s33, s18
5087 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5088 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5090 ; GFX8-LABEL: test_call_v16bf16:
5091 ; GFX8:       ; %bb.0: ; %entry
5092 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5093 ; GFX8-NEXT:    s_mov_b32 s18, s33
5094 ; GFX8-NEXT:    s_mov_b32 s33, s32
5095 ; GFX8-NEXT:    s_xor_saveexec_b64 s[16:17], -1
5096 ; GFX8-NEXT:    buffer_store_dword v10, off, s[0:3], s33 ; 4-byte Folded Spill
5097 ; GFX8-NEXT:    s_mov_b64 exec, s[16:17]
5098 ; GFX8-NEXT:    s_addk_i32 s32, 0x400
5099 ; GFX8-NEXT:    s_getpc_b64 s[16:17]
5100 ; GFX8-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
5101 ; GFX8-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
5102 ; GFX8-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
5103 ; GFX8-NEXT:    v_writelane_b32 v10, s30, 0
5104 ; GFX8-NEXT:    v_writelane_b32 v10, s31, 1
5105 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
5106 ; GFX8-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5107 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 28, v8
5108 ; GFX8-NEXT:    buffer_store_dword v7, v9, s[0:3], 0 offen
5109 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5110 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 24, v8
5111 ; GFX8-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
5112 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5113 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 20, v8
5114 ; GFX8-NEXT:    buffer_store_dword v5, v6, s[0:3], 0 offen
5115 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5116 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 16, v8
5117 ; GFX8-NEXT:    buffer_store_dword v4, v5, s[0:3], 0 offen
5118 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5119 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 12, v8
5120 ; GFX8-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
5121 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5122 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 8, v8
5123 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
5124 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5125 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v8
5126 ; GFX8-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
5127 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5128 ; GFX8-NEXT:    buffer_store_dword v0, v8, s[0:3], 0 offen
5129 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5130 ; GFX8-NEXT:    v_readlane_b32 s31, v10, 1
5131 ; GFX8-NEXT:    v_readlane_b32 s30, v10, 0
5132 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
5133 ; GFX8-NEXT:    buffer_load_dword v10, off, s[0:3], s33 ; 4-byte Folded Reload
5134 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
5135 ; GFX8-NEXT:    s_addk_i32 s32, 0xfc00
5136 ; GFX8-NEXT:    s_mov_b32 s33, s18
5137 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5138 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5140 ; GFX9-LABEL: test_call_v16bf16:
5141 ; GFX9:       ; %bb.0: ; %entry
5142 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5143 ; GFX9-NEXT:    s_mov_b32 s18, s33
5144 ; GFX9-NEXT:    s_mov_b32 s33, s32
5145 ; GFX9-NEXT:    s_xor_saveexec_b64 s[16:17], -1
5146 ; GFX9-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
5147 ; GFX9-NEXT:    s_mov_b64 exec, s[16:17]
5148 ; GFX9-NEXT:    s_addk_i32 s32, 0x400
5149 ; GFX9-NEXT:    s_getpc_b64 s[16:17]
5150 ; GFX9-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
5151 ; GFX9-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
5152 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
5153 ; GFX9-NEXT:    v_writelane_b32 v9, s30, 0
5154 ; GFX9-NEXT:    v_writelane_b32 v9, s31, 1
5155 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
5156 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5157 ; GFX9-NEXT:    buffer_store_dword v7, v8, s[0:3], 0 offen offset:28
5158 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5159 ; GFX9-NEXT:    buffer_store_dword v6, v8, s[0:3], 0 offen offset:24
5160 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5161 ; GFX9-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen offset:20
5162 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5163 ; GFX9-NEXT:    buffer_store_dword v4, v8, s[0:3], 0 offen offset:16
5164 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5165 ; GFX9-NEXT:    buffer_store_dword v3, v8, s[0:3], 0 offen offset:12
5166 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5167 ; GFX9-NEXT:    buffer_store_dword v2, v8, s[0:3], 0 offen offset:8
5168 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5169 ; GFX9-NEXT:    buffer_store_dword v1, v8, s[0:3], 0 offen offset:4
5170 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5171 ; GFX9-NEXT:    buffer_store_dword v0, v8, s[0:3], 0 offen
5172 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5173 ; GFX9-NEXT:    v_readlane_b32 s31, v9, 1
5174 ; GFX9-NEXT:    v_readlane_b32 s30, v9, 0
5175 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
5176 ; GFX9-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
5177 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
5178 ; GFX9-NEXT:    s_addk_i32 s32, 0xfc00
5179 ; GFX9-NEXT:    s_mov_b32 s33, s18
5180 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5181 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5183 ; GFX10-LABEL: test_call_v16bf16:
5184 ; GFX10:       ; %bb.0: ; %entry
5185 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5186 ; GFX10-NEXT:    s_mov_b32 s18, s33
5187 ; GFX10-NEXT:    s_mov_b32 s33, s32
5188 ; GFX10-NEXT:    s_xor_saveexec_b32 s16, -1
5189 ; GFX10-NEXT:    buffer_store_dword v9, off, s[0:3], s33 ; 4-byte Folded Spill
5190 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5191 ; GFX10-NEXT:    s_mov_b32 exec_lo, s16
5192 ; GFX10-NEXT:    s_addk_i32 s32, 0x200
5193 ; GFX10-NEXT:    s_getpc_b64 s[16:17]
5194 ; GFX10-NEXT:    s_add_u32 s16, s16, test_arg_store_v2bf16@gotpcrel32@lo+4
5195 ; GFX10-NEXT:    s_addc_u32 s17, s17, test_arg_store_v2bf16@gotpcrel32@hi+12
5196 ; GFX10-NEXT:    v_writelane_b32 v9, s30, 0
5197 ; GFX10-NEXT:    s_load_dwordx2 s[16:17], s[16:17], 0x0
5198 ; GFX10-NEXT:    v_writelane_b32 v9, s31, 1
5199 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
5200 ; GFX10-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5201 ; GFX10-NEXT:    buffer_store_dword v7, v8, s[0:3], 0 offen offset:28
5202 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5203 ; GFX10-NEXT:    buffer_store_dword v6, v8, s[0:3], 0 offen offset:24
5204 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5205 ; GFX10-NEXT:    buffer_store_dword v5, v8, s[0:3], 0 offen offset:20
5206 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5207 ; GFX10-NEXT:    buffer_store_dword v4, v8, s[0:3], 0 offen offset:16
5208 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5209 ; GFX10-NEXT:    buffer_store_dword v3, v8, s[0:3], 0 offen offset:12
5210 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5211 ; GFX10-NEXT:    buffer_store_dword v2, v8, s[0:3], 0 offen offset:8
5212 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5213 ; GFX10-NEXT:    buffer_store_dword v1, v8, s[0:3], 0 offen offset:4
5214 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5215 ; GFX10-NEXT:    buffer_store_dword v0, v8, s[0:3], 0 offen
5216 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5217 ; GFX10-NEXT:    v_readlane_b32 s31, v9, 1
5218 ; GFX10-NEXT:    v_readlane_b32 s30, v9, 0
5219 ; GFX10-NEXT:    s_xor_saveexec_b32 s4, -1
5220 ; GFX10-NEXT:    buffer_load_dword v9, off, s[0:3], s33 ; 4-byte Folded Reload
5221 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5222 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
5223 ; GFX10-NEXT:    s_addk_i32 s32, 0xfe00
5224 ; GFX10-NEXT:    s_mov_b32 s33, s18
5225 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5226 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5228 ; GFX11-LABEL: test_call_v16bf16:
5229 ; GFX11:       ; %bb.0: ; %entry
5230 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5231 ; GFX11-NEXT:    s_mov_b32 s2, s33
5232 ; GFX11-NEXT:    s_mov_b32 s33, s32
5233 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
5234 ; GFX11-NEXT:    scratch_store_b32 off, v9, s33 ; 4-byte Folded Spill
5235 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
5236 ; GFX11-NEXT:    s_add_i32 s32, s32, 16
5237 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
5238 ; GFX11-NEXT:    s_add_u32 s0, s0, test_arg_store_v2bf16@gotpcrel32@lo+4
5239 ; GFX11-NEXT:    s_addc_u32 s1, s1, test_arg_store_v2bf16@gotpcrel32@hi+12
5240 ; GFX11-NEXT:    v_writelane_b32 v9, s30, 0
5241 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
5242 ; GFX11-NEXT:    v_writelane_b32 v9, s31, 1
5243 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
5244 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
5245 ; GFX11-NEXT:    scratch_store_b128 v8, v[4:7], off offset:16 dlc
5246 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
5247 ; GFX11-NEXT:    scratch_store_b128 v8, v[0:3], off dlc
5248 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
5249 ; GFX11-NEXT:    v_readlane_b32 s31, v9, 1
5250 ; GFX11-NEXT:    v_readlane_b32 s30, v9, 0
5251 ; GFX11-NEXT:    s_xor_saveexec_b32 s0, -1
5252 ; GFX11-NEXT:    scratch_load_b32 v9, off, s33 ; 4-byte Folded Reload
5253 ; GFX11-NEXT:    s_mov_b32 exec_lo, s0
5254 ; GFX11-NEXT:    s_add_i32 s32, s32, -16
5255 ; GFX11-NEXT:    s_mov_b32 s33, s2
5256 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5257 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5258 entry:
5259   %result = call <16 x bfloat> @test_arg_store_v2bf16(<16 x bfloat> %in)
5260   store volatile <16 x bfloat> %result, ptr addrspace(5) %out
5261   ret void
5264 define bfloat @test_alloca_load_store_ret(bfloat %in) {
5265 ; GCN-LABEL: test_alloca_load_store_ret:
5266 ; GCN:       ; %bb.0: ; %entry
5267 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5268 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5269 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5270 ; GCN-NEXT:    buffer_store_short v0, off, s[0:3], s32
5271 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
5272 ; GCN-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
5273 ; GCN-NEXT:    s_waitcnt vmcnt(0)
5274 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5275 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5277 ; GFX7-LABEL: test_alloca_load_store_ret:
5278 ; GFX7:       ; %bb.0: ; %entry
5279 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5280 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5281 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5282 ; GFX7-NEXT:    buffer_store_short v0, off, s[0:3], s32
5283 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5284 ; GFX7-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
5285 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5286 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5287 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5289 ; GFX8-LABEL: test_alloca_load_store_ret:
5290 ; GFX8:       ; %bb.0: ; %entry
5291 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5292 ; GFX8-NEXT:    buffer_store_short v0, off, s[0:3], s32
5293 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5294 ; GFX8-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
5295 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5296 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5298 ; GFX9-LABEL: test_alloca_load_store_ret:
5299 ; GFX9:       ; %bb.0: ; %entry
5300 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5301 ; GFX9-NEXT:    buffer_store_short v0, off, s[0:3], s32
5302 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5303 ; GFX9-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc
5304 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5305 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5307 ; GFX10-LABEL: test_alloca_load_store_ret:
5308 ; GFX10:       ; %bb.0: ; %entry
5309 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5310 ; GFX10-NEXT:    buffer_store_short v0, off, s[0:3], s32
5311 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5312 ; GFX10-NEXT:    buffer_load_ushort v0, off, s[0:3], s32 glc dlc
5313 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5314 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5316 ; GFX11-LABEL: test_alloca_load_store_ret:
5317 ; GFX11:       ; %bb.0: ; %entry
5318 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5319 ; GFX11-NEXT:    scratch_store_b16 off, v0, s32 dlc
5320 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
5321 ; GFX11-NEXT:    scratch_load_u16 v0, off, s32 glc dlc
5322 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5323 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5324 entry:
5325   %in.addr = alloca bfloat, align 2, addrspace(5)
5326   store volatile bfloat %in, ptr addrspace(5) %in.addr, align 2
5327   %loaded = load volatile bfloat, ptr addrspace(5) %in.addr, align 2
5328   ret bfloat %loaded
5331 define { <32 x i32>, bfloat } @test_overflow_stack(bfloat %a, <32 x i32> %b) {
5332 ; GCN-LABEL: test_overflow_stack:
5333 ; GCN:       ; %bb.0:
5334 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5335 ; GCN-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
5336 ; GCN-NEXT:    s_waitcnt expcnt(0)
5337 ; GCN-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
5338 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x7c, v0
5339 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
5340 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32
5341 ; GCN-NEXT:    s_waitcnt vmcnt(2)
5342 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5343 ; GCN-NEXT:    s_waitcnt expcnt(0)
5344 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x78, v0
5345 ; GCN-NEXT:    s_waitcnt vmcnt(2)
5346 ; GCN-NEXT:    buffer_store_dword v32, v2, s[0:3], 0 offen
5347 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x74, v0
5348 ; GCN-NEXT:    s_waitcnt vmcnt(2)
5349 ; GCN-NEXT:    buffer_store_dword v33, v2, s[0:3], 0 offen
5350 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x70, v0
5351 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x6c, v0
5352 ; GCN-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
5353 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x68, v0
5354 ; GCN-NEXT:    s_waitcnt expcnt(0)
5355 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x64, v0
5356 ; GCN-NEXT:    buffer_store_dword v29, v31, s[0:3], 0 offen
5357 ; GCN-NEXT:    s_waitcnt expcnt(0)
5358 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x60, v0
5359 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x5c, v0
5360 ; GCN-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
5361 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0x58, v0
5362 ; GCN-NEXT:    s_waitcnt expcnt(0)
5363 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0x54, v0
5364 ; GCN-NEXT:    buffer_store_dword v27, v30, s[0:3], 0 offen
5365 ; GCN-NEXT:    s_waitcnt expcnt(0)
5366 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0x50, v0
5367 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x4c, v0
5368 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
5369 ; GCN-NEXT:    buffer_store_dword v26, v29, s[0:3], 0 offen
5370 ; GCN-NEXT:    s_waitcnt expcnt(0)
5371 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 0x48, v0
5372 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x44, v0
5373 ; GCN-NEXT:    buffer_store_dword v25, v31, s[0:3], 0 offen
5374 ; GCN-NEXT:    s_waitcnt expcnt(0)
5375 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 64, v0
5376 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 60, v0
5377 ; GCN-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
5378 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 56, v0
5379 ; GCN-NEXT:    s_waitcnt expcnt(0)
5380 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 52, v0
5381 ; GCN-NEXT:    buffer_store_dword v23, v28, s[0:3], 0 offen
5382 ; GCN-NEXT:    s_waitcnt expcnt(0)
5383 ; GCN-NEXT:    v_add_i32_e32 v23, vcc, 48, v0
5384 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 44, v0
5385 ; GCN-NEXT:    buffer_store_dword v22, v27, s[0:3], 0 offen
5386 ; GCN-NEXT:    s_waitcnt expcnt(0)
5387 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 40, v0
5388 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 36, v0
5389 ; GCN-NEXT:    buffer_store_dword v21, v30, s[0:3], 0 offen
5390 ; GCN-NEXT:    s_waitcnt expcnt(0)
5391 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 32, v0
5392 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 28, v0
5393 ; GCN-NEXT:    buffer_store_dword v20, v26, s[0:3], 0 offen
5394 ; GCN-NEXT:    s_waitcnt expcnt(0)
5395 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 24, v0
5396 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 20, v0
5397 ; GCN-NEXT:    buffer_store_dword v19, v29, s[0:3], 0 offen
5398 ; GCN-NEXT:    s_waitcnt expcnt(0)
5399 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 16, v0
5400 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 12, v0
5401 ; GCN-NEXT:    buffer_store_dword v18, v25, s[0:3], 0 offen
5402 ; GCN-NEXT:    s_waitcnt expcnt(0)
5403 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 8, v0
5404 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 4, v0
5405 ; GCN-NEXT:    v_add_i32_e32 v0, vcc, 0x80, v0
5406 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
5407 ; GCN-NEXT:    buffer_store_dword v17, v31, s[0:3], 0 offen
5408 ; GCN-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
5409 ; GCN-NEXT:    buffer_store_dword v15, v24, s[0:3], 0 offen
5410 ; GCN-NEXT:    buffer_store_dword v14, v23, s[0:3], 0 offen
5411 ; GCN-NEXT:    buffer_store_dword v13, v28, s[0:3], 0 offen
5412 ; GCN-NEXT:    buffer_store_dword v12, v22, s[0:3], 0 offen
5413 ; GCN-NEXT:    buffer_store_dword v11, v27, s[0:3], 0 offen
5414 ; GCN-NEXT:    buffer_store_dword v10, v21, s[0:3], 0 offen
5415 ; GCN-NEXT:    buffer_store_dword v9, v30, s[0:3], 0 offen
5416 ; GCN-NEXT:    buffer_store_dword v8, v20, s[0:3], 0 offen
5417 ; GCN-NEXT:    buffer_store_dword v7, v26, s[0:3], 0 offen
5418 ; GCN-NEXT:    buffer_store_dword v6, v19, s[0:3], 0 offen
5419 ; GCN-NEXT:    buffer_store_dword v5, v29, s[0:3], 0 offen
5420 ; GCN-NEXT:    buffer_store_dword v4, v18, s[0:3], 0 offen
5421 ; GCN-NEXT:    buffer_store_dword v3, v25, s[0:3], 0 offen
5422 ; GCN-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
5423 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
5424 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5426 ; GFX7-LABEL: test_overflow_stack:
5427 ; GFX7:       ; %bb.0:
5428 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5429 ; GFX7-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
5430 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
5431 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x7c, v0
5432 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
5433 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
5434 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5435 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5436 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:4
5437 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x78, v0
5438 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5439 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5440 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32
5441 ; GFX7-NEXT:    v_add_i32_e32 v31, vcc, 0x74, v0
5442 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5443 ; GFX7-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5444 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x70, v0
5445 ; GFX7-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
5446 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x6c, v0
5447 ; GFX7-NEXT:    buffer_store_dword v29, v2, s[0:3], 0 offen
5448 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x68, v0
5449 ; GFX7-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
5450 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x64, v0
5451 ; GFX7-NEXT:    buffer_store_dword v27, v2, s[0:3], 0 offen
5452 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x60, v0
5453 ; GFX7-NEXT:    buffer_store_dword v26, v2, s[0:3], 0 offen
5454 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x5c, v0
5455 ; GFX7-NEXT:    buffer_store_dword v25, v2, s[0:3], 0 offen
5456 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x58, v0
5457 ; GFX7-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
5458 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x54, v0
5459 ; GFX7-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
5460 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x50, v0
5461 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
5462 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x4c, v0
5463 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
5464 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x48, v0
5465 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
5466 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x44, v0
5467 ; GFX7-NEXT:    buffer_store_dword v19, v2, s[0:3], 0 offen
5468 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 64, v0
5469 ; GFX7-NEXT:    buffer_store_dword v18, v2, s[0:3], 0 offen
5470 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 60, v0
5471 ; GFX7-NEXT:    buffer_store_dword v17, v2, s[0:3], 0 offen
5472 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 56, v0
5473 ; GFX7-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
5474 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 52, v0
5475 ; GFX7-NEXT:    buffer_store_dword v15, v2, s[0:3], 0 offen
5476 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 48, v0
5477 ; GFX7-NEXT:    buffer_store_dword v14, v2, s[0:3], 0 offen
5478 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 44, v0
5479 ; GFX7-NEXT:    buffer_store_dword v13, v2, s[0:3], 0 offen
5480 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 40, v0
5481 ; GFX7-NEXT:    buffer_store_dword v12, v2, s[0:3], 0 offen
5482 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 36, v0
5483 ; GFX7-NEXT:    buffer_store_dword v11, v2, s[0:3], 0 offen
5484 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 32, v0
5485 ; GFX7-NEXT:    buffer_store_dword v10, v2, s[0:3], 0 offen
5486 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 28, v0
5487 ; GFX7-NEXT:    buffer_store_dword v9, v2, s[0:3], 0 offen
5488 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 24, v0
5489 ; GFX7-NEXT:    buffer_store_dword v8, v2, s[0:3], 0 offen
5490 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 20, v0
5491 ; GFX7-NEXT:    buffer_store_dword v7, v2, s[0:3], 0 offen
5492 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 16, v0
5493 ; GFX7-NEXT:    buffer_store_dword v6, v2, s[0:3], 0 offen
5494 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 12, v0
5495 ; GFX7-NEXT:    buffer_store_dword v5, v2, s[0:3], 0 offen
5496 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 8, v0
5497 ; GFX7-NEXT:    buffer_store_dword v4, v2, s[0:3], 0 offen
5498 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 4, v0
5499 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, 0x80, v0
5500 ; GFX7-NEXT:    buffer_store_dword v3, v2, s[0:3], 0 offen
5501 ; GFX7-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
5502 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5503 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5505 ; GFX8-LABEL: test_overflow_stack:
5506 ; GFX8:       ; %bb.0:
5507 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5508 ; GFX8-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
5509 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
5510 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x7c, v0
5511 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5512 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5513 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:4
5514 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x78, v0
5515 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5516 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5517 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32
5518 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 0x74, v0
5519 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5520 ; GFX8-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
5521 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x70, v0
5522 ; GFX8-NEXT:    buffer_store_dword v30, v2, s[0:3], 0 offen
5523 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x6c, v0
5524 ; GFX8-NEXT:    buffer_store_dword v29, v2, s[0:3], 0 offen
5525 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x68, v0
5526 ; GFX8-NEXT:    buffer_store_dword v28, v2, s[0:3], 0 offen
5527 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x64, v0
5528 ; GFX8-NEXT:    buffer_store_dword v27, v2, s[0:3], 0 offen
5529 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x60, v0
5530 ; GFX8-NEXT:    buffer_store_dword v26, v2, s[0:3], 0 offen
5531 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x5c, v0
5532 ; GFX8-NEXT:    buffer_store_dword v25, v2, s[0:3], 0 offen
5533 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x58, v0
5534 ; GFX8-NEXT:    buffer_store_dword v24, v2, s[0:3], 0 offen
5535 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x54, v0
5536 ; GFX8-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
5537 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x50, v0
5538 ; GFX8-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
5539 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x4c, v0
5540 ; GFX8-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
5541 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x48, v0
5542 ; GFX8-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
5543 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x44, v0
5544 ; GFX8-NEXT:    buffer_store_dword v19, v2, s[0:3], 0 offen
5545 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 64, v0
5546 ; GFX8-NEXT:    buffer_store_dword v18, v2, s[0:3], 0 offen
5547 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 60, v0
5548 ; GFX8-NEXT:    buffer_store_dword v17, v2, s[0:3], 0 offen
5549 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 56, v0
5550 ; GFX8-NEXT:    buffer_store_dword v16, v2, s[0:3], 0 offen
5551 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 52, v0
5552 ; GFX8-NEXT:    buffer_store_dword v15, v2, s[0:3], 0 offen
5553 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 48, v0
5554 ; GFX8-NEXT:    buffer_store_dword v14, v2, s[0:3], 0 offen
5555 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 44, v0
5556 ; GFX8-NEXT:    buffer_store_dword v13, v2, s[0:3], 0 offen
5557 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 40, v0
5558 ; GFX8-NEXT:    buffer_store_dword v12, v2, s[0:3], 0 offen
5559 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 36, v0
5560 ; GFX8-NEXT:    buffer_store_dword v11, v2, s[0:3], 0 offen
5561 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 32, v0
5562 ; GFX8-NEXT:    buffer_store_dword v10, v2, s[0:3], 0 offen
5563 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 28, v0
5564 ; GFX8-NEXT:    buffer_store_dword v9, v2, s[0:3], 0 offen
5565 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 24, v0
5566 ; GFX8-NEXT:    buffer_store_dword v8, v2, s[0:3], 0 offen
5567 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 20, v0
5568 ; GFX8-NEXT:    buffer_store_dword v7, v2, s[0:3], 0 offen
5569 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 16, v0
5570 ; GFX8-NEXT:    buffer_store_dword v6, v2, s[0:3], 0 offen
5571 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 12, v0
5572 ; GFX8-NEXT:    buffer_store_dword v5, v2, s[0:3], 0 offen
5573 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 8, v0
5574 ; GFX8-NEXT:    buffer_store_dword v4, v2, s[0:3], 0 offen
5575 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 4, v0
5576 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 0x80, v0
5577 ; GFX8-NEXT:    buffer_store_dword v3, v2, s[0:3], 0 offen
5578 ; GFX8-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen
5579 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5580 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5582 ; GFX9-LABEL: test_overflow_stack:
5583 ; GFX9:       ; %bb.0:
5584 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5585 ; GFX9-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:112
5586 ; GFX9-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:108
5587 ; GFX9-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:104
5588 ; GFX9-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:100
5589 ; GFX9-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:96
5590 ; GFX9-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:92
5591 ; GFX9-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:88
5592 ; GFX9-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:84
5593 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:80
5594 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:76
5595 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:72
5596 ; GFX9-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:4
5597 ; GFX9-NEXT:    s_nop 0
5598 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:68
5599 ; GFX9-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:8
5600 ; GFX9-NEXT:    s_nop 0
5601 ; GFX9-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:64
5602 ; GFX9-NEXT:    buffer_load_dword v18, off, s[0:3], s32
5603 ; GFX9-NEXT:    s_nop 0
5604 ; GFX9-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:60
5605 ; GFX9-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:56
5606 ; GFX9-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:52
5607 ; GFX9-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:48
5608 ; GFX9-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:44
5609 ; GFX9-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:40
5610 ; GFX9-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:36
5611 ; GFX9-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:32
5612 ; GFX9-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
5613 ; GFX9-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
5614 ; GFX9-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
5615 ; GFX9-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
5616 ; GFX9-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
5617 ; GFX9-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
5618 ; GFX9-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
5619 ; GFX9-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
5620 ; GFX9-NEXT:    s_waitcnt vmcnt(18)
5621 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:124
5622 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:120
5623 ; GFX9-NEXT:    s_waitcnt vmcnt(18)
5624 ; GFX9-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:116
5625 ; GFX9-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen offset:128
5626 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5627 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5629 ; GFX10-LABEL: test_overflow_stack:
5630 ; GFX10:       ; %bb.0:
5631 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5632 ; GFX10-NEXT:    s_clause 0x2
5633 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:8
5634 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
5635 ; GFX10-NEXT:    buffer_load_dword v33, off, s[0:3], s32
5636 ; GFX10-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:112
5637 ; GFX10-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:108
5638 ; GFX10-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:104
5639 ; GFX10-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:100
5640 ; GFX10-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:96
5641 ; GFX10-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:92
5642 ; GFX10-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:88
5643 ; GFX10-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:84
5644 ; GFX10-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:80
5645 ; GFX10-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:76
5646 ; GFX10-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:72
5647 ; GFX10-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:68
5648 ; GFX10-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:64
5649 ; GFX10-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:60
5650 ; GFX10-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:56
5651 ; GFX10-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:52
5652 ; GFX10-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:48
5653 ; GFX10-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:44
5654 ; GFX10-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:40
5655 ; GFX10-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:36
5656 ; GFX10-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:32
5657 ; GFX10-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:28
5658 ; GFX10-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:24
5659 ; GFX10-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:20
5660 ; GFX10-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:16
5661 ; GFX10-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:12
5662 ; GFX10-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:8
5663 ; GFX10-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:4
5664 ; GFX10-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen
5665 ; GFX10-NEXT:    s_waitcnt vmcnt(2)
5666 ; GFX10-NEXT:    buffer_store_dword v31, v0, s[0:3], 0 offen offset:124
5667 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
5668 ; GFX10-NEXT:    buffer_store_dword v32, v0, s[0:3], 0 offen offset:120
5669 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5670 ; GFX10-NEXT:    buffer_store_dword v33, v0, s[0:3], 0 offen offset:116
5671 ; GFX10-NEXT:    buffer_store_short v1, v0, s[0:3], 0 offen offset:128
5672 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5674 ; GFX11-LABEL: test_overflow_stack:
5675 ; GFX11:       ; %bb.0:
5676 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5677 ; GFX11-NEXT:    s_clause 0x2
5678 ; GFX11-NEXT:    scratch_load_b32 v33, off, s32 offset:8
5679 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32 offset:4
5680 ; GFX11-NEXT:    scratch_load_b32 v31, off, s32
5681 ; GFX11-NEXT:    s_clause 0x5
5682 ; GFX11-NEXT:    scratch_store_b128 v0, v[22:25], off offset:80
5683 ; GFX11-NEXT:    scratch_store_b128 v0, v[18:21], off offset:64
5684 ; GFX11-NEXT:    scratch_store_b128 v0, v[14:17], off offset:48
5685 ; GFX11-NEXT:    scratch_store_b128 v0, v[10:13], off offset:32
5686 ; GFX11-NEXT:    scratch_store_b128 v0, v[6:9], off offset:16
5687 ; GFX11-NEXT:    scratch_store_b128 v0, v[2:5], off
5688 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5689 ; GFX11-NEXT:    s_clause 0x2
5690 ; GFX11-NEXT:    scratch_store_b128 v0, v[30:33], off offset:112
5691 ; GFX11-NEXT:    scratch_store_b128 v0, v[26:29], off offset:96
5692 ; GFX11-NEXT:    scratch_store_b16 v0, v1, off offset:128
5693 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5694   %ins.0 = insertvalue { <32 x i32>, bfloat } poison, <32 x i32> %b, 0
5695   %ins.1 = insertvalue { <32 x i32>, bfloat } %ins.0 ,bfloat %a, 1
5696   ret { <32 x i32>, bfloat } %ins.1
5699 define <2 x float> @global_extload_v2bf16_to_v2f32(ptr addrspace(1) %ptr) {
5700 ; GCN-LABEL: global_extload_v2bf16_to_v2f32:
5701 ; GCN:       ; %bb.0:
5702 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5703 ; GCN-NEXT:    s_mov_b32 s6, 0
5704 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
5705 ; GCN-NEXT:    s_mov_b32 s4, s6
5706 ; GCN-NEXT:    s_mov_b32 s5, s6
5707 ; GCN-NEXT:    buffer_load_dword v1, v[0:1], s[4:7], 0 addr64
5708 ; GCN-NEXT:    s_waitcnt vmcnt(0)
5709 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5710 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5711 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5713 ; GFX7-LABEL: global_extload_v2bf16_to_v2f32:
5714 ; GFX7:       ; %bb.0:
5715 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5716 ; GFX7-NEXT:    s_mov_b32 s6, 0
5717 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
5718 ; GFX7-NEXT:    s_mov_b32 s4, s6
5719 ; GFX7-NEXT:    s_mov_b32 s5, s6
5720 ; GFX7-NEXT:    buffer_load_dword v1, v[0:1], s[4:7], 0 addr64
5721 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5722 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5723 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5724 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5726 ; GFX8-LABEL: global_extload_v2bf16_to_v2f32:
5727 ; GFX8:       ; %bb.0:
5728 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5729 ; GFX8-NEXT:    flat_load_dword v1, v[0:1]
5730 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5731 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5732 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5733 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5735 ; GFX9-LABEL: global_extload_v2bf16_to_v2f32:
5736 ; GFX9:       ; %bb.0:
5737 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5738 ; GFX9-NEXT:    global_load_dword v1, v[0:1], off
5739 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5740 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5741 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5742 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5744 ; GFX10-LABEL: global_extload_v2bf16_to_v2f32:
5745 ; GFX10:       ; %bb.0:
5746 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5747 ; GFX10-NEXT:    global_load_dword v1, v[0:1], off
5748 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5749 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5750 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5751 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5753 ; GFX11-LABEL: global_extload_v2bf16_to_v2f32:
5754 ; GFX11:       ; %bb.0:
5755 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5756 ; GFX11-NEXT:    global_load_b32 v1, v[0:1], off
5757 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5758 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5759 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5760 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5761   %load = load <2 x bfloat>, ptr addrspace(1) %ptr
5762   %fpext = fpext <2 x bfloat> %load to <2 x float>
5763   ret <2 x float> %fpext
5766 define <3 x float> @global_extload_v3bf16_to_v3f32(ptr addrspace(1) %ptr) {
5767 ; GCN-LABEL: global_extload_v3bf16_to_v3f32:
5768 ; GCN:       ; %bb.0:
5769 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5770 ; GCN-NEXT:    s_mov_b32 s6, 0
5771 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
5772 ; GCN-NEXT:    s_mov_b32 s4, s6
5773 ; GCN-NEXT:    s_mov_b32 s5, s6
5774 ; GCN-NEXT:    buffer_load_dwordx2 v[1:2], v[0:1], s[4:7], 0 addr64
5775 ; GCN-NEXT:    s_waitcnt vmcnt(0)
5776 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5777 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5778 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5779 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5781 ; GFX7-LABEL: global_extload_v3bf16_to_v3f32:
5782 ; GFX7:       ; %bb.0:
5783 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5784 ; GFX7-NEXT:    s_mov_b32 s6, 0
5785 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
5786 ; GFX7-NEXT:    s_mov_b32 s4, s6
5787 ; GFX7-NEXT:    s_mov_b32 s5, s6
5788 ; GFX7-NEXT:    buffer_load_dwordx2 v[1:2], v[0:1], s[4:7], 0 addr64
5789 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5790 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5791 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5792 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5793 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5795 ; GFX8-LABEL: global_extload_v3bf16_to_v3f32:
5796 ; GFX8:       ; %bb.0:
5797 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5798 ; GFX8-NEXT:    flat_load_dwordx2 v[1:2], v[0:1]
5799 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5800 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5801 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5802 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5803 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5805 ; GFX9-LABEL: global_extload_v3bf16_to_v3f32:
5806 ; GFX9:       ; %bb.0:
5807 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5808 ; GFX9-NEXT:    global_load_dwordx2 v[1:2], v[0:1], off
5809 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5810 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5811 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5812 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5813 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5815 ; GFX10-LABEL: global_extload_v3bf16_to_v3f32:
5816 ; GFX10:       ; %bb.0:
5817 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5818 ; GFX10-NEXT:    global_load_dwordx2 v[1:2], v[0:1], off
5819 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5820 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5821 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5822 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5823 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5825 ; GFX11-LABEL: global_extload_v3bf16_to_v3f32:
5826 ; GFX11:       ; %bb.0:
5827 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5828 ; GFX11-NEXT:    global_load_b64 v[1:2], v[0:1], off
5829 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5830 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
5831 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
5832 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
5833 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5834   %load = load <3 x bfloat>, ptr addrspace(1) %ptr
5835   %fpext = fpext <3 x bfloat> %load to <3 x float>
5836   ret <3 x float> %fpext
5839 define <4 x float> @global_extload_v4bf16_to_v4f32(ptr addrspace(1) %ptr) {
5840 ; GCN-LABEL: global_extload_v4bf16_to_v4f32:
5841 ; GCN:       ; %bb.0:
5842 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5843 ; GCN-NEXT:    s_mov_b32 s6, 0
5844 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
5845 ; GCN-NEXT:    s_mov_b32 s4, s6
5846 ; GCN-NEXT:    s_mov_b32 s5, s6
5847 ; GCN-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
5848 ; GCN-NEXT:    s_waitcnt vmcnt(0)
5849 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5850 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5851 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5852 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5853 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5855 ; GFX7-LABEL: global_extload_v4bf16_to_v4f32:
5856 ; GFX7:       ; %bb.0:
5857 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5858 ; GFX7-NEXT:    s_mov_b32 s6, 0
5859 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
5860 ; GFX7-NEXT:    s_mov_b32 s4, s6
5861 ; GFX7-NEXT:    s_mov_b32 s5, s6
5862 ; GFX7-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
5863 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5864 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5865 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5866 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5867 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5868 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5870 ; GFX8-LABEL: global_extload_v4bf16_to_v4f32:
5871 ; GFX8:       ; %bb.0:
5872 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5873 ; GFX8-NEXT:    flat_load_dwordx2 v[2:3], v[0:1]
5874 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5875 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5876 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5877 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5878 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5879 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5881 ; GFX9-LABEL: global_extload_v4bf16_to_v4f32:
5882 ; GFX9:       ; %bb.0:
5883 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5884 ; GFX9-NEXT:    global_load_dwordx2 v[2:3], v[0:1], off
5885 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5886 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5887 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5888 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5889 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5890 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5892 ; GFX10-LABEL: global_extload_v4bf16_to_v4f32:
5893 ; GFX10:       ; %bb.0:
5894 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5895 ; GFX10-NEXT:    global_load_dwordx2 v[2:3], v[0:1], off
5896 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5897 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5898 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5899 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5900 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5901 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5903 ; GFX11-LABEL: global_extload_v4bf16_to_v4f32:
5904 ; GFX11:       ; %bb.0:
5905 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5906 ; GFX11-NEXT:    global_load_b64 v[2:3], v[0:1], off
5907 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5908 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5909 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5910 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5911 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5912 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5913   %load = load <4 x bfloat>, ptr addrspace(1) %ptr
5914   %fpext = fpext <4 x bfloat> %load to <4 x float>
5915   ret <4 x float> %fpext
5918 define <5 x float> @global_extload_v5bf16_to_v5f32(ptr addrspace(1) %ptr) {
5919 ; GCN-LABEL: global_extload_v5bf16_to_v5f32:
5920 ; GCN:       ; %bb.0:
5921 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5922 ; GCN-NEXT:    s_mov_b32 s6, 0
5923 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
5924 ; GCN-NEXT:    s_mov_b32 s4, s6
5925 ; GCN-NEXT:    s_mov_b32 s5, s6
5926 ; GCN-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:8
5927 ; GCN-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
5928 ; GCN-NEXT:    s_waitcnt vmcnt(1)
5929 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5930 ; GCN-NEXT:    s_waitcnt vmcnt(0)
5931 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5932 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5933 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5934 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5935 ; GCN-NEXT:    s_setpc_b64 s[30:31]
5937 ; GFX7-LABEL: global_extload_v5bf16_to_v5f32:
5938 ; GFX7:       ; %bb.0:
5939 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5940 ; GFX7-NEXT:    s_mov_b32 s6, 0
5941 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
5942 ; GFX7-NEXT:    s_mov_b32 s4, s6
5943 ; GFX7-NEXT:    s_mov_b32 s5, s6
5944 ; GFX7-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:8
5945 ; GFX7-NEXT:    buffer_load_dwordx2 v[2:3], v[0:1], s[4:7], 0 addr64
5946 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
5947 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5948 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5949 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5950 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5951 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5952 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5953 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5955 ; GFX8-LABEL: global_extload_v5bf16_to_v5f32:
5956 ; GFX8:       ; %bb.0:
5957 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5958 ; GFX8-NEXT:    flat_load_dwordx4 v[2:5], v[0:1]
5959 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5960 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5961 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5962 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5963 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5964 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5965 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5967 ; GFX9-LABEL: global_extload_v5bf16_to_v5f32:
5968 ; GFX9:       ; %bb.0:
5969 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5970 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
5971 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
5972 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5973 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5974 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5975 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5976 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5977 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5979 ; GFX10-LABEL: global_extload_v5bf16_to_v5f32:
5980 ; GFX10:       ; %bb.0:
5981 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5982 ; GFX10-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
5983 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5984 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5985 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5986 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5987 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
5988 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5989 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5991 ; GFX11-LABEL: global_extload_v5bf16_to_v5f32:
5992 ; GFX11:       ; %bb.0:
5993 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5994 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off
5995 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5996 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
5997 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
5998 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
5999 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
6000 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
6001 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6002   %load = load <5 x bfloat>, ptr addrspace(1) %ptr
6003   %fpext = fpext <5 x bfloat> %load to <5 x float>
6004   ret <5 x float> %fpext
6007 define <6 x float> @global_extload_v6bf16_to_v6f32(ptr addrspace(1) %ptr) {
6008 ; GCN-LABEL: global_extload_v6bf16_to_v6f32:
6009 ; GCN:       ; %bb.0:
6010 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6011 ; GCN-NEXT:    s_mov_b32 s6, 0
6012 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6013 ; GCN-NEXT:    s_mov_b32 s4, s6
6014 ; GCN-NEXT:    s_mov_b32 s5, s6
6015 ; GCN-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64
6016 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6017 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6018 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6019 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6020 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6021 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6022 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6023 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6025 ; GFX7-LABEL: global_extload_v6bf16_to_v6f32:
6026 ; GFX7:       ; %bb.0:
6027 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6028 ; GFX7-NEXT:    s_mov_b32 s6, 0
6029 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6030 ; GFX7-NEXT:    s_mov_b32 s4, s6
6031 ; GFX7-NEXT:    s_mov_b32 s5, s6
6032 ; GFX7-NEXT:    buffer_load_dwordx3 v[3:5], v[0:1], s[4:7], 0 addr64
6033 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6034 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6035 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6036 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6037 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6038 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6039 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6040 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6042 ; GFX8-LABEL: global_extload_v6bf16_to_v6f32:
6043 ; GFX8:       ; %bb.0:
6044 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6045 ; GFX8-NEXT:    flat_load_dwordx3 v[3:5], v[0:1]
6046 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6047 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6048 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6049 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6050 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6051 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6052 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6053 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6055 ; GFX9-LABEL: global_extload_v6bf16_to_v6f32:
6056 ; GFX9:       ; %bb.0:
6057 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6058 ; GFX9-NEXT:    global_load_dwordx3 v[3:5], v[0:1], off
6059 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6060 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6061 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6062 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6063 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6064 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6065 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6066 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6068 ; GFX10-LABEL: global_extload_v6bf16_to_v6f32:
6069 ; GFX10:       ; %bb.0:
6070 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6071 ; GFX10-NEXT:    global_load_dwordx3 v[3:5], v[0:1], off
6072 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6073 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6074 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6075 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6076 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6077 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6078 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6079 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6081 ; GFX11-LABEL: global_extload_v6bf16_to_v6f32:
6082 ; GFX11:       ; %bb.0:
6083 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6084 ; GFX11-NEXT:    global_load_b96 v[3:5], v[0:1], off
6085 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6086 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v3
6087 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v3
6088 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
6089 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
6090 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
6091 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
6092 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6093   %load = load <6 x bfloat>, ptr addrspace(1) %ptr
6094   %fpext = fpext <6 x bfloat> %load to <6 x float>
6095   ret <6 x float> %fpext
6098 define <8 x float> @global_extload_v8bf16_to_v8f32(ptr addrspace(1) %ptr) {
6099 ; GCN-LABEL: global_extload_v8bf16_to_v8f32:
6100 ; GCN:       ; %bb.0:
6101 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6102 ; GCN-NEXT:    s_mov_b32 s6, 0
6103 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6104 ; GCN-NEXT:    s_mov_b32 s4, s6
6105 ; GCN-NEXT:    s_mov_b32 s5, s6
6106 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6107 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6108 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6109 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6110 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6111 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6112 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6113 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6114 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6115 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6116 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6118 ; GFX7-LABEL: global_extload_v8bf16_to_v8f32:
6119 ; GFX7:       ; %bb.0:
6120 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6121 ; GFX7-NEXT:    s_mov_b32 s6, 0
6122 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6123 ; GFX7-NEXT:    s_mov_b32 s4, s6
6124 ; GFX7-NEXT:    s_mov_b32 s5, s6
6125 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6126 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6127 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6128 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6129 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6130 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6131 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6132 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6133 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6134 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6135 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6137 ; GFX8-LABEL: global_extload_v8bf16_to_v8f32:
6138 ; GFX8:       ; %bb.0:
6139 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6140 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
6141 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6142 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6143 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6144 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6145 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6146 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6147 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6148 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6149 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6150 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6152 ; GFX9-LABEL: global_extload_v8bf16_to_v8f32:
6153 ; GFX9:       ; %bb.0:
6154 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6155 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6156 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6157 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6158 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6159 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6160 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6161 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6162 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6163 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6164 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6165 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6167 ; GFX10-LABEL: global_extload_v8bf16_to_v8f32:
6168 ; GFX10:       ; %bb.0:
6169 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6170 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6171 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6172 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6173 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6174 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6175 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6176 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6177 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6178 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6179 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6180 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6182 ; GFX11-LABEL: global_extload_v8bf16_to_v8f32:
6183 ; GFX11:       ; %bb.0:
6184 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6185 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
6186 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6187 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6188 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6189 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6190 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6191 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6192 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6193 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6194 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6195 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6196   %load = load <8 x bfloat>, ptr addrspace(1) %ptr
6197   %fpext = fpext <8 x bfloat> %load to <8 x float>
6198   ret <8 x float> %fpext
6201 define <16 x float> @global_extload_v16bf16_to_v16f32(ptr addrspace(1) %ptr) {
6202 ; GCN-LABEL: global_extload_v16bf16_to_v16f32:
6203 ; GCN:       ; %bb.0:
6204 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6205 ; GCN-NEXT:    s_mov_b32 s6, 0
6206 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6207 ; GCN-NEXT:    s_mov_b32 s4, s6
6208 ; GCN-NEXT:    s_mov_b32 s5, s6
6209 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6210 ; GCN-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
6211 ; GCN-NEXT:    s_waitcnt vmcnt(1)
6212 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6213 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6214 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6215 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6216 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6217 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6218 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6219 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6220 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6221 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6222 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6223 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6224 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6225 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6226 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6227 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6228 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6229 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6231 ; GFX7-LABEL: global_extload_v16bf16_to_v16f32:
6232 ; GFX7:       ; %bb.0:
6233 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6234 ; GFX7-NEXT:    s_mov_b32 s6, 0
6235 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6236 ; GFX7-NEXT:    s_mov_b32 s4, s6
6237 ; GFX7-NEXT:    s_mov_b32 s5, s6
6238 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6239 ; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
6240 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
6241 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6242 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6243 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6244 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6245 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6246 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6247 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6248 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6249 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6250 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6251 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6252 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6253 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6254 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6255 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6256 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6257 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6258 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6260 ; GFX8-LABEL: global_extload_v16bf16_to_v16f32:
6261 ; GFX8:       ; %bb.0:
6262 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6263 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
6264 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v0
6265 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
6266 ; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[0:1]
6267 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
6268 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6269 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6270 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6271 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6272 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6273 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6274 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6275 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6276 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6277 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6278 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6279 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6280 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6281 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6282 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6283 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6284 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6285 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6287 ; GFX9-LABEL: global_extload_v16bf16_to_v16f32:
6288 ; GFX9:       ; %bb.0:
6289 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6290 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6291 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
6292 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
6293 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6294 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6295 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6296 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6297 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6298 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6299 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6300 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6301 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6302 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6303 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6304 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6305 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6306 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6307 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6308 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6309 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6310 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6312 ; GFX10-LABEL: global_extload_v16bf16_to_v16f32:
6313 ; GFX10:       ; %bb.0:
6314 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6315 ; GFX10-NEXT:    s_clause 0x1
6316 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6317 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
6318 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
6319 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6320 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6321 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6322 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6323 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6324 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6325 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6326 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6327 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6328 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6329 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6330 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6331 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6332 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6333 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6334 ; GFX10-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6335 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6336 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6338 ; GFX11-LABEL: global_extload_v16bf16_to_v16f32:
6339 ; GFX11:       ; %bb.0:
6340 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6341 ; GFX11-NEXT:    s_clause 0x1
6342 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
6343 ; GFX11-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:16
6344 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
6345 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6346 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6347 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6348 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6349 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6350 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6351 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6352 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6353 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6354 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6355 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6356 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6357 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6358 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6359 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6360 ; GFX11-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6361 ; GFX11-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6362 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6363   %load = load <16 x bfloat>, ptr addrspace(1) %ptr
6364   %fpext = fpext <16 x bfloat> %load to <16 x float>
6365   ret <16 x float> %fpext
6368 define <32 x float> @global_extload_v32bf16_to_v32f32(ptr addrspace(1) %ptr) {
6369 ; GCN-LABEL: global_extload_v32bf16_to_v32f32:
6370 ; GCN:       ; %bb.0:
6371 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6372 ; GCN-NEXT:    s_mov_b32 s6, 0
6373 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6374 ; GCN-NEXT:    s_mov_b32 s4, s6
6375 ; GCN-NEXT:    s_mov_b32 s5, s6
6376 ; GCN-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6377 ; GCN-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
6378 ; GCN-NEXT:    buffer_load_dwordx4 v[20:23], v[0:1], s[4:7], 0 addr64 offset:32
6379 ; GCN-NEXT:    buffer_load_dwordx4 v[28:31], v[0:1], s[4:7], 0 addr64 offset:48
6380 ; GCN-NEXT:    s_waitcnt vmcnt(3)
6381 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6382 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6383 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6384 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6385 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6386 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6387 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6388 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6389 ; GCN-NEXT:    s_waitcnt vmcnt(2)
6390 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6391 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6392 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6393 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6394 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6395 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6396 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6397 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6398 ; GCN-NEXT:    s_waitcnt vmcnt(1)
6399 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6400 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6401 ; GCN-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6402 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6403 ; GCN-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6404 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6405 ; GCN-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6406 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6407 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6408 ; GCN-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6409 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6410 ; GCN-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6411 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6412 ; GCN-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6413 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6414 ; GCN-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6415 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6416 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6418 ; GFX7-LABEL: global_extload_v32bf16_to_v32f32:
6419 ; GFX7:       ; %bb.0:
6420 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6421 ; GFX7-NEXT:    s_mov_b32 s6, 0
6422 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6423 ; GFX7-NEXT:    s_mov_b32 s4, s6
6424 ; GFX7-NEXT:    s_mov_b32 s5, s6
6425 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64
6426 ; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:16
6427 ; GFX7-NEXT:    buffer_load_dwordx4 v[20:23], v[0:1], s[4:7], 0 addr64 offset:32
6428 ; GFX7-NEXT:    buffer_load_dwordx4 v[28:31], v[0:1], s[4:7], 0 addr64 offset:48
6429 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
6430 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6431 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6432 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6433 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6434 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6435 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6436 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6437 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6438 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
6439 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6440 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6441 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6442 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6443 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6444 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6445 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6446 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6447 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
6448 ; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6449 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6450 ; GFX7-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6451 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6452 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6453 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6454 ; GFX7-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6455 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6456 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6457 ; GFX7-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6458 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6459 ; GFX7-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6460 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6461 ; GFX7-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6462 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6463 ; GFX7-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6464 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6465 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6467 ; GFX8-LABEL: global_extload_v32bf16_to_v32f32:
6468 ; GFX8:       ; %bb.0:
6469 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6470 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 16, v0
6471 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
6472 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
6473 ; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[2:3]
6474 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 32, v0
6475 ; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
6476 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 48, v0
6477 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
6478 ; GFX8-NEXT:    flat_load_dwordx4 v[20:23], v[2:3]
6479 ; GFX8-NEXT:    flat_load_dwordx4 v[28:31], v[0:1]
6480 ; GFX8-NEXT:    s_waitcnt vmcnt(3)
6481 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6482 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6483 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6484 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6485 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6486 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6487 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6488 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6489 ; GFX8-NEXT:    s_waitcnt vmcnt(2)
6490 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6491 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6492 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6493 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6494 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6495 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6496 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6497 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6498 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
6499 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6500 ; GFX8-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6501 ; GFX8-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6502 ; GFX8-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6503 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6504 ; GFX8-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6505 ; GFX8-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6506 ; GFX8-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6507 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6508 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6509 ; GFX8-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6510 ; GFX8-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6511 ; GFX8-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6512 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6513 ; GFX8-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6514 ; GFX8-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6515 ; GFX8-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6516 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6518 ; GFX9-LABEL: global_extload_v32bf16_to_v32f32:
6519 ; GFX9:       ; %bb.0:
6520 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6521 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6522 ; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
6523 ; GFX9-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:32
6524 ; GFX9-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:48
6525 ; GFX9-NEXT:    s_waitcnt vmcnt(3)
6526 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6527 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6528 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6529 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6530 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6531 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6532 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6533 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6534 ; GFX9-NEXT:    s_waitcnt vmcnt(2)
6535 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6536 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6537 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6538 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6539 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6540 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6541 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6542 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6543 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
6544 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6545 ; GFX9-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6546 ; GFX9-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6547 ; GFX9-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6548 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6549 ; GFX9-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6550 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6551 ; GFX9-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6552 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6553 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6554 ; GFX9-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6555 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6556 ; GFX9-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6557 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6558 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6559 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6560 ; GFX9-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6561 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6563 ; GFX10-LABEL: global_extload_v32bf16_to_v32f32:
6564 ; GFX10:       ; %bb.0:
6565 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6566 ; GFX10-NEXT:    s_clause 0x3
6567 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
6568 ; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:16
6569 ; GFX10-NEXT:    global_load_dwordx4 v[20:23], v[0:1], off offset:32
6570 ; GFX10-NEXT:    global_load_dwordx4 v[28:31], v[0:1], off offset:48
6571 ; GFX10-NEXT:    s_waitcnt vmcnt(3)
6572 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6573 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6574 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6575 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6576 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6577 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6578 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6579 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6580 ; GFX10-NEXT:    s_waitcnt vmcnt(2)
6581 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6582 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6583 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6584 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6585 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6586 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6587 ; GFX10-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6588 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6589 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
6590 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6591 ; GFX10-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6592 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6593 ; GFX10-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6594 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6595 ; GFX10-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6596 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6597 ; GFX10-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6598 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6599 ; GFX10-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6600 ; GFX10-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6601 ; GFX10-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6602 ; GFX10-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6603 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6604 ; GFX10-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6605 ; GFX10-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6606 ; GFX10-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6607 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6609 ; GFX11-LABEL: global_extload_v32bf16_to_v32f32:
6610 ; GFX11:       ; %bb.0:
6611 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6612 ; GFX11-NEXT:    s_clause 0x3
6613 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
6614 ; GFX11-NEXT:    global_load_b128 v[12:15], v[0:1], off offset:16
6615 ; GFX11-NEXT:    global_load_b128 v[20:23], v[0:1], off offset:32
6616 ; GFX11-NEXT:    global_load_b128 v[28:31], v[0:1], off offset:48
6617 ; GFX11-NEXT:    s_waitcnt vmcnt(3)
6618 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
6619 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
6620 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
6621 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
6622 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
6623 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
6624 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
6625 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
6626 ; GFX11-NEXT:    s_waitcnt vmcnt(2)
6627 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v12
6628 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v12
6629 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v13
6630 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v13
6631 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
6632 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v14
6633 ; GFX11-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
6634 ; GFX11-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
6635 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
6636 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v20
6637 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xffff0000, v20
6638 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v21
6639 ; GFX11-NEXT:    v_and_b32_e32 v19, 0xffff0000, v21
6640 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v22
6641 ; GFX11-NEXT:    v_and_b32_e32 v21, 0xffff0000, v22
6642 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
6643 ; GFX11-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
6644 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6645 ; GFX11-NEXT:    v_lshlrev_b32_e32 v24, 16, v28
6646 ; GFX11-NEXT:    v_and_b32_e32 v25, 0xffff0000, v28
6647 ; GFX11-NEXT:    v_lshlrev_b32_e32 v26, 16, v29
6648 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v29
6649 ; GFX11-NEXT:    v_lshlrev_b32_e32 v28, 16, v30
6650 ; GFX11-NEXT:    v_and_b32_e32 v29, 0xffff0000, v30
6651 ; GFX11-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
6652 ; GFX11-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
6653 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6654   %load = load <32 x bfloat>, ptr addrspace(1) %ptr
6655   %fpext = fpext <32 x bfloat> %load to <32 x float>
6656   ret <32 x float> %fpext
6659 define <2 x double> @global_extload_v2bf16_to_v2f64(ptr addrspace(1) %ptr) {
6660 ; GCN-LABEL: global_extload_v2bf16_to_v2f64:
6661 ; GCN:       ; %bb.0:
6662 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6663 ; GCN-NEXT:    s_mov_b32 s6, 0
6664 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6665 ; GCN-NEXT:    s_mov_b32 s4, s6
6666 ; GCN-NEXT:    s_mov_b32 s5, s6
6667 ; GCN-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
6668 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6669 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
6670 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
6671 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1
6672 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6673 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6675 ; GFX7-LABEL: global_extload_v2bf16_to_v2f64:
6676 ; GFX7:       ; %bb.0:
6677 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6678 ; GFX7-NEXT:    s_mov_b32 s6, 0
6679 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6680 ; GFX7-NEXT:    s_mov_b32 s4, s6
6681 ; GFX7-NEXT:    s_mov_b32 s5, s6
6682 ; GFX7-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64
6683 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6684 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
6685 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
6686 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6687 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6688 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6690 ; GFX8-LABEL: global_extload_v2bf16_to_v2f64:
6691 ; GFX8:       ; %bb.0:
6692 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6693 ; GFX8-NEXT:    flat_load_dword v2, v[0:1]
6694 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6695 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
6696 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
6697 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6698 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6699 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6701 ; GFX9-LABEL: global_extload_v2bf16_to_v2f64:
6702 ; GFX9:       ; %bb.0:
6703 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6704 ; GFX9-NEXT:    global_load_dword v2, v[0:1], off
6705 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6706 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
6707 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
6708 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6709 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6710 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6712 ; GFX10-LABEL: global_extload_v2bf16_to_v2f64:
6713 ; GFX10:       ; %bb.0:
6714 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6715 ; GFX10-NEXT:    global_load_dword v0, v[0:1], off
6716 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6717 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
6718 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
6719 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1
6720 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6721 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6723 ; GFX11-LABEL: global_extload_v2bf16_to_v2f64:
6724 ; GFX11:       ; %bb.0:
6725 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6726 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
6727 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6728 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
6729 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
6730 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6731 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v1
6732 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
6733 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6734   %load = load <2 x bfloat>, ptr addrspace(1) %ptr
6735   %fpext = fpext <2 x bfloat> %load to <2 x double>
6736   ret <2 x double> %fpext
6739 define <3 x double> @global_extload_v3bf16_to_v3f64(ptr addrspace(1) %ptr) {
6740 ; GCN-LABEL: global_extload_v3bf16_to_v3f64:
6741 ; GCN:       ; %bb.0:
6742 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6743 ; GCN-NEXT:    s_mov_b32 s6, 0
6744 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6745 ; GCN-NEXT:    s_mov_b32 s4, s6
6746 ; GCN-NEXT:    s_mov_b32 s5, s6
6747 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
6748 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6749 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6750 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6751 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6752 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6753 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6754 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6755 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6757 ; GFX7-LABEL: global_extload_v3bf16_to_v3f64:
6758 ; GFX7:       ; %bb.0:
6759 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6760 ; GFX7-NEXT:    s_mov_b32 s6, 0
6761 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6762 ; GFX7-NEXT:    s_mov_b32 s4, s6
6763 ; GFX7-NEXT:    s_mov_b32 s5, s6
6764 ; GFX7-NEXT:    buffer_load_dwordx2 v[1:2], v[0:1], s[4:7], 0 addr64
6765 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6766 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
6767 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
6768 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
6769 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6770 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6771 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6772 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6774 ; GFX8-LABEL: global_extload_v3bf16_to_v3f64:
6775 ; GFX8:       ; %bb.0:
6776 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6777 ; GFX8-NEXT:    flat_load_dwordx2 v[1:2], v[0:1]
6778 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6779 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
6780 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
6781 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
6782 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6783 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6784 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6785 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6787 ; GFX9-LABEL: global_extload_v3bf16_to_v3f64:
6788 ; GFX9:       ; %bb.0:
6789 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6790 ; GFX9-NEXT:    global_load_dwordx2 v[1:2], v[0:1], off
6791 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6792 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
6793 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
6794 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
6795 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6796 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6797 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6798 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6800 ; GFX10-LABEL: global_extload_v3bf16_to_v3f64:
6801 ; GFX10:       ; %bb.0:
6802 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6803 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6804 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6805 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6806 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6807 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6808 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6809 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6810 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6811 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6813 ; GFX11-LABEL: global_extload_v3bf16_to_v3f64:
6814 ; GFX11:       ; %bb.0:
6815 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6816 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
6817 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6818 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6819 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6820 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6821 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
6822 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6823 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6824 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
6825 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6826 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6827   %load = load <3 x bfloat>, ptr addrspace(1) %ptr
6828   %fpext = fpext <3 x bfloat> %load to <3 x double>
6829   ret <3 x double> %fpext
6832 define <4 x double> @global_extload_v4bf16_to_v4f64(ptr addrspace(1) %ptr) {
6833 ; GCN-LABEL: global_extload_v4bf16_to_v4f64:
6834 ; GCN:       ; %bb.0:
6835 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6836 ; GCN-NEXT:    s_mov_b32 s6, 0
6837 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6838 ; GCN-NEXT:    s_mov_b32 s4, s6
6839 ; GCN-NEXT:    s_mov_b32 s5, s6
6840 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
6841 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6842 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6843 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6844 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6845 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6846 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6847 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6848 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6849 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6850 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6852 ; GFX7-LABEL: global_extload_v4bf16_to_v4f64:
6853 ; GFX7:       ; %bb.0:
6854 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6855 ; GFX7-NEXT:    s_mov_b32 s6, 0
6856 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6857 ; GFX7-NEXT:    s_mov_b32 s4, s6
6858 ; GFX7-NEXT:    s_mov_b32 s5, s6
6859 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
6860 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6861 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6862 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6863 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6864 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6865 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6866 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6867 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6868 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6869 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6871 ; GFX8-LABEL: global_extload_v4bf16_to_v4f64:
6872 ; GFX8:       ; %bb.0:
6873 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6874 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
6875 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6876 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6877 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6878 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6879 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6880 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6881 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6882 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6883 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6884 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6886 ; GFX9-LABEL: global_extload_v4bf16_to_v4f64:
6887 ; GFX9:       ; %bb.0:
6888 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6889 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
6890 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
6891 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
6892 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
6893 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
6894 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6895 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v2
6896 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6897 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6898 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6899 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
6901 ; GFX10-LABEL: global_extload_v4bf16_to_v4f64:
6902 ; GFX10:       ; %bb.0:
6903 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6904 ; GFX10-NEXT:    global_load_dwordx2 v[1:2], v[0:1], off
6905 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6906 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
6907 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
6908 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
6909 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v2
6910 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6911 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6912 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6913 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6914 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6916 ; GFX11-LABEL: global_extload_v4bf16_to_v4f64:
6917 ; GFX11:       ; %bb.0:
6918 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6919 ; GFX11-NEXT:    global_load_b64 v[1:2], v[0:1], off
6920 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6921 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
6922 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
6923 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
6924 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v2
6925 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
6926 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6927 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v3
6928 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
6929 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
6930 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6931 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6932   %load = load <4 x bfloat>, ptr addrspace(1) %ptr
6933   %fpext = fpext <4 x bfloat> %load to <4 x double>
6934   ret <4 x double> %fpext
6937 define <5 x double> @global_extload_v5bf16_to_v5f64(ptr addrspace(1) %ptr) {
6938 ; GCN-LABEL: global_extload_v5bf16_to_v5f64:
6939 ; GCN:       ; %bb.0:
6940 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6941 ; GCN-NEXT:    s_mov_b32 s6, 0
6942 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
6943 ; GCN-NEXT:    s_mov_b32 s4, s6
6944 ; GCN-NEXT:    s_mov_b32 s5, s6
6945 ; GCN-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:8
6946 ; GCN-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
6947 ; GCN-NEXT:    s_waitcnt vmcnt(1)
6948 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
6949 ; GCN-NEXT:    s_waitcnt vmcnt(0)
6950 ; GCN-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
6951 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
6952 ; GCN-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
6953 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6954 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[8:9], v2
6955 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
6956 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
6957 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
6958 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6959 ; GCN-NEXT:    s_setpc_b64 s[30:31]
6961 ; GFX7-LABEL: global_extload_v5bf16_to_v5f64:
6962 ; GFX7:       ; %bb.0:
6963 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6964 ; GFX7-NEXT:    s_mov_b32 s6, 0
6965 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
6966 ; GFX7-NEXT:    s_mov_b32 s4, s6
6967 ; GFX7-NEXT:    s_mov_b32 s5, s6
6968 ; GFX7-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:8
6969 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
6970 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
6971 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
6972 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6973 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
6974 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
6975 ; GFX7-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
6976 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6977 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[8:9], v2
6978 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
6979 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
6980 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
6981 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6982 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6984 ; GFX8-LABEL: global_extload_v5bf16_to_v5f64:
6985 ; GFX8:       ; %bb.0:
6986 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6987 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
6988 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6989 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
6990 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
6991 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
6992 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
6993 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
6994 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
6995 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
6996 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
6997 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
6998 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
6999 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7001 ; GFX9-LABEL: global_extload_v5bf16_to_v5f64:
7002 ; GFX9:       ; %bb.0:
7003 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7004 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
7005 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7006 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
7007 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
7008 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
7009 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
7010 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7011 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
7012 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
7013 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7014 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7015 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7016 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7018 ; GFX10-LABEL: global_extload_v5bf16_to_v5f64:
7019 ; GFX10:       ; %bb.0:
7020 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7021 ; GFX10-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
7022 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7023 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7024 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7025 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v3
7026 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
7027 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v4
7028 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7029 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7030 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7031 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7032 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7033 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7035 ; GFX11-LABEL: global_extload_v5bf16_to_v5f64:
7036 ; GFX11:       ; %bb.0:
7037 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7038 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off
7039 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7040 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7041 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7042 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v3
7043 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
7044 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v4
7045 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7046 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7047 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7048 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7049 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7050 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7051   %load = load <5 x bfloat>, ptr addrspace(1) %ptr
7052   %fpext = fpext <5 x bfloat> %load to <5 x double>
7053   ret <5 x double> %fpext
7056 define <6 x double> @global_extload_v6bf16_to_v6f64(ptr addrspace(1) %ptr) {
7057 ; GCN-LABEL: global_extload_v6bf16_to_v6f64:
7058 ; GCN:       ; %bb.0:
7059 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7060 ; GCN-NEXT:    s_mov_b32 s6, 0
7061 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
7062 ; GCN-NEXT:    s_mov_b32 s4, s6
7063 ; GCN-NEXT:    s_mov_b32 s5, s6
7064 ; GCN-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64
7065 ; GCN-NEXT:    s_waitcnt vmcnt(0)
7066 ; GCN-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
7067 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
7068 ; GCN-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
7069 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
7070 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7071 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7072 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
7073 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
7074 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7075 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7076 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7077 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7078 ; GCN-NEXT:    s_setpc_b64 s[30:31]
7080 ; GFX7-LABEL: global_extload_v6bf16_to_v6f64:
7081 ; GFX7:       ; %bb.0:
7082 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7083 ; GFX7-NEXT:    s_mov_b32 s6, 0
7084 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
7085 ; GFX7-NEXT:    s_mov_b32 s4, s6
7086 ; GFX7-NEXT:    s_mov_b32 s5, s6
7087 ; GFX7-NEXT:    buffer_load_dwordx3 v[0:2], v[0:1], s[4:7], 0 addr64
7088 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7089 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
7090 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
7091 ; GFX7-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
7092 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
7093 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7094 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7095 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
7096 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
7097 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7098 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7099 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7100 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7101 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7103 ; GFX8-LABEL: global_extload_v6bf16_to_v6f64:
7104 ; GFX8:       ; %bb.0:
7105 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7106 ; GFX8-NEXT:    flat_load_dwordx3 v[0:2], v[0:1]
7107 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7108 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
7109 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
7110 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
7111 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
7112 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7113 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7114 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
7115 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
7116 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7117 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7118 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7119 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7120 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7122 ; GFX9-LABEL: global_extload_v6bf16_to_v6f64:
7123 ; GFX9:       ; %bb.0:
7124 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7125 ; GFX9-NEXT:    global_load_dwordx3 v[0:2], v[0:1], off
7126 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7127 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
7128 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v0
7129 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
7130 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
7131 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7132 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7133 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v3
7134 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v4
7135 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v5
7136 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7137 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7138 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7139 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7141 ; GFX10-LABEL: global_extload_v6bf16_to_v6f64:
7142 ; GFX10:       ; %bb.0:
7143 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7144 ; GFX10-NEXT:    global_load_dwordx3 v[4:6], v[0:1], off
7145 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7146 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
7147 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
7148 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
7149 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v5
7150 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v6
7151 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v6
7152 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7153 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7154 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
7155 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7156 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7157 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7158 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7160 ; GFX11-LABEL: global_extload_v6bf16_to_v6f64:
7161 ; GFX11:       ; %bb.0:
7162 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7163 ; GFX11-NEXT:    global_load_b96 v[4:6], v[0:1], off
7164 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7165 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
7166 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
7167 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
7168 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v5
7169 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v6
7170 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xffff0000, v6
7171 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7172 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7173 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
7174 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7175 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7176 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7177 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7178   %load = load <6 x bfloat>, ptr addrspace(1) %ptr
7179   %fpext = fpext <6 x bfloat> %load to <6 x double>
7180   ret <6 x double> %fpext
7183 define <8 x double> @global_extload_v8bf16_to_v8f64(ptr addrspace(1) %ptr) {
7184 ; GCN-LABEL: global_extload_v8bf16_to_v8f64:
7185 ; GCN:       ; %bb.0:
7186 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7187 ; GCN-NEXT:    s_mov_b32 s6, 0
7188 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
7189 ; GCN-NEXT:    s_mov_b32 s4, s6
7190 ; GCN-NEXT:    s_mov_b32 s5, s6
7191 ; GCN-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64
7192 ; GCN-NEXT:    s_waitcnt vmcnt(0)
7193 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
7194 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
7195 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v1
7196 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v1
7197 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7198 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7199 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v3
7200 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v3
7201 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
7202 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v5
7203 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
7204 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7205 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7206 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7207 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7208 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7209 ; GCN-NEXT:    s_setpc_b64 s[30:31]
7211 ; GFX7-LABEL: global_extload_v8bf16_to_v8f64:
7212 ; GFX7:       ; %bb.0:
7213 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7214 ; GFX7-NEXT:    s_mov_b32 s6, 0
7215 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
7216 ; GFX7-NEXT:    s_mov_b32 s4, s6
7217 ; GFX7-NEXT:    s_mov_b32 s5, s6
7218 ; GFX7-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64
7219 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7220 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
7221 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
7222 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v1
7223 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v1
7224 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7225 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7226 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v3
7227 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v3
7228 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
7229 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v5
7230 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
7231 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7232 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7233 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7234 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7235 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7236 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7238 ; GFX8-LABEL: global_extload_v8bf16_to_v8f64:
7239 ; GFX8:       ; %bb.0:
7240 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7241 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
7242 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7243 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
7244 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
7245 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v1
7246 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v1
7247 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7248 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7249 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v3
7250 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v3
7251 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
7252 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v5
7253 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
7254 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7255 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7256 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7257 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7258 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7259 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7261 ; GFX9-LABEL: global_extload_v8bf16_to_v8f64:
7262 ; GFX9:       ; %bb.0:
7263 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7264 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
7265 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7266 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
7267 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
7268 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v1
7269 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v1
7270 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
7271 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v2
7272 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v3
7273 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v3
7274 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v4
7275 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v5
7276 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
7277 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7278 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7279 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
7280 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7281 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7282 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7284 ; GFX10-LABEL: global_extload_v8bf16_to_v8f64:
7285 ; GFX10:       ; %bb.0:
7286 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7287 ; GFX10-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off
7288 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7289 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
7290 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v7
7291 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
7292 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v8
7293 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
7294 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v9
7295 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v10
7296 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v10
7297 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7298 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7299 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
7300 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7301 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7302 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[10:11], v11
7303 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7304 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7305 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7307 ; GFX11-LABEL: global_extload_v8bf16_to_v8f64:
7308 ; GFX11:       ; %bb.0:
7309 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7310 ; GFX11-NEXT:    global_load_b128 v[7:10], v[0:1], off
7311 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7312 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
7313 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v7
7314 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
7315 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v8
7316 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
7317 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v9
7318 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v10
7319 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v10
7320 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7321 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7322 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
7323 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7324 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7325 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[10:11], v11
7326 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7327 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7328 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7329   %load = load <8 x bfloat>, ptr addrspace(1) %ptr
7330   %fpext = fpext <8 x bfloat> %load to <8 x double>
7331   ret <8 x double> %fpext
7334 define <16 x double> @global_extload_v16bf16_to_v16f64(ptr addrspace(1) %ptr) {
7335 ; GCN-LABEL: global_extload_v16bf16_to_v16f64:
7336 ; GCN:       ; %bb.0:
7337 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7338 ; GCN-NEXT:    s_mov_b32 s6, 0
7339 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
7340 ; GCN-NEXT:    s_mov_b32 s4, s6
7341 ; GCN-NEXT:    s_mov_b32 s5, s6
7342 ; GCN-NEXT:    buffer_load_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
7343 ; GCN-NEXT:    buffer_load_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:16
7344 ; GCN-NEXT:    s_waitcnt vmcnt(1)
7345 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7346 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7347 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v3
7348 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v3
7349 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v4
7350 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v4
7351 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7352 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v5
7353 ; GCN-NEXT:    s_waitcnt vmcnt(0)
7354 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 16, v6
7355 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v6
7356 ; GCN-NEXT:    v_lshlrev_b32_e32 v20, 16, v7
7357 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v7
7358 ; GCN-NEXT:    v_lshlrev_b32_e32 v24, 16, v8
7359 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v8
7360 ; GCN-NEXT:    v_lshlrev_b32_e32 v28, 16, v9
7361 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v9
7362 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7363 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7364 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[4:5], v10
7365 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[6:7], v11
7366 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[8:9], v12
7367 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[10:11], v13
7368 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[12:13], v14
7369 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[14:15], v15
7370 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7371 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7372 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7373 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7374 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7375 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[26:27], v26
7376 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7377 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7378 ; GCN-NEXT:    s_setpc_b64 s[30:31]
7380 ; GFX7-LABEL: global_extload_v16bf16_to_v16f64:
7381 ; GFX7:       ; %bb.0:
7382 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7383 ; GFX7-NEXT:    s_mov_b32 s6, 0
7384 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
7385 ; GFX7-NEXT:    s_mov_b32 s4, s6
7386 ; GFX7-NEXT:    s_mov_b32 s5, s6
7387 ; GFX7-NEXT:    buffer_load_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
7388 ; GFX7-NEXT:    buffer_load_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:16
7389 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
7390 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7391 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7392 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v3
7393 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v3
7394 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v4
7395 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v4
7396 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7397 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v5
7398 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7399 ; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 16, v6
7400 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v6
7401 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v7
7402 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v7
7403 ; GFX7-NEXT:    v_lshlrev_b32_e32 v24, 16, v8
7404 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v8
7405 ; GFX7-NEXT:    v_lshlrev_b32_e32 v28, 16, v9
7406 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v9
7407 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7408 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7409 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v10
7410 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[6:7], v11
7411 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[8:9], v12
7412 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[10:11], v13
7413 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[12:13], v14
7414 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[14:15], v15
7415 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7416 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7417 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7418 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7419 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7420 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[26:27], v26
7421 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7422 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7423 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7425 ; GFX8-LABEL: global_extload_v16bf16_to_v16f64:
7426 ; GFX8:       ; %bb.0:
7427 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7428 ; GFX8-NEXT:    flat_load_dwordx4 v[2:5], v[0:1]
7429 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v0
7430 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
7431 ; GFX8-NEXT:    flat_load_dwordx4 v[6:9], v[0:1]
7432 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
7433 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7434 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7435 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v3
7436 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v3
7437 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v4
7438 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v4
7439 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7440 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v5
7441 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7442 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v6
7443 ; GFX8-NEXT:    v_and_b32_e32 v18, 0xffff0000, v6
7444 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v7
7445 ; GFX8-NEXT:    v_and_b32_e32 v22, 0xffff0000, v7
7446 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v8
7447 ; GFX8-NEXT:    v_and_b32_e32 v26, 0xffff0000, v8
7448 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v9
7449 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v9
7450 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7451 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7452 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[4:5], v10
7453 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v11
7454 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[8:9], v12
7455 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[10:11], v13
7456 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[12:13], v14
7457 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[14:15], v15
7458 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7459 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7460 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7461 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7462 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7463 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[26:27], v26
7464 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7465 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7466 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7468 ; GFX9-LABEL: global_extload_v16bf16_to_v16f64:
7469 ; GFX9:       ; %bb.0:
7470 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7471 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
7472 ; GFX9-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
7473 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
7474 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7475 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7476 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v3
7477 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v3
7478 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v4
7479 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v4
7480 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7481 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v5
7482 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
7483 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v6
7484 ; GFX9-NEXT:    v_and_b32_e32 v18, 0xffff0000, v6
7485 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v7
7486 ; GFX9-NEXT:    v_and_b32_e32 v22, 0xffff0000, v7
7487 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v8
7488 ; GFX9-NEXT:    v_and_b32_e32 v26, 0xffff0000, v8
7489 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v9
7490 ; GFX9-NEXT:    v_and_b32_e32 v30, 0xffff0000, v9
7491 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7492 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7493 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[4:5], v10
7494 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v11
7495 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v12
7496 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[10:11], v13
7497 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[12:13], v14
7498 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[14:15], v15
7499 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7500 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7501 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7502 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7503 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7504 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[26:27], v26
7505 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7506 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7507 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
7509 ; GFX10-LABEL: global_extload_v16bf16_to_v16f64:
7510 ; GFX10:       ; %bb.0:
7511 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7512 ; GFX10-NEXT:    s_clause 0x1
7513 ; GFX10-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
7514 ; GFX10-NEXT:    global_load_dwordx4 v[9:12], v[0:1], off offset:16
7515 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
7516 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
7517 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
7518 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v3
7519 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v3
7520 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v4
7521 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v4
7522 ; GFX10-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7523 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v5
7524 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7525 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v9
7526 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v9
7527 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v10
7528 ; GFX10-NEXT:    v_and_b32_e32 v22, 0xffff0000, v10
7529 ; GFX10-NEXT:    v_lshlrev_b32_e32 v24, 16, v11
7530 ; GFX10-NEXT:    v_and_b32_e32 v26, 0xffff0000, v11
7531 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v12
7532 ; GFX10-NEXT:    v_and_b32_e32 v30, 0xffff0000, v12
7533 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7534 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7535 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[4:5], v6
7536 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[6:7], v7
7537 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7538 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[10:11], v13
7539 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[12:13], v14
7540 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[14:15], v15
7541 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7542 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7543 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7544 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7545 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7546 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[26:27], v26
7547 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7548 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7549 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7551 ; GFX11-LABEL: global_extload_v16bf16_to_v16f64:
7552 ; GFX11:       ; %bb.0:
7553 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7554 ; GFX11-NEXT:    s_clause 0x1
7555 ; GFX11-NEXT:    global_load_b128 v[7:10], v[0:1], off
7556 ; GFX11-NEXT:    global_load_b128 v[23:26], v[0:1], off offset:16
7557 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
7558 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
7559 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v7
7560 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
7561 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v8
7562 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
7563 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v9
7564 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v10
7565 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v10
7566 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7567 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v23
7568 ; GFX11-NEXT:    v_and_b32_e32 v18, 0xffff0000, v23
7569 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v24
7570 ; GFX11-NEXT:    v_and_b32_e32 v22, 0xffff0000, v24
7571 ; GFX11-NEXT:    v_lshlrev_b32_e32 v24, 16, v25
7572 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v25
7573 ; GFX11-NEXT:    v_lshlrev_b32_e32 v28, 16, v26
7574 ; GFX11-NEXT:    v_and_b32_e32 v30, 0xffff0000, v26
7575 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7576 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
7577 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
7578 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
7579 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
7580 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[10:11], v11
7581 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
7582 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
7583 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
7584 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[18:19], v18
7585 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7586 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7587 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[24:25], v24
7588 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[26:27], v27
7589 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[28:29], v28
7590 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[30:31], v30
7591 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7592   %load = load <16 x bfloat>, ptr addrspace(1) %ptr
7593   %fpext = fpext <16 x bfloat> %load to <16 x double>
7594   ret <16 x double> %fpext
7597 define <32 x double> @global_extload_v32bf16_to_v32f64(ptr addrspace(1) %ptr) {
7598 ; GCN-LABEL: global_extload_v32bf16_to_v32f64:
7599 ; GCN:       ; %bb.0:
7600 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7601 ; GCN-NEXT:    s_mov_b32 s6, 0
7602 ; GCN-NEXT:    s_mov_b32 s7, 0xf000
7603 ; GCN-NEXT:    s_mov_b32 s4, s6
7604 ; GCN-NEXT:    s_mov_b32 s5, s6
7605 ; GCN-NEXT:    buffer_load_ushort v3, v[1:2], s[4:7], 0 addr64
7606 ; GCN-NEXT:    buffer_load_ushort v4, v[1:2], s[4:7], 0 addr64 offset:2
7607 ; GCN-NEXT:    buffer_load_ushort v5, v[1:2], s[4:7], 0 addr64 offset:4
7608 ; GCN-NEXT:    buffer_load_ushort v6, v[1:2], s[4:7], 0 addr64 offset:6
7609 ; GCN-NEXT:    buffer_load_ushort v7, v[1:2], s[4:7], 0 addr64 offset:8
7610 ; GCN-NEXT:    buffer_load_ushort v8, v[1:2], s[4:7], 0 addr64 offset:10
7611 ; GCN-NEXT:    buffer_load_ushort v9, v[1:2], s[4:7], 0 addr64 offset:12
7612 ; GCN-NEXT:    buffer_load_ushort v10, v[1:2], s[4:7], 0 addr64 offset:14
7613 ; GCN-NEXT:    buffer_load_ushort v11, v[1:2], s[4:7], 0 addr64 offset:16
7614 ; GCN-NEXT:    buffer_load_ushort v12, v[1:2], s[4:7], 0 addr64 offset:18
7615 ; GCN-NEXT:    buffer_load_ushort v13, v[1:2], s[4:7], 0 addr64 offset:20
7616 ; GCN-NEXT:    buffer_load_ushort v14, v[1:2], s[4:7], 0 addr64 offset:22
7617 ; GCN-NEXT:    buffer_load_ushort v15, v[1:2], s[4:7], 0 addr64 offset:24
7618 ; GCN-NEXT:    buffer_load_ushort v16, v[1:2], s[4:7], 0 addr64 offset:26
7619 ; GCN-NEXT:    buffer_load_ushort v17, v[1:2], s[4:7], 0 addr64 offset:28
7620 ; GCN-NEXT:    buffer_load_ushort v18, v[1:2], s[4:7], 0 addr64 offset:30
7621 ; GCN-NEXT:    buffer_load_ushort v25, v[1:2], s[4:7], 0 addr64 offset:48
7622 ; GCN-NEXT:    buffer_load_ushort v26, v[1:2], s[4:7], 0 addr64 offset:50
7623 ; GCN-NEXT:    buffer_load_ushort v27, v[1:2], s[4:7], 0 addr64 offset:52
7624 ; GCN-NEXT:    buffer_load_ushort v28, v[1:2], s[4:7], 0 addr64 offset:54
7625 ; GCN-NEXT:    buffer_load_ushort v29, v[1:2], s[4:7], 0 addr64 offset:56
7626 ; GCN-NEXT:    buffer_load_ushort v30, v[1:2], s[4:7], 0 addr64 offset:58
7627 ; GCN-NEXT:    buffer_load_ushort v31, v[1:2], s[4:7], 0 addr64 offset:60
7628 ; GCN-NEXT:    buffer_load_ushort v32, v[1:2], s[4:7], 0 addr64 offset:62
7629 ; GCN-NEXT:    buffer_load_ushort v19, v[1:2], s[4:7], 0 addr64 offset:32
7630 ; GCN-NEXT:    buffer_load_ushort v20, v[1:2], s[4:7], 0 addr64 offset:34
7631 ; GCN-NEXT:    buffer_load_ushort v21, v[1:2], s[4:7], 0 addr64 offset:36
7632 ; GCN-NEXT:    buffer_load_ushort v22, v[1:2], s[4:7], 0 addr64 offset:38
7633 ; GCN-NEXT:    buffer_load_ushort v23, v[1:2], s[4:7], 0 addr64 offset:40
7634 ; GCN-NEXT:    buffer_load_ushort v24, v[1:2], s[4:7], 0 addr64 offset:42
7635 ; GCN-NEXT:    buffer_load_ushort v33, v[1:2], s[4:7], 0 addr64 offset:44
7636 ; GCN-NEXT:    buffer_load_ushort v34, v[1:2], s[4:7], 0 addr64 offset:46
7637 ; GCN-NEXT:    s_waitcnt vmcnt(8)
7638 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v32
7639 ; GCN-NEXT:    v_add_i32_e32 v32, vcc, 0xfc, v0
7640 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7641 ; GCN-NEXT:    buffer_store_dword v2, v32, s[0:3], 0 offen
7642 ; GCN-NEXT:    s_waitcnt expcnt(0)
7643 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0xf8, v0
7644 ; GCN-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
7645 ; GCN-NEXT:    s_waitcnt expcnt(0)
7646 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v31
7647 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0xf4, v0
7648 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7649 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
7650 ; GCN-NEXT:    s_waitcnt expcnt(0)
7651 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0xf0, v0
7652 ; GCN-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
7653 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0xec, v0
7654 ; GCN-NEXT:    s_waitcnt expcnt(0)
7655 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v30
7656 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7657 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
7658 ; GCN-NEXT:    s_waitcnt expcnt(0)
7659 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0xe8, v0
7660 ; GCN-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
7661 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0xe4, v0
7662 ; GCN-NEXT:    s_waitcnt expcnt(0)
7663 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v29
7664 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7665 ; GCN-NEXT:    buffer_store_dword v2, v30, s[0:3], 0 offen
7666 ; GCN-NEXT:    s_waitcnt expcnt(0)
7667 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 0xe0, v0
7668 ; GCN-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
7669 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0xdc, v0
7670 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0xd8, v0
7671 ; GCN-NEXT:    s_waitcnt expcnt(0)
7672 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v28
7673 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7674 ; GCN-NEXT:    buffer_store_dword v2, v29, s[0:3], 0 offen
7675 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0xd4, v0
7676 ; GCN-NEXT:    buffer_store_dword v1, v30, s[0:3], 0 offen
7677 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0xd0, v0
7678 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0xcc, v0
7679 ; GCN-NEXT:    s_waitcnt expcnt(0)
7680 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v27
7681 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7682 ; GCN-NEXT:    buffer_store_dword v2, v28, s[0:3], 0 offen
7683 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0xc8, v0
7684 ; GCN-NEXT:    buffer_store_dword v1, v29, s[0:3], 0 offen
7685 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0xc4, v0
7686 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0xc0, v0
7687 ; GCN-NEXT:    s_waitcnt expcnt(0)
7688 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v26
7689 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7690 ; GCN-NEXT:    buffer_store_dword v2, v30, s[0:3], 0 offen
7691 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 0xbc, v0
7692 ; GCN-NEXT:    buffer_store_dword v1, v27, s[0:3], 0 offen
7693 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0xb8, v0
7694 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0xb4, v0
7695 ; GCN-NEXT:    s_waitcnt expcnt(0)
7696 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v25
7697 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7698 ; GCN-NEXT:    buffer_store_dword v2, v28, s[0:3], 0 offen
7699 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 0xb0, v0
7700 ; GCN-NEXT:    buffer_store_dword v1, v29, s[0:3], 0 offen
7701 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0xac, v0
7702 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0xa8, v0
7703 ; GCN-NEXT:    s_waitcnt vmcnt(14) expcnt(0)
7704 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v34
7705 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7706 ; GCN-NEXT:    buffer_store_dword v2, v26, s[0:3], 0 offen
7707 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 0xa4, v0
7708 ; GCN-NEXT:    buffer_store_dword v1, v27, s[0:3], 0 offen
7709 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0xa0, v0
7710 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x9c, v0
7711 ; GCN-NEXT:    s_waitcnt expcnt(0)
7712 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v33
7713 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7714 ; GCN-NEXT:    buffer_store_dword v2, v30, s[0:3], 0 offen
7715 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x98, v0
7716 ; GCN-NEXT:    buffer_store_dword v1, v25, s[0:3], 0 offen
7717 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 0x94, v0
7718 ; GCN-NEXT:    v_add_i32_e32 v32, vcc, 0x90, v0
7719 ; GCN-NEXT:    s_waitcnt expcnt(0)
7720 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v24
7721 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7722 ; GCN-NEXT:    buffer_store_dword v2, v28, s[0:3], 0 offen
7723 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 0x8c, v0
7724 ; GCN-NEXT:    buffer_store_dword v1, v29, s[0:3], 0 offen
7725 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0x88, v0
7726 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x84, v0
7727 ; GCN-NEXT:    s_waitcnt expcnt(0)
7728 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v23
7729 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7730 ; GCN-NEXT:    buffer_store_dword v2, v26, s[0:3], 0 offen
7731 ; GCN-NEXT:    v_add_i32_e32 v23, vcc, 0x80, v0
7732 ; GCN-NEXT:    buffer_store_dword v1, v27, s[0:3], 0 offen
7733 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 0x7c, v0
7734 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 0x78, v0
7735 ; GCN-NEXT:    s_waitcnt expcnt(0)
7736 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v22
7737 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7738 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
7739 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 0x74, v0
7740 ; GCN-NEXT:    buffer_store_dword v1, v30, s[0:3], 0 offen
7741 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 0x70, v0
7742 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 0x6c, v0
7743 ; GCN-NEXT:    s_waitcnt expcnt(0)
7744 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v21
7745 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7746 ; GCN-NEXT:    buffer_store_dword v2, v25, s[0:3], 0 offen
7747 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 0x68, v0
7748 ; GCN-NEXT:    buffer_store_dword v1, v32, s[0:3], 0 offen
7749 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 0x64, v0
7750 ; GCN-NEXT:    v_add_i32_e32 v32, vcc, 0x60, v0
7751 ; GCN-NEXT:    s_waitcnt expcnt(0)
7752 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v20
7753 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7754 ; GCN-NEXT:    buffer_store_dword v2, v24, s[0:3], 0 offen
7755 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 0x5c, v0
7756 ; GCN-NEXT:    buffer_store_dword v1, v28, s[0:3], 0 offen
7757 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 0x58, v0
7758 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 0x54, v0
7759 ; GCN-NEXT:    s_waitcnt expcnt(0)
7760 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v19
7761 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7762 ; GCN-NEXT:    buffer_store_dword v2, v29, s[0:3], 0 offen
7763 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 0x50, v0
7764 ; GCN-NEXT:    buffer_store_dword v1, v23, s[0:3], 0 offen
7765 ; GCN-NEXT:    v_add_i32_e32 v23, vcc, 0x4c, v0
7766 ; GCN-NEXT:    v_add_i32_e32 v29, vcc, 0x48, v0
7767 ; GCN-NEXT:    s_waitcnt expcnt(0)
7768 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v18
7769 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7770 ; GCN-NEXT:    buffer_store_dword v2, v26, s[0:3], 0 offen
7771 ; GCN-NEXT:    v_add_i32_e32 v18, vcc, 0x44, v0
7772 ; GCN-NEXT:    buffer_store_dword v1, v27, s[0:3], 0 offen
7773 ; GCN-NEXT:    v_add_i32_e32 v26, vcc, 64, v0
7774 ; GCN-NEXT:    v_add_i32_e32 v27, vcc, 60, v0
7775 ; GCN-NEXT:    s_waitcnt expcnt(0)
7776 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v17
7777 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7778 ; GCN-NEXT:    buffer_store_dword v2, v22, s[0:3], 0 offen
7779 ; GCN-NEXT:    v_add_i32_e32 v17, vcc, 56, v0
7780 ; GCN-NEXT:    buffer_store_dword v1, v30, s[0:3], 0 offen
7781 ; GCN-NEXT:    v_add_i32_e32 v22, vcc, 52, v0
7782 ; GCN-NEXT:    v_add_i32_e32 v30, vcc, 48, v0
7783 ; GCN-NEXT:    s_waitcnt expcnt(0)
7784 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v16
7785 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7786 ; GCN-NEXT:    buffer_store_dword v2, v31, s[0:3], 0 offen
7787 ; GCN-NEXT:    v_add_i32_e32 v31, vcc, 44, v0
7788 ; GCN-NEXT:    buffer_store_dword v1, v21, s[0:3], 0 offen
7789 ; GCN-NEXT:    v_add_i32_e32 v21, vcc, 40, v0
7790 ; GCN-NEXT:    v_add_i32_e32 v33, vcc, 36, v0
7791 ; GCN-NEXT:    s_waitcnt expcnt(0)
7792 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v15
7793 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7794 ; GCN-NEXT:    buffer_store_dword v2, v25, s[0:3], 0 offen
7795 ; GCN-NEXT:    v_add_i32_e32 v25, vcc, 32, v0
7796 ; GCN-NEXT:    buffer_store_dword v1, v32, s[0:3], 0 offen
7797 ; GCN-NEXT:    v_add_i32_e32 v32, vcc, 28, v0
7798 ; GCN-NEXT:    v_add_i32_e32 v34, vcc, 24, v0
7799 ; GCN-NEXT:    s_waitcnt expcnt(0)
7800 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v14
7801 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7802 ; GCN-NEXT:    buffer_store_dword v2, v20, s[0:3], 0 offen
7803 ; GCN-NEXT:    v_add_i32_e32 v20, vcc, 20, v0
7804 ; GCN-NEXT:    buffer_store_dword v1, v24, s[0:3], 0 offen
7805 ; GCN-NEXT:    v_add_i32_e32 v24, vcc, 16, v0
7806 ; GCN-NEXT:    v_add_i32_e32 v35, vcc, 12, v0
7807 ; GCN-NEXT:    s_waitcnt expcnt(0)
7808 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v13
7809 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7810 ; GCN-NEXT:    buffer_store_dword v2, v28, s[0:3], 0 offen
7811 ; GCN-NEXT:    v_add_i32_e32 v28, vcc, 8, v0
7812 ; GCN-NEXT:    buffer_store_dword v1, v19, s[0:3], 0 offen
7813 ; GCN-NEXT:    v_add_i32_e32 v19, vcc, 4, v0
7814 ; GCN-NEXT:    s_waitcnt expcnt(0)
7815 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v12
7816 ; GCN-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
7817 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
7818 ; GCN-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
7819 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v3
7820 ; GCN-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
7821 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
7822 ; GCN-NEXT:    v_lshlrev_b32_e32 v15, 16, v6
7823 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 16, v7
7824 ; GCN-NEXT:    v_lshlrev_b32_e32 v36, 16, v8
7825 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
7826 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[3:4], v11
7827 ; GCN-NEXT:    buffer_store_dword v2, v23, s[0:3], 0 offen
7828 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[5:6], v10
7829 ; GCN-NEXT:    buffer_store_dword v1, v29, s[0:3], 0 offen
7830 ; GCN-NEXT:    s_waitcnt expcnt(0)
7831 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[1:2], v9
7832 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[7:8], v12
7833 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[9:10], v13
7834 ; GCN-NEXT:    buffer_store_dword v4, v18, s[0:3], 0 offen
7835 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[11:12], v36
7836 ; GCN-NEXT:    buffer_store_dword v3, v26, s[0:3], 0 offen
7837 ; GCN-NEXT:    s_waitcnt expcnt(0)
7838 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[3:4], v14
7839 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[13:14], v15
7840 ; GCN-NEXT:    v_cvt_f64_f32_e32 v[15:16], v16
7841 ; GCN-NEXT:    buffer_store_dword v6, v27, s[0:3], 0 offen
7842 ; GCN-NEXT:    buffer_store_dword v5, v17, s[0:3], 0 offen
7843 ; GCN-NEXT:    buffer_store_dword v2, v22, s[0:3], 0 offen
7844 ; GCN-NEXT:    buffer_store_dword v1, v30, s[0:3], 0 offen
7845 ; GCN-NEXT:    buffer_store_dword v12, v31, s[0:3], 0 offen
7846 ; GCN-NEXT:    buffer_store_dword v11, v21, s[0:3], 0 offen
7847 ; GCN-NEXT:    buffer_store_dword v16, v33, s[0:3], 0 offen
7848 ; GCN-NEXT:    buffer_store_dword v15, v25, s[0:3], 0 offen
7849 ; GCN-NEXT:    buffer_store_dword v14, v32, s[0:3], 0 offen
7850 ; GCN-NEXT:    buffer_store_dword v13, v34, s[0:3], 0 offen
7851 ; GCN-NEXT:    buffer_store_dword v4, v20, s[0:3], 0 offen
7852 ; GCN-NEXT:    buffer_store_dword v3, v24, s[0:3], 0 offen
7853 ; GCN-NEXT:    buffer_store_dword v10, v35, s[0:3], 0 offen
7854 ; GCN-NEXT:    buffer_store_dword v9, v28, s[0:3], 0 offen
7855 ; GCN-NEXT:    buffer_store_dword v8, v19, s[0:3], 0 offen
7856 ; GCN-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen
7857 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
7858 ; GCN-NEXT:    s_setpc_b64 s[30:31]
7860 ; GFX7-LABEL: global_extload_v32bf16_to_v32f64:
7861 ; GFX7:       ; %bb.0:
7862 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7863 ; GFX7-NEXT:    s_mov_b32 s6, 0
7864 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
7865 ; GFX7-NEXT:    s_mov_b32 s4, s6
7866 ; GFX7-NEXT:    s_mov_b32 s5, s6
7867 ; GFX7-NEXT:    buffer_load_ushort v20, v[1:2], s[4:7], 0 addr64 offset:62
7868 ; GFX7-NEXT:    buffer_load_ushort v22, v[1:2], s[4:7], 0 addr64 offset:60
7869 ; GFX7-NEXT:    buffer_load_ushort v23, v[1:2], s[4:7], 0 addr64 offset:58
7870 ; GFX7-NEXT:    buffer_load_ushort v24, v[1:2], s[4:7], 0 addr64 offset:56
7871 ; GFX7-NEXT:    buffer_load_ushort v25, v[1:2], s[4:7], 0 addr64 offset:54
7872 ; GFX7-NEXT:    buffer_load_ushort v26, v[1:2], s[4:7], 0 addr64 offset:52
7873 ; GFX7-NEXT:    buffer_load_ushort v27, v[1:2], s[4:7], 0 addr64 offset:50
7874 ; GFX7-NEXT:    buffer_load_ushort v28, v[1:2], s[4:7], 0 addr64 offset:48
7875 ; GFX7-NEXT:    buffer_load_ushort v15, v[1:2], s[4:7], 0 addr64 offset:32
7876 ; GFX7-NEXT:    buffer_load_ushort v18, v[1:2], s[4:7], 0 addr64 offset:34
7877 ; GFX7-NEXT:    buffer_load_ushort v29, v[1:2], s[4:7], 0 addr64 offset:36
7878 ; GFX7-NEXT:    buffer_load_ushort v30, v[1:2], s[4:7], 0 addr64 offset:38
7879 ; GFX7-NEXT:    buffer_load_ushort v31, v[1:2], s[4:7], 0 addr64 offset:40
7880 ; GFX7-NEXT:    buffer_load_ushort v32, v[1:2], s[4:7], 0 addr64 offset:42
7881 ; GFX7-NEXT:    buffer_load_ushort v33, v[1:2], s[4:7], 0 addr64 offset:44
7882 ; GFX7-NEXT:    buffer_load_ushort v34, v[1:2], s[4:7], 0 addr64 offset:46
7883 ; GFX7-NEXT:    buffer_load_ushort v19, v[1:2], s[4:7], 0 addr64
7884 ; GFX7-NEXT:    buffer_load_ushort v17, v[1:2], s[4:7], 0 addr64 offset:2
7885 ; GFX7-NEXT:    buffer_load_ushort v14, v[1:2], s[4:7], 0 addr64 offset:4
7886 ; GFX7-NEXT:    buffer_load_ushort v12, v[1:2], s[4:7], 0 addr64 offset:6
7887 ; GFX7-NEXT:    buffer_load_ushort v10, v[1:2], s[4:7], 0 addr64 offset:8
7888 ; GFX7-NEXT:    buffer_load_ushort v9, v[1:2], s[4:7], 0 addr64 offset:10
7889 ; GFX7-NEXT:    buffer_load_ushort v7, v[1:2], s[4:7], 0 addr64 offset:12
7890 ; GFX7-NEXT:    buffer_load_ushort v4, v[1:2], s[4:7], 0 addr64 offset:14
7891 ; GFX7-NEXT:    buffer_load_ushort v5, v[1:2], s[4:7], 0 addr64 offset:16
7892 ; GFX7-NEXT:    buffer_load_ushort v3, v[1:2], s[4:7], 0 addr64 offset:18
7893 ; GFX7-NEXT:    buffer_load_ushort v6, v[1:2], s[4:7], 0 addr64 offset:20
7894 ; GFX7-NEXT:    buffer_load_ushort v8, v[1:2], s[4:7], 0 addr64 offset:22
7895 ; GFX7-NEXT:    buffer_load_ushort v11, v[1:2], s[4:7], 0 addr64 offset:24
7896 ; GFX7-NEXT:    buffer_load_ushort v13, v[1:2], s[4:7], 0 addr64 offset:26
7897 ; GFX7-NEXT:    buffer_load_ushort v16, v[1:2], s[4:7], 0 addr64 offset:28
7898 ; GFX7-NEXT:    buffer_load_ushort v1, v[1:2], s[4:7], 0 addr64 offset:30
7899 ; GFX7-NEXT:    s_waitcnt vmcnt(14)
7900 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v20
7901 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7902 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xfc, v0
7903 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7904 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xf8, v0
7905 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7906 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v22
7907 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7908 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xf4, v0
7909 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, 0xd8, v0
7910 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7911 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xf0, v0
7912 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7913 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v23
7914 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7915 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xec, v0
7916 ; GFX7-NEXT:    s_waitcnt vmcnt(14)
7917 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v14
7918 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7919 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xe8, v0
7920 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7921 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v24
7922 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7923 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xe4, v0
7924 ; GFX7-NEXT:    v_add_i32_e32 v24, vcc, 0xd0, v0
7925 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7926 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xe0, v0
7927 ; GFX7-NEXT:    v_lshlrev_b32_e32 v21, 16, v25
7928 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7929 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v21
7930 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xdc, v0
7931 ; GFX7-NEXT:    s_waitcnt vmcnt(8)
7932 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7933 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7934 ; GFX7-NEXT:    v_lshlrev_b32_e32 v21, 16, v26
7935 ; GFX7-NEXT:    buffer_store_dword v20, v22, s[0:3], 0 offen
7936 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v21
7937 ; GFX7-NEXT:    v_lshlrev_b32_e32 v22, 16, v27
7938 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xd4, v0
7939 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[22:23], v22
7940 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7941 ; GFX7-NEXT:    buffer_store_dword v20, v24, s[0:3], 0 offen
7942 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v28
7943 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7944 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xcc, v0
7945 ; GFX7-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
7946 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xc8, v0
7947 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
7948 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xc4, v0
7949 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7950 ; GFX7-NEXT:    v_lshlrev_b32_e32 v21, 16, v34
7951 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[21:22], v21
7952 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xc0, v0
7953 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7954 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xbc, v0
7955 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v33
7956 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
7957 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[22:23], v20
7958 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xb8, v0
7959 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v32
7960 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7961 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7962 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xb4, v0
7963 ; GFX7-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
7964 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xb0, v0
7965 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
7966 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xac, v0
7967 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7968 ; GFX7-NEXT:    v_lshlrev_b32_e32 v21, 16, v31
7969 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[21:22], v21
7970 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xa8, v0
7971 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7972 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xa4, v0
7973 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v30
7974 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
7975 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[22:23], v20
7976 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0xa0, v0
7977 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v29
7978 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7979 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
7980 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x9c, v0
7981 ; GFX7-NEXT:    buffer_store_dword v23, v2, s[0:3], 0 offen
7982 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x98, v0
7983 ; GFX7-NEXT:    buffer_store_dword v22, v2, s[0:3], 0 offen
7984 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x94, v0
7985 ; GFX7-NEXT:    buffer_store_dword v21, v2, s[0:3], 0 offen
7986 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x90, v0
7987 ; GFX7-NEXT:    buffer_store_dword v20, v2, s[0:3], 0 offen
7988 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v18
7989 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7990 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, 0x8c, v0
7991 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v19
7992 ; GFX7-NEXT:    buffer_store_dword v21, v18, s[0:3], 0 offen
7993 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, 0x88, v0
7994 ; GFX7-NEXT:    buffer_store_dword v20, v18, s[0:3], 0 offen
7995 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[18:19], v2
7996 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v15
7997 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
7998 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 0x84, v0
7999 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v17
8000 ; GFX7-NEXT:    buffer_store_dword v21, v15, s[0:3], 0 offen
8001 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 0x80, v0
8002 ; GFX7-NEXT:    buffer_store_dword v20, v15, s[0:3], 0 offen
8003 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[20:21], v2
8004 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8005 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 0x7c, v0
8006 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v12
8007 ; GFX7-NEXT:    buffer_store_dword v2, v15, s[0:3], 0 offen
8008 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 0x78, v0
8009 ; GFX7-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
8010 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[1:2], v14
8011 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v16
8012 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[14:15], v14
8013 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, 0x74, v0
8014 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
8015 ; GFX7-NEXT:    buffer_store_dword v15, v16, s[0:3], 0 offen
8016 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 0x70, v0
8017 ; GFX7-NEXT:    buffer_store_dword v14, v15, s[0:3], 0 offen
8018 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[14:15], v12
8019 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v13
8020 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
8021 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, 0x6c, v0
8022 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
8023 ; GFX7-NEXT:    buffer_store_dword v13, v16, s[0:3], 0 offen
8024 ; GFX7-NEXT:    v_add_i32_e32 v13, vcc, 0x68, v0
8025 ; GFX7-NEXT:    buffer_store_dword v12, v13, s[0:3], 0 offen
8026 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[12:13], v10
8027 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
8028 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
8029 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, 0x64, v0
8030 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
8031 ; GFX7-NEXT:    buffer_store_dword v11, v16, s[0:3], 0 offen
8032 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[16:17], v8
8033 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, 0x60, v0
8034 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x5c, v0
8035 ; GFX7-NEXT:    buffer_store_dword v10, v11, s[0:3], 0 offen
8036 ; GFX7-NEXT:    buffer_store_dword v17, v8, s[0:3], 0 offen
8037 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x58, v0
8038 ; GFX7-NEXT:    v_lshlrev_b32_e32 v11, 16, v4
8039 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
8040 ; GFX7-NEXT:    buffer_store_dword v16, v8, s[0:3], 0 offen
8041 ; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 16, v5
8042 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[4:5], v4
8043 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 0x54, v0
8044 ; GFX7-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
8045 ; GFX7-NEXT:    buffer_store_dword v5, v6, s[0:3], 0 offen
8046 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 0x50, v0
8047 ; GFX7-NEXT:    buffer_store_dword v4, v5, s[0:3], 0 offen
8048 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8049 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[5:6], v16
8050 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, 0x4c, v0
8051 ; GFX7-NEXT:    buffer_store_dword v4, v16, s[0:3], 0 offen
8052 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 0x48, v0
8053 ; GFX7-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8054 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[3:4], v11
8055 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, 0x44, v0
8056 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[7:8], v7
8057 ; GFX7-NEXT:    buffer_store_dword v6, v11, s[0:3], 0 offen
8058 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, 64, v0
8059 ; GFX7-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
8060 ; GFX7-NEXT:    buffer_store_dword v5, v6, s[0:3], 0 offen
8061 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 60, v0
8062 ; GFX7-NEXT:    v_cvt_f64_f32_e32 v[9:10], v9
8063 ; GFX7-NEXT:    buffer_store_dword v4, v5, s[0:3], 0 offen
8064 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 56, v0
8065 ; GFX7-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8066 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 52, v0
8067 ; GFX7-NEXT:    buffer_store_dword v8, v3, s[0:3], 0 offen
8068 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 48, v0
8069 ; GFX7-NEXT:    buffer_store_dword v7, v3, s[0:3], 0 offen
8070 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 44, v0
8071 ; GFX7-NEXT:    buffer_store_dword v10, v3, s[0:3], 0 offen
8072 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 40, v0
8073 ; GFX7-NEXT:    buffer_store_dword v9, v3, s[0:3], 0 offen
8074 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 36, v0
8075 ; GFX7-NEXT:    buffer_store_dword v13, v3, s[0:3], 0 offen
8076 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 32, v0
8077 ; GFX7-NEXT:    buffer_store_dword v12, v3, s[0:3], 0 offen
8078 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 28, v0
8079 ; GFX7-NEXT:    buffer_store_dword v15, v3, s[0:3], 0 offen
8080 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 24, v0
8081 ; GFX7-NEXT:    buffer_store_dword v14, v3, s[0:3], 0 offen
8082 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, 20, v0
8083 ; GFX7-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
8084 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 16, v0
8085 ; GFX7-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
8086 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, 12, v0
8087 ; GFX7-NEXT:    buffer_store_dword v21, v1, s[0:3], 0 offen
8088 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, 8, v0
8089 ; GFX7-NEXT:    buffer_store_dword v20, v1, s[0:3], 0 offen
8090 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, 4, v0
8091 ; GFX7-NEXT:    buffer_store_dword v19, v1, s[0:3], 0 offen
8092 ; GFX7-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen
8093 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8094 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
8096 ; GFX8-LABEL: global_extload_v32bf16_to_v32f64:
8097 ; GFX8:       ; %bb.0:
8098 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8099 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 2, v1
8100 ; GFX8-NEXT:    v_addc_u32_e32 v10, vcc, 0, v2, vcc
8101 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 4, v1
8102 ; GFX8-NEXT:    v_addc_u32_e32 v4, vcc, 0, v2, vcc
8103 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 6, v1
8104 ; GFX8-NEXT:    v_addc_u32_e32 v6, vcc, 0, v2, vcc
8105 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 8, v1
8106 ; GFX8-NEXT:    v_addc_u32_e32 v8, vcc, 0, v2, vcc
8107 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, 10, v1
8108 ; GFX8-NEXT:    v_addc_u32_e32 v12, vcc, 0, v2, vcc
8109 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, 12, v1
8110 ; GFX8-NEXT:    v_addc_u32_e32 v14, vcc, 0, v2, vcc
8111 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, 14, v1
8112 ; GFX8-NEXT:    v_addc_u32_e32 v18, vcc, 0, v2, vcc
8113 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, 16, v1
8114 ; GFX8-NEXT:    v_addc_u32_e32 v22, vcc, 0, v2, vcc
8115 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, 18, v1
8116 ; GFX8-NEXT:    v_addc_u32_e32 v16, vcc, 0, v2, vcc
8117 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, 20, v1
8118 ; GFX8-NEXT:    v_addc_u32_e32 v20, vcc, 0, v2, vcc
8119 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, 22, v1
8120 ; GFX8-NEXT:    v_addc_u32_e32 v24, vcc, 0, v2, vcc
8121 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, 24, v1
8122 ; GFX8-NEXT:    v_addc_u32_e32 v26, vcc, 0, v2, vcc
8123 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, 26, v1
8124 ; GFX8-NEXT:    v_addc_u32_e32 v28, vcc, 0, v2, vcc
8125 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, 28, v1
8126 ; GFX8-NEXT:    v_addc_u32_e32 v30, vcc, 0, v2, vcc
8127 ; GFX8-NEXT:    v_add_u32_e32 v31, vcc, 30, v1
8128 ; GFX8-NEXT:    v_addc_u32_e32 v32, vcc, 0, v2, vcc
8129 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, 32, v1
8130 ; GFX8-NEXT:    v_addc_u32_e32 v34, vcc, 0, v2, vcc
8131 ; GFX8-NEXT:    v_add_u32_e32 v35, vcc, 34, v1
8132 ; GFX8-NEXT:    v_addc_u32_e32 v36, vcc, 0, v2, vcc
8133 ; GFX8-NEXT:    buffer_store_dword v40, off, s[0:3], s32 offset:36 ; 4-byte Folded Spill
8134 ; GFX8-NEXT:    buffer_store_dword v41, off, s[0:3], s32 offset:32 ; 4-byte Folded Spill
8135 ; GFX8-NEXT:    buffer_store_dword v42, off, s[0:3], s32 offset:28 ; 4-byte Folded Spill
8136 ; GFX8-NEXT:    buffer_store_dword v43, off, s[0:3], s32 offset:24 ; 4-byte Folded Spill
8137 ; GFX8-NEXT:    buffer_store_dword v44, off, s[0:3], s32 offset:20 ; 4-byte Folded Spill
8138 ; GFX8-NEXT:    buffer_store_dword v45, off, s[0:3], s32 offset:16 ; 4-byte Folded Spill
8139 ; GFX8-NEXT:    buffer_store_dword v46, off, s[0:3], s32 offset:12 ; 4-byte Folded Spill
8140 ; GFX8-NEXT:    buffer_store_dword v47, off, s[0:3], s32 offset:8 ; 4-byte Folded Spill
8141 ; GFX8-NEXT:    buffer_store_dword v56, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
8142 ; GFX8-NEXT:    buffer_store_dword v57, off, s[0:3], s32 ; 4-byte Folded Spill
8143 ; GFX8-NEXT:    v_add_u32_e32 v37, vcc, 36, v1
8144 ; GFX8-NEXT:    flat_load_ushort v43, v[1:2]
8145 ; GFX8-NEXT:    v_addc_u32_e32 v38, vcc, 0, v2, vcc
8146 ; GFX8-NEXT:    v_add_u32_e32 v48, vcc, 38, v1
8147 ; GFX8-NEXT:    v_addc_u32_e32 v49, vcc, 0, v2, vcc
8148 ; GFX8-NEXT:    v_add_u32_e32 v50, vcc, 62, v1
8149 ; GFX8-NEXT:    v_addc_u32_e32 v51, vcc, 0, v2, vcc
8150 ; GFX8-NEXT:    flat_load_ushort v44, v[50:51]
8151 ; GFX8-NEXT:    v_add_u32_e32 v50, vcc, 60, v1
8152 ; GFX8-NEXT:    v_addc_u32_e32 v51, vcc, 0, v2, vcc
8153 ; GFX8-NEXT:    flat_load_ushort v45, v[50:51]
8154 ; GFX8-NEXT:    v_add_u32_e32 v50, vcc, 40, v1
8155 ; GFX8-NEXT:    v_addc_u32_e32 v51, vcc, 0, v2, vcc
8156 ; GFX8-NEXT:    v_add_u32_e32 v52, vcc, 58, v1
8157 ; GFX8-NEXT:    v_addc_u32_e32 v53, vcc, 0, v2, vcc
8158 ; GFX8-NEXT:    flat_load_ushort v46, v[52:53]
8159 ; GFX8-NEXT:    v_add_u32_e32 v52, vcc, 42, v1
8160 ; GFX8-NEXT:    v_addc_u32_e32 v53, vcc, 0, v2, vcc
8161 ; GFX8-NEXT:    v_add_u32_e32 v54, vcc, 56, v1
8162 ; GFX8-NEXT:    v_addc_u32_e32 v55, vcc, 0, v2, vcc
8163 ; GFX8-NEXT:    flat_load_ushort v47, v[54:55]
8164 ; GFX8-NEXT:    v_add_u32_e32 v54, vcc, 44, v1
8165 ; GFX8-NEXT:    v_addc_u32_e32 v55, vcc, 0, v2, vcc
8166 ; GFX8-NEXT:    v_add_u32_e32 v39, vcc, 54, v1
8167 ; GFX8-NEXT:    v_addc_u32_e32 v40, vcc, 0, v2, vcc
8168 ; GFX8-NEXT:    flat_load_ushort v56, v[39:40]
8169 ; GFX8-NEXT:    v_add_u32_e32 v39, vcc, 52, v1
8170 ; GFX8-NEXT:    v_addc_u32_e32 v40, vcc, 0, v2, vcc
8171 ; GFX8-NEXT:    flat_load_ushort v57, v[39:40]
8172 ; GFX8-NEXT:    v_add_u32_e32 v39, vcc, 46, v1
8173 ; GFX8-NEXT:    v_addc_u32_e32 v40, vcc, 0, v2, vcc
8174 ; GFX8-NEXT:    v_add_u32_e32 v41, vcc, 50, v1
8175 ; GFX8-NEXT:    v_addc_u32_e32 v42, vcc, 0, v2, vcc
8176 ; GFX8-NEXT:    flat_load_ushort v41, v[41:42]
8177 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 48, v1
8178 ; GFX8-NEXT:    v_addc_u32_e32 v2, vcc, 0, v2, vcc
8179 ; GFX8-NEXT:    flat_load_ushort v42, v[9:10]
8180 ; GFX8-NEXT:    flat_load_ushort v9, v[35:36]
8181 ; GFX8-NEXT:    flat_load_ushort v10, v[37:38]
8182 ; GFX8-NEXT:    flat_load_ushort v35, v[48:49]
8183 ; GFX8-NEXT:    flat_load_ushort v36, v[50:51]
8184 ; GFX8-NEXT:    flat_load_ushort v37, v[52:53]
8185 ; GFX8-NEXT:    flat_load_ushort v48, v[54:55]
8186 ; GFX8-NEXT:    flat_load_ushort v39, v[39:40]
8187 ; GFX8-NEXT:    flat_load_ushort v49, v[1:2]
8188 ; GFX8-NEXT:    flat_load_ushort v50, v[3:4]
8189 ; GFX8-NEXT:    flat_load_ushort v51, v[5:6]
8190 ; GFX8-NEXT:    flat_load_ushort v52, v[7:8]
8191 ; GFX8-NEXT:    flat_load_ushort v53, v[11:12]
8192 ; GFX8-NEXT:    flat_load_ushort v38, v[13:14]
8193 ; GFX8-NEXT:    flat_load_ushort v14, v[17:18]
8194 ; GFX8-NEXT:    flat_load_ushort v11, v[21:22]
8195 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 4, v0
8196 ; GFX8-NEXT:    flat_load_ushort v15, v[15:16]
8197 ; GFX8-NEXT:    flat_load_ushort v13, v[19:20]
8198 ; GFX8-NEXT:    flat_load_ushort v8, v[23:24]
8199 ; GFX8-NEXT:    flat_load_ushort v6, v[25:26]
8200 ; GFX8-NEXT:    flat_load_ushort v5, v[27:28]
8201 ; GFX8-NEXT:    flat_load_ushort v7, v[29:30]
8202 ; GFX8-NEXT:    flat_load_ushort v12, v[31:32]
8203 ; GFX8-NEXT:    flat_load_ushort v16, v[33:34]
8204 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, 0xc4, v0
8205 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, 0xbc, v0
8206 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, 0xb4, v0
8207 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, 0xac, v0
8208 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, 0xa4, v0
8209 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, 0x9c, v0
8210 ; GFX8-NEXT:    s_waitcnt vmcnt(14)
8211 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v43
8212 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8213 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
8214 ; GFX8-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
8215 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xfc, v0
8216 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v44
8217 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
8218 ; GFX8-NEXT:    buffer_store_dword v3, v1, s[0:3], 0 offen
8219 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v45
8220 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8221 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xf8, v0
8222 ; GFX8-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen
8223 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xf4, v0
8224 ; GFX8-NEXT:    buffer_store_dword v4, v1, s[0:3], 0 offen
8225 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v46
8226 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8227 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0xf0, v0
8228 ; GFX8-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8229 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0xec, v0
8230 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
8231 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0xe8, v0
8232 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v47
8233 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[2:3], v2
8234 ; GFX8-NEXT:    buffer_store_dword v1, v4, s[0:3], 0 offen
8235 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xe4, v0
8236 ; GFX8-NEXT:    buffer_store_dword v3, v1, s[0:3], 0 offen
8237 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xe0, v0
8238 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v56
8239 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8240 ; GFX8-NEXT:    buffer_store_dword v2, v1, s[0:3], 0 offen
8241 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0xdc, v0
8242 ; GFX8-NEXT:    buffer_store_dword v4, v1, s[0:3], 0 offen
8243 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v57
8244 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8245 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0xd8, v0
8246 ; GFX8-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8247 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0xd4, v0
8248 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
8249 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0xd0, v0
8250 ; GFX8-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
8251 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v41
8252 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8253 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0xcc, v0
8254 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v42
8255 ; GFX8-NEXT:    buffer_store_dword v2, v4, s[0:3], 0 offen
8256 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0xc8, v0
8257 ; GFX8-NEXT:    buffer_store_dword v1, v2, s[0:3], 0 offen
8258 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[1:2], v3
8259 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v49
8260 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8261 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v50
8262 ; GFX8-NEXT:    s_waitcnt vmcnt(14)
8263 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v51
8264 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v52
8265 ; GFX8-NEXT:    buffer_store_dword v4, v18, s[0:3], 0 offen
8266 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0xc0, v0
8267 ; GFX8-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8268 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[3:4], v17
8269 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v39
8270 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[17:18], v17
8271 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v53
8272 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v38
8273 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
8274 ; GFX8-NEXT:    buffer_store_dword v18, v20, s[0:3], 0 offen
8275 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, 0xb8, v0
8276 ; GFX8-NEXT:    buffer_store_dword v17, v18, s[0:3], 0 offen
8277 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[17:18], v19
8278 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v48
8279 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[19:20], v19
8280 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
8281 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v14
8282 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
8283 ; GFX8-NEXT:    buffer_store_dword v20, v22, s[0:3], 0 offen
8284 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, 0xb0, v0
8285 ; GFX8-NEXT:    buffer_store_dword v19, v20, s[0:3], 0 offen
8286 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[19:20], v21
8287 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v37
8288 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[21:22], v21
8289 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
8290 ; GFX8-NEXT:    buffer_store_dword v22, v24, s[0:3], 0 offen
8291 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, 0xa8, v0
8292 ; GFX8-NEXT:    buffer_store_dword v21, v22, s[0:3], 0 offen
8293 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[21:22], v23
8294 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v36
8295 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[23:24], v23
8296 ; GFX8-NEXT:    buffer_store_dword v24, v26, s[0:3], 0 offen
8297 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, 0xa0, v0
8298 ; GFX8-NEXT:    buffer_store_dword v23, v24, s[0:3], 0 offen
8299 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[23:24], v25
8300 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v35
8301 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[25:26], v25
8302 ; GFX8-NEXT:    buffer_store_dword v26, v27, s[0:3], 0 offen
8303 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[27:28], v10
8304 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, 0x98, v0
8305 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
8306 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, 0x94, v0
8307 ; GFX8-NEXT:    buffer_store_dword v25, v26, s[0:3], 0 offen
8308 ; GFX8-NEXT:    buffer_store_dword v28, v11, s[0:3], 0 offen
8309 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, 0x90, v0
8310 ; GFX8-NEXT:    buffer_store_dword v27, v11, s[0:3], 0 offen
8311 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[27:28], v9
8312 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[25:26], v14
8313 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, 0x8c, v0
8314 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v15
8315 ; GFX8-NEXT:    buffer_store_dword v28, v14, s[0:3], 0 offen
8316 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, 0x88, v0
8317 ; GFX8-NEXT:    buffer_store_dword v27, v14, s[0:3], 0 offen
8318 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[14:15], v9
8319 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v16
8320 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[27:28], v9
8321 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v13
8322 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, 0x84, v0
8323 ; GFX8-NEXT:    buffer_store_dword v28, v13, s[0:3], 0 offen
8324 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, 0x80, v0
8325 ; GFX8-NEXT:    buffer_store_dword v27, v13, s[0:3], 0 offen
8326 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[27:28], v9
8327 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v12
8328 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[12:13], v9
8329 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x7c, v0
8330 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[10:11], v10
8331 ; GFX8-NEXT:    buffer_store_dword v13, v9, s[0:3], 0 offen
8332 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x78, v0
8333 ; GFX8-NEXT:    buffer_store_dword v12, v9, s[0:3], 0 offen
8334 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v6
8335 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
8336 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
8337 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, 0x74, v0
8338 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
8339 ; GFX8-NEXT:    buffer_store_dword v7, v13, s[0:3], 0 offen
8340 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 0x70, v0
8341 ; GFX8-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
8342 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[5:6], v5
8343 ; GFX8-NEXT:    v_cvt_f64_f32_e32 v[12:13], v12
8344 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 0x6c, v0
8345 ; GFX8-NEXT:    buffer_store_dword v6, v7, s[0:3], 0 offen
8346 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x68, v0
8347 ; GFX8-NEXT:    buffer_store_dword v5, v6, s[0:3], 0 offen
8348 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x64, v0
8349 ; GFX8-NEXT:    buffer_store_dword v13, v5, s[0:3], 0 offen
8350 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x60, v0
8351 ; GFX8-NEXT:    buffer_store_dword v12, v5, s[0:3], 0 offen
8352 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x5c, v0
8353 ; GFX8-NEXT:    buffer_store_dword v9, v5, s[0:3], 0 offen
8354 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x58, v0
8355 ; GFX8-NEXT:    buffer_store_dword v8, v5, s[0:3], 0 offen
8356 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x54, v0
8357 ; GFX8-NEXT:    buffer_store_dword v28, v5, s[0:3], 0 offen
8358 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x50, v0
8359 ; GFX8-NEXT:    buffer_store_dword v27, v5, s[0:3], 0 offen
8360 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x4c, v0
8361 ; GFX8-NEXT:    buffer_store_dword v15, v5, s[0:3], 0 offen
8362 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x48, v0
8363 ; GFX8-NEXT:    buffer_store_dword v14, v5, s[0:3], 0 offen
8364 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x44, v0
8365 ; GFX8-NEXT:    buffer_store_dword v11, v5, s[0:3], 0 offen
8366 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 64, v0
8367 ; GFX8-NEXT:    buffer_store_dword v10, v5, s[0:3], 0 offen
8368 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 60, v0
8369 ; GFX8-NEXT:    buffer_store_dword v26, v5, s[0:3], 0 offen
8370 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 56, v0
8371 ; GFX8-NEXT:    buffer_store_dword v25, v5, s[0:3], 0 offen
8372 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 52, v0
8373 ; GFX8-NEXT:    buffer_store_dword v24, v5, s[0:3], 0 offen
8374 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 48, v0
8375 ; GFX8-NEXT:    buffer_store_dword v23, v5, s[0:3], 0 offen
8376 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 44, v0
8377 ; GFX8-NEXT:    buffer_store_dword v22, v5, s[0:3], 0 offen
8378 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 40, v0
8379 ; GFX8-NEXT:    buffer_store_dword v21, v5, s[0:3], 0 offen
8380 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 36, v0
8381 ; GFX8-NEXT:    buffer_store_dword v20, v5, s[0:3], 0 offen
8382 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 32, v0
8383 ; GFX8-NEXT:    buffer_store_dword v19, v5, s[0:3], 0 offen
8384 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 28, v0
8385 ; GFX8-NEXT:    buffer_store_dword v18, v5, s[0:3], 0 offen
8386 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 24, v0
8387 ; GFX8-NEXT:    buffer_store_dword v17, v5, s[0:3], 0 offen
8388 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 20, v0
8389 ; GFX8-NEXT:    buffer_store_dword v4, v5, s[0:3], 0 offen
8390 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v0
8391 ; GFX8-NEXT:    buffer_store_dword v3, v4, s[0:3], 0 offen
8392 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 12, v0
8393 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 8, v0
8394 ; GFX8-NEXT:    buffer_store_dword v2, v3, s[0:3], 0 offen
8395 ; GFX8-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen
8396 ; GFX8-NEXT:    buffer_load_dword v57, off, s[0:3], s32 ; 4-byte Folded Reload
8397 ; GFX8-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
8398 ; GFX8-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:8 ; 4-byte Folded Reload
8399 ; GFX8-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:12 ; 4-byte Folded Reload
8400 ; GFX8-NEXT:    buffer_load_dword v45, off, s[0:3], s32 offset:16 ; 4-byte Folded Reload
8401 ; GFX8-NEXT:    buffer_load_dword v44, off, s[0:3], s32 offset:20 ; 4-byte Folded Reload
8402 ; GFX8-NEXT:    buffer_load_dword v43, off, s[0:3], s32 offset:24 ; 4-byte Folded Reload
8403 ; GFX8-NEXT:    buffer_load_dword v42, off, s[0:3], s32 offset:28 ; 4-byte Folded Reload
8404 ; GFX8-NEXT:    buffer_load_dword v41, off, s[0:3], s32 offset:32 ; 4-byte Folded Reload
8405 ; GFX8-NEXT:    buffer_load_dword v40, off, s[0:3], s32 offset:36 ; 4-byte Folded Reload
8406 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8407 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
8409 ; GFX9-LABEL: global_extload_v32bf16_to_v32f64:
8410 ; GFX9:       ; %bb.0:
8411 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8412 ; GFX9-NEXT:    global_load_ushort v21, v[1:2], off offset:62
8413 ; GFX9-NEXT:    global_load_ushort v23, v[1:2], off offset:60
8414 ; GFX9-NEXT:    global_load_ushort v24, v[1:2], off offset:58
8415 ; GFX9-NEXT:    global_load_ushort v25, v[1:2], off offset:56
8416 ; GFX9-NEXT:    global_load_ushort v26, v[1:2], off offset:54
8417 ; GFX9-NEXT:    global_load_ushort v27, v[1:2], off offset:52
8418 ; GFX9-NEXT:    global_load_ushort v28, v[1:2], off offset:50
8419 ; GFX9-NEXT:    global_load_ushort v29, v[1:2], off offset:48
8420 ; GFX9-NEXT:    global_load_ushort v30, v[1:2], off offset:46
8421 ; GFX9-NEXT:    global_load_ushort v31, v[1:2], off offset:44
8422 ; GFX9-NEXT:    global_load_ushort v32, v[1:2], off offset:42
8423 ; GFX9-NEXT:    global_load_ushort v33, v[1:2], off offset:40
8424 ; GFX9-NEXT:    global_load_ushort v34, v[1:2], off offset:38
8425 ; GFX9-NEXT:    global_load_ushort v19, v[1:2], off
8426 ; GFX9-NEXT:    global_load_ushort v20, v[1:2], off offset:36
8427 ; GFX9-NEXT:    global_load_ushort v17, v[1:2], off offset:2
8428 ; GFX9-NEXT:    global_load_ushort v18, v[1:2], off offset:4
8429 ; GFX9-NEXT:    global_load_ushort v16, v[1:2], off offset:34
8430 ; GFX9-NEXT:    global_load_ushort v11, v[1:2], off offset:32
8431 ; GFX9-NEXT:    global_load_ushort v13, v[1:2], off offset:6
8432 ; GFX9-NEXT:    global_load_ushort v14, v[1:2], off offset:8
8433 ; GFX9-NEXT:    global_load_ushort v15, v[1:2], off offset:30
8434 ; GFX9-NEXT:    global_load_ushort v3, v[1:2], off offset:16
8435 ; GFX9-NEXT:    global_load_ushort v4, v[1:2], off offset:18
8436 ; GFX9-NEXT:    global_load_ushort v5, v[1:2], off offset:20
8437 ; GFX9-NEXT:    global_load_ushort v6, v[1:2], off offset:22
8438 ; GFX9-NEXT:    global_load_ushort v8, v[1:2], off offset:24
8439 ; GFX9-NEXT:    global_load_ushort v10, v[1:2], off offset:26
8440 ; GFX9-NEXT:    global_load_ushort v12, v[1:2], off offset:28
8441 ; GFX9-NEXT:    global_load_ushort v9, v[1:2], off offset:10
8442 ; GFX9-NEXT:    global_load_ushort v7, v[1:2], off offset:12
8443 ; GFX9-NEXT:    s_nop 0
8444 ; GFX9-NEXT:    global_load_ushort v1, v[1:2], off offset:14
8445 ; GFX9-NEXT:    s_waitcnt vmcnt(31)
8446 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v21
8447 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v2
8448 ; GFX9-NEXT:    s_waitcnt vmcnt(30)
8449 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v23
8450 ; GFX9-NEXT:    s_waitcnt vmcnt(28)
8451 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v25
8452 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:252
8453 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:248
8454 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v2
8455 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v24
8456 ; GFX9-NEXT:    s_waitcnt vmcnt(29)
8457 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v26
8458 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:244
8459 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:240
8460 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v2
8461 ; GFX9-NEXT:    s_waitcnt vmcnt(30)
8462 ; GFX9-NEXT:    v_lshlrev_b32_e32 v25, 16, v27
8463 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:236
8464 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:232
8465 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v23
8466 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[23:24], v24
8467 ; GFX9-NEXT:    s_waitcnt vmcnt(31)
8468 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v28
8469 ; GFX9-NEXT:    s_waitcnt vmcnt(30)
8470 ; GFX9-NEXT:    v_lshlrev_b32_e32 v27, 16, v29
8471 ; GFX9-NEXT:    s_waitcnt vmcnt(29)
8472 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v30
8473 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:228
8474 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:224
8475 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v25
8476 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[25:26], v26
8477 ; GFX9-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:220
8478 ; GFX9-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:216
8479 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[23:24], v27
8480 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[27:28], v2
8481 ; GFX9-NEXT:    s_waitcnt vmcnt(28)
8482 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v19
8483 ; GFX9-NEXT:    s_waitcnt vmcnt(27)
8484 ; GFX9-NEXT:    v_lshlrev_b32_e32 v19, 16, v20
8485 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[19:20], v19
8486 ; GFX9-NEXT:    v_lshlrev_b32_e32 v29, 16, v31
8487 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v32
8488 ; GFX9-NEXT:    v_lshlrev_b32_e32 v31, 16, v33
8489 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v34
8490 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:212
8491 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:208
8492 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[21:22], v29
8493 ; GFX9-NEXT:    s_waitcnt vmcnt(26)
8494 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v16
8495 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[29:30], v30
8496 ; GFX9-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:204
8497 ; GFX9-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:200
8498 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[25:26], v31
8499 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[31:32], v32
8500 ; GFX9-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:196
8501 ; GFX9-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:192
8502 ; GFX9-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:188
8503 ; GFX9-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:184
8504 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:180
8505 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:176
8506 ; GFX9-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:172
8507 ; GFX9-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:168
8508 ; GFX9-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:164
8509 ; GFX9-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:160
8510 ; GFX9-NEXT:    buffer_store_dword v32, v0, s[0:3], 0 offen offset:156
8511 ; GFX9-NEXT:    buffer_store_dword v31, v0, s[0:3], 0 offen offset:152
8512 ; GFX9-NEXT:    v_lshlrev_b32_e32 v21, 16, v17
8513 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[16:17], v16
8514 ; GFX9-NEXT:    s_waitcnt vmcnt(39)
8515 ; GFX9-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
8516 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:148
8517 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:144
8518 ; GFX9-NEXT:    s_waitcnt vmcnt(40)
8519 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v13
8520 ; GFX9-NEXT:    s_waitcnt vmcnt(39)
8521 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v14
8522 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[13:14], v11
8523 ; GFX9-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:140
8524 ; GFX9-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:136
8525 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[16:17], v2
8526 ; GFX9-NEXT:    s_waitcnt vmcnt(40)
8527 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v15
8528 ; GFX9-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:132
8529 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[14:15], v2
8530 ; GFX9-NEXT:    s_waitcnt vmcnt(34)
8531 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v12
8532 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[11:12], v2
8533 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v10
8534 ; GFX9-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:128
8535 ; GFX9-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:124
8536 ; GFX9-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:120
8537 ; GFX9-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:116
8538 ; GFX9-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:112
8539 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[10:11], v2
8540 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
8541 ; GFX9-NEXT:    s_waitcnt vmcnt(38)
8542 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v9
8543 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v8
8544 ; GFX9-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:108
8545 ; GFX9-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:104
8546 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[10:11], v2
8547 ; GFX9-NEXT:    s_waitcnt vmcnt(39)
8548 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
8549 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
8550 ; GFX9-NEXT:    s_waitcnt vmcnt(38)
8551 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v1
8552 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v5
8553 ; GFX9-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:100
8554 ; GFX9-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:96
8555 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[6:7], v6
8556 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[8:9], v2
8557 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8558 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v3
8559 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
8560 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8561 ; GFX9-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:92
8562 ; GFX9-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:88
8563 ; GFX9-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:84
8564 ; GFX9-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:80
8565 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[1:2], v5
8566 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v18
8567 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[18:19], v21
8568 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[13:14], v22
8569 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[20:21], v20
8570 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[22:23], v23
8571 ; GFX9-NEXT:    v_cvt_f64_f32_e32 v[5:6], v12
8572 ; GFX9-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:76
8573 ; GFX9-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen offset:72
8574 ; GFX9-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:68
8575 ; GFX9-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:64
8576 ; GFX9-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:60
8577 ; GFX9-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:56
8578 ; GFX9-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:52
8579 ; GFX9-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:48
8580 ; GFX9-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:44
8581 ; GFX9-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:40
8582 ; GFX9-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:36
8583 ; GFX9-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:32
8584 ; GFX9-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:28
8585 ; GFX9-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:24
8586 ; GFX9-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:20
8587 ; GFX9-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:16
8588 ; GFX9-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:12
8589 ; GFX9-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:8
8590 ; GFX9-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:4
8591 ; GFX9-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen
8592 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
8593 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8595 ; GFX10-LABEL: global_extload_v32bf16_to_v32f64:
8596 ; GFX10:       ; %bb.0:
8597 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8598 ; GFX10-NEXT:    s_clause 0x1f
8599 ; GFX10-NEXT:    global_load_ushort v3, v[1:2], off
8600 ; GFX10-NEXT:    global_load_ushort v4, v[1:2], off offset:2
8601 ; GFX10-NEXT:    global_load_ushort v5, v[1:2], off offset:4
8602 ; GFX10-NEXT:    global_load_ushort v6, v[1:2], off offset:6
8603 ; GFX10-NEXT:    global_load_ushort v7, v[1:2], off offset:8
8604 ; GFX10-NEXT:    global_load_ushort v8, v[1:2], off offset:10
8605 ; GFX10-NEXT:    global_load_ushort v9, v[1:2], off offset:12
8606 ; GFX10-NEXT:    global_load_ushort v10, v[1:2], off offset:14
8607 ; GFX10-NEXT:    global_load_ushort v11, v[1:2], off offset:16
8608 ; GFX10-NEXT:    global_load_ushort v12, v[1:2], off offset:18
8609 ; GFX10-NEXT:    global_load_ushort v13, v[1:2], off offset:20
8610 ; GFX10-NEXT:    global_load_ushort v14, v[1:2], off offset:22
8611 ; GFX10-NEXT:    global_load_ushort v15, v[1:2], off offset:24
8612 ; GFX10-NEXT:    global_load_ushort v16, v[1:2], off offset:26
8613 ; GFX10-NEXT:    global_load_ushort v17, v[1:2], off offset:28
8614 ; GFX10-NEXT:    global_load_ushort v18, v[1:2], off offset:30
8615 ; GFX10-NEXT:    global_load_ushort v19, v[1:2], off offset:32
8616 ; GFX10-NEXT:    global_load_ushort v20, v[1:2], off offset:34
8617 ; GFX10-NEXT:    global_load_ushort v21, v[1:2], off offset:36
8618 ; GFX10-NEXT:    global_load_ushort v22, v[1:2], off offset:38
8619 ; GFX10-NEXT:    global_load_ushort v23, v[1:2], off offset:40
8620 ; GFX10-NEXT:    global_load_ushort v24, v[1:2], off offset:42
8621 ; GFX10-NEXT:    global_load_ushort v25, v[1:2], off offset:44
8622 ; GFX10-NEXT:    global_load_ushort v26, v[1:2], off offset:46
8623 ; GFX10-NEXT:    global_load_ushort v27, v[1:2], off offset:48
8624 ; GFX10-NEXT:    global_load_ushort v28, v[1:2], off offset:62
8625 ; GFX10-NEXT:    global_load_ushort v29, v[1:2], off offset:50
8626 ; GFX10-NEXT:    global_load_ushort v30, v[1:2], off offset:52
8627 ; GFX10-NEXT:    global_load_ushort v31, v[1:2], off offset:54
8628 ; GFX10-NEXT:    global_load_ushort v32, v[1:2], off offset:60
8629 ; GFX10-NEXT:    global_load_ushort v33, v[1:2], off offset:56
8630 ; GFX10-NEXT:    global_load_ushort v34, v[1:2], off offset:58
8631 ; GFX10-NEXT:    s_waitcnt vmcnt(31)
8632 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
8633 ; GFX10-NEXT:    s_waitcnt vmcnt(30)
8634 ; GFX10-NEXT:    v_lshlrev_b32_e32 v35, 16, v4
8635 ; GFX10-NEXT:    s_waitcnt vmcnt(29)
8636 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v5
8637 ; GFX10-NEXT:    s_waitcnt vmcnt(28)
8638 ; GFX10-NEXT:    v_lshlrev_b32_e32 v37, 16, v6
8639 ; GFX10-NEXT:    s_waitcnt vmcnt(27)
8640 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v7
8641 ; GFX10-NEXT:    s_waitcnt vmcnt(26)
8642 ; GFX10-NEXT:    v_lshlrev_b32_e32 v39, 16, v8
8643 ; GFX10-NEXT:    s_waitcnt vmcnt(25)
8644 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v9
8645 ; GFX10-NEXT:    s_waitcnt vmcnt(24)
8646 ; GFX10-NEXT:    v_lshlrev_b32_e32 v49, 16, v10
8647 ; GFX10-NEXT:    s_waitcnt vmcnt(23)
8648 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v11
8649 ; GFX10-NEXT:    s_waitcnt vmcnt(22)
8650 ; GFX10-NEXT:    v_lshlrev_b32_e32 v51, 16, v12
8651 ; GFX10-NEXT:    s_waitcnt vmcnt(21)
8652 ; GFX10-NEXT:    v_lshlrev_b32_e32 v52, 16, v13
8653 ; GFX10-NEXT:    s_waitcnt vmcnt(20)
8654 ; GFX10-NEXT:    v_lshlrev_b32_e32 v53, 16, v14
8655 ; GFX10-NEXT:    s_waitcnt vmcnt(19)
8656 ; GFX10-NEXT:    v_lshlrev_b32_e32 v54, 16, v15
8657 ; GFX10-NEXT:    s_waitcnt vmcnt(18)
8658 ; GFX10-NEXT:    v_lshlrev_b32_e32 v55, 16, v16
8659 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[11:12], v37
8660 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[15:16], v38
8661 ; GFX10-NEXT:    s_waitcnt vmcnt(15)
8662 ; GFX10-NEXT:    v_lshlrev_b32_e32 v66, 16, v19
8663 ; GFX10-NEXT:    s_waitcnt vmcnt(14)
8664 ; GFX10-NEXT:    v_lshlrev_b32_e32 v67, 16, v20
8665 ; GFX10-NEXT:    s_waitcnt vmcnt(13)
8666 ; GFX10-NEXT:    v_lshlrev_b32_e32 v64, 16, v21
8667 ; GFX10-NEXT:    s_waitcnt vmcnt(12)
8668 ; GFX10-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
8669 ; GFX10-NEXT:    s_waitcnt vmcnt(11)
8670 ; GFX10-NEXT:    v_lshlrev_b32_e32 v70, 16, v23
8671 ; GFX10-NEXT:    s_waitcnt vmcnt(10)
8672 ; GFX10-NEXT:    v_lshlrev_b32_e32 v71, 16, v24
8673 ; GFX10-NEXT:    s_waitcnt vmcnt(9)
8674 ; GFX10-NEXT:    v_lshlrev_b32_e32 v80, 16, v25
8675 ; GFX10-NEXT:    s_waitcnt vmcnt(8)
8676 ; GFX10-NEXT:    v_lshlrev_b32_e32 v81, 16, v26
8677 ; GFX10-NEXT:    s_waitcnt vmcnt(7)
8678 ; GFX10-NEXT:    v_lshlrev_b32_e32 v82, 16, v27
8679 ; GFX10-NEXT:    s_waitcnt vmcnt(6)
8680 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v28
8681 ; GFX10-NEXT:    s_waitcnt vmcnt(5)
8682 ; GFX10-NEXT:    v_lshlrev_b32_e32 v83, 16, v29
8683 ; GFX10-NEXT:    s_waitcnt vmcnt(4)
8684 ; GFX10-NEXT:    v_lshlrev_b32_e32 v84, 16, v30
8685 ; GFX10-NEXT:    s_waitcnt vmcnt(3)
8686 ; GFX10-NEXT:    v_lshlrev_b32_e32 v29, 16, v31
8687 ; GFX10-NEXT:    s_waitcnt vmcnt(2)
8688 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v32
8689 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[1:2], v1
8690 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8691 ; GFX10-NEXT:    v_lshlrev_b32_e32 v13, 16, v34
8692 ; GFX10-NEXT:    v_lshlrev_b32_e32 v21, 16, v33
8693 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[29:30], v29
8694 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[5:6], v5
8695 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[37:38], v84
8696 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[13:14], v13
8697 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[21:22], v21
8698 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[25:26], v50
8699 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[27:28], v51
8700 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[50:51], v82
8701 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[31:32], v52
8702 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[33:34], v53
8703 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[52:53], v80
8704 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[7:8], v35
8705 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[9:10], v36
8706 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[19:20], v48
8707 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[23:24], v49
8708 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[35:36], v54
8709 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[48:49], v55
8710 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[54:55], v70
8711 ; GFX10-NEXT:    v_lshlrev_b32_e32 v69, 16, v18
8712 ; GFX10-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:252
8713 ; GFX10-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:248
8714 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[1:2], v83
8715 ; GFX10-NEXT:    v_lshlrev_b32_e32 v68, 16, v17
8716 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[3:4], v3
8717 ; GFX10-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:244
8718 ; GFX10-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:240
8719 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[5:6], v81
8720 ; GFX10-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:236
8721 ; GFX10-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:232
8722 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[13:14], v71
8723 ; GFX10-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:228
8724 ; GFX10-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:224
8725 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[21:22], v65
8726 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[64:65], v64
8727 ; GFX10-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:220
8728 ; GFX10-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:216
8729 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[29:30], v67
8730 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[66:67], v66
8731 ; GFX10-NEXT:    buffer_store_dword v38, v0, s[0:3], 0 offen offset:212
8732 ; GFX10-NEXT:    buffer_store_dword v37, v0, s[0:3], 0 offen offset:208
8733 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[37:38], v69
8734 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[17:18], v39
8735 ; GFX10-NEXT:    v_cvt_f64_f32_e32 v[68:69], v68
8736 ; GFX10-NEXT:    buffer_store_dword v2, v0, s[0:3], 0 offen offset:204
8737 ; GFX10-NEXT:    buffer_store_dword v1, v0, s[0:3], 0 offen offset:200
8738 ; GFX10-NEXT:    buffer_store_dword v51, v0, s[0:3], 0 offen offset:196
8739 ; GFX10-NEXT:    buffer_store_dword v50, v0, s[0:3], 0 offen offset:192
8740 ; GFX10-NEXT:    buffer_store_dword v6, v0, s[0:3], 0 offen offset:188
8741 ; GFX10-NEXT:    buffer_store_dword v5, v0, s[0:3], 0 offen offset:184
8742 ; GFX10-NEXT:    buffer_store_dword v53, v0, s[0:3], 0 offen offset:180
8743 ; GFX10-NEXT:    buffer_store_dword v52, v0, s[0:3], 0 offen offset:176
8744 ; GFX10-NEXT:    buffer_store_dword v14, v0, s[0:3], 0 offen offset:172
8745 ; GFX10-NEXT:    buffer_store_dword v13, v0, s[0:3], 0 offen offset:168
8746 ; GFX10-NEXT:    buffer_store_dword v55, v0, s[0:3], 0 offen offset:164
8747 ; GFX10-NEXT:    buffer_store_dword v54, v0, s[0:3], 0 offen offset:160
8748 ; GFX10-NEXT:    buffer_store_dword v22, v0, s[0:3], 0 offen offset:156
8749 ; GFX10-NEXT:    buffer_store_dword v21, v0, s[0:3], 0 offen offset:152
8750 ; GFX10-NEXT:    buffer_store_dword v65, v0, s[0:3], 0 offen offset:148
8751 ; GFX10-NEXT:    buffer_store_dword v64, v0, s[0:3], 0 offen offset:144
8752 ; GFX10-NEXT:    buffer_store_dword v30, v0, s[0:3], 0 offen offset:140
8753 ; GFX10-NEXT:    buffer_store_dword v29, v0, s[0:3], 0 offen offset:136
8754 ; GFX10-NEXT:    buffer_store_dword v67, v0, s[0:3], 0 offen offset:132
8755 ; GFX10-NEXT:    buffer_store_dword v66, v0, s[0:3], 0 offen offset:128
8756 ; GFX10-NEXT:    buffer_store_dword v38, v0, s[0:3], 0 offen offset:124
8757 ; GFX10-NEXT:    buffer_store_dword v37, v0, s[0:3], 0 offen offset:120
8758 ; GFX10-NEXT:    buffer_store_dword v69, v0, s[0:3], 0 offen offset:116
8759 ; GFX10-NEXT:    buffer_store_dword v68, v0, s[0:3], 0 offen offset:112
8760 ; GFX10-NEXT:    buffer_store_dword v49, v0, s[0:3], 0 offen offset:108
8761 ; GFX10-NEXT:    buffer_store_dword v48, v0, s[0:3], 0 offen offset:104
8762 ; GFX10-NEXT:    buffer_store_dword v36, v0, s[0:3], 0 offen offset:100
8763 ; GFX10-NEXT:    buffer_store_dword v35, v0, s[0:3], 0 offen offset:96
8764 ; GFX10-NEXT:    buffer_store_dword v34, v0, s[0:3], 0 offen offset:92
8765 ; GFX10-NEXT:    buffer_store_dword v33, v0, s[0:3], 0 offen offset:88
8766 ; GFX10-NEXT:    buffer_store_dword v32, v0, s[0:3], 0 offen offset:84
8767 ; GFX10-NEXT:    buffer_store_dword v31, v0, s[0:3], 0 offen offset:80
8768 ; GFX10-NEXT:    buffer_store_dword v28, v0, s[0:3], 0 offen offset:76
8769 ; GFX10-NEXT:    buffer_store_dword v27, v0, s[0:3], 0 offen offset:72
8770 ; GFX10-NEXT:    buffer_store_dword v26, v0, s[0:3], 0 offen offset:68
8771 ; GFX10-NEXT:    buffer_store_dword v25, v0, s[0:3], 0 offen offset:64
8772 ; GFX10-NEXT:    buffer_store_dword v24, v0, s[0:3], 0 offen offset:60
8773 ; GFX10-NEXT:    buffer_store_dword v23, v0, s[0:3], 0 offen offset:56
8774 ; GFX10-NEXT:    buffer_store_dword v20, v0, s[0:3], 0 offen offset:52
8775 ; GFX10-NEXT:    buffer_store_dword v19, v0, s[0:3], 0 offen offset:48
8776 ; GFX10-NEXT:    buffer_store_dword v18, v0, s[0:3], 0 offen offset:44
8777 ; GFX10-NEXT:    buffer_store_dword v17, v0, s[0:3], 0 offen offset:40
8778 ; GFX10-NEXT:    buffer_store_dword v16, v0, s[0:3], 0 offen offset:36
8779 ; GFX10-NEXT:    buffer_store_dword v15, v0, s[0:3], 0 offen offset:32
8780 ; GFX10-NEXT:    buffer_store_dword v12, v0, s[0:3], 0 offen offset:28
8781 ; GFX10-NEXT:    buffer_store_dword v11, v0, s[0:3], 0 offen offset:24
8782 ; GFX10-NEXT:    buffer_store_dword v10, v0, s[0:3], 0 offen offset:20
8783 ; GFX10-NEXT:    buffer_store_dword v9, v0, s[0:3], 0 offen offset:16
8784 ; GFX10-NEXT:    buffer_store_dword v8, v0, s[0:3], 0 offen offset:12
8785 ; GFX10-NEXT:    buffer_store_dword v7, v0, s[0:3], 0 offen offset:8
8786 ; GFX10-NEXT:    buffer_store_dword v4, v0, s[0:3], 0 offen offset:4
8787 ; GFX10-NEXT:    buffer_store_dword v3, v0, s[0:3], 0 offen
8788 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8790 ; GFX11-LABEL: global_extload_v32bf16_to_v32f64:
8791 ; GFX11:       ; %bb.0:
8792 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8793 ; GFX11-NEXT:    s_clause 0x1f
8794 ; GFX11-NEXT:    global_load_u16 v3, v[1:2], off offset:12
8795 ; GFX11-NEXT:    global_load_u16 v4, v[1:2], off offset:8
8796 ; GFX11-NEXT:    global_load_u16 v5, v[1:2], off offset:4
8797 ; GFX11-NEXT:    global_load_u16 v6, v[1:2], off offset:2
8798 ; GFX11-NEXT:    global_load_u16 v7, v[1:2], off
8799 ; GFX11-NEXT:    global_load_u16 v8, v[1:2], off offset:6
8800 ; GFX11-NEXT:    global_load_u16 v9, v[1:2], off offset:10
8801 ; GFX11-NEXT:    global_load_u16 v10, v[1:2], off offset:14
8802 ; GFX11-NEXT:    global_load_u16 v11, v[1:2], off offset:28
8803 ; GFX11-NEXT:    global_load_u16 v12, v[1:2], off offset:24
8804 ; GFX11-NEXT:    global_load_u16 v13, v[1:2], off offset:20
8805 ; GFX11-NEXT:    global_load_u16 v14, v[1:2], off offset:18
8806 ; GFX11-NEXT:    global_load_u16 v15, v[1:2], off offset:16
8807 ; GFX11-NEXT:    global_load_u16 v16, v[1:2], off offset:22
8808 ; GFX11-NEXT:    global_load_u16 v17, v[1:2], off offset:26
8809 ; GFX11-NEXT:    global_load_u16 v18, v[1:2], off offset:30
8810 ; GFX11-NEXT:    global_load_u16 v19, v[1:2], off offset:44
8811 ; GFX11-NEXT:    global_load_u16 v20, v[1:2], off offset:40
8812 ; GFX11-NEXT:    global_load_u16 v21, v[1:2], off offset:36
8813 ; GFX11-NEXT:    global_load_u16 v22, v[1:2], off offset:34
8814 ; GFX11-NEXT:    global_load_u16 v23, v[1:2], off offset:32
8815 ; GFX11-NEXT:    global_load_u16 v24, v[1:2], off offset:38
8816 ; GFX11-NEXT:    global_load_u16 v25, v[1:2], off offset:42
8817 ; GFX11-NEXT:    global_load_u16 v26, v[1:2], off offset:46
8818 ; GFX11-NEXT:    global_load_u16 v27, v[1:2], off offset:60
8819 ; GFX11-NEXT:    global_load_u16 v28, v[1:2], off offset:56
8820 ; GFX11-NEXT:    global_load_u16 v29, v[1:2], off offset:52
8821 ; GFX11-NEXT:    global_load_u16 v30, v[1:2], off offset:50
8822 ; GFX11-NEXT:    global_load_u16 v31, v[1:2], off offset:48
8823 ; GFX11-NEXT:    global_load_u16 v32, v[1:2], off offset:54
8824 ; GFX11-NEXT:    global_load_u16 v33, v[1:2], off offset:58
8825 ; GFX11-NEXT:    global_load_u16 v1, v[1:2], off offset:62
8826 ; GFX11-NEXT:    s_waitcnt vmcnt(31)
8827 ; GFX11-NEXT:    v_lshlrev_b32_e32 v39, 16, v3
8828 ; GFX11-NEXT:    s_waitcnt vmcnt(30)
8829 ; GFX11-NEXT:    v_lshlrev_b32_e32 v38, 16, v4
8830 ; GFX11-NEXT:    s_waitcnt vmcnt(29)
8831 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
8832 ; GFX11-NEXT:    s_waitcnt vmcnt(28)
8833 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v6
8834 ; GFX11-NEXT:    s_waitcnt vmcnt(27)
8835 ; GFX11-NEXT:    v_lshlrev_b32_e32 v37, 16, v7
8836 ; GFX11-NEXT:    s_waitcnt vmcnt(26)
8837 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v8
8838 ; GFX11-NEXT:    s_waitcnt vmcnt(25)
8839 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
8840 ; GFX11-NEXT:    s_waitcnt vmcnt(24)
8841 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
8842 ; GFX11-NEXT:    s_waitcnt vmcnt(23)
8843 ; GFX11-NEXT:    v_lshlrev_b32_e32 v102, 16, v11
8844 ; GFX11-NEXT:    s_waitcnt vmcnt(22)
8845 ; GFX11-NEXT:    v_lshlrev_b32_e32 v101, 16, v12
8846 ; GFX11-NEXT:    s_waitcnt vmcnt(21)
8847 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
8848 ; GFX11-NEXT:    s_waitcnt vmcnt(20)
8849 ; GFX11-NEXT:    v_lshlrev_b32_e32 v14, 16, v14
8850 ; GFX11-NEXT:    s_waitcnt vmcnt(19)
8851 ; GFX11-NEXT:    v_lshlrev_b32_e32 v100, 16, v15
8852 ; GFX11-NEXT:    s_waitcnt vmcnt(18)
8853 ; GFX11-NEXT:    v_lshlrev_b32_e32 v34, 16, v16
8854 ; GFX11-NEXT:    s_waitcnt vmcnt(17)
8855 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v17
8856 ; GFX11-NEXT:    s_waitcnt vmcnt(16)
8857 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v18
8858 ; GFX11-NEXT:    s_waitcnt vmcnt(15)
8859 ; GFX11-NEXT:    v_lshlrev_b32_e32 v52, 16, v19
8860 ; GFX11-NEXT:    s_waitcnt vmcnt(14)
8861 ; GFX11-NEXT:    v_lshlrev_b32_e32 v49, 16, v20
8862 ; GFX11-NEXT:    s_waitcnt vmcnt(13)
8863 ; GFX11-NEXT:    v_lshlrev_b32_e32 v21, 16, v21
8864 ; GFX11-NEXT:    s_waitcnt vmcnt(12)
8865 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v22
8866 ; GFX11-NEXT:    s_waitcnt vmcnt(11)
8867 ; GFX11-NEXT:    v_lshlrev_b32_e32 v103, 16, v23
8868 ; GFX11-NEXT:    s_waitcnt vmcnt(10)
8869 ; GFX11-NEXT:    v_lshlrev_b32_e32 v48, 16, v24
8870 ; GFX11-NEXT:    s_waitcnt vmcnt(9)
8871 ; GFX11-NEXT:    v_lshlrev_b32_e32 v25, 16, v25
8872 ; GFX11-NEXT:    s_waitcnt vmcnt(8)
8873 ; GFX11-NEXT:    v_lshlrev_b32_e32 v26, 16, v26
8874 ; GFX11-NEXT:    s_waitcnt vmcnt(7)
8875 ; GFX11-NEXT:    v_lshlrev_b32_e32 v68, 16, v27
8876 ; GFX11-NEXT:    s_waitcnt vmcnt(6)
8877 ; GFX11-NEXT:    v_lshlrev_b32_e32 v65, 16, v28
8878 ; GFX11-NEXT:    s_waitcnt vmcnt(5)
8879 ; GFX11-NEXT:    v_lshlrev_b32_e32 v29, 16, v29
8880 ; GFX11-NEXT:    s_waitcnt vmcnt(4)
8881 ; GFX11-NEXT:    v_lshlrev_b32_e32 v30, 16, v30
8882 ; GFX11-NEXT:    s_waitcnt vmcnt(3)
8883 ; GFX11-NEXT:    v_lshlrev_b32_e32 v53, 16, v31
8884 ; GFX11-NEXT:    s_waitcnt vmcnt(2)
8885 ; GFX11-NEXT:    v_lshlrev_b32_e32 v64, 16, v32
8886 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
8887 ; GFX11-NEXT:    v_lshlrev_b32_e32 v33, 16, v33
8888 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8889 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
8890 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[96:97], v68
8891 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[84:85], v65
8892 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[82:83], v64
8893 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[86:87], v33
8894 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[98:99], v1
8895 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[80:81], v29
8896 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[70:71], v30
8897 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[68:69], v53
8898 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[66:67], v26
8899 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[64:65], v52
8900 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[54:55], v25
8901 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[52:53], v49
8902 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[50:51], v48
8903 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[48:49], v21
8904 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[23:24], v34
8905 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[35:36], v22
8906 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[33:34], v103
8907 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[31:32], v18
8908 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[29:30], v102
8909 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[27:28], v17
8910 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[25:26], v101
8911 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[21:22], v13
8912 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[19:20], v14
8913 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[17:18], v100
8914 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[15:16], v10
8915 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[13:14], v39
8916 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[11:12], v9
8917 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[9:10], v38
8918 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[7:8], v6
8919 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[5:6], v5
8920 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[3:4], v2
8921 ; GFX11-NEXT:    v_cvt_f64_f32_e32 v[1:2], v37
8922 ; GFX11-NEXT:    s_clause 0xf
8923 ; GFX11-NEXT:    scratch_store_b128 v0, v[96:99], off offset:240
8924 ; GFX11-NEXT:    scratch_store_b128 v0, v[84:87], off offset:224
8925 ; GFX11-NEXT:    scratch_store_b128 v0, v[80:83], off offset:208
8926 ; GFX11-NEXT:    scratch_store_b128 v0, v[68:71], off offset:192
8927 ; GFX11-NEXT:    scratch_store_b128 v0, v[64:67], off offset:176
8928 ; GFX11-NEXT:    scratch_store_b128 v0, v[52:55], off offset:160
8929 ; GFX11-NEXT:    scratch_store_b128 v0, v[48:51], off offset:144
8930 ; GFX11-NEXT:    scratch_store_b128 v0, v[33:36], off offset:128
8931 ; GFX11-NEXT:    scratch_store_b128 v0, v[29:32], off offset:112
8932 ; GFX11-NEXT:    scratch_store_b128 v0, v[25:28], off offset:96
8933 ; GFX11-NEXT:    scratch_store_b128 v0, v[21:24], off offset:80
8934 ; GFX11-NEXT:    scratch_store_b128 v0, v[17:20], off offset:64
8935 ; GFX11-NEXT:    scratch_store_b128 v0, v[13:16], off offset:48
8936 ; GFX11-NEXT:    scratch_store_b128 v0, v[9:12], off offset:32
8937 ; GFX11-NEXT:    scratch_store_b128 v0, v[5:8], off offset:16
8938 ; GFX11-NEXT:    scratch_store_b128 v0, v[1:4], off
8939 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8940   %load = load <32 x bfloat>, ptr addrspace(1) %ptr
8941   %fpext = fpext <32 x bfloat> %load to <32 x double>
8942   ret <32 x double> %fpext
8945 define bfloat @v_fadd_bf16(bfloat %a, bfloat %b) {
8946 ; GCN-LABEL: v_fadd_bf16:
8947 ; GCN:       ; %bb.0:
8948 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8949 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8950 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8951 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
8952 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
8953 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v1
8954 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
8955 ; GCN-NEXT:    s_setpc_b64 s[30:31]
8957 ; GFX7-LABEL: v_fadd_bf16:
8958 ; GFX7:       ; %bb.0:
8959 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8960 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8961 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8962 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
8963 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
8964 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v1
8965 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
8966 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
8968 ; GFX8-LABEL: v_fadd_bf16:
8969 ; GFX8:       ; %bb.0:
8970 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8971 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
8972 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
8973 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v1
8974 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
8975 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
8976 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
8977 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
8978 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
8979 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
8980 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
8981 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
8983 ; GFX9-LABEL: v_fadd_bf16:
8984 ; GFX9:       ; %bb.0:
8985 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8986 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
8987 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
8988 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v1
8989 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
8990 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
8991 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
8992 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
8993 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
8994 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
8995 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
8996 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
8998 ; GFX10-LABEL: v_fadd_bf16:
8999 ; GFX10:       ; %bb.0:
9000 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9001 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
9002 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
9003 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v1
9004 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
9005 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
9006 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9007 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
9008 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
9009 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9010 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9012 ; GFX11-LABEL: v_fadd_bf16:
9013 ; GFX11:       ; %bb.0:
9014 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9015 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
9016 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
9017 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9018 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v1
9019 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
9020 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
9021 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9022 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
9023 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
9024 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
9025 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9026 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9027 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9028   %op = fadd bfloat %a, %b
9029   ret bfloat %op
9032 define <2 x bfloat> @v_fadd_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
9033 ; GCN-LABEL: v_fadd_v2bf16:
9034 ; GCN:       ; %bb.0:
9035 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9036 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9037 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9038 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9039 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9040 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9041 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9042 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9043 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9044 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v3
9045 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v2
9046 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9047 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9048 ; GCN-NEXT:    s_setpc_b64 s[30:31]
9050 ; GFX7-LABEL: v_fadd_v2bf16:
9051 ; GFX7:       ; %bb.0:
9052 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9053 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9054 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9055 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9056 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9057 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9058 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9059 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9060 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9061 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v3
9062 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v2
9063 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9064 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9065 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
9067 ; GFX8-LABEL: v_fadd_v2bf16:
9068 ; GFX8:       ; %bb.0:
9069 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9070 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9071 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
9072 ; GFX8-NEXT:    v_add_f32_e32 v2, v3, v2
9073 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
9074 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
9075 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9076 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9077 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
9078 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v1
9079 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
9080 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
9081 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
9082 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
9083 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
9084 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
9085 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
9086 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9087 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
9088 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9089 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
9090 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9092 ; GFX9-LABEL: v_fadd_v2bf16:
9093 ; GFX9:       ; %bb.0:
9094 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9095 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9096 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
9097 ; GFX9-NEXT:    v_add_f32_e32 v2, v3, v2
9098 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9099 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9100 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
9101 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
9102 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v1
9103 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
9104 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
9105 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
9106 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
9107 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
9108 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
9109 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
9110 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9111 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
9112 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
9113 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
9114 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9116 ; GFX10-LABEL: v_fadd_v2bf16:
9117 ; GFX10:       ; %bb.0:
9118 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9119 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9120 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
9121 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9122 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9123 ; GFX10-NEXT:    v_add_f32_e32 v2, v3, v2
9124 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v1
9125 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
9126 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
9127 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
9128 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
9129 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
9130 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
9131 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
9132 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
9133 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9134 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
9135 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
9136 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9138 ; GFX11-LABEL: v_fadd_v2bf16:
9139 ; GFX11:       ; %bb.0:
9140 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9141 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9142 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9143 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
9144 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9145 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
9146 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v1
9147 ; GFX11-NEXT:    v_add_f32_e32 v2, v3, v2
9148 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
9149 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
9150 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
9151 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
9152 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
9153 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
9154 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
9155 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
9156 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
9157 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
9158 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9159 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
9160 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9161 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
9162 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9163   %op = fadd <2 x bfloat> %a, %b
9164   ret <2 x bfloat> %op
9167 define <3 x bfloat> @v_fadd_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b) {
9168 ; GCN-LABEL: v_fadd_v3bf16:
9169 ; GCN:       ; %bb.0:
9170 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9171 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9172 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9173 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9174 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9175 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9176 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9177 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9178 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9179 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9180 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9181 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9182 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9183 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v5
9184 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v4
9185 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v3
9186 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9187 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9188 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9189 ; GCN-NEXT:    s_setpc_b64 s[30:31]
9191 ; GFX7-LABEL: v_fadd_v3bf16:
9192 ; GFX7:       ; %bb.0:
9193 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9194 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9195 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9196 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9197 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9198 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9199 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9200 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9201 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9202 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9203 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9204 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9205 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9206 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v5
9207 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v4
9208 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v3
9209 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9210 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9211 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9212 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
9214 ; GFX8-LABEL: v_fadd_v3bf16:
9215 ; GFX8:       ; %bb.0:
9216 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9217 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
9218 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
9219 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
9220 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
9221 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
9222 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
9223 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
9224 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9225 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
9226 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
9227 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
9228 ; GFX8-NEXT:    v_add_f32_e32 v3, v4, v3
9229 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
9230 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
9231 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
9232 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9233 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9234 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
9235 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
9236 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
9237 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9238 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
9239 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
9240 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
9241 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
9242 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
9243 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9244 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
9245 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9246 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
9247 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
9248 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9250 ; GFX9-LABEL: v_fadd_v3bf16:
9251 ; GFX9:       ; %bb.0:
9252 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9253 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
9254 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
9255 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v3
9256 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
9257 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
9258 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
9259 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
9260 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9261 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
9262 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
9263 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
9264 ; GFX9-NEXT:    v_add_f32_e32 v3, v4, v3
9265 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9266 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9267 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
9268 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
9269 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
9270 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
9271 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9272 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
9273 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
9274 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
9275 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
9276 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9277 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
9278 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
9279 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
9280 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
9281 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9283 ; GFX10-LABEL: v_fadd_v3bf16:
9284 ; GFX10:       ; %bb.0:
9285 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9286 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
9287 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
9288 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9289 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9290 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
9291 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
9292 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v4
9293 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
9294 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
9295 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
9296 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
9297 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
9298 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
9299 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
9300 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
9301 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
9302 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
9303 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
9304 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
9305 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
9306 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9307 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
9308 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9309 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
9310 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc_lo
9311 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
9312 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9313   %op = fadd <3 x bfloat> %a, %b
9314   ret <3 x bfloat> %op
9317 define <4 x bfloat> @v_fadd_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
9318 ; GCN-LABEL: v_fadd_v4bf16:
9319 ; GCN:       ; %bb.0:
9320 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9321 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9322 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9323 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9324 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9325 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9326 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
9327 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9328 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
9329 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9330 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9331 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9332 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9333 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9334 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9335 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9336 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9337 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v7
9338 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v6
9339 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v5
9340 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v4
9341 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9342 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9343 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9344 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9345 ; GCN-NEXT:    s_setpc_b64 s[30:31]
9347 ; GFX7-LABEL: v_fadd_v4bf16:
9348 ; GFX7:       ; %bb.0:
9349 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9350 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9351 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9352 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9353 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9354 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9355 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
9356 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9357 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
9358 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9359 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9360 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9361 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9362 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9363 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9364 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9365 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9366 ; GFX7-NEXT:    v_add_f32_e32 v3, v3, v7
9367 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v6
9368 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v5
9369 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v4
9370 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9371 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9372 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9373 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9374 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
9376 ; GFX8-LABEL: v_fadd_v4bf16:
9377 ; GFX8:       ; %bb.0:
9378 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9379 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
9380 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
9381 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v4
9382 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
9383 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
9384 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9385 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9386 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
9387 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
9388 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
9389 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9390 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
9391 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
9392 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
9393 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
9394 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
9395 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
9396 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9397 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
9398 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
9399 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
9400 ; GFX8-NEXT:    v_add_f32_e32 v3, v5, v3
9401 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
9402 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
9403 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9404 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9405 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
9406 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
9407 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
9408 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9409 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
9410 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
9411 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
9412 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
9413 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
9414 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9415 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
9416 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
9417 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9418 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
9419 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v4, 16
9420 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9422 ; GFX9-LABEL: v_fadd_v4bf16:
9423 ; GFX9:       ; %bb.0:
9424 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9425 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
9426 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
9427 ; GFX9-NEXT:    v_add_f32_e32 v4, v5, v4
9428 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9429 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9430 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
9431 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
9432 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v3
9433 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
9434 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v4
9435 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9436 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
9437 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
9438 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
9439 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
9440 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9441 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
9442 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
9443 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
9444 ; GFX9-NEXT:    v_add_f32_e32 v3, v5, v3
9445 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9446 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9447 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
9448 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
9449 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
9450 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
9451 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9452 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
9453 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
9454 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
9455 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
9456 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9457 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
9458 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
9459 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
9460 ; GFX9-NEXT:    v_perm_b32 v1, v1, v4, s4
9461 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9463 ; GFX10-LABEL: v_fadd_v4bf16:
9464 ; GFX10:       ; %bb.0:
9465 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9466 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
9467 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
9468 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9469 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9470 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
9471 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
9472 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v4
9473 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9474 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9475 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
9476 ; GFX10-NEXT:    v_add_f32_e32 v3, v7, v6
9477 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
9478 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
9479 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
9480 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
9481 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
9482 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
9483 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
9484 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
9485 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9486 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
9487 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
9488 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
9489 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
9490 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
9491 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
9492 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
9493 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
9494 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9495 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
9496 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9497 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
9498 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
9499 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
9500 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9502 ; GFX11-LABEL: v_fadd_v4bf16:
9503 ; GFX11:       ; %bb.0:
9504 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9505 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
9506 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
9507 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9508 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9509 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
9510 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
9511 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
9512 ; GFX11-NEXT:    v_dual_add_f32 v0, v0, v2 :: v_dual_and_b32 v1, 0xffff0000, v1
9513 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9514 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
9515 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
9516 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
9517 ; GFX11-NEXT:    v_dual_add_f32 v3, v7, v6 :: v_dual_add_f32 v4, v5, v4
9518 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
9519 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
9520 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
9521 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
9522 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v4
9523 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
9524 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
9525 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
9526 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
9527 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9528 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_4)
9529 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
9530 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
9531 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
9532 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
9533 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
9534 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
9535 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9536 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
9537 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
9538 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9539 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
9540 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
9541 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9542 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
9543 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9544   %op = fadd <4 x bfloat> %a, %b
9545   ret <4 x bfloat> %op
9548 define <8 x bfloat> @v_fadd_v8bf16(<8 x bfloat> %a, <8 x bfloat> %b) {
9549 ; GCN-LABEL: v_fadd_v8bf16:
9550 ; GCN:       ; %bb.0:
9551 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9552 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9553 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
9554 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9555 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
9556 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9557 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
9558 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9559 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
9560 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9561 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
9562 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9563 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
9564 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
9565 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
9566 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
9567 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
9568 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
9569 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9570 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
9571 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9572 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
9573 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9574 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
9575 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9576 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
9577 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9578 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
9579 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9580 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
9581 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9582 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
9583 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9584 ; GCN-NEXT:    v_add_f32_e32 v7, v7, v15
9585 ; GCN-NEXT:    v_add_f32_e32 v6, v6, v14
9586 ; GCN-NEXT:    v_add_f32_e32 v5, v5, v13
9587 ; GCN-NEXT:    v_add_f32_e32 v4, v4, v12
9588 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v11
9589 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v10
9590 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v9
9591 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v8
9592 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9593 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9594 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9595 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9596 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9597 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9598 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9599 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9600 ; GCN-NEXT:    s_setpc_b64 s[30:31]
9602 ; GFX7-LABEL: v_fadd_v8bf16:
9603 ; GFX7:       ; %bb.0:
9604 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9605 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9606 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
9607 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9608 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
9609 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
9610 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
9611 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9612 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
9613 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9614 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
9615 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9616 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
9617 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
9618 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
9619 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
9620 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
9621 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
9622 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9623 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
9624 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9625 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
9626 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9627 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
9628 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9629 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
9630 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9631 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
9632 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9633 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
9634 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9635 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
9636 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9637 ; GFX7-NEXT:    v_add_f32_e32 v7, v7, v15
9638 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v14
9639 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v13
9640 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v12
9641 ; GFX7-NEXT:    v_add_f32_e32 v3, v3, v11
9642 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v10
9643 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v9
9644 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v8
9645 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9646 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9647 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9648 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9649 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9650 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9651 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9652 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9653 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
9655 ; GFX8-LABEL: v_fadd_v8bf16:
9656 ; GFX8:       ; %bb.0:
9657 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9658 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
9659 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
9660 ; GFX8-NEXT:    v_add_f32_e32 v8, v9, v8
9661 ; GFX8-NEXT:    v_bfe_u32 v9, v8, 16, 1
9662 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v8
9663 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9664 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9665 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x7fff, v9
9666 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v7
9667 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v8
9668 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
9669 ; GFX8-NEXT:    v_bfe_u32 v7, v3, 16, 1
9670 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
9671 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
9672 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v3
9673 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v7
9674 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v3
9675 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9676 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
9677 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
9678 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
9679 ; GFX8-NEXT:    v_add_f32_e32 v7, v9, v7
9680 ; GFX8-NEXT:    v_bfe_u32 v9, v7, 16, 1
9681 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v7
9682 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9683 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9684 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
9685 ; GFX8-NEXT:    v_add_f32_e32 v2, v2, v6
9686 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v7
9687 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
9688 ; GFX8-NEXT:    v_bfe_u32 v6, v2, 16, 1
9689 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
9690 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v2
9691 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
9692 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v2
9693 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
9694 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
9695 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
9696 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
9697 ; GFX8-NEXT:    v_add_f32_e32 v6, v9, v6
9698 ; GFX8-NEXT:    v_bfe_u32 v9, v6, 16, 1
9699 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v6
9700 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9701 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9702 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
9703 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v5
9704 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v6
9705 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
9706 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
9707 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
9708 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
9709 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
9710 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9711 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9712 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
9713 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
9714 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
9715 ; GFX8-NEXT:    v_add_f32_e32 v5, v9, v5
9716 ; GFX8-NEXT:    v_bfe_u32 v9, v5, 16, 1
9717 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v5
9718 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9719 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9720 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
9721 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v4
9722 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v5
9723 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9724 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
9725 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
9726 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
9727 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
9728 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v0
9729 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9730 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
9731 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
9732 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
9733 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
9734 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
9735 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v5, 16
9736 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
9737 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v7, 16
9738 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v8, 16
9739 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9741 ; GFX9-LABEL: v_fadd_v8bf16:
9742 ; GFX9:       ; %bb.0:
9743 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9744 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
9745 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
9746 ; GFX9-NEXT:    v_add_f32_e32 v8, v9, v8
9747 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9748 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9749 ; GFX9-NEXT:    v_bfe_u32 v9, v8, 16, 1
9750 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
9751 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v7
9752 ; GFX9-NEXT:    v_add3_u32 v9, v9, v8, s4
9753 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v8
9754 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
9755 ; GFX9-NEXT:    v_bfe_u32 v7, v3, 16, 1
9756 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
9757 ; GFX9-NEXT:    v_add3_u32 v7, v7, v3, s4
9758 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v3
9759 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
9760 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
9761 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
9762 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
9763 ; GFX9-NEXT:    v_add_f32_e32 v7, v9, v7
9764 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9765 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9766 ; GFX9-NEXT:    v_bfe_u32 v9, v7, 16, 1
9767 ; GFX9-NEXT:    v_add_f32_e32 v2, v2, v6
9768 ; GFX9-NEXT:    v_add3_u32 v9, v9, v7, s4
9769 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v7
9770 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
9771 ; GFX9-NEXT:    v_bfe_u32 v6, v2, 16, 1
9772 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
9773 ; GFX9-NEXT:    v_add3_u32 v6, v6, v2, s4
9774 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v2
9775 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
9776 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
9777 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
9778 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
9779 ; GFX9-NEXT:    v_add_f32_e32 v6, v9, v6
9780 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9781 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9782 ; GFX9-NEXT:    v_bfe_u32 v9, v6, 16, 1
9783 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v5
9784 ; GFX9-NEXT:    v_add3_u32 v9, v9, v6, s4
9785 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v6
9786 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
9787 ; GFX9-NEXT:    v_bfe_u32 v5, v1, 16, 1
9788 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
9789 ; GFX9-NEXT:    v_add3_u32 v5, v5, v1, s4
9790 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9791 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9792 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
9793 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
9794 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
9795 ; GFX9-NEXT:    v_add_f32_e32 v5, v9, v5
9796 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9797 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9798 ; GFX9-NEXT:    v_bfe_u32 v9, v5, 16, 1
9799 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v4
9800 ; GFX9-NEXT:    v_add3_u32 v9, v9, v5, s4
9801 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v5
9802 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9803 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
9804 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
9805 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
9806 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v0
9807 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
9808 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
9809 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
9810 ; GFX9-NEXT:    v_perm_b32 v0, v0, v5, s4
9811 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
9812 ; GFX9-NEXT:    v_perm_b32 v2, v2, v7, s4
9813 ; GFX9-NEXT:    v_perm_b32 v3, v3, v8, s4
9814 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
9816 ; GFX10-LABEL: v_fadd_v8bf16:
9817 ; GFX10:       ; %bb.0:
9818 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9819 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
9820 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
9821 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
9822 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9823 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
9824 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9825 ; GFX10-NEXT:    v_add_f32_e32 v8, v9, v8
9826 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
9827 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9828 ; GFX10-NEXT:    v_add_f32_e32 v3, v3, v7
9829 ; GFX10-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
9830 ; GFX10-NEXT:    v_bfe_u32 v11, v8, 16, 1
9831 ; GFX10-NEXT:    v_add_f32_e32 v7, v10, v9
9832 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v8
9833 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
9834 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v6
9835 ; GFX10-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
9836 ; GFX10-NEXT:    v_bfe_u32 v11, v3, 16, 1
9837 ; GFX10-NEXT:    v_bfe_u32 v12, v7, 16, 1
9838 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
9839 ; GFX10-NEXT:    v_bfe_u32 v13, v2, 16, 1
9840 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
9841 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
9842 ; GFX10-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
9843 ; GFX10-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
9844 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v7
9845 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
9846 ; GFX10-NEXT:    v_add_f32_e32 v6, v10, v6
9847 ; GFX10-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
9848 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9849 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9850 ; GFX10-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
9851 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v11, v12, vcc_lo
9852 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v2
9853 ; GFX10-NEXT:    v_bfe_u32 v12, v6, 16, 1
9854 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9855 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9856 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
9857 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v5
9858 ; GFX10-NEXT:    v_add_f32_e32 v5, v15, v13
9859 ; GFX10-NEXT:    v_or_b32_e32 v14, 0x400000, v3
9860 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v4
9861 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
9862 ; GFX10-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
9863 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v6
9864 ; GFX10-NEXT:    v_bfe_u32 v11, v1, 16, 1
9865 ; GFX10-NEXT:    v_bfe_u32 v12, v5, 16, 1
9866 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
9867 ; GFX10-NEXT:    v_bfe_u32 v13, v0, 16, 1
9868 ; GFX10-NEXT:    v_or_b32_e32 v15, 0x400000, v1
9869 ; GFX10-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
9870 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9871 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v4, v10, vcc_lo
9872 ; GFX10-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
9873 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
9874 ; GFX10-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
9875 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v0
9876 ; GFX10-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
9877 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
9878 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9879 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
9880 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9881 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
9882 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
9883 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
9884 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
9885 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
9886 ; GFX10-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
9887 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9889 ; GFX11-LABEL: v_fadd_v8bf16:
9890 ; GFX11:       ; %bb.0:
9891 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9892 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
9893 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
9894 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
9895 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
9896 ; GFX11-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
9897 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
9898 ; GFX11-NEXT:    v_dual_add_f32 v8, v9, v8 :: v_dual_and_b32 v7, 0xffff0000, v7
9899 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
9900 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
9901 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
9902 ; GFX11-NEXT:    v_bfe_u32 v11, v8, 16, 1
9903 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
9904 ; GFX11-NEXT:    v_add_f32_e32 v3, v3, v7
9905 ; GFX11-NEXT:    v_add_f32_e32 v7, v10, v9
9906 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v8
9907 ; GFX11-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
9908 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
9909 ; GFX11-NEXT:    v_bfe_u32 v11, v3, 16, 1
9910 ; GFX11-NEXT:    v_bfe_u32 v12, v7, 16, 1
9911 ; GFX11-NEXT:    v_or_b32_e32 v14, 0x400000, v3
9912 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
9913 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
9914 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
9915 ; GFX11-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
9916 ; GFX11-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
9917 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v7
9918 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
9919 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
9920 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9921 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
9922 ; GFX11-NEXT:    v_dual_cndmask_b32 v7, v11, v12 :: v_dual_add_f32 v2, v2, v6
9923 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
9924 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
9925 ; GFX11-NEXT:    v_bfe_u32 v13, v2, 16, 1
9926 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
9927 ; GFX11-NEXT:    v_add_f32_e32 v6, v10, v6
9928 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v2
9929 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
9930 ; GFX11-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
9931 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
9932 ; GFX11-NEXT:    v_bfe_u32 v12, v6, 16, 1
9933 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
9934 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v6
9935 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
9936 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
9937 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
9938 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9939 ; GFX11-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
9940 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
9941 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v4
9942 ; GFX11-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
9943 ; GFX11-NEXT:    v_dual_add_f32 v1, v1, v5 :: v_dual_cndmask_b32 v4, v4, v10
9944 ; GFX11-NEXT:    v_add_f32_e32 v5, v15, v13
9945 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
9946 ; GFX11-NEXT:    v_bfe_u32 v11, v1, 16, 1
9947 ; GFX11-NEXT:    v_bfe_u32 v13, v0, 16, 1
9948 ; GFX11-NEXT:    v_or_b32_e32 v15, 0x400000, v1
9949 ; GFX11-NEXT:    v_bfe_u32 v12, v5, 16, 1
9950 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
9951 ; GFX11-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
9952 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9953 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
9954 ; GFX11-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
9955 ; GFX11-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
9956 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v0
9957 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
9958 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
9959 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
9960 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
9961 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9962 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
9963 ; GFX11-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
9964 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
9965 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
9966 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
9967 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
9968 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9969 ; GFX11-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
9970 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9971   %op = fadd <8 x bfloat> %a, %b
9972   ret <8 x bfloat> %op
9975 define <16 x bfloat> @v_fadd_v16bf16(<16 x bfloat> %a, <16 x bfloat> %b) {
9976 ; GCN-LABEL: v_fadd_v16bf16:
9977 ; GCN:       ; %bb.0:
9978 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9979 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
9980 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
9981 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
9982 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
9983 ; GCN-NEXT:    v_add_f32_e32 v14, v14, v30
9984 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
9985 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
9986 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
9987 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
9988 ; GCN-NEXT:    v_add_f32_e32 v13, v13, v29
9989 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
9990 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
9991 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
9992 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
9993 ; GCN-NEXT:    v_add_f32_e32 v12, v12, v28
9994 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
9995 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
9996 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
9997 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
9998 ; GCN-NEXT:    v_add_f32_e32 v11, v11, v27
9999 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
10000 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
10001 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
10002 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10003 ; GCN-NEXT:    v_add_f32_e32 v10, v10, v26
10004 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
10005 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
10006 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
10007 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10008 ; GCN-NEXT:    v_add_f32_e32 v9, v9, v25
10009 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
10010 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
10011 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
10012 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10013 ; GCN-NEXT:    v_add_f32_e32 v8, v8, v24
10014 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
10015 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
10016 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
10017 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10018 ; GCN-NEXT:    v_add_f32_e32 v7, v7, v23
10019 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
10020 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
10021 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
10022 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10023 ; GCN-NEXT:    v_add_f32_e32 v6, v6, v22
10024 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
10025 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
10026 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
10027 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10028 ; GCN-NEXT:    v_add_f32_e32 v5, v5, v21
10029 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10030 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
10031 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10032 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
10033 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
10034 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
10035 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
10036 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
10037 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
10038 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
10039 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
10040 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
10041 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10042 ; GCN-NEXT:    v_add_f32_e32 v4, v4, v20
10043 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32
10044 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10045 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
10046 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10047 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
10048 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10049 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
10050 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10051 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
10052 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10053 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v19
10054 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v18
10055 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v17
10056 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v16
10057 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10058 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10059 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10060 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10061 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10062 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10063 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10064 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10065 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10066 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10067 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10068 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10069 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10070 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10071 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10072 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v20
10073 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
10074 ; GCN-NEXT:    v_add_f32_e32 v15, v15, v16
10075 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10076 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10077 ; GCN-NEXT:    s_setpc_b64 s[30:31]
10079 ; GFX7-LABEL: v_fadd_v16bf16:
10080 ; GFX7:       ; %bb.0:
10081 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10082 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
10083 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
10084 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
10085 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10086 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v22
10087 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32
10088 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
10089 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
10090 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
10091 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
10092 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
10093 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
10094 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
10095 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
10096 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
10097 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
10098 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
10099 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
10100 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
10101 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
10102 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
10103 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
10104 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
10105 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
10106 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
10107 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10108 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
10109 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10110 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
10111 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
10112 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
10113 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
10114 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
10115 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
10116 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
10117 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
10118 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10119 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
10120 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10121 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
10122 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10123 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
10124 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10125 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
10126 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10127 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
10128 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10129 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
10130 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10131 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
10132 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10133 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10134 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
10135 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10136 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
10137 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10138 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
10139 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10140 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
10141 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10142 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
10143 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10144 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
10145 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10146 ; GFX7-NEXT:    v_add_f32_e32 v14, v14, v30
10147 ; GFX7-NEXT:    v_add_f32_e32 v13, v13, v29
10148 ; GFX7-NEXT:    v_add_f32_e32 v12, v12, v28
10149 ; GFX7-NEXT:    v_add_f32_e32 v11, v11, v27
10150 ; GFX7-NEXT:    v_add_f32_e32 v10, v10, v26
10151 ; GFX7-NEXT:    v_add_f32_e32 v9, v9, v25
10152 ; GFX7-NEXT:    v_add_f32_e32 v8, v8, v24
10153 ; GFX7-NEXT:    v_add_f32_e32 v7, v7, v23
10154 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v21
10155 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v20
10156 ; GFX7-NEXT:    v_add_f32_e32 v3, v3, v19
10157 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v18
10158 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v17
10159 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v16
10160 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10161 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10162 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10163 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10164 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10165 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10166 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10167 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10168 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
10169 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
10170 ; GFX7-NEXT:    v_add_f32_e32 v15, v15, v22
10171 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10172 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10173 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10174 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10175 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10176 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10177 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10178 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10179 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10180 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
10182 ; GFX8-LABEL: v_fadd_v16bf16:
10183 ; GFX8:       ; %bb.0:
10184 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10185 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
10186 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
10187 ; GFX8-NEXT:    v_add_f32_e32 v16, v17, v16
10188 ; GFX8-NEXT:    v_bfe_u32 v17, v16, 16, 1
10189 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v16
10190 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
10191 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10192 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10193 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10194 ; GFX8-NEXT:    v_add_f32_e32 v7, v7, v15
10195 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v16
10196 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
10197 ; GFX8-NEXT:    v_bfe_u32 v15, v7, 16, 1
10198 ; GFX8-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
10199 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v7
10200 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
10201 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v7
10202 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
10203 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
10204 ; GFX8-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
10205 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
10206 ; GFX8-NEXT:    v_add_f32_e32 v15, v17, v15
10207 ; GFX8-NEXT:    v_bfe_u32 v17, v15, 16, 1
10208 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v15
10209 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10210 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10211 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10212 ; GFX8-NEXT:    v_add_f32_e32 v6, v6, v14
10213 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v15
10214 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
10215 ; GFX8-NEXT:    v_bfe_u32 v14, v6, 16, 1
10216 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
10217 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, v14, v6
10218 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, s4, v14
10219 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v6
10220 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
10221 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
10222 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
10223 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
10224 ; GFX8-NEXT:    v_add_f32_e32 v14, v17, v14
10225 ; GFX8-NEXT:    v_bfe_u32 v17, v14, 16, 1
10226 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v14
10227 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10228 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10229 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10230 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v13
10231 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v14
10232 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
10233 ; GFX8-NEXT:    v_bfe_u32 v13, v5, 16, 1
10234 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
10235 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, v13, v5
10236 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, s4, v13
10237 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v5
10238 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10239 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
10240 ; GFX8-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
10241 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
10242 ; GFX8-NEXT:    v_add_f32_e32 v13, v17, v13
10243 ; GFX8-NEXT:    v_bfe_u32 v17, v13, 16, 1
10244 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v13
10245 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10246 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10247 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10248 ; GFX8-NEXT:    v_add_f32_e32 v4, v4, v12
10249 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v13
10250 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
10251 ; GFX8-NEXT:    v_bfe_u32 v12, v4, 16, 1
10252 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
10253 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v4
10254 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, s4, v12
10255 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v4
10256 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
10257 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
10258 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
10259 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
10260 ; GFX8-NEXT:    v_add_f32_e32 v12, v17, v12
10261 ; GFX8-NEXT:    v_bfe_u32 v17, v12, 16, 1
10262 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v12
10263 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10264 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10265 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10266 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v11
10267 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v12
10268 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
10269 ; GFX8-NEXT:    v_bfe_u32 v11, v3, 16, 1
10270 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
10271 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v3
10272 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, s4, v11
10273 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v3
10274 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
10275 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
10276 ; GFX8-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
10277 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
10278 ; GFX8-NEXT:    v_add_f32_e32 v11, v17, v11
10279 ; GFX8-NEXT:    v_bfe_u32 v17, v11, 16, 1
10280 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v11
10281 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10282 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10283 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10284 ; GFX8-NEXT:    v_add_f32_e32 v2, v2, v10
10285 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v11
10286 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
10287 ; GFX8-NEXT:    v_bfe_u32 v10, v2, 16, 1
10288 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
10289 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v2
10290 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s4, v10
10291 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v2
10292 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
10293 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
10294 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
10295 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
10296 ; GFX8-NEXT:    v_add_f32_e32 v10, v17, v10
10297 ; GFX8-NEXT:    v_bfe_u32 v17, v10, 16, 1
10298 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v10
10299 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10300 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10301 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10302 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v9
10303 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v10
10304 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
10305 ; GFX8-NEXT:    v_bfe_u32 v9, v1, 16, 1
10306 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
10307 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v1
10308 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
10309 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v1
10310 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10311 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
10312 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
10313 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
10314 ; GFX8-NEXT:    v_add_f32_e32 v9, v17, v9
10315 ; GFX8-NEXT:    v_bfe_u32 v17, v9, 16, 1
10316 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v9
10317 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10318 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10319 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
10320 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v8
10321 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v9
10322 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
10323 ; GFX8-NEXT:    v_bfe_u32 v8, v0, 16, 1
10324 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
10325 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v0
10326 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s4, v8
10327 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v0
10328 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
10329 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
10330 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
10331 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
10332 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
10333 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
10334 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
10335 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
10336 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10337 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
10338 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v9, 16
10339 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v10, 16
10340 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v11, 16
10341 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v12, 16
10342 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v13, 16
10343 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v14, 16
10344 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v15, 16
10345 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v16, 16
10346 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
10348 ; GFX9-LABEL: v_fadd_v16bf16:
10349 ; GFX9:       ; %bb.0:
10350 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10351 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
10352 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
10353 ; GFX9-NEXT:    v_add_f32_e32 v16, v17, v16
10354 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10355 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10356 ; GFX9-NEXT:    v_bfe_u32 v17, v16, 16, 1
10357 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
10358 ; GFX9-NEXT:    v_add_f32_e32 v7, v7, v15
10359 ; GFX9-NEXT:    v_add3_u32 v17, v17, v16, s4
10360 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v16
10361 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
10362 ; GFX9-NEXT:    v_bfe_u32 v15, v7, 16, 1
10363 ; GFX9-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
10364 ; GFX9-NEXT:    v_add3_u32 v15, v15, v7, s4
10365 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v7
10366 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
10367 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
10368 ; GFX9-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
10369 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
10370 ; GFX9-NEXT:    v_add_f32_e32 v15, v17, v15
10371 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10372 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10373 ; GFX9-NEXT:    v_bfe_u32 v17, v15, 16, 1
10374 ; GFX9-NEXT:    v_add_f32_e32 v6, v6, v14
10375 ; GFX9-NEXT:    v_add3_u32 v17, v17, v15, s4
10376 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v15
10377 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
10378 ; GFX9-NEXT:    v_bfe_u32 v14, v6, 16, 1
10379 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
10380 ; GFX9-NEXT:    v_add3_u32 v14, v14, v6, s4
10381 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v6
10382 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
10383 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
10384 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
10385 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
10386 ; GFX9-NEXT:    v_add_f32_e32 v14, v17, v14
10387 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10388 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10389 ; GFX9-NEXT:    v_bfe_u32 v17, v14, 16, 1
10390 ; GFX9-NEXT:    v_add_f32_e32 v5, v5, v13
10391 ; GFX9-NEXT:    v_add3_u32 v17, v17, v14, s4
10392 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v14
10393 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
10394 ; GFX9-NEXT:    v_bfe_u32 v13, v5, 16, 1
10395 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
10396 ; GFX9-NEXT:    v_add3_u32 v13, v13, v5, s4
10397 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v5
10398 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10399 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
10400 ; GFX9-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
10401 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
10402 ; GFX9-NEXT:    v_add_f32_e32 v13, v17, v13
10403 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10404 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10405 ; GFX9-NEXT:    v_bfe_u32 v17, v13, 16, 1
10406 ; GFX9-NEXT:    v_add_f32_e32 v4, v4, v12
10407 ; GFX9-NEXT:    v_add3_u32 v17, v17, v13, s4
10408 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v13
10409 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
10410 ; GFX9-NEXT:    v_bfe_u32 v12, v4, 16, 1
10411 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
10412 ; GFX9-NEXT:    v_add3_u32 v12, v12, v4, s4
10413 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v4
10414 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
10415 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
10416 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
10417 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
10418 ; GFX9-NEXT:    v_add_f32_e32 v12, v17, v12
10419 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10420 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10421 ; GFX9-NEXT:    v_bfe_u32 v17, v12, 16, 1
10422 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v11
10423 ; GFX9-NEXT:    v_add3_u32 v17, v17, v12, s4
10424 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v12
10425 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
10426 ; GFX9-NEXT:    v_bfe_u32 v11, v3, 16, 1
10427 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
10428 ; GFX9-NEXT:    v_add3_u32 v11, v11, v3, s4
10429 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v3
10430 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
10431 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
10432 ; GFX9-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
10433 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
10434 ; GFX9-NEXT:    v_add_f32_e32 v11, v17, v11
10435 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10436 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10437 ; GFX9-NEXT:    v_bfe_u32 v17, v11, 16, 1
10438 ; GFX9-NEXT:    v_add_f32_e32 v2, v2, v10
10439 ; GFX9-NEXT:    v_add3_u32 v17, v17, v11, s4
10440 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v11
10441 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
10442 ; GFX9-NEXT:    v_bfe_u32 v10, v2, 16, 1
10443 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
10444 ; GFX9-NEXT:    v_add3_u32 v10, v10, v2, s4
10445 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v2
10446 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
10447 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
10448 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
10449 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
10450 ; GFX9-NEXT:    v_add_f32_e32 v10, v17, v10
10451 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10452 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10453 ; GFX9-NEXT:    v_bfe_u32 v17, v10, 16, 1
10454 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v9
10455 ; GFX9-NEXT:    v_add3_u32 v17, v17, v10, s4
10456 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v10
10457 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
10458 ; GFX9-NEXT:    v_bfe_u32 v9, v1, 16, 1
10459 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
10460 ; GFX9-NEXT:    v_add3_u32 v9, v9, v1, s4
10461 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v1
10462 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10463 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
10464 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
10465 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
10466 ; GFX9-NEXT:    v_add_f32_e32 v9, v17, v9
10467 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10468 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10469 ; GFX9-NEXT:    v_bfe_u32 v17, v9, 16, 1
10470 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v8
10471 ; GFX9-NEXT:    v_add3_u32 v17, v17, v9, s4
10472 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v9
10473 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
10474 ; GFX9-NEXT:    v_bfe_u32 v8, v0, 16, 1
10475 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
10476 ; GFX9-NEXT:    v_add3_u32 v8, v8, v0, s4
10477 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v0
10478 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
10479 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
10480 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
10481 ; GFX9-NEXT:    v_perm_b32 v0, v0, v9, s4
10482 ; GFX9-NEXT:    v_perm_b32 v1, v1, v10, s4
10483 ; GFX9-NEXT:    v_perm_b32 v2, v2, v11, s4
10484 ; GFX9-NEXT:    v_perm_b32 v3, v3, v12, s4
10485 ; GFX9-NEXT:    v_perm_b32 v4, v4, v13, s4
10486 ; GFX9-NEXT:    v_perm_b32 v5, v5, v14, s4
10487 ; GFX9-NEXT:    v_perm_b32 v6, v6, v15, s4
10488 ; GFX9-NEXT:    v_perm_b32 v7, v7, v16, s4
10489 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
10491 ; GFX10-LABEL: v_fadd_v16bf16:
10492 ; GFX10:       ; %bb.0:
10493 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10494 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
10495 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
10496 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10497 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10498 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
10499 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10500 ; GFX10-NEXT:    v_add_f32_e32 v16, v17, v16
10501 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
10502 ; GFX10-NEXT:    v_add_f32_e32 v7, v7, v15
10503 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10504 ; GFX10-NEXT:    v_bfe_u32 v15, v16, 16, 1
10505 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v16
10506 ; GFX10-NEXT:    v_bfe_u32 v19, v7, 16, 1
10507 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
10508 ; GFX10-NEXT:    v_add_f32_e32 v17, v18, v17
10509 ; GFX10-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
10510 ; GFX10-NEXT:    v_add_f32_e32 v6, v6, v14
10511 ; GFX10-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
10512 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v7
10513 ; GFX10-NEXT:    v_bfe_u32 v21, v17, 16, 1
10514 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v15, v20, vcc_lo
10515 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
10516 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v5
10517 ; GFX10-NEXT:    v_or_b32_e32 v16, 0x400000, v17
10518 ; GFX10-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
10519 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10520 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
10521 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
10522 ; GFX10-NEXT:    v_bfe_u32 v18, v6, 16, 1
10523 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10524 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
10525 ; GFX10-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
10526 ; GFX10-NEXT:    v_add_f32_e32 v17, v20, v19
10527 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
10528 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v13
10529 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v14, v16, vcc_lo
10530 ; GFX10-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
10531 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v6
10532 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
10533 ; GFX10-NEXT:    v_bfe_u32 v20, v17, 16, 1
10534 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
10535 ; GFX10-NEXT:    v_bfe_u32 v21, v5, 16, 1
10536 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10537 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10538 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v16, v13, vcc_lo
10539 ; GFX10-NEXT:    v_add_f32_e32 v13, v19, v18
10540 ; GFX10-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
10541 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v17
10542 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
10543 ; GFX10-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
10544 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v5
10545 ; GFX10-NEXT:    v_bfe_u32 v21, v13, 16, 1
10546 ; GFX10-NEXT:    v_add_f32_e32 v4, v4, v12
10547 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
10548 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10549 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
10550 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
10551 ; GFX10-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
10552 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10553 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
10554 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v13
10555 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10556 ; GFX10-NEXT:    v_add_f32_e32 v12, v18, v12
10557 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
10558 ; GFX10-NEXT:    v_bfe_u32 v20, v4, 16, 1
10559 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
10560 ; GFX10-NEXT:    v_add_f32_e32 v3, v3, v11
10561 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v12
10562 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
10563 ; GFX10-NEXT:    v_bfe_u32 v17, v12, 16, 1
10564 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
10565 ; GFX10-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
10566 ; GFX10-NEXT:    v_bfe_u32 v20, v3, 16, 1
10567 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10568 ; GFX10-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
10569 ; GFX10-NEXT:    v_add_f32_e32 v18, v19, v18
10570 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10571 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
10572 ; GFX10-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
10573 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v3
10574 ; GFX10-NEXT:    v_bfe_u32 v23, v18, 16, 1
10575 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v10
10576 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
10577 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
10578 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v18
10579 ; GFX10-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
10580 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
10581 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10582 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
10583 ; GFX10-NEXT:    v_bfe_u32 v19, v2, 16, 1
10584 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
10585 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
10586 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10587 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v2
10588 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v4
10589 ; GFX10-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
10590 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
10591 ; GFX10-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
10592 ; GFX10-NEXT:    v_add_f32_e32 v19, v22, v20
10593 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
10594 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
10595 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10596 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10597 ; GFX10-NEXT:    v_bfe_u32 v23, v19, 16, 1
10598 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v9
10599 ; GFX10-NEXT:    v_add_f32_e32 v9, v22, v20
10600 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v19
10601 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v8
10602 ; GFX10-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
10603 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
10604 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
10605 ; GFX10-NEXT:    v_bfe_u32 v23, v9, 16, 1
10606 ; GFX10-NEXT:    v_or_b32_e32 v24, 0x400000, v9
10607 ; GFX10-NEXT:    v_or_b32_e32 v25, 0x400000, v0
10608 ; GFX10-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
10609 ; GFX10-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
10610 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v1
10611 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
10612 ; GFX10-NEXT:    v_bfe_u32 v20, v0, 16, 1
10613 ; GFX10-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
10614 ; GFX10-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
10615 ; GFX10-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
10616 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
10617 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
10618 ; GFX10-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
10619 ; GFX10-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
10620 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
10621 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
10622 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
10623 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
10624 ; GFX10-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
10625 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
10626 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
10627 ; GFX10-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
10628 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
10629 ; GFX10-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
10630 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10632 ; GFX11-LABEL: v_fadd_v16bf16:
10633 ; GFX11:       ; %bb.0:
10634 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10635 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
10636 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
10637 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10638 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
10639 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
10640 ; GFX11-NEXT:    v_dual_add_f32 v16, v17, v16 :: v_dual_and_b32 v15, 0xffff0000, v15
10641 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
10642 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10643 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v16
10644 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
10645 ; GFX11-NEXT:    v_add_f32_e32 v17, v18, v17
10646 ; GFX11-NEXT:    v_add_f32_e32 v6, v6, v14
10647 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
10648 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
10649 ; GFX11-NEXT:    v_bfe_u32 v21, v17, 16, 1
10650 ; GFX11-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
10651 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10652 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
10653 ; GFX11-NEXT:    v_add_f32_e32 v7, v7, v15
10654 ; GFX11-NEXT:    v_bfe_u32 v15, v16, 16, 1
10655 ; GFX11-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
10656 ; GFX11-NEXT:    v_or_b32_e32 v16, 0x400000, v17
10657 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
10658 ; GFX11-NEXT:    v_dual_cndmask_b32 v15, v15, v20 :: v_dual_lshlrev_b32 v20, 16, v5
10659 ; GFX11-NEXT:    v_bfe_u32 v19, v7, 16, 1
10660 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
10661 ; GFX11-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
10662 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v7
10663 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
10664 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
10665 ; GFX11-NEXT:    v_bfe_u32 v18, v6, 16, 1
10666 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
10667 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
10668 ; GFX11-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
10669 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
10670 ; GFX11-NEXT:    v_dual_add_f32 v17, v20, v19 :: v_dual_cndmask_b32 v14, v14, v16
10671 ; GFX11-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
10672 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
10673 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
10674 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10675 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10676 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10677 ; GFX11-NEXT:    v_bfe_u32 v20, v17, 16, 1
10678 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
10679 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
10680 ; GFX11-NEXT:    v_add_f32_e32 v4, v4, v12
10681 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
10682 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10683 ; GFX11-NEXT:    v_add_f32_e32 v5, v5, v13
10684 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v6
10685 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
10686 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v16, v13 :: v_dual_add_f32 v13, v19, v18
10687 ; GFX11-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
10688 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v17
10689 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
10690 ; GFX11-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
10691 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_4)
10692 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
10693 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
10694 ; GFX11-NEXT:    v_bfe_u32 v21, v5, 16, 1
10695 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v5
10696 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10697 ; GFX11-NEXT:    v_add_f32_e32 v12, v18, v12
10698 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
10699 ; GFX11-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
10700 ; GFX11-NEXT:    v_bfe_u32 v21, v13, 16, 1
10701 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
10702 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v12
10703 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
10704 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
10705 ; GFX11-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
10706 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v13
10707 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
10708 ; GFX11-NEXT:    v_bfe_u32 v20, v4, 16, 1
10709 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v4
10710 ; GFX11-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
10711 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
10712 ; GFX11-NEXT:    v_bfe_u32 v17, v12, 16, 1
10713 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
10714 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
10715 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10716 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
10717 ; GFX11-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
10718 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
10719 ; GFX11-NEXT:    v_add_f32_e32 v18, v19, v18
10720 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
10721 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
10722 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10723 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10724 ; GFX11-NEXT:    v_bfe_u32 v23, v18, 16, 1
10725 ; GFX11-NEXT:    v_or_b32_e32 v17, 0x400000, v18
10726 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
10727 ; GFX11-NEXT:    v_dual_add_f32 v2, v2, v10 :: v_dual_and_b32 v1, 0xffff0000, v1
10728 ; GFX11-NEXT:    v_add_f32_e32 v3, v3, v11
10729 ; GFX11-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
10730 ; GFX11-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
10731 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
10732 ; GFX11-NEXT:    v_bfe_u32 v20, v3, 16, 1
10733 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
10734 ; GFX11-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
10735 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v3
10736 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10737 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
10738 ; GFX11-NEXT:    v_bfe_u32 v19, v2, 16, 1
10739 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
10740 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
10741 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v2
10742 ; GFX11-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
10743 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
10744 ; GFX11-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
10745 ; GFX11-NEXT:    v_add_f32_e32 v19, v22, v20
10746 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
10747 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
10748 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10749 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
10750 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
10751 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10752 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10753 ; GFX11-NEXT:    v_bfe_u32 v23, v19, 16, 1
10754 ; GFX11-NEXT:    v_dual_add_f32 v0, v0, v8 :: v_dual_add_f32 v1, v1, v9
10755 ; GFX11-NEXT:    v_add_f32_e32 v9, v22, v20
10756 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
10757 ; GFX11-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
10758 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v19
10759 ; GFX11-NEXT:    v_or_b32_e32 v25, 0x400000, v0
10760 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
10761 ; GFX11-NEXT:    v_bfe_u32 v23, v9, 16, 1
10762 ; GFX11-NEXT:    v_or_b32_e32 v24, 0x400000, v9
10763 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
10764 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v1
10765 ; GFX11-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
10766 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
10767 ; GFX11-NEXT:    v_bfe_u32 v20, v0, 16, 1
10768 ; GFX11-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
10769 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
10770 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
10771 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
10772 ; GFX11-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
10773 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
10774 ; GFX11-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
10775 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
10776 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
10777 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
10778 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
10779 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
10780 ; GFX11-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
10781 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
10782 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
10783 ; GFX11-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
10784 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
10785 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10786 ; GFX11-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
10787 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10788   %op = fadd <16 x bfloat> %a, %b
10789   ret <16 x bfloat> %op
10792 define <32 x bfloat> @v_fadd_v32bf16(<32 x bfloat> %a, <32 x bfloat> %b) {
10793 ; GCN-LABEL: v_fadd_v32bf16:
10794 ; GCN:       ; %bb.0:
10795 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10796 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32
10797 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
10798 ; GCN-NEXT:    s_waitcnt vmcnt(1)
10799 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v31
10800 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10801 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
10802 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10803 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
10804 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:124
10805 ; GCN-NEXT:    v_add_f32_e32 v31, v31, v32
10806 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
10807 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
10808 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10809 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10810 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10811 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:120
10812 ; GCN-NEXT:    v_add_f32_e32 v30, v30, v32
10813 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
10814 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
10815 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10816 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10817 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10818 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:116
10819 ; GCN-NEXT:    v_add_f32_e32 v29, v29, v32
10820 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
10821 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
10822 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10823 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10824 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10825 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:112
10826 ; GCN-NEXT:    v_add_f32_e32 v28, v28, v32
10827 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
10828 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
10829 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10830 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10831 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10832 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:108
10833 ; GCN-NEXT:    v_add_f32_e32 v27, v27, v32
10834 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
10835 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
10836 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10837 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10838 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10839 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:104
10840 ; GCN-NEXT:    v_add_f32_e32 v26, v26, v32
10841 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
10842 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
10843 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10844 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10845 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10846 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:100
10847 ; GCN-NEXT:    v_add_f32_e32 v25, v25, v32
10848 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
10849 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
10850 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10851 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10852 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10853 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:96
10854 ; GCN-NEXT:    v_add_f32_e32 v24, v24, v32
10855 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
10856 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
10857 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10858 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10859 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10860 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:92
10861 ; GCN-NEXT:    v_add_f32_e32 v23, v23, v32
10862 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
10863 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
10864 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10865 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10866 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10867 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:88
10868 ; GCN-NEXT:    v_add_f32_e32 v22, v22, v32
10869 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
10870 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
10871 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10872 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10873 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10874 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:84
10875 ; GCN-NEXT:    v_add_f32_e32 v21, v21, v32
10876 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
10877 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
10878 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10879 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10880 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10881 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:80
10882 ; GCN-NEXT:    v_add_f32_e32 v20, v20, v32
10883 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
10884 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
10885 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10886 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10887 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10888 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:76
10889 ; GCN-NEXT:    v_add_f32_e32 v19, v19, v32
10890 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
10891 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
10892 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10893 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10894 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10895 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:72
10896 ; GCN-NEXT:    v_add_f32_e32 v18, v18, v32
10897 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
10898 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
10899 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10900 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10901 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10902 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:68
10903 ; GCN-NEXT:    v_add_f32_e32 v17, v17, v32
10904 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
10905 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
10906 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10907 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10908 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10909 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:64
10910 ; GCN-NEXT:    v_add_f32_e32 v16, v16, v32
10911 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
10912 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
10913 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10914 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10915 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10916 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:60
10917 ; GCN-NEXT:    v_add_f32_e32 v15, v15, v32
10918 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
10919 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
10920 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10921 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10922 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10923 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:56
10924 ; GCN-NEXT:    v_add_f32_e32 v14, v14, v32
10925 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
10926 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
10927 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10928 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10929 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10930 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:52
10931 ; GCN-NEXT:    v_add_f32_e32 v13, v13, v32
10932 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
10933 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
10934 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10935 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10936 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10937 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:48
10938 ; GCN-NEXT:    v_add_f32_e32 v12, v12, v32
10939 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
10940 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
10941 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10942 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10943 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10944 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:44
10945 ; GCN-NEXT:    v_add_f32_e32 v11, v11, v32
10946 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
10947 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
10948 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10949 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10950 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10951 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:40
10952 ; GCN-NEXT:    v_add_f32_e32 v10, v10, v32
10953 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
10954 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
10955 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10956 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10957 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10958 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:36
10959 ; GCN-NEXT:    v_add_f32_e32 v9, v9, v32
10960 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
10961 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
10962 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10963 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10964 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10965 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:32
10966 ; GCN-NEXT:    v_add_f32_e32 v8, v8, v32
10967 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
10968 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
10969 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10970 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10971 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10972 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:28
10973 ; GCN-NEXT:    v_add_f32_e32 v7, v7, v32
10974 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
10975 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
10976 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10977 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10978 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10979 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:24
10980 ; GCN-NEXT:    v_add_f32_e32 v6, v6, v32
10981 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
10982 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
10983 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10984 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10985 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10986 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:20
10987 ; GCN-NEXT:    v_add_f32_e32 v5, v5, v32
10988 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
10989 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
10990 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10991 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10992 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
10993 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:16
10994 ; GCN-NEXT:    v_add_f32_e32 v4, v4, v32
10995 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
10996 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
10997 ; GCN-NEXT:    s_waitcnt vmcnt(0)
10998 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
10999 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11000 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:12
11001 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v32
11002 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
11003 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11004 ; GCN-NEXT:    s_waitcnt vmcnt(0)
11005 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
11006 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11007 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
11008 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v32
11009 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11010 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11011 ; GCN-NEXT:    s_waitcnt vmcnt(0)
11012 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
11013 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11014 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:4
11015 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v32
11016 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11017 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11018 ; GCN-NEXT:    s_waitcnt vmcnt(0)
11019 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
11020 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11021 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v32
11022 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11023 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11024 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11025 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
11026 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
11027 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
11028 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11029 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11030 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11031 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11032 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11033 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11034 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11035 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11036 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
11037 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
11038 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11039 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11040 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11041 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
11042 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
11043 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
11044 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11045 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11046 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11047 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11048 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11049 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11050 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11051 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11052 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11053 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
11054 ; GCN-NEXT:    s_setpc_b64 s[30:31]
11056 ; GFX7-LABEL: v_fadd_v32bf16:
11057 ; GFX7:       ; %bb.0:
11058 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11059 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32
11060 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
11061 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
11062 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11063 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
11064 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11065 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
11066 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11067 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
11068 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11069 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
11070 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11071 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
11072 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11073 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
11074 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11075 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
11076 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11077 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
11078 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11079 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
11080 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
11081 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
11082 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
11083 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
11084 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
11085 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
11086 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11087 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
11088 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11089 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
11090 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11091 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
11092 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
11093 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
11094 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
11095 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
11096 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11097 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
11098 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11099 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
11100 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11101 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
11102 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11103 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
11104 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11105 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
11106 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11107 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
11108 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11109 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
11110 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11111 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
11112 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
11113 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
11114 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
11115 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
11116 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
11117 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
11118 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11119 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11120 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11121 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11122 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11123 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
11124 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
11125 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11126 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11127 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11128 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
11129 ; GFX7-NEXT:    v_add_f32_e32 v31, v31, v32
11130 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
11131 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
11132 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11133 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11134 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11135 ; GFX7-NEXT:    v_add_f32_e32 v30, v30, v32
11136 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:120
11137 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11138 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11139 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11140 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11141 ; GFX7-NEXT:    v_add_f32_e32 v29, v29, v32
11142 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:116
11143 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11144 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11145 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11146 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11147 ; GFX7-NEXT:    v_add_f32_e32 v28, v28, v32
11148 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:112
11149 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11150 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11151 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11152 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11153 ; GFX7-NEXT:    v_add_f32_e32 v27, v27, v32
11154 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:108
11155 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11156 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11157 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11158 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11159 ; GFX7-NEXT:    v_add_f32_e32 v26, v26, v32
11160 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:104
11161 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11162 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11163 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11164 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11165 ; GFX7-NEXT:    v_add_f32_e32 v25, v25, v32
11166 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:100
11167 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11168 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11169 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11170 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11171 ; GFX7-NEXT:    v_add_f32_e32 v24, v24, v32
11172 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:96
11173 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11174 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11175 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11176 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11177 ; GFX7-NEXT:    v_add_f32_e32 v23, v23, v32
11178 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:92
11179 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11180 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11181 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11182 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11183 ; GFX7-NEXT:    v_add_f32_e32 v22, v22, v32
11184 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:88
11185 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11186 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11187 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11188 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11189 ; GFX7-NEXT:    v_add_f32_e32 v21, v21, v32
11190 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:84
11191 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
11192 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11193 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11194 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11195 ; GFX7-NEXT:    v_add_f32_e32 v20, v20, v32
11196 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:80
11197 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
11198 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11199 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11200 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11201 ; GFX7-NEXT:    v_add_f32_e32 v19, v19, v32
11202 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:76
11203 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
11204 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11205 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11206 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11207 ; GFX7-NEXT:    v_add_f32_e32 v18, v18, v32
11208 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:72
11209 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11210 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11211 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11212 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11213 ; GFX7-NEXT:    v_add_f32_e32 v17, v17, v32
11214 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:68
11215 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11216 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11217 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11218 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11219 ; GFX7-NEXT:    v_add_f32_e32 v16, v16, v32
11220 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
11221 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11222 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11223 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11224 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11225 ; GFX7-NEXT:    v_add_f32_e32 v15, v15, v32
11226 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:60
11227 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
11228 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11229 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11230 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11231 ; GFX7-NEXT:    v_add_f32_e32 v14, v14, v32
11232 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:56
11233 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
11234 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11235 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11236 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11237 ; GFX7-NEXT:    v_add_f32_e32 v13, v13, v32
11238 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:52
11239 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11240 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11241 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11242 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11243 ; GFX7-NEXT:    v_add_f32_e32 v12, v12, v32
11244 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:48
11245 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11246 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11247 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11248 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11249 ; GFX7-NEXT:    v_add_f32_e32 v11, v11, v32
11250 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:44
11251 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11252 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11253 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11254 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11255 ; GFX7-NEXT:    v_add_f32_e32 v10, v10, v32
11256 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:40
11257 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11258 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11259 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11260 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11261 ; GFX7-NEXT:    v_add_f32_e32 v9, v9, v32
11262 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:36
11263 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11264 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11265 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11266 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11267 ; GFX7-NEXT:    v_add_f32_e32 v8, v8, v32
11268 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:32
11269 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11270 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11271 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11272 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11273 ; GFX7-NEXT:    v_add_f32_e32 v7, v7, v32
11274 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:28
11275 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11276 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11277 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11278 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11279 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v32
11280 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:24
11281 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11282 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11283 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11284 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11285 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v32
11286 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:20
11287 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
11288 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11289 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11290 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11291 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v32
11292 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:16
11293 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
11294 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11295 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11296 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11297 ; GFX7-NEXT:    v_add_f32_e32 v3, v3, v32
11298 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:12
11299 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
11300 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11301 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11302 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11303 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v32
11304 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8
11305 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11306 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11307 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11308 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11309 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v32
11310 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
11311 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11312 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11313 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
11314 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
11315 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v32
11316 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11317 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
11319 ; GFX8-LABEL: v_fadd_v32bf16:
11320 ; GFX8:       ; %bb.0:
11321 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11322 ; GFX8-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
11323 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
11324 ; GFX8-NEXT:    v_add_f32_e32 v31, v32, v31
11325 ; GFX8-NEXT:    v_bfe_u32 v32, v31, 16, 1
11326 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
11327 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, v32, v31
11328 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11329 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
11330 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, s4, v32
11331 ; GFX8-NEXT:    v_add_f32_e32 v14, v14, v30
11332 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v31
11333 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
11334 ; GFX8-NEXT:    v_bfe_u32 v30, v14, 16, 1
11335 ; GFX8-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
11336 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, v30, v14
11337 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, s4, v30
11338 ; GFX8-NEXT:    v_or_b32_e32 v32, 0x400000, v14
11339 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
11340 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
11341 ; GFX8-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
11342 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
11343 ; GFX8-NEXT:    v_add_f32_e32 v32, v32, v30
11344 ; GFX8-NEXT:    buffer_load_dword v30, off, s[0:3], s32
11345 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
11346 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
11347 ; GFX8-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11348 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11349 ; GFX8-NEXT:    v_add_f32_e32 v13, v13, v29
11350 ; GFX8-NEXT:    v_bfe_u32 v29, v13, 16, 1
11351 ; GFX8-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
11352 ; GFX8-NEXT:    v_alignbit_b32 v14, v14, v31, 16
11353 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11354 ; GFX8-NEXT:    v_lshlrev_b32_e32 v34, 16, v30
11355 ; GFX8-NEXT:    v_add_f32_e32 v33, v33, v34
11356 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11357 ; GFX8-NEXT:    v_add_f32_e32 v30, v15, v30
11358 ; GFX8-NEXT:    v_bfe_u32 v15, v33, 16, 1
11359 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v33
11360 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
11361 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v33
11362 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
11363 ; GFX8-NEXT:    v_bfe_u32 v33, v30, 16, 1
11364 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
11365 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v30
11366 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11367 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v30
11368 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
11369 ; GFX8-NEXT:    v_cndmask_b32_e32 v30, v33, v34, vcc
11370 ; GFX8-NEXT:    v_bfe_u32 v33, v32, 16, 1
11371 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v32
11372 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11373 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v32
11374 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
11375 ; GFX8-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
11376 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, v29, v13
11377 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, s4, v29
11378 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v13
11379 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
11380 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v29, v33, vcc
11381 ; GFX8-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
11382 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v12
11383 ; GFX8-NEXT:    v_add_f32_e32 v29, v33, v29
11384 ; GFX8-NEXT:    v_bfe_u32 v33, v29, 16, 1
11385 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v29
11386 ; GFX8-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11387 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11388 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11389 ; GFX8-NEXT:    v_add_f32_e32 v12, v12, v28
11390 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v29
11391 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
11392 ; GFX8-NEXT:    v_bfe_u32 v28, v12, 16, 1
11393 ; GFX8-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
11394 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, v28, v12
11395 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v28
11396 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v12
11397 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
11398 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
11399 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
11400 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
11401 ; GFX8-NEXT:    v_add_f32_e32 v28, v33, v28
11402 ; GFX8-NEXT:    v_bfe_u32 v33, v28, 16, 1
11403 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v28
11404 ; GFX8-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11405 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11406 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11407 ; GFX8-NEXT:    v_add_f32_e32 v11, v11, v27
11408 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v28
11409 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
11410 ; GFX8-NEXT:    v_bfe_u32 v27, v11, 16, 1
11411 ; GFX8-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
11412 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, v27, v11
11413 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, s4, v27
11414 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v11
11415 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
11416 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
11417 ; GFX8-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
11418 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
11419 ; GFX8-NEXT:    v_add_f32_e32 v27, v33, v27
11420 ; GFX8-NEXT:    v_bfe_u32 v33, v27, 16, 1
11421 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v27
11422 ; GFX8-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11423 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11424 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11425 ; GFX8-NEXT:    v_add_f32_e32 v10, v10, v26
11426 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v27
11427 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
11428 ; GFX8-NEXT:    v_bfe_u32 v26, v10, 16, 1
11429 ; GFX8-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
11430 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, v26, v10
11431 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, s4, v26
11432 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v10
11433 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
11434 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
11435 ; GFX8-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
11436 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
11437 ; GFX8-NEXT:    v_add_f32_e32 v26, v33, v26
11438 ; GFX8-NEXT:    v_bfe_u32 v33, v26, 16, 1
11439 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v26
11440 ; GFX8-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11441 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11442 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11443 ; GFX8-NEXT:    v_add_f32_e32 v9, v9, v25
11444 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v26
11445 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
11446 ; GFX8-NEXT:    v_bfe_u32 v25, v9, 16, 1
11447 ; GFX8-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
11448 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, v25, v9
11449 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, s4, v25
11450 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v9
11451 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
11452 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
11453 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
11454 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
11455 ; GFX8-NEXT:    v_add_f32_e32 v25, v33, v25
11456 ; GFX8-NEXT:    v_bfe_u32 v33, v25, 16, 1
11457 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v25
11458 ; GFX8-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11459 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11460 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11461 ; GFX8-NEXT:    v_add_f32_e32 v8, v8, v24
11462 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v25
11463 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
11464 ; GFX8-NEXT:    v_bfe_u32 v24, v8, 16, 1
11465 ; GFX8-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
11466 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, v24, v8
11467 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, s4, v24
11468 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v8
11469 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
11470 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
11471 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
11472 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
11473 ; GFX8-NEXT:    v_add_f32_e32 v24, v33, v24
11474 ; GFX8-NEXT:    v_bfe_u32 v33, v24, 16, 1
11475 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v24
11476 ; GFX8-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11477 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11478 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11479 ; GFX8-NEXT:    v_add_f32_e32 v7, v7, v23
11480 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v24
11481 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
11482 ; GFX8-NEXT:    v_bfe_u32 v23, v7, 16, 1
11483 ; GFX8-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
11484 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v7
11485 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, s4, v23
11486 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v7
11487 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
11488 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
11489 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
11490 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
11491 ; GFX8-NEXT:    v_add_f32_e32 v23, v33, v23
11492 ; GFX8-NEXT:    v_bfe_u32 v33, v23, 16, 1
11493 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v23
11494 ; GFX8-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11495 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11496 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11497 ; GFX8-NEXT:    v_add_f32_e32 v6, v6, v22
11498 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v23
11499 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
11500 ; GFX8-NEXT:    v_bfe_u32 v22, v6, 16, 1
11501 ; GFX8-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
11502 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v6
11503 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, s4, v22
11504 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v6
11505 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
11506 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
11507 ; GFX8-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
11508 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
11509 ; GFX8-NEXT:    v_add_f32_e32 v22, v33, v22
11510 ; GFX8-NEXT:    v_bfe_u32 v33, v22, 16, 1
11511 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v22
11512 ; GFX8-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
11513 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
11514 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11515 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v21
11516 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v22
11517 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
11518 ; GFX8-NEXT:    v_bfe_u32 v21, v5, 16, 1
11519 ; GFX8-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
11520 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v5
11521 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, s4, v21
11522 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v5
11523 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11524 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
11525 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
11526 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
11527 ; GFX8-NEXT:    v_add_f32_e32 v21, v33, v21
11528 ; GFX8-NEXT:    v_bfe_u32 v33, v21, 16, 1
11529 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v21
11530 ; GFX8-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
11531 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
11532 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11533 ; GFX8-NEXT:    v_add_f32_e32 v4, v4, v20
11534 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v21
11535 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
11536 ; GFX8-NEXT:    v_bfe_u32 v20, v4, 16, 1
11537 ; GFX8-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
11538 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v4
11539 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, s4, v20
11540 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v4
11541 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
11542 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
11543 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
11544 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
11545 ; GFX8-NEXT:    v_add_f32_e32 v20, v33, v20
11546 ; GFX8-NEXT:    v_bfe_u32 v33, v20, 16, 1
11547 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v20
11548 ; GFX8-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
11549 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
11550 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11551 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v19
11552 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v20
11553 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
11554 ; GFX8-NEXT:    v_bfe_u32 v19, v3, 16, 1
11555 ; GFX8-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
11556 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v3
11557 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, s4, v19
11558 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v3
11559 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
11560 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
11561 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
11562 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
11563 ; GFX8-NEXT:    v_add_f32_e32 v19, v33, v19
11564 ; GFX8-NEXT:    v_bfe_u32 v33, v19, 16, 1
11565 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v19
11566 ; GFX8-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11567 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11568 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11569 ; GFX8-NEXT:    v_add_f32_e32 v2, v2, v18
11570 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v19
11571 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
11572 ; GFX8-NEXT:    v_bfe_u32 v18, v2, 16, 1
11573 ; GFX8-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
11574 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v2
11575 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, s4, v18
11576 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v2
11577 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
11578 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
11579 ; GFX8-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
11580 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
11581 ; GFX8-NEXT:    v_add_f32_e32 v18, v33, v18
11582 ; GFX8-NEXT:    v_bfe_u32 v33, v18, 16, 1
11583 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v18
11584 ; GFX8-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11585 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11586 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11587 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v17
11588 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v18
11589 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
11590 ; GFX8-NEXT:    v_bfe_u32 v17, v1, 16, 1
11591 ; GFX8-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
11592 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v1
11593 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
11594 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v1
11595 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
11596 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
11597 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
11598 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
11599 ; GFX8-NEXT:    v_add_f32_e32 v17, v33, v17
11600 ; GFX8-NEXT:    v_bfe_u32 v33, v17, 16, 1
11601 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v17
11602 ; GFX8-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11603 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11604 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
11605 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v16
11606 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v17
11607 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
11608 ; GFX8-NEXT:    v_bfe_u32 v16, v0, 16, 1
11609 ; GFX8-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
11610 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v0
11611 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, s4, v16
11612 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v0
11613 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
11614 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
11615 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
11616 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
11617 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
11618 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
11619 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
11620 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
11621 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
11622 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
11623 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
11624 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
11625 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
11626 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v30
11627 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
11628 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
11629 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
11630 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v17, 16
11631 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v18, 16
11632 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v19, 16
11633 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v20, 16
11634 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v21, 16
11635 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v22, 16
11636 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v23, 16
11637 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v24, 16
11638 ; GFX8-NEXT:    v_alignbit_b32 v8, v8, v25, 16
11639 ; GFX8-NEXT:    v_alignbit_b32 v9, v9, v26, 16
11640 ; GFX8-NEXT:    v_alignbit_b32 v10, v10, v27, 16
11641 ; GFX8-NEXT:    v_alignbit_b32 v11, v11, v28, 16
11642 ; GFX8-NEXT:    v_alignbit_b32 v12, v12, v29, 16
11643 ; GFX8-NEXT:    v_alignbit_b32 v13, v13, v32, 16
11644 ; GFX8-NEXT:    v_alignbit_b32 v15, v16, v15, 16
11645 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
11647 ; GFX9-LABEL: v_fadd_v32bf16:
11648 ; GFX9:       ; %bb.0:
11649 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11650 ; GFX9-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
11651 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
11652 ; GFX9-NEXT:    v_add_f32_e32 v31, v32, v31
11653 ; GFX9-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11654 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
11655 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
11656 ; GFX9-NEXT:    v_bfe_u32 v32, v31, 16, 1
11657 ; GFX9-NEXT:    v_add_f32_e32 v14, v14, v30
11658 ; GFX9-NEXT:    v_add3_u32 v32, v32, v31, s4
11659 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v31
11660 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
11661 ; GFX9-NEXT:    v_bfe_u32 v30, v14, 16, 1
11662 ; GFX9-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
11663 ; GFX9-NEXT:    v_add3_u32 v30, v30, v14, s4
11664 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v14
11665 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
11666 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
11667 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
11668 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
11669 ; GFX9-NEXT:    v_add_f32_e32 v30, v32, v30
11670 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11671 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11672 ; GFX9-NEXT:    v_bfe_u32 v32, v30, 16, 1
11673 ; GFX9-NEXT:    v_add_f32_e32 v13, v13, v29
11674 ; GFX9-NEXT:    v_add3_u32 v32, v32, v30, s4
11675 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v30
11676 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
11677 ; GFX9-NEXT:    v_bfe_u32 v29, v13, 16, 1
11678 ; GFX9-NEXT:    v_cndmask_b32_e32 v30, v32, v33, vcc
11679 ; GFX9-NEXT:    v_add3_u32 v29, v29, v13, s4
11680 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v13
11681 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
11682 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v29, v32, vcc
11683 ; GFX9-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
11684 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v12
11685 ; GFX9-NEXT:    v_add_f32_e32 v32, v32, v29
11686 ; GFX9-NEXT:    buffer_load_dword v29, off, s[0:3], s32
11687 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
11688 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
11689 ; GFX9-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11690 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11691 ; GFX9-NEXT:    v_add_f32_e32 v12, v12, v28
11692 ; GFX9-NEXT:    v_bfe_u32 v28, v12, 16, 1
11693 ; GFX9-NEXT:    v_add3_u32 v28, v28, v12, s4
11694 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
11695 ; GFX9-NEXT:    v_lshlrev_b32_e32 v34, 16, v29
11696 ; GFX9-NEXT:    v_add_f32_e32 v33, v33, v34
11697 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11698 ; GFX9-NEXT:    v_add_f32_e32 v29, v15, v29
11699 ; GFX9-NEXT:    v_bfe_u32 v15, v33, 16, 1
11700 ; GFX9-NEXT:    v_add3_u32 v15, v15, v33, s4
11701 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v33
11702 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
11703 ; GFX9-NEXT:    v_bfe_u32 v33, v29, 16, 1
11704 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
11705 ; GFX9-NEXT:    v_add3_u32 v33, v33, v29, s4
11706 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v29
11707 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
11708 ; GFX9-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
11709 ; GFX9-NEXT:    v_bfe_u32 v33, v32, 16, 1
11710 ; GFX9-NEXT:    v_add3_u32 v33, v33, v32, s4
11711 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v32
11712 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
11713 ; GFX9-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
11714 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v12
11715 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
11716 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
11717 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
11718 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
11719 ; GFX9-NEXT:    v_add_f32_e32 v28, v33, v28
11720 ; GFX9-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11721 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11722 ; GFX9-NEXT:    v_bfe_u32 v33, v28, 16, 1
11723 ; GFX9-NEXT:    v_add_f32_e32 v11, v11, v27
11724 ; GFX9-NEXT:    v_add3_u32 v33, v33, v28, s4
11725 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v28
11726 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
11727 ; GFX9-NEXT:    v_bfe_u32 v27, v11, 16, 1
11728 ; GFX9-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
11729 ; GFX9-NEXT:    v_add3_u32 v27, v27, v11, s4
11730 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v11
11731 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
11732 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
11733 ; GFX9-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
11734 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
11735 ; GFX9-NEXT:    v_add_f32_e32 v27, v33, v27
11736 ; GFX9-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11737 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11738 ; GFX9-NEXT:    v_bfe_u32 v33, v27, 16, 1
11739 ; GFX9-NEXT:    v_add_f32_e32 v10, v10, v26
11740 ; GFX9-NEXT:    v_add3_u32 v33, v33, v27, s4
11741 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v27
11742 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
11743 ; GFX9-NEXT:    v_bfe_u32 v26, v10, 16, 1
11744 ; GFX9-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
11745 ; GFX9-NEXT:    v_add3_u32 v26, v26, v10, s4
11746 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v10
11747 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
11748 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
11749 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
11750 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
11751 ; GFX9-NEXT:    v_add_f32_e32 v26, v33, v26
11752 ; GFX9-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11753 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11754 ; GFX9-NEXT:    v_bfe_u32 v33, v26, 16, 1
11755 ; GFX9-NEXT:    v_add_f32_e32 v9, v9, v25
11756 ; GFX9-NEXT:    v_add3_u32 v33, v33, v26, s4
11757 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v26
11758 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
11759 ; GFX9-NEXT:    v_bfe_u32 v25, v9, 16, 1
11760 ; GFX9-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
11761 ; GFX9-NEXT:    v_add3_u32 v25, v25, v9, s4
11762 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v9
11763 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
11764 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
11765 ; GFX9-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
11766 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
11767 ; GFX9-NEXT:    v_add_f32_e32 v25, v33, v25
11768 ; GFX9-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11769 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11770 ; GFX9-NEXT:    v_bfe_u32 v33, v25, 16, 1
11771 ; GFX9-NEXT:    v_add_f32_e32 v8, v8, v24
11772 ; GFX9-NEXT:    v_add3_u32 v33, v33, v25, s4
11773 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v25
11774 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
11775 ; GFX9-NEXT:    v_bfe_u32 v24, v8, 16, 1
11776 ; GFX9-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
11777 ; GFX9-NEXT:    v_add3_u32 v24, v24, v8, s4
11778 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v8
11779 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
11780 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
11781 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
11782 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
11783 ; GFX9-NEXT:    v_add_f32_e32 v24, v33, v24
11784 ; GFX9-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11785 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11786 ; GFX9-NEXT:    v_bfe_u32 v33, v24, 16, 1
11787 ; GFX9-NEXT:    v_add_f32_e32 v7, v7, v23
11788 ; GFX9-NEXT:    v_add3_u32 v33, v33, v24, s4
11789 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v24
11790 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
11791 ; GFX9-NEXT:    v_bfe_u32 v23, v7, 16, 1
11792 ; GFX9-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
11793 ; GFX9-NEXT:    v_add3_u32 v23, v23, v7, s4
11794 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v7
11795 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
11796 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
11797 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
11798 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
11799 ; GFX9-NEXT:    v_add_f32_e32 v23, v33, v23
11800 ; GFX9-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11801 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11802 ; GFX9-NEXT:    v_bfe_u32 v33, v23, 16, 1
11803 ; GFX9-NEXT:    v_add_f32_e32 v6, v6, v22
11804 ; GFX9-NEXT:    v_add3_u32 v33, v33, v23, s4
11805 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v23
11806 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
11807 ; GFX9-NEXT:    v_bfe_u32 v22, v6, 16, 1
11808 ; GFX9-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
11809 ; GFX9-NEXT:    v_add3_u32 v22, v22, v6, s4
11810 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v6
11811 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
11812 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
11813 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
11814 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
11815 ; GFX9-NEXT:    v_add_f32_e32 v22, v33, v22
11816 ; GFX9-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
11817 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
11818 ; GFX9-NEXT:    v_bfe_u32 v33, v22, 16, 1
11819 ; GFX9-NEXT:    v_add_f32_e32 v5, v5, v21
11820 ; GFX9-NEXT:    v_add3_u32 v33, v33, v22, s4
11821 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v22
11822 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
11823 ; GFX9-NEXT:    v_bfe_u32 v21, v5, 16, 1
11824 ; GFX9-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
11825 ; GFX9-NEXT:    v_add3_u32 v21, v21, v5, s4
11826 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v5
11827 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11828 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
11829 ; GFX9-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
11830 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
11831 ; GFX9-NEXT:    v_add_f32_e32 v21, v33, v21
11832 ; GFX9-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
11833 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
11834 ; GFX9-NEXT:    v_bfe_u32 v33, v21, 16, 1
11835 ; GFX9-NEXT:    v_add_f32_e32 v4, v4, v20
11836 ; GFX9-NEXT:    v_add3_u32 v33, v33, v21, s4
11837 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v21
11838 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
11839 ; GFX9-NEXT:    v_bfe_u32 v20, v4, 16, 1
11840 ; GFX9-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
11841 ; GFX9-NEXT:    v_add3_u32 v20, v20, v4, s4
11842 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v4
11843 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
11844 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
11845 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
11846 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
11847 ; GFX9-NEXT:    v_add_f32_e32 v20, v33, v20
11848 ; GFX9-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
11849 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
11850 ; GFX9-NEXT:    v_bfe_u32 v33, v20, 16, 1
11851 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v19
11852 ; GFX9-NEXT:    v_add3_u32 v33, v33, v20, s4
11853 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v20
11854 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
11855 ; GFX9-NEXT:    v_bfe_u32 v19, v3, 16, 1
11856 ; GFX9-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
11857 ; GFX9-NEXT:    v_add3_u32 v19, v19, v3, s4
11858 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v3
11859 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
11860 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
11861 ; GFX9-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
11862 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
11863 ; GFX9-NEXT:    v_add_f32_e32 v19, v33, v19
11864 ; GFX9-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11865 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11866 ; GFX9-NEXT:    v_bfe_u32 v33, v19, 16, 1
11867 ; GFX9-NEXT:    v_add_f32_e32 v2, v2, v18
11868 ; GFX9-NEXT:    v_add3_u32 v33, v33, v19, s4
11869 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v19
11870 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
11871 ; GFX9-NEXT:    v_bfe_u32 v18, v2, 16, 1
11872 ; GFX9-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
11873 ; GFX9-NEXT:    v_add3_u32 v18, v18, v2, s4
11874 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v2
11875 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
11876 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
11877 ; GFX9-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
11878 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
11879 ; GFX9-NEXT:    v_add_f32_e32 v18, v33, v18
11880 ; GFX9-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11881 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11882 ; GFX9-NEXT:    v_bfe_u32 v33, v18, 16, 1
11883 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v17
11884 ; GFX9-NEXT:    v_add3_u32 v33, v33, v18, s4
11885 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v18
11886 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
11887 ; GFX9-NEXT:    v_bfe_u32 v17, v1, 16, 1
11888 ; GFX9-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
11889 ; GFX9-NEXT:    v_add3_u32 v17, v17, v1, s4
11890 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v1
11891 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
11892 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
11893 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
11894 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
11895 ; GFX9-NEXT:    v_add_f32_e32 v17, v33, v17
11896 ; GFX9-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11897 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11898 ; GFX9-NEXT:    v_bfe_u32 v33, v17, 16, 1
11899 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v16
11900 ; GFX9-NEXT:    v_add3_u32 v33, v33, v17, s4
11901 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v17
11902 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
11903 ; GFX9-NEXT:    v_bfe_u32 v16, v0, 16, 1
11904 ; GFX9-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
11905 ; GFX9-NEXT:    v_add3_u32 v16, v16, v0, s4
11906 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v0
11907 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
11908 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
11909 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
11910 ; GFX9-NEXT:    v_perm_b32 v0, v0, v17, s4
11911 ; GFX9-NEXT:    v_perm_b32 v1, v1, v18, s4
11912 ; GFX9-NEXT:    v_perm_b32 v2, v2, v19, s4
11913 ; GFX9-NEXT:    v_perm_b32 v3, v3, v20, s4
11914 ; GFX9-NEXT:    v_perm_b32 v4, v4, v21, s4
11915 ; GFX9-NEXT:    v_perm_b32 v5, v5, v22, s4
11916 ; GFX9-NEXT:    v_perm_b32 v6, v6, v23, s4
11917 ; GFX9-NEXT:    v_perm_b32 v7, v7, v24, s4
11918 ; GFX9-NEXT:    v_perm_b32 v8, v8, v25, s4
11919 ; GFX9-NEXT:    v_perm_b32 v9, v9, v26, s4
11920 ; GFX9-NEXT:    v_perm_b32 v10, v10, v27, s4
11921 ; GFX9-NEXT:    v_perm_b32 v11, v11, v28, s4
11922 ; GFX9-NEXT:    v_perm_b32 v12, v12, v32, s4
11923 ; GFX9-NEXT:    v_perm_b32 v13, v13, v30, s4
11924 ; GFX9-NEXT:    v_perm_b32 v14, v14, v31, s4
11925 ; GFX9-NEXT:    v_perm_b32 v15, v29, v15, s4
11926 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
11928 ; GFX10-LABEL: v_fadd_v32bf16:
11929 ; GFX10:       ; %bb.0:
11930 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11931 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32
11932 ; GFX10-NEXT:    v_lshlrev_b32_e32 v39, 16, v27
11933 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
11934 ; GFX10-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
11935 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
11936 ; GFX10-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
11937 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
11938 ; GFX10-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
11939 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
11940 ; GFX10-NEXT:    v_lshlrev_b32_e32 v37, 16, v28
11941 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v12
11942 ; GFX10-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
11943 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
11944 ; GFX10-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
11945 ; GFX10-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
11946 ; GFX10-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
11947 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
11948 ; GFX10-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
11949 ; GFX10-NEXT:    v_lshlrev_b32_e32 v54, 16, v8
11950 ; GFX10-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
11951 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
11952 ; GFX10-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
11953 ; GFX10-NEXT:    v_lshlrev_b32_e32 v64, 16, v7
11954 ; GFX10-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
11955 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
11956 ; GFX10-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
11957 ; GFX10-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
11958 ; GFX10-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
11959 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
11960 ; GFX10-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
11961 ; GFX10-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
11962 ; GFX10-NEXT:    v_add_f32_e32 v39, v48, v39
11963 ; GFX10-NEXT:    v_add_f32_e32 v11, v11, v27
11964 ; GFX10-NEXT:    v_add_f32_e32 v49, v50, v49
11965 ; GFX10-NEXT:    v_add_f32_e32 v10, v10, v26
11966 ; GFX10-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
11967 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
11968 ; GFX10-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
11969 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
11970 ; GFX10-NEXT:    v_add_f32_e32 v37, v38, v37
11971 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v18
11972 ; GFX10-NEXT:    v_add_f32_e32 v12, v12, v28
11973 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v2
11974 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
11975 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
11976 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v17
11977 ; GFX10-NEXT:    v_lshlrev_b32_e32 v27, 16, v1
11978 ; GFX10-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
11979 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11980 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v16
11981 ; GFX10-NEXT:    v_lshlrev_b32_e32 v26, 16, v0
11982 ; GFX10-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
11983 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11984 ; GFX10-NEXT:    v_add_f32_e32 v9, v9, v25
11985 ; GFX10-NEXT:    v_add_f32_e32 v25, v54, v53
11986 ; GFX10-NEXT:    v_add_f32_e32 v8, v8, v24
11987 ; GFX10-NEXT:    v_add_f32_e32 v24, v64, v55
11988 ; GFX10-NEXT:    v_add_f32_e32 v7, v7, v23
11989 ; GFX10-NEXT:    v_add_f32_e32 v23, v66, v65
11990 ; GFX10-NEXT:    v_add_f32_e32 v6, v6, v22
11991 ; GFX10-NEXT:    v_add_f32_e32 v22, v68, v67
11992 ; GFX10-NEXT:    v_bfe_u32 v53, v39, 16, 1
11993 ; GFX10-NEXT:    v_bfe_u32 v55, v11, 16, 1
11994 ; GFX10-NEXT:    v_bfe_u32 v65, v49, 16, 1
11995 ; GFX10-NEXT:    v_bfe_u32 v67, v10, 16, 1
11996 ; GFX10-NEXT:    v_lshlrev_b32_e32 v33, 16, v30
11997 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v14
11998 ; GFX10-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
11999 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
12000 ; GFX10-NEXT:    v_add_f32_e32 v35, v36, v35
12001 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v19
12002 ; GFX10-NEXT:    v_add_f32_e32 v13, v13, v29
12003 ; GFX10-NEXT:    v_lshlrev_b32_e32 v29, 16, v3
12004 ; GFX10-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
12005 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12006 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v18
12007 ; GFX10-NEXT:    v_add_f32_e32 v18, v27, v48
12008 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v17
12009 ; GFX10-NEXT:    v_add_f32_e32 v17, v26, v50
12010 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v16
12011 ; GFX10-NEXT:    v_or_b32_e32 v54, 0x400000, v39
12012 ; GFX10-NEXT:    v_or_b32_e32 v64, 0x400000, v11
12013 ; GFX10-NEXT:    v_or_b32_e32 v66, 0x400000, v49
12014 ; GFX10-NEXT:    v_or_b32_e32 v68, 0x400000, v10
12015 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v39, v39
12016 ; GFX10-NEXT:    v_add3_u32 v39, v53, v39, 0x7fff
12017 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v11, v11
12018 ; GFX10-NEXT:    v_add3_u32 v11, v55, v11, 0x7fff
12019 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v49, v49
12020 ; GFX10-NEXT:    v_add3_u32 v49, v65, v49, 0x7fff
12021 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v10, v10
12022 ; GFX10-NEXT:    v_add3_u32 v10, v67, v10, 0x7fff
12023 ; GFX10-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
12024 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
12025 ; GFX10-NEXT:    v_add_f32_e32 v33, v34, v33
12026 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v20
12027 ; GFX10-NEXT:    v_add_f32_e32 v14, v14, v30
12028 ; GFX10-NEXT:    v_lshlrev_b32_e32 v30, 16, v4
12029 ; GFX10-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
12030 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
12031 ; GFX10-NEXT:    v_add_f32_e32 v3, v3, v19
12032 ; GFX10-NEXT:    v_add_f32_e32 v19, v28, v38
12033 ; GFX10-NEXT:    v_bfe_u32 v38, v37, 16, 1
12034 ; GFX10-NEXT:    v_bfe_u32 v50, v12, 16, 1
12035 ; GFX10-NEXT:    v_cndmask_b32_e64 v39, v39, v54, s9
12036 ; GFX10-NEXT:    v_bfe_u32 v54, v18, 16, 1
12037 ; GFX10-NEXT:    v_cndmask_b32_e64 v11, v11, v64, s10
12038 ; GFX10-NEXT:    v_bfe_u32 v64, v1, 16, 1
12039 ; GFX10-NEXT:    v_cndmask_b32_e64 v49, v49, v66, s11
12040 ; GFX10-NEXT:    v_bfe_u32 v66, v17, 16, 1
12041 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v10, v68, s12
12042 ; GFX10-NEXT:    v_bfe_u32 v68, v0, 16, 1
12043 ; GFX10-NEXT:    v_add_f32_e32 v51, v52, v51
12044 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v21
12045 ; GFX10-NEXT:    v_add_f32_e32 v21, v30, v34
12046 ; GFX10-NEXT:    v_add_f32_e32 v4, v4, v20
12047 ; GFX10-NEXT:    v_add_f32_e32 v20, v29, v36
12048 ; GFX10-NEXT:    v_bfe_u32 v16, v33, 16, 1
12049 ; GFX10-NEXT:    v_bfe_u32 v27, v14, 16, 1
12050 ; GFX10-NEXT:    v_bfe_u32 v29, v35, 16, 1
12051 ; GFX10-NEXT:    v_bfe_u32 v34, v13, 16, 1
12052 ; GFX10-NEXT:    v_or_b32_e32 v48, 0x400000, v37
12053 ; GFX10-NEXT:    v_or_b32_e32 v52, 0x400000, v12
12054 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v37, v37
12055 ; GFX10-NEXT:    v_add3_u32 v37, v38, v37, 0x7fff
12056 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v12, v12
12057 ; GFX10-NEXT:    v_add3_u32 v12, v50, v12, 0x7fff
12058 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v18, v18
12059 ; GFX10-NEXT:    v_add3_u32 v54, v54, v18, 0x7fff
12060 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v18
12061 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v1, v1
12062 ; GFX10-NEXT:    v_add3_u32 v64, v64, v1, 0x7fff
12063 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v1
12064 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v17, v17
12065 ; GFX10-NEXT:    v_add3_u32 v66, v66, v17, 0x7fff
12066 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v17
12067 ; GFX10-NEXT:    v_cmp_u_f32_e64 s22, v0, v0
12068 ; GFX10-NEXT:    v_add3_u32 v68, v68, v0, 0x7fff
12069 ; GFX10-NEXT:    v_or_b32_e32 v0, 0x400000, v0
12070 ; GFX10-NEXT:    v_or_b32_e32 v26, 0x400000, v33
12071 ; GFX10-NEXT:    v_or_b32_e32 v28, 0x400000, v14
12072 ; GFX10-NEXT:    v_or_b32_e32 v30, 0x400000, v35
12073 ; GFX10-NEXT:    v_or_b32_e32 v36, 0x400000, v13
12074 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
12075 ; GFX10-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
12076 ; GFX10-NEXT:    v_bfe_u32 v33, v51, 16, 1
12077 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v14, v14
12078 ; GFX10-NEXT:    v_add3_u32 v14, v27, v14, 0x7fff
12079 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v35, v35
12080 ; GFX10-NEXT:    v_add3_u32 v29, v29, v35, 0x7fff
12081 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v13, v13
12082 ; GFX10-NEXT:    v_add3_u32 v13, v34, v13, 0x7fff
12083 ; GFX10-NEXT:    v_bfe_u32 v65, v24, 16, 1
12084 ; GFX10-NEXT:    v_cndmask_b32_e64 v37, v37, v48, s7
12085 ; GFX10-NEXT:    v_bfe_u32 v48, v19, 16, 1
12086 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, v12, v52, s8
12087 ; GFX10-NEXT:    v_bfe_u32 v52, v2, 16, 1
12088 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, v54, v18, s10
12089 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, v66, v17, s12
12090 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v68, v0, s22
12091 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v64, v1, s11
12092 ; GFX10-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
12093 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
12094 ; GFX10-NEXT:    v_or_b32_e32 v27, 0x400000, v51
12095 ; GFX10-NEXT:    v_bfe_u32 v35, v9, 16, 1
12096 ; GFX10-NEXT:    v_bfe_u32 v38, v25, 16, 1
12097 ; GFX10-NEXT:    v_or_b32_e32 v67, 0x400000, v24
12098 ; GFX10-NEXT:    v_cmp_u_f32_e64 s13, v51, v51
12099 ; GFX10-NEXT:    v_add3_u32 v33, v33, v51, 0x7fff
12100 ; GFX10-NEXT:    v_bfe_u32 v51, v7, 16, 1
12101 ; GFX10-NEXT:    v_cmp_u_f32_e64 s17, v24, v24
12102 ; GFX10-NEXT:    v_add3_u32 v24, v65, v24, 0x7fff
12103 ; GFX10-NEXT:    v_bfe_u32 v65, v6, 16, 1
12104 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v26, vcc_lo
12105 ; GFX10-NEXT:    v_bfe_u32 v26, v21, 16, 1
12106 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, v14, v28, s4
12107 ; GFX10-NEXT:    v_bfe_u32 v28, v4, 16, 1
12108 ; GFX10-NEXT:    v_cndmask_b32_e64 v29, v29, v30, s5
12109 ; GFX10-NEXT:    v_bfe_u32 v30, v20, 16, 1
12110 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, v13, v36, s6
12111 ; GFX10-NEXT:    v_bfe_u32 v36, v3, 16, 1
12112 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v19, v19
12113 ; GFX10-NEXT:    v_add3_u32 v48, v48, v19, 0x7fff
12114 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v19
12115 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v2, v2
12116 ; GFX10-NEXT:    v_add3_u32 v52, v52, v2, 0x7fff
12117 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v2
12118 ; GFX10-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
12119 ; GFX10-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
12120 ; GFX10-NEXT:    v_or_b32_e32 v34, 0x400000, v9
12121 ; GFX10-NEXT:    v_or_b32_e32 v50, 0x400000, v25
12122 ; GFX10-NEXT:    v_bfe_u32 v53, v8, 16, 1
12123 ; GFX10-NEXT:    v_cmp_u_f32_e64 s14, v9, v9
12124 ; GFX10-NEXT:    v_add3_u32 v9, v35, v9, 0x7fff
12125 ; GFX10-NEXT:    v_or_b32_e32 v35, 0x400000, v7
12126 ; GFX10-NEXT:    v_cmp_u_f32_e64 s15, v25, v25
12127 ; GFX10-NEXT:    v_add3_u32 v25, v38, v25, 0x7fff
12128 ; GFX10-NEXT:    v_bfe_u32 v38, v23, 16, 1
12129 ; GFX10-NEXT:    v_cmp_u_f32_e64 s18, v7, v7
12130 ; GFX10-NEXT:    v_add3_u32 v7, v51, v7, 0x7fff
12131 ; GFX10-NEXT:    v_or_b32_e32 v51, 0x400000, v6
12132 ; GFX10-NEXT:    v_cmp_u_f32_e64 s20, v6, v6
12133 ; GFX10-NEXT:    v_add3_u32 v6, v65, v6, 0x7fff
12134 ; GFX10-NEXT:    v_bfe_u32 v65, v5, 16, 1
12135 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v21, v21
12136 ; GFX10-NEXT:    v_add3_u32 v26, v26, v21, 0x7fff
12137 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v21
12138 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v4, v4
12139 ; GFX10-NEXT:    v_add3_u32 v28, v28, v4, 0x7fff
12140 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v4
12141 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v20, v20
12142 ; GFX10-NEXT:    v_add3_u32 v30, v30, v20, 0x7fff
12143 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v20
12144 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v3, v3
12145 ; GFX10-NEXT:    v_add3_u32 v36, v36, v3, 0x7fff
12146 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v3
12147 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, v48, v19, s8
12148 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v52, v2, s9
12149 ; GFX10-NEXT:    v_or_b32_e32 v55, 0x400000, v8
12150 ; GFX10-NEXT:    v_cmp_u_f32_e64 s16, v8, v8
12151 ; GFX10-NEXT:    v_add3_u32 v8, v53, v8, 0x7fff
12152 ; GFX10-NEXT:    v_or_b32_e32 v53, 0x400000, v23
12153 ; GFX10-NEXT:    v_cmp_u_f32_e64 s19, v23, v23
12154 ; GFX10-NEXT:    v_add3_u32 v23, v38, v23, 0x7fff
12155 ; GFX10-NEXT:    v_bfe_u32 v38, v22, 16, 1
12156 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
12157 ; GFX10-NEXT:    v_add3_u32 v65, v65, v5, 0x7fff
12158 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v5
12159 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, v26, v21, s4
12160 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v28, v4, s5
12161 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, v30, v20, s6
12162 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v36, v3, s7
12163 ; GFX10-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
12164 ; GFX10-NEXT:    v_cmp_u_f32_e64 s21, v22, v22
12165 ; GFX10-NEXT:    v_add3_u32 v38, v38, v22, 0x7fff
12166 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v22
12167 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v65, v5, vcc_lo
12168 ; GFX10-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
12169 ; GFX10-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
12170 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, v33, v27, s13
12171 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, v9, v34, s14
12172 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, v25, v50, s15
12173 ; GFX10-NEXT:    v_cndmask_b32_e64 v8, v8, v55, s16
12174 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, v24, v67, s17
12175 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v35, s18
12176 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, v23, v53, s19
12177 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v51, s20
12178 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, v38, v22, s21
12179 ; GFX10-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
12180 ; GFX10-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
12181 ; GFX10-NEXT:    v_perm_b32 v9, v9, v27, 0x7060302
12182 ; GFX10-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
12183 ; GFX10-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
12184 ; GFX10-NEXT:    v_perm_b32 v10, v10, v49, 0x7060302
12185 ; GFX10-NEXT:    v_perm_b32 v11, v11, v39, 0x7060302
12186 ; GFX10-NEXT:    v_perm_b32 v12, v12, v37, 0x7060302
12187 ; GFX10-NEXT:    v_perm_b32 v13, v13, v29, 0x7060302
12188 ; GFX10-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
12189 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
12190 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
12191 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v32
12192 ; GFX10-NEXT:    v_add_f32_e32 v17, v31, v17
12193 ; GFX10-NEXT:    v_add_f32_e32 v15, v15, v18
12194 ; GFX10-NEXT:    v_bfe_u32 v18, v17, 16, 1
12195 ; GFX10-NEXT:    v_bfe_u32 v19, v15, 16, 1
12196 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v17
12197 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v15
12198 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
12199 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v15, v15
12200 ; GFX10-NEXT:    v_add3_u32 v17, v18, v17, 0x7fff
12201 ; GFX10-NEXT:    v_add3_u32 v15, v19, v15, 0x7fff
12202 ; GFX10-NEXT:    v_cndmask_b32_e32 v17, v17, v20, vcc_lo
12203 ; GFX10-NEXT:    v_cndmask_b32_e64 v15, v15, v21, s4
12204 ; GFX10-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
12205 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12207 ; GFX11-LABEL: v_fadd_v32bf16:
12208 ; GFX11:       ; %bb.0:
12209 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12210 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32
12211 ; GFX11-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
12212 ; GFX11-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
12213 ; GFX11-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
12214 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
12215 ; GFX11-NEXT:    v_lshlrev_b32_e32 v83, 16, v17
12216 ; GFX11-NEXT:    v_lshlrev_b32_e32 v84, 16, v1
12217 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
12218 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12219 ; GFX11-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
12220 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v21 :: v_dual_and_b32 v26, 0xffff0000, v26
12221 ; GFX11-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
12222 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
12223 ; GFX11-NEXT:    v_dual_add_f32 v1, v1, v17 :: v_dual_and_b32 v24, 0xffff0000, v24
12224 ; GFX11-NEXT:    v_lshlrev_b32_e32 v71, 16, v19
12225 ; GFX11-NEXT:    v_bfe_u32 v103, v5, 16, 1
12226 ; GFX11-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
12227 ; GFX11-NEXT:    v_lshlrev_b32_e32 v81, 16, v18
12228 ; GFX11-NEXT:    v_bfe_u32 v135, v1, 16, 1
12229 ; GFX11-NEXT:    v_or_b32_e32 v112, 0x400000, v5
12230 ; GFX11-NEXT:    v_or_b32_e32 v144, 0x400000, v1
12231 ; GFX11-NEXT:    v_add3_u32 v103, v103, v5, 0x7fff
12232 ; GFX11-NEXT:    v_lshlrev_b32_e32 v80, 16, v3
12233 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12234 ; GFX11-NEXT:    v_add3_u32 v135, v135, v1, 0x7fff
12235 ; GFX11-NEXT:    v_lshlrev_b32_e32 v82, 16, v2
12236 ; GFX11-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
12237 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
12238 ; GFX11-NEXT:    v_dual_add_f32 v3, v3, v19 :: v_dual_lshlrev_b32 v54, 16, v8
12239 ; GFX11-NEXT:    v_lshlrev_b32_e32 v85, 16, v16
12240 ; GFX11-NEXT:    v_dual_add_f32 v19, v82, v81 :: v_dual_lshlrev_b32 v64, 16, v7
12241 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
12242 ; GFX11-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
12243 ; GFX11-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
12244 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
12245 ; GFX11-NEXT:    v_bfe_u32 v129, v19, 16, 1
12246 ; GFX11-NEXT:    v_or_b32_e32 v130, 0x400000, v19
12247 ; GFX11-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
12248 ; GFX11-NEXT:    v_bfe_u32 v119, v3, 16, 1
12249 ; GFX11-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
12250 ; GFX11-NEXT:    v_add3_u32 v129, v129, v19, 0x7fff
12251 ; GFX11-NEXT:    v_lshlrev_b32_e32 v86, 16, v0
12252 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
12253 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12254 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
12255 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
12256 ; GFX11-NEXT:    v_dual_add_f32 v17, v86, v85 :: v_dual_and_b32 v2, 0xffff0000, v2
12257 ; GFX11-NEXT:    v_dual_add_f32 v8, v8, v24 :: v_dual_lshlrev_b32 v39, 16, v27
12258 ; GFX11-NEXT:    v_or_b32_e32 v128, 0x400000, v3
12259 ; GFX11-NEXT:    v_add3_u32 v119, v119, v3, 0x7fff
12260 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
12261 ; GFX11-NEXT:    v_bfe_u32 v145, v17, 16, 1
12262 ; GFX11-NEXT:    v_or_b32_e32 v146, 0x400000, v17
12263 ; GFX11-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
12264 ; GFX11-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
12265 ; GFX11-NEXT:    v_lshlrev_b32_e32 v70, 16, v4
12266 ; GFX11-NEXT:    v_add3_u32 v145, v145, v17, 0x7fff
12267 ; GFX11-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
12268 ; GFX11-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
12269 ; GFX11-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
12270 ; GFX11-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
12271 ; GFX11-NEXT:    v_add_f32_e32 v2, v2, v18
12272 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v16
12273 ; GFX11-NEXT:    v_dual_add_f32 v24, v64, v55 :: v_dual_lshlrev_b32 v37, 16, v28
12274 ; GFX11-NEXT:    v_add_f32_e32 v7, v7, v23
12275 ; GFX11-NEXT:    v_dual_add_f32 v23, v66, v65 :: v_dual_add_f32 v18, v84, v83
12276 ; GFX11-NEXT:    v_dual_add_f32 v9, v9, v25 :: v_dual_and_b32 v28, 0xffff0000, v28
12277 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
12278 ; GFX11-NEXT:    v_bfe_u32 v85, v24, 16, 1
12279 ; GFX11-NEXT:    v_bfe_u32 v97, v23, 16, 1
12280 ; GFX11-NEXT:    v_or_b32_e32 v86, 0x400000, v24
12281 ; GFX11-NEXT:    v_or_b32_e32 v98, 0x400000, v23
12282 ; GFX11-NEXT:    v_bfe_u32 v87, v7, 16, 1
12283 ; GFX11-NEXT:    v_add3_u32 v85, v85, v24, 0x7fff
12284 ; GFX11-NEXT:    v_lshlrev_b32_e32 v69, 16, v20
12285 ; GFX11-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
12286 ; GFX11-NEXT:    v_add3_u32 v97, v97, v23, 0x7fff
12287 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
12288 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
12289 ; GFX11-NEXT:    v_or_b32_e32 v96, 0x400000, v7
12290 ; GFX11-NEXT:    v_add3_u32 v87, v87, v7, 0x7fff
12291 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
12292 ; GFX11-NEXT:    v_add_f32_e32 v4, v4, v20
12293 ; GFX11-NEXT:    v_add_f32_e32 v20, v80, v71
12294 ; GFX11-NEXT:    v_bfe_u32 v71, v9, 16, 1
12295 ; GFX11-NEXT:    v_or_b32_e32 v80, 0x400000, v9
12296 ; GFX11-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
12297 ; GFX11-NEXT:    v_dual_add_f32 v21, v70, v69 :: v_dual_and_b32 v10, 0xffff0000, v10
12298 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
12299 ; GFX11-NEXT:    v_add3_u32 v71, v71, v9, 0x7fff
12300 ; GFX11-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
12301 ; GFX11-NEXT:    v_dual_add_f32 v10, v10, v26 :: v_dual_and_b32 v29, 0xffff0000, v29
12302 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
12303 ; GFX11-NEXT:    v_add_f32_e32 v26, v52, v51
12304 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
12305 ; GFX11-NEXT:    v_add_f32_e32 v6, v6, v22
12306 ; GFX11-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
12307 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
12308 ; GFX11-NEXT:    v_dual_add_f32 v11, v11, v27 :: v_dual_lshlrev_b32 v34, 16, v14
12309 ; GFX11-NEXT:    v_dual_add_f32 v22, v68, v67 :: v_dual_lshlrev_b32 v33, 16, v30
12310 ; GFX11-NEXT:    v_dual_add_f32 v27, v50, v49 :: v_dual_lshlrev_b32 v38, 16, v12
12311 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
12312 ; GFX11-NEXT:    v_dual_add_f32 v25, v54, v53 :: v_dual_and_b32 v12, 0xffff0000, v12
12313 ; GFX11-NEXT:    v_dual_add_f32 v13, v13, v29 :: v_dual_and_b32 v30, 0xffff0000, v30
12314 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
12315 ; GFX11-NEXT:    v_add_f32_e32 v29, v38, v37
12316 ; GFX11-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
12317 ; GFX11-NEXT:    v_dual_add_f32 v12, v12, v28 :: v_dual_and_b32 v15, 0xffff0000, v15
12318 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
12319 ; GFX11-NEXT:    v_add_f32_e32 v14, v14, v30
12320 ; GFX11-NEXT:    v_add_f32_e32 v28, v48, v39
12321 ; GFX11-NEXT:    v_dual_add_f32 v30, v36, v35 :: v_dual_add_f32 v33, v34, v33
12322 ; GFX11-NEXT:    v_bfe_u32 v39, v13, 16, 1
12323 ; GFX11-NEXT:    v_bfe_u32 v35, v14, 16, 1
12324 ; GFX11-NEXT:    v_or_b32_e32 v36, 0x400000, v14
12325 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
12326 ; GFX11-NEXT:    v_bfe_u32 v37, v30, 16, 1
12327 ; GFX11-NEXT:    v_bfe_u32 v16, v33, 16, 1
12328 ; GFX11-NEXT:    v_or_b32_e32 v34, 0x400000, v33
12329 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
12330 ; GFX11-NEXT:    v_add3_u32 v35, v35, v14, 0x7fff
12331 ; GFX11-NEXT:    v_or_b32_e32 v38, 0x400000, v30
12332 ; GFX11-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
12333 ; GFX11-NEXT:    v_add3_u32 v37, v37, v30, 0x7fff
12334 ; GFX11-NEXT:    v_or_b32_e32 v48, 0x400000, v13
12335 ; GFX11-NEXT:    v_bfe_u32 v49, v29, 16, 1
12336 ; GFX11-NEXT:    v_add3_u32 v39, v39, v13, 0x7fff
12337 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v34, vcc_lo
12338 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v14, v14
12339 ; GFX11-NEXT:    v_or_b32_e32 v50, 0x400000, v29
12340 ; GFX11-NEXT:    v_bfe_u32 v51, v12, 16, 1
12341 ; GFX11-NEXT:    v_add3_u32 v49, v49, v29, 0x7fff
12342 ; GFX11-NEXT:    v_or_b32_e32 v52, 0x400000, v12
12343 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, v35, v36, vcc_lo
12344 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v30, v30
12345 ; GFX11-NEXT:    v_bfe_u32 v53, v28, 16, 1
12346 ; GFX11-NEXT:    v_add3_u32 v51, v51, v12, 0x7fff
12347 ; GFX11-NEXT:    v_or_b32_e32 v54, 0x400000, v28
12348 ; GFX11-NEXT:    v_bfe_u32 v55, v11, 16, 1
12349 ; GFX11-NEXT:    v_cndmask_b32_e32 v30, v37, v38, vcc_lo
12350 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
12351 ; GFX11-NEXT:    v_add3_u32 v53, v53, v28, 0x7fff
12352 ; GFX11-NEXT:    v_or_b32_e32 v64, 0x400000, v11
12353 ; GFX11-NEXT:    v_bfe_u32 v65, v27, 16, 1
12354 ; GFX11-NEXT:    v_add3_u32 v55, v55, v11, 0x7fff
12355 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v39, v48, vcc_lo
12356 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v29, v29
12357 ; GFX11-NEXT:    v_or_b32_e32 v66, 0x400000, v27
12358 ; GFX11-NEXT:    v_bfe_u32 v67, v10, 16, 1
12359 ; GFX11-NEXT:    v_add3_u32 v65, v65, v27, 0x7fff
12360 ; GFX11-NEXT:    v_or_b32_e32 v68, 0x400000, v10
12361 ; GFX11-NEXT:    v_cndmask_b32_e32 v29, v49, v50, vcc_lo
12362 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
12363 ; GFX11-NEXT:    v_bfe_u32 v69, v26, 16, 1
12364 ; GFX11-NEXT:    v_add3_u32 v67, v67, v10, 0x7fff
12365 ; GFX11-NEXT:    v_or_b32_e32 v70, 0x400000, v26
12366 ; GFX11-NEXT:    v_bfe_u32 v81, v25, 16, 1
12367 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v51, v52, vcc_lo
12368 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v28, v28
12369 ; GFX11-NEXT:    v_add3_u32 v69, v69, v26, 0x7fff
12370 ; GFX11-NEXT:    v_or_b32_e32 v82, 0x400000, v25
12371 ; GFX11-NEXT:    v_bfe_u32 v83, v8, 16, 1
12372 ; GFX11-NEXT:    v_add3_u32 v81, v81, v25, 0x7fff
12373 ; GFX11-NEXT:    v_cndmask_b32_e32 v28, v53, v54, vcc_lo
12374 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v11, v11
12375 ; GFX11-NEXT:    v_or_b32_e32 v84, 0x400000, v8
12376 ; GFX11-NEXT:    v_add3_u32 v83, v83, v8, 0x7fff
12377 ; GFX11-NEXT:    v_bfe_u32 v99, v6, 16, 1
12378 ; GFX11-NEXT:    v_or_b32_e32 v100, 0x400000, v6
12379 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v55, v64, vcc_lo
12380 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v27, v27
12381 ; GFX11-NEXT:    v_bfe_u32 v101, v22, 16, 1
12382 ; GFX11-NEXT:    v_add3_u32 v99, v99, v6, 0x7fff
12383 ; GFX11-NEXT:    v_or_b32_e32 v102, 0x400000, v22
12384 ; GFX11-NEXT:    v_bfe_u32 v113, v21, 16, 1
12385 ; GFX11-NEXT:    v_cndmask_b32_e32 v27, v65, v66, vcc_lo
12386 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v10, v10
12387 ; GFX11-NEXT:    v_add3_u32 v101, v101, v22, 0x7fff
12388 ; GFX11-NEXT:    v_or_b32_e32 v114, 0x400000, v21
12389 ; GFX11-NEXT:    v_bfe_u32 v115, v4, 16, 1
12390 ; GFX11-NEXT:    v_add3_u32 v113, v113, v21, 0x7fff
12391 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v67, v68, vcc_lo
12392 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v26, v26
12393 ; GFX11-NEXT:    v_or_b32_e32 v116, 0x400000, v4
12394 ; GFX11-NEXT:    v_bfe_u32 v117, v20, 16, 1
12395 ; GFX11-NEXT:    v_add3_u32 v115, v115, v4, 0x7fff
12396 ; GFX11-NEXT:    v_or_b32_e32 v118, 0x400000, v20
12397 ; GFX11-NEXT:    v_cndmask_b32_e32 v26, v69, v70, vcc_lo
12398 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
12399 ; GFX11-NEXT:    v_add3_u32 v117, v117, v20, 0x7fff
12400 ; GFX11-NEXT:    v_bfe_u32 v133, v18, 16, 1
12401 ; GFX11-NEXT:    v_or_b32_e32 v134, 0x400000, v18
12402 ; GFX11-NEXT:    v_bfe_u32 v147, v0, 16, 1
12403 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v71, v80, vcc_lo
12404 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v25, v25
12405 ; GFX11-NEXT:    v_add3_u32 v133, v133, v18, 0x7fff
12406 ; GFX11-NEXT:    v_or_b32_e32 v33, 0x400000, v0
12407 ; GFX11-NEXT:    v_add3_u32 v147, v147, v0, 0x7fff
12408 ; GFX11-NEXT:    v_bfe_u32 v131, v2, 16, 1
12409 ; GFX11-NEXT:    v_cndmask_b32_e32 v25, v81, v82, vcc_lo
12410 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
12411 ; GFX11-NEXT:    v_or_b32_e32 v132, 0x400000, v2
12412 ; GFX11-NEXT:    v_perm_b32 v9, v9, v26, 0x7060302
12413 ; GFX11-NEXT:    v_add3_u32 v131, v131, v2, 0x7fff
12414 ; GFX11-NEXT:    v_perm_b32 v10, v10, v27, 0x7060302
12415 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v83, v84, vcc_lo
12416 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v24, v24
12417 ; GFX11-NEXT:    v_perm_b32 v11, v11, v28, 0x7060302
12418 ; GFX11-NEXT:    v_perm_b32 v12, v12, v29, 0x7060302
12419 ; GFX11-NEXT:    v_perm_b32 v13, v13, v30, 0x7060302
12420 ; GFX11-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
12421 ; GFX11-NEXT:    v_cndmask_b32_e32 v24, v85, v86, vcc_lo
12422 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
12423 ; GFX11-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
12424 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v87, v96, vcc_lo
12425 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v23, v23
12426 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
12427 ; GFX11-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
12428 ; GFX11-NEXT:    v_cndmask_b32_e32 v23, v97, v98, vcc_lo
12429 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
12430 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v99, v100, vcc_lo
12431 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v22, v22
12432 ; GFX11-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
12433 ; GFX11-NEXT:    v_cndmask_b32_e32 v22, v101, v102, vcc_lo
12434 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
12435 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v103, v112, vcc_lo
12436 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v21, v21
12437 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
12438 ; GFX11-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
12439 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, v113, v114, vcc_lo
12440 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
12441 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v115, v116, vcc_lo
12442 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v20, v20
12443 ; GFX11-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
12444 ; GFX11-NEXT:    v_cndmask_b32_e32 v20, v117, v118, vcc_lo
12445 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
12446 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v129, v130, vcc_lo
12447 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
12448 ; GFX11-NEXT:    v_cndmask_b32_e32 v18, v133, v134, vcc_lo
12449 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
12450 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v135, v144, vcc_lo
12451 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
12452 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
12453 ; GFX11-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
12454 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v145, v146, vcc_lo
12455 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12456 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v147, v33, vcc_lo
12457 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
12458 ; GFX11-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
12459 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v131, v132, vcc_lo
12460 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
12461 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
12462 ; GFX11-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
12463 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v119, v128, vcc_lo
12464 ; GFX11-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
12465 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
12466 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
12467 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
12468 ; GFX11-NEXT:    v_dual_add_f32 v17, v31, v17 :: v_dual_and_b32 v18, 0xffff0000, v32
12469 ; GFX11-NEXT:    v_add_f32_e32 v15, v15, v18
12470 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
12471 ; GFX11-NEXT:    v_bfe_u32 v18, v17, 16, 1
12472 ; GFX11-NEXT:    v_bfe_u32 v19, v15, 16, 1
12473 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v17
12474 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
12475 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v15
12476 ; GFX11-NEXT:    v_add3_u32 v18, v18, v17, 0x7fff
12477 ; GFX11-NEXT:    v_add3_u32 v19, v19, v15, 0x7fff
12478 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
12479 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v18, v20, vcc_lo
12480 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v15, v15
12481 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v19, v21, vcc_lo
12482 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12483 ; GFX11-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
12484 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12485   %op = fadd <32 x bfloat> %a, %b
12486   ret <32 x bfloat> %op
12489 define bfloat @v_fadd_bf16_fpimm_0(bfloat %arg0) {
12490 ; GCN-LABEL: v_fadd_bf16_fpimm_0:
12491 ; GCN:       ; %bb.0:
12492 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12493 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12494 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12495 ; GCN-NEXT:    v_add_f32_e32 v0, 1.0, v0
12496 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12497 ; GCN-NEXT:    s_setpc_b64 s[30:31]
12499 ; GFX7-LABEL: v_fadd_bf16_fpimm_0:
12500 ; GFX7:       ; %bb.0:
12501 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12502 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12503 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12504 ; GFX7-NEXT:    v_add_f32_e32 v0, 1.0, v0
12505 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12506 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
12508 ; GFX8-LABEL: v_fadd_bf16_fpimm_0:
12509 ; GFX8:       ; %bb.0:
12510 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12511 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12512 ; GFX8-NEXT:    v_add_f32_e32 v0, 1.0, v0
12513 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
12514 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
12515 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
12516 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12517 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12518 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12519 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12520 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
12522 ; GFX9-LABEL: v_fadd_bf16_fpimm_0:
12523 ; GFX9:       ; %bb.0:
12524 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12525 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12526 ; GFX9-NEXT:    v_add_f32_e32 v0, 1.0, v0
12527 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
12528 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
12529 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
12530 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12531 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12532 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12533 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12534 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12536 ; GFX10-LABEL: v_fadd_bf16_fpimm_0:
12537 ; GFX10:       ; %bb.0:
12538 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12539 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12540 ; GFX10-NEXT:    v_add_f32_e32 v0, 1.0, v0
12541 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
12542 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12543 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12544 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12545 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12546 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12547 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12549 ; GFX11-LABEL: v_fadd_bf16_fpimm_0:
12550 ; GFX11:       ; %bb.0:
12551 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12552 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12553 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
12554 ; GFX11-NEXT:    v_add_f32_e32 v0, 1.0, v0
12555 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
12556 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12557 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12558 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
12559 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12560 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12561 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12562 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12563 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12564   %add = fadd bfloat %arg0, 1.0
12565   ret bfloat %add
12568 define bfloat @v_fadd_bf16_fpimm_1(bfloat %arg0) {
12569 ; GCN-LABEL: v_fadd_bf16_fpimm_1:
12570 ; GCN:       ; %bb.0:
12571 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12572 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12573 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12574 ; GCN-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12575 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12576 ; GCN-NEXT:    s_setpc_b64 s[30:31]
12578 ; GFX7-LABEL: v_fadd_bf16_fpimm_1:
12579 ; GFX7:       ; %bb.0:
12580 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12581 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12582 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12583 ; GFX7-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12584 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12585 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
12587 ; GFX8-LABEL: v_fadd_bf16_fpimm_1:
12588 ; GFX8:       ; %bb.0:
12589 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12590 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12591 ; GFX8-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12592 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
12593 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
12594 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
12595 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12596 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12597 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12598 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12599 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
12601 ; GFX9-LABEL: v_fadd_bf16_fpimm_1:
12602 ; GFX9:       ; %bb.0:
12603 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12604 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12605 ; GFX9-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12606 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
12607 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
12608 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
12609 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12610 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12611 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12612 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12613 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12615 ; GFX10-LABEL: v_fadd_bf16_fpimm_1:
12616 ; GFX10:       ; %bb.0:
12617 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12618 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12619 ; GFX10-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12620 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
12621 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12622 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12623 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12624 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12625 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12626 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12628 ; GFX11-LABEL: v_fadd_bf16_fpimm_1:
12629 ; GFX11:       ; %bb.0:
12630 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12631 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12632 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
12633 ; GFX11-NEXT:    v_add_f32_e32 v0, 0x42280000, v0
12634 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
12635 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12636 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12637 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
12638 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12639 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12640 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12641 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12642 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12643   %add = fadd bfloat %arg0, 42.0
12644   ret bfloat %add
12647 define bfloat @v_fsub_bf16(bfloat %a, bfloat %b) {
12648 ; GCN-LABEL: v_fsub_bf16:
12649 ; GCN:       ; %bb.0:
12650 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12651 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12652 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12653 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12654 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12655 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v1
12656 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12657 ; GCN-NEXT:    s_setpc_b64 s[30:31]
12659 ; GFX7-LABEL: v_fsub_bf16:
12660 ; GFX7:       ; %bb.0:
12661 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12662 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12663 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12664 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12665 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12666 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v1
12667 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12668 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
12670 ; GFX8-LABEL: v_fsub_bf16:
12671 ; GFX8:       ; %bb.0:
12672 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12673 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12674 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12675 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v1
12676 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
12677 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
12678 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
12679 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12680 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12681 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12682 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12683 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
12685 ; GFX9-LABEL: v_fsub_bf16:
12686 ; GFX9:       ; %bb.0:
12687 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12688 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12689 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12690 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v1
12691 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
12692 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
12693 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
12694 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12695 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12696 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
12697 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12698 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12700 ; GFX10-LABEL: v_fsub_bf16:
12701 ; GFX10:       ; %bb.0:
12702 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12703 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12704 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12705 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v1
12706 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
12707 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12708 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12709 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12710 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12711 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12712 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12714 ; GFX11-LABEL: v_fsub_bf16:
12715 ; GFX11:       ; %bb.0:
12716 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12717 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12718 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
12719 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
12720 ; GFX11-NEXT:    v_sub_f32_e32 v0, v0, v1
12721 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
12722 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
12723 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12724 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
12725 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
12726 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
12727 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12728 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12729 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12730   %op = fsub bfloat %a, %b
12731   ret bfloat %op
12734 define <2 x bfloat> @v_fsub_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
12735 ; GCN-LABEL: v_fsub_v2bf16:
12736 ; GCN:       ; %bb.0:
12737 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12738 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12739 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
12740 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12741 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
12742 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12743 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12744 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12745 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12746 ; GCN-NEXT:    v_sub_f32_e32 v1, v1, v3
12747 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v2
12748 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12749 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12750 ; GCN-NEXT:    s_setpc_b64 s[30:31]
12752 ; GFX7-LABEL: v_fsub_v2bf16:
12753 ; GFX7:       ; %bb.0:
12754 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12755 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12756 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
12757 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12758 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
12759 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12760 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12761 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12762 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12763 ; GFX7-NEXT:    v_sub_f32_e32 v1, v1, v3
12764 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v2
12765 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12766 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12767 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
12769 ; GFX8-LABEL: v_fsub_v2bf16:
12770 ; GFX8:       ; %bb.0:
12771 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12772 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
12773 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
12774 ; GFX8-NEXT:    v_sub_f32_e32 v2, v3, v2
12775 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
12776 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
12777 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12778 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12779 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
12780 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v1
12781 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
12782 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
12783 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
12784 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
12785 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
12786 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
12787 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
12788 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12789 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
12790 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12791 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
12792 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
12794 ; GFX9-LABEL: v_fsub_v2bf16:
12795 ; GFX9:       ; %bb.0:
12796 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12797 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
12798 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
12799 ; GFX9-NEXT:    v_sub_f32_e32 v2, v3, v2
12800 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12801 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12802 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
12803 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
12804 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v1
12805 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
12806 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
12807 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
12808 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
12809 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
12810 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
12811 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
12812 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12813 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
12814 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
12815 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
12816 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12818 ; GFX10-LABEL: v_fsub_v2bf16:
12819 ; GFX10:       ; %bb.0:
12820 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12821 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
12822 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
12823 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12824 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12825 ; GFX10-NEXT:    v_sub_f32_e32 v2, v3, v2
12826 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v1
12827 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
12828 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
12829 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
12830 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
12831 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
12832 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
12833 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
12834 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
12835 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12836 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
12837 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
12838 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
12840 ; GFX11-LABEL: v_fsub_v2bf16:
12841 ; GFX11:       ; %bb.0:
12842 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12843 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
12844 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12845 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
12846 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12847 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
12848 ; GFX11-NEXT:    v_sub_f32_e32 v0, v0, v1
12849 ; GFX11-NEXT:    v_sub_f32_e32 v2, v3, v2
12850 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
12851 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
12852 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
12853 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
12854 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
12855 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
12856 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
12857 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
12858 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
12859 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
12860 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
12861 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
12862 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
12863 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
12864 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
12865   %op = fsub <2 x bfloat> %a, %b
12866   ret <2 x bfloat> %op
12869 define <3 x bfloat> @v_fsub_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b) {
12870 ; GCN-LABEL: v_fsub_v3bf16:
12871 ; GCN:       ; %bb.0:
12872 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12873 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12874 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
12875 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12876 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
12877 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
12878 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
12879 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
12880 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12881 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
12882 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12883 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12884 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12885 ; GCN-NEXT:    v_sub_f32_e32 v2, v2, v5
12886 ; GCN-NEXT:    v_sub_f32_e32 v1, v1, v4
12887 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v3
12888 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12889 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12890 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12891 ; GCN-NEXT:    s_setpc_b64 s[30:31]
12893 ; GFX7-LABEL: v_fsub_v3bf16:
12894 ; GFX7:       ; %bb.0:
12895 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12896 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
12897 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
12898 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
12899 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
12900 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
12901 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
12902 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
12903 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12904 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
12905 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12906 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
12907 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12908 ; GFX7-NEXT:    v_sub_f32_e32 v2, v2, v5
12909 ; GFX7-NEXT:    v_sub_f32_e32 v1, v1, v4
12910 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v3
12911 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12912 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
12913 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12914 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
12916 ; GFX8-LABEL: v_fsub_v3bf16:
12917 ; GFX8:       ; %bb.0:
12918 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12919 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
12920 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12921 ; GFX8-NEXT:    v_sub_f32_e32 v1, v1, v3
12922 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
12923 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
12924 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
12925 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
12926 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
12927 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
12928 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
12929 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
12930 ; GFX8-NEXT:    v_sub_f32_e32 v3, v4, v3
12931 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
12932 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
12933 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
12934 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12935 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12936 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
12937 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v2
12938 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
12939 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
12940 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
12941 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
12942 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
12943 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
12944 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
12945 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12946 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
12947 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
12948 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
12949 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
12950 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
12952 ; GFX9-LABEL: v_fsub_v3bf16:
12953 ; GFX9:       ; %bb.0:
12954 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12955 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
12956 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12957 ; GFX9-NEXT:    v_sub_f32_e32 v1, v1, v3
12958 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
12959 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
12960 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
12961 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
12962 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
12963 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
12964 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
12965 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
12966 ; GFX9-NEXT:    v_sub_f32_e32 v3, v4, v3
12967 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12968 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12969 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
12970 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v2
12971 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
12972 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
12973 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
12974 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
12975 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
12976 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
12977 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
12978 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
12979 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
12980 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
12981 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
12982 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
12983 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12985 ; GFX10-LABEL: v_fsub_v3bf16:
12986 ; GFX10:       ; %bb.0:
12987 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12988 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
12989 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
12990 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
12991 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
12992 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
12993 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
12994 ; GFX10-NEXT:    v_sub_f32_e32 v4, v5, v4
12995 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2
12996 ; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v3
12997 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
12998 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
12999 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
13000 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13001 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
13002 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
13003 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13004 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
13005 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
13006 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
13007 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
13008 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13009 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
13010 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13011 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
13012 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc_lo
13013 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
13014 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13015   %op = fsub <3 x bfloat> %a, %b
13016   ret <3 x bfloat> %op
13019 define <4 x bfloat> @v_fsub_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
13020 ; GCN-LABEL: v_fsub_v4bf16:
13021 ; GCN:       ; %bb.0:
13022 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13023 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13024 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13025 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13026 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13027 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13028 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13029 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13030 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13031 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13032 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13033 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13034 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13035 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13036 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13037 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13038 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13039 ; GCN-NEXT:    v_sub_f32_e32 v3, v3, v7
13040 ; GCN-NEXT:    v_sub_f32_e32 v2, v2, v6
13041 ; GCN-NEXT:    v_sub_f32_e32 v1, v1, v5
13042 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v4
13043 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13044 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13045 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13046 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13047 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13049 ; GFX7-LABEL: v_fsub_v4bf16:
13050 ; GFX7:       ; %bb.0:
13051 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13052 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13053 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13054 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13055 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13056 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13057 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13058 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13059 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13060 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13061 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13062 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13063 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13064 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13065 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13066 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13067 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13068 ; GFX7-NEXT:    v_sub_f32_e32 v3, v3, v7
13069 ; GFX7-NEXT:    v_sub_f32_e32 v2, v2, v6
13070 ; GFX7-NEXT:    v_sub_f32_e32 v1, v1, v5
13071 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v4
13072 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13073 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13074 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13075 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13076 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13078 ; GFX8-LABEL: v_fsub_v4bf16:
13079 ; GFX8:       ; %bb.0:
13080 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13081 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13082 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13083 ; GFX8-NEXT:    v_sub_f32_e32 v4, v5, v4
13084 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
13085 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
13086 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13087 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13088 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
13089 ; GFX8-NEXT:    v_sub_f32_e32 v1, v1, v3
13090 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
13091 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
13092 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
13093 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
13094 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
13095 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
13096 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
13097 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
13098 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13099 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
13100 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13101 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
13102 ; GFX8-NEXT:    v_sub_f32_e32 v3, v5, v3
13103 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
13104 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
13105 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13106 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13107 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
13108 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v2
13109 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
13110 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13111 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
13112 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
13113 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
13114 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
13115 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13116 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13117 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
13118 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
13119 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13120 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
13121 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v4, 16
13122 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
13124 ; GFX9-LABEL: v_fsub_v4bf16:
13125 ; GFX9:       ; %bb.0:
13126 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13127 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13128 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13129 ; GFX9-NEXT:    v_sub_f32_e32 v4, v5, v4
13130 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13131 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13132 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
13133 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
13134 ; GFX9-NEXT:    v_sub_f32_e32 v1, v1, v3
13135 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
13136 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v4
13137 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
13138 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
13139 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
13140 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
13141 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
13142 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13143 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
13144 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13145 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
13146 ; GFX9-NEXT:    v_sub_f32_e32 v3, v5, v3
13147 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13148 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13149 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
13150 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v2
13151 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
13152 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
13153 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13154 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
13155 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
13156 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
13157 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13158 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13159 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
13160 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
13161 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
13162 ; GFX9-NEXT:    v_perm_b32 v1, v1, v4, s4
13163 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13165 ; GFX10-LABEL: v_fsub_v4bf16:
13166 ; GFX10:       ; %bb.0:
13167 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13168 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13169 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13170 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13171 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13172 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
13173 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
13174 ; GFX10-NEXT:    v_sub_f32_e32 v4, v5, v4
13175 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13176 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13177 ; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v3
13178 ; GFX10-NEXT:    v_sub_f32_e32 v3, v7, v6
13179 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
13180 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
13181 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2
13182 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13183 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
13184 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
13185 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
13186 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
13187 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
13188 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
13189 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
13190 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13191 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
13192 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
13193 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13194 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
13195 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
13196 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13197 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
13198 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13199 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
13200 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
13201 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
13202 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13204 ; GFX11-LABEL: v_fsub_v4bf16:
13205 ; GFX11:       ; %bb.0:
13206 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13207 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
13208 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
13209 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13210 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13211 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13212 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13213 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13214 ; GFX11-NEXT:    v_dual_sub_f32 v0, v0, v2 :: v_dual_and_b32 v1, 0xffff0000, v1
13215 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13216 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
13217 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13218 ; GFX11-NEXT:    v_sub_f32_e32 v1, v1, v3
13219 ; GFX11-NEXT:    v_dual_sub_f32 v3, v7, v6 :: v_dual_sub_f32 v4, v5, v4
13220 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
13221 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
13222 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
13223 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
13224 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v4
13225 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13226 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
13227 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
13228 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
13229 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
13230 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_4)
13231 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
13232 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13233 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
13234 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
13235 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13236 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
13237 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13238 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13239 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
13240 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13241 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
13242 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
13243 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13244 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
13245 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13246   %op = fsub <4 x bfloat> %a, %b
13247   ret <4 x bfloat> %op
13250 define bfloat @v_fmul_bf16(bfloat %a, bfloat %b) {
13251 ; GCN-LABEL: v_fmul_bf16:
13252 ; GCN:       ; %bb.0:
13253 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13254 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13255 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13256 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13257 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13258 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
13259 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13260 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13262 ; GFX7-LABEL: v_fmul_bf16:
13263 ; GFX7:       ; %bb.0:
13264 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13265 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13266 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13267 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13268 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13269 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
13270 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13271 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13273 ; GFX8-LABEL: v_fmul_bf16:
13274 ; GFX8:       ; %bb.0:
13275 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13276 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13277 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
13278 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
13279 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
13280 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
13281 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
13282 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
13283 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13284 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
13285 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13286 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
13288 ; GFX9-LABEL: v_fmul_bf16:
13289 ; GFX9:       ; %bb.0:
13290 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13291 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13292 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
13293 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
13294 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
13295 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
13296 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
13297 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
13298 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13299 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
13300 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13301 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13303 ; GFX10-LABEL: v_fmul_bf16:
13304 ; GFX10:       ; %bb.0:
13305 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13306 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13307 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
13308 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
13309 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
13310 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
13311 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13312 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
13313 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
13314 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13315 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13317 ; GFX11-LABEL: v_fmul_bf16:
13318 ; GFX11:       ; %bb.0:
13319 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13320 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13321 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
13322 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
13323 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
13324 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
13325 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
13326 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13327 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
13328 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
13329 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
13330 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13331 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13332 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13333   %op = fmul bfloat %a, %b
13334   ret bfloat %op
13337 define <2 x bfloat> @v_fmul_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
13338 ; GCN-LABEL: v_fmul_v2bf16:
13339 ; GCN:       ; %bb.0:
13340 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13341 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13342 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13343 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13344 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13345 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13346 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13347 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13348 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13349 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v3
13350 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v2
13351 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13352 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13353 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13355 ; GFX7-LABEL: v_fmul_v2bf16:
13356 ; GFX7:       ; %bb.0:
13357 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13358 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13359 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13360 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13361 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13362 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13363 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13364 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13365 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13366 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v3
13367 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
13368 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13369 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13370 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13372 ; GFX8-LABEL: v_fmul_v2bf16:
13373 ; GFX8:       ; %bb.0:
13374 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13375 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
13376 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
13377 ; GFX8-NEXT:    v_mul_f32_e32 v2, v3, v2
13378 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
13379 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
13380 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13381 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13382 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
13383 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
13384 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
13385 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
13386 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
13387 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
13388 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
13389 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
13390 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
13391 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13392 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
13393 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13394 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
13395 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
13397 ; GFX9-LABEL: v_fmul_v2bf16:
13398 ; GFX9:       ; %bb.0:
13399 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13400 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
13401 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
13402 ; GFX9-NEXT:    v_mul_f32_e32 v2, v3, v2
13403 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13404 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13405 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
13406 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
13407 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
13408 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
13409 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
13410 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
13411 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
13412 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
13413 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
13414 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
13415 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13416 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
13417 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
13418 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
13419 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13421 ; GFX10-LABEL: v_fmul_v2bf16:
13422 ; GFX10:       ; %bb.0:
13423 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13424 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
13425 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
13426 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13427 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13428 ; GFX10-NEXT:    v_mul_f32_e32 v2, v3, v2
13429 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
13430 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
13431 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
13432 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
13433 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
13434 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13435 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
13436 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
13437 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
13438 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13439 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
13440 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
13441 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13443 ; GFX11-LABEL: v_fmul_v2bf16:
13444 ; GFX11:       ; %bb.0:
13445 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13446 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
13447 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13448 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
13449 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13450 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
13451 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
13452 ; GFX11-NEXT:    v_mul_f32_e32 v2, v3, v2
13453 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
13454 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
13455 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
13456 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
13457 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
13458 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13459 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
13460 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
13461 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
13462 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
13463 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13464 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
13465 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13466 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
13467 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13468   %op = fmul <2 x bfloat> %a, %b
13469   ret <2 x bfloat> %op
13472 define <3 x bfloat> @v_fmul_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b) {
13473 ; GCN-LABEL: v_fmul_v3bf16:
13474 ; GCN:       ; %bb.0:
13475 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13476 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13477 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13478 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13479 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13480 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13481 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13482 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13483 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13484 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13485 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13486 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13487 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13488 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v5
13489 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v4
13490 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v3
13491 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13492 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13493 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13494 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13496 ; GFX7-LABEL: v_fmul_v3bf16:
13497 ; GFX7:       ; %bb.0:
13498 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13499 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13500 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13501 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13502 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13503 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13504 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13505 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13506 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13507 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13508 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13509 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13510 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13511 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v5
13512 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v4
13513 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v3
13514 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13515 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13516 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13517 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13519 ; GFX8-LABEL: v_fmul_v3bf16:
13520 ; GFX8:       ; %bb.0:
13521 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13522 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
13523 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13524 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v3
13525 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
13526 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
13527 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
13528 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
13529 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13530 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
13531 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13532 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
13533 ; GFX8-NEXT:    v_mul_f32_e32 v3, v4, v3
13534 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
13535 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
13536 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
13537 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13538 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13539 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
13540 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
13541 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13542 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13543 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
13544 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
13545 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
13546 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
13547 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
13548 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13549 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
13550 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13551 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
13552 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
13553 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
13555 ; GFX9-LABEL: v_fmul_v3bf16:
13556 ; GFX9:       ; %bb.0:
13557 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13558 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
13559 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13560 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v3
13561 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
13562 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
13563 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
13564 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
13565 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13566 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
13567 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13568 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
13569 ; GFX9-NEXT:    v_mul_f32_e32 v3, v4, v3
13570 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13571 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13572 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
13573 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v2
13574 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
13575 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13576 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13577 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
13578 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
13579 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
13580 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
13581 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13582 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
13583 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
13584 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
13585 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
13586 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13588 ; GFX10-LABEL: v_fmul_v3bf16:
13589 ; GFX10:       ; %bb.0:
13590 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13591 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
13592 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
13593 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13594 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13595 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
13596 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
13597 ; GFX10-NEXT:    v_mul_f32_e32 v4, v5, v4
13598 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
13599 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
13600 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
13601 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
13602 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
13603 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13604 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
13605 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
13606 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13607 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
13608 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
13609 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
13610 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
13611 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13612 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
13613 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13614 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
13615 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc_lo
13616 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
13617 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13618   %op = fmul <3 x bfloat> %a, %b
13619   ret <3 x bfloat> %op
13622 define <4 x bfloat> @v_fmul_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
13623 ; GCN-LABEL: v_fmul_v4bf16:
13624 ; GCN:       ; %bb.0:
13625 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13626 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13627 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13628 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13629 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13630 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13631 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13632 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13633 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13634 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13635 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13636 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13637 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13638 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13639 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13640 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13641 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13642 ; GCN-NEXT:    v_mul_f32_e32 v3, v3, v7
13643 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v6
13644 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v5
13645 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v4
13646 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13647 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13648 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13649 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13650 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13652 ; GFX7-LABEL: v_fmul_v4bf16:
13653 ; GFX7:       ; %bb.0:
13654 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13655 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13656 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13657 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13658 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13659 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13660 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13661 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13662 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13663 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13664 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13665 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13666 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13667 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13668 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13669 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13670 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13671 ; GFX7-NEXT:    v_mul_f32_e32 v3, v3, v7
13672 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v6
13673 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v5
13674 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v4
13675 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13676 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13677 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13678 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13679 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13681 ; GFX8-LABEL: v_fmul_v4bf16:
13682 ; GFX8:       ; %bb.0:
13683 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13684 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13685 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13686 ; GFX8-NEXT:    v_mul_f32_e32 v4, v5, v4
13687 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
13688 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
13689 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13690 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13691 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
13692 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v3
13693 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
13694 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
13695 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
13696 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
13697 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
13698 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
13699 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
13700 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
13701 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13702 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
13703 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13704 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
13705 ; GFX8-NEXT:    v_mul_f32_e32 v3, v5, v3
13706 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
13707 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
13708 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13709 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13710 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
13711 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
13712 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
13713 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13714 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
13715 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
13716 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
13717 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
13718 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13719 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13720 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
13721 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
13722 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
13723 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
13724 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v4, 16
13725 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
13727 ; GFX9-LABEL: v_fmul_v4bf16:
13728 ; GFX9:       ; %bb.0:
13729 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13730 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13731 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13732 ; GFX9-NEXT:    v_mul_f32_e32 v4, v5, v4
13733 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13734 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13735 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
13736 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
13737 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v3
13738 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
13739 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v4
13740 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
13741 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
13742 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
13743 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
13744 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
13745 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
13746 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
13747 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
13748 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
13749 ; GFX9-NEXT:    v_mul_f32_e32 v3, v5, v3
13750 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13751 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13752 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
13753 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v2
13754 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
13755 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
13756 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13757 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
13758 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
13759 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
13760 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
13761 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
13762 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
13763 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
13764 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
13765 ; GFX9-NEXT:    v_perm_b32 v1, v1, v4, s4
13766 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
13768 ; GFX10-LABEL: v_fmul_v4bf16:
13769 ; GFX10:       ; %bb.0:
13770 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13771 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13772 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13773 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13774 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13775 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
13776 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
13777 ; GFX10-NEXT:    v_mul_f32_e32 v4, v5, v4
13778 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13779 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13780 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
13781 ; GFX10-NEXT:    v_mul_f32_e32 v3, v7, v6
13782 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
13783 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
13784 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
13785 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13786 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
13787 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
13788 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
13789 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
13790 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
13791 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
13792 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
13793 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13794 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
13795 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
13796 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13797 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
13798 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
13799 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13800 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
13801 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13802 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
13803 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
13804 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
13805 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
13807 ; GFX11-LABEL: v_fmul_v4bf16:
13808 ; GFX11:       ; %bb.0:
13809 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13810 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
13811 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
13812 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13813 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13814 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
13815 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
13816 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13817 ; GFX11-NEXT:    v_dual_mul_f32 v0, v0, v2 :: v_dual_and_b32 v1, 0xffff0000, v1
13818 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13819 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
13820 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13821 ; GFX11-NEXT:    v_mul_f32_e32 v1, v1, v3
13822 ; GFX11-NEXT:    v_dual_mul_f32 v3, v7, v6 :: v_dual_mul_f32 v4, v5, v4
13823 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
13824 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
13825 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
13826 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
13827 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v4
13828 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
13829 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
13830 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
13831 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
13832 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
13833 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_4)
13834 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
13835 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
13836 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
13837 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
13838 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
13839 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
13840 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
13841 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
13842 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
13843 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
13844 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
13845 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
13846 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
13847 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
13848 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
13849   %op = fmul <4 x bfloat> %a, %b
13850   ret <4 x bfloat> %op
13853 define <8 x bfloat> @v_fmul_v8bf16(<8 x bfloat> %a, <8 x bfloat> %b) {
13854 ; GCN-LABEL: v_fmul_v8bf16:
13855 ; GCN:       ; %bb.0:
13856 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13857 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13858 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
13859 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13860 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
13861 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13862 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
13863 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13864 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
13865 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13866 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
13867 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13868 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
13869 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13870 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
13871 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13872 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
13873 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
13874 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13875 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
13876 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13877 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
13878 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13879 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
13880 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13881 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
13882 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13883 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
13884 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13885 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
13886 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13887 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
13888 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13889 ; GCN-NEXT:    v_mul_f32_e32 v7, v7, v15
13890 ; GCN-NEXT:    v_mul_f32_e32 v6, v6, v14
13891 ; GCN-NEXT:    v_mul_f32_e32 v5, v5, v13
13892 ; GCN-NEXT:    v_mul_f32_e32 v4, v4, v12
13893 ; GCN-NEXT:    v_mul_f32_e32 v3, v3, v11
13894 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v10
13895 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v9
13896 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v8
13897 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13898 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13899 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13900 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13901 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13902 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13903 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13904 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13905 ; GCN-NEXT:    s_setpc_b64 s[30:31]
13907 ; GFX7-LABEL: v_fmul_v8bf16:
13908 ; GFX7:       ; %bb.0:
13909 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13910 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
13911 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
13912 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
13913 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
13914 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
13915 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
13916 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
13917 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
13918 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
13919 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
13920 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
13921 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
13922 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
13923 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
13924 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
13925 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
13926 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
13927 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13928 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
13929 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13930 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
13931 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13932 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
13933 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13934 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
13935 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13936 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
13937 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13938 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
13939 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13940 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
13941 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13942 ; GFX7-NEXT:    v_mul_f32_e32 v7, v7, v15
13943 ; GFX7-NEXT:    v_mul_f32_e32 v6, v6, v14
13944 ; GFX7-NEXT:    v_mul_f32_e32 v5, v5, v13
13945 ; GFX7-NEXT:    v_mul_f32_e32 v4, v4, v12
13946 ; GFX7-NEXT:    v_mul_f32_e32 v3, v3, v11
13947 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v10
13948 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v9
13949 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v8
13950 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
13951 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
13952 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13953 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13954 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
13955 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
13956 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13957 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13958 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
13960 ; GFX8-LABEL: v_fmul_v8bf16:
13961 ; GFX8:       ; %bb.0:
13962 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
13963 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
13964 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
13965 ; GFX8-NEXT:    v_mul_f32_e32 v8, v9, v8
13966 ; GFX8-NEXT:    v_bfe_u32 v9, v8, 16, 1
13967 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v8
13968 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
13969 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
13970 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x7fff, v9
13971 ; GFX8-NEXT:    v_mul_f32_e32 v3, v3, v7
13972 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v8
13973 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
13974 ; GFX8-NEXT:    v_bfe_u32 v7, v3, 16, 1
13975 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
13976 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
13977 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v3
13978 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v7
13979 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v3
13980 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
13981 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
13982 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
13983 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
13984 ; GFX8-NEXT:    v_mul_f32_e32 v7, v9, v7
13985 ; GFX8-NEXT:    v_bfe_u32 v9, v7, 16, 1
13986 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v7
13987 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
13988 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
13989 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
13990 ; GFX8-NEXT:    v_mul_f32_e32 v2, v2, v6
13991 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v7
13992 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
13993 ; GFX8-NEXT:    v_bfe_u32 v6, v2, 16, 1
13994 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
13995 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v2
13996 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
13997 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v2
13998 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
13999 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
14000 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
14001 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
14002 ; GFX8-NEXT:    v_mul_f32_e32 v6, v9, v6
14003 ; GFX8-NEXT:    v_bfe_u32 v9, v6, 16, 1
14004 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v6
14005 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14006 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14007 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
14008 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v5
14009 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v6
14010 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
14011 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
14012 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
14013 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
14014 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
14015 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
14016 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
14017 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
14018 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
14019 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
14020 ; GFX8-NEXT:    v_mul_f32_e32 v5, v9, v5
14021 ; GFX8-NEXT:    v_bfe_u32 v9, v5, 16, 1
14022 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v5
14023 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14024 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14025 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
14026 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v4
14027 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v5
14028 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
14029 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
14030 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
14031 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
14032 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
14033 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v0
14034 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
14035 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
14036 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
14037 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
14038 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
14039 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
14040 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v5, 16
14041 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
14042 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v7, 16
14043 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v8, 16
14044 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
14046 ; GFX9-LABEL: v_fmul_v8bf16:
14047 ; GFX9:       ; %bb.0:
14048 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14049 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
14050 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
14051 ; GFX9-NEXT:    v_mul_f32_e32 v8, v9, v8
14052 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14053 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14054 ; GFX9-NEXT:    v_bfe_u32 v9, v8, 16, 1
14055 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
14056 ; GFX9-NEXT:    v_mul_f32_e32 v3, v3, v7
14057 ; GFX9-NEXT:    v_add3_u32 v9, v9, v8, s4
14058 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v8
14059 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
14060 ; GFX9-NEXT:    v_bfe_u32 v7, v3, 16, 1
14061 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
14062 ; GFX9-NEXT:    v_add3_u32 v7, v7, v3, s4
14063 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v3
14064 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
14065 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
14066 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
14067 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
14068 ; GFX9-NEXT:    v_mul_f32_e32 v7, v9, v7
14069 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14070 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14071 ; GFX9-NEXT:    v_bfe_u32 v9, v7, 16, 1
14072 ; GFX9-NEXT:    v_mul_f32_e32 v2, v2, v6
14073 ; GFX9-NEXT:    v_add3_u32 v9, v9, v7, s4
14074 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v7
14075 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
14076 ; GFX9-NEXT:    v_bfe_u32 v6, v2, 16, 1
14077 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
14078 ; GFX9-NEXT:    v_add3_u32 v6, v6, v2, s4
14079 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v2
14080 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
14081 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
14082 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
14083 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
14084 ; GFX9-NEXT:    v_mul_f32_e32 v6, v9, v6
14085 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14086 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14087 ; GFX9-NEXT:    v_bfe_u32 v9, v6, 16, 1
14088 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v5
14089 ; GFX9-NEXT:    v_add3_u32 v9, v9, v6, s4
14090 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v6
14091 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
14092 ; GFX9-NEXT:    v_bfe_u32 v5, v1, 16, 1
14093 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
14094 ; GFX9-NEXT:    v_add3_u32 v5, v5, v1, s4
14095 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v1
14096 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
14097 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
14098 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
14099 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
14100 ; GFX9-NEXT:    v_mul_f32_e32 v5, v9, v5
14101 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14102 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14103 ; GFX9-NEXT:    v_bfe_u32 v9, v5, 16, 1
14104 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v4
14105 ; GFX9-NEXT:    v_add3_u32 v9, v9, v5, s4
14106 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v5
14107 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
14108 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
14109 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
14110 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
14111 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v0
14112 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
14113 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
14114 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
14115 ; GFX9-NEXT:    v_perm_b32 v0, v0, v5, s4
14116 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
14117 ; GFX9-NEXT:    v_perm_b32 v2, v2, v7, s4
14118 ; GFX9-NEXT:    v_perm_b32 v3, v3, v8, s4
14119 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14121 ; GFX10-LABEL: v_fmul_v8bf16:
14122 ; GFX10:       ; %bb.0:
14123 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14124 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
14125 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
14126 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14127 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14128 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
14129 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14130 ; GFX10-NEXT:    v_mul_f32_e32 v8, v9, v8
14131 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
14132 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14133 ; GFX10-NEXT:    v_mul_f32_e32 v3, v3, v7
14134 ; GFX10-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
14135 ; GFX10-NEXT:    v_bfe_u32 v11, v8, 16, 1
14136 ; GFX10-NEXT:    v_mul_f32_e32 v7, v10, v9
14137 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v8
14138 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
14139 ; GFX10-NEXT:    v_mul_f32_e32 v2, v2, v6
14140 ; GFX10-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
14141 ; GFX10-NEXT:    v_bfe_u32 v11, v3, 16, 1
14142 ; GFX10-NEXT:    v_bfe_u32 v12, v7, 16, 1
14143 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
14144 ; GFX10-NEXT:    v_bfe_u32 v13, v2, 16, 1
14145 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
14146 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
14147 ; GFX10-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
14148 ; GFX10-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
14149 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v7
14150 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
14151 ; GFX10-NEXT:    v_mul_f32_e32 v6, v10, v6
14152 ; GFX10-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
14153 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14154 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14155 ; GFX10-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
14156 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v11, v12, vcc_lo
14157 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v2
14158 ; GFX10-NEXT:    v_bfe_u32 v12, v6, 16, 1
14159 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14160 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14161 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
14162 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v5
14163 ; GFX10-NEXT:    v_mul_f32_e32 v5, v15, v13
14164 ; GFX10-NEXT:    v_or_b32_e32 v14, 0x400000, v3
14165 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v4
14166 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
14167 ; GFX10-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
14168 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v6
14169 ; GFX10-NEXT:    v_bfe_u32 v11, v1, 16, 1
14170 ; GFX10-NEXT:    v_bfe_u32 v12, v5, 16, 1
14171 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
14172 ; GFX10-NEXT:    v_bfe_u32 v13, v0, 16, 1
14173 ; GFX10-NEXT:    v_or_b32_e32 v15, 0x400000, v1
14174 ; GFX10-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
14175 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v5
14176 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v4, v10, vcc_lo
14177 ; GFX10-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
14178 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
14179 ; GFX10-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
14180 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v0
14181 ; GFX10-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
14182 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
14183 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
14184 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
14185 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
14186 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
14187 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
14188 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
14189 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
14190 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
14191 ; GFX10-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
14192 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14194 ; GFX11-LABEL: v_fmul_v8bf16:
14195 ; GFX11:       ; %bb.0:
14196 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14197 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
14198 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
14199 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14200 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
14201 ; GFX11-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
14202 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
14203 ; GFX11-NEXT:    v_dual_mul_f32 v8, v9, v8 :: v_dual_and_b32 v7, 0xffff0000, v7
14204 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
14205 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
14206 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14207 ; GFX11-NEXT:    v_bfe_u32 v11, v8, 16, 1
14208 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
14209 ; GFX11-NEXT:    v_mul_f32_e32 v3, v3, v7
14210 ; GFX11-NEXT:    v_mul_f32_e32 v7, v10, v9
14211 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v8
14212 ; GFX11-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
14213 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
14214 ; GFX11-NEXT:    v_bfe_u32 v11, v3, 16, 1
14215 ; GFX11-NEXT:    v_bfe_u32 v12, v7, 16, 1
14216 ; GFX11-NEXT:    v_or_b32_e32 v14, 0x400000, v3
14217 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
14218 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
14219 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
14220 ; GFX11-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
14221 ; GFX11-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
14222 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v7
14223 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14224 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
14225 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14226 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
14227 ; GFX11-NEXT:    v_dual_cndmask_b32 v7, v11, v12 :: v_dual_mul_f32 v2, v2, v6
14228 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
14229 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14230 ; GFX11-NEXT:    v_bfe_u32 v13, v2, 16, 1
14231 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
14232 ; GFX11-NEXT:    v_mul_f32_e32 v6, v10, v6
14233 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v2
14234 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
14235 ; GFX11-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
14236 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
14237 ; GFX11-NEXT:    v_bfe_u32 v12, v6, 16, 1
14238 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
14239 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v6
14240 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
14241 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
14242 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14243 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14244 ; GFX11-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
14245 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
14246 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v4
14247 ; GFX11-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
14248 ; GFX11-NEXT:    v_dual_mul_f32 v1, v1, v5 :: v_dual_cndmask_b32 v4, v4, v10
14249 ; GFX11-NEXT:    v_mul_f32_e32 v5, v15, v13
14250 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
14251 ; GFX11-NEXT:    v_bfe_u32 v11, v1, 16, 1
14252 ; GFX11-NEXT:    v_bfe_u32 v13, v0, 16, 1
14253 ; GFX11-NEXT:    v_or_b32_e32 v15, 0x400000, v1
14254 ; GFX11-NEXT:    v_bfe_u32 v12, v5, 16, 1
14255 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
14256 ; GFX11-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
14257 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v5
14258 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
14259 ; GFX11-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
14260 ; GFX11-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
14261 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v0
14262 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
14263 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
14264 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
14265 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
14266 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
14267 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
14268 ; GFX11-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
14269 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
14270 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
14271 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
14272 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
14273 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
14274 ; GFX11-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
14275 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
14276   %op = fmul <8 x bfloat> %a, %b
14277   ret <8 x bfloat> %op
14280 define <16 x bfloat> @v_fmul_v16bf16(<16 x bfloat> %a, <16 x bfloat> %b) {
14281 ; GCN-LABEL: v_fmul_v16bf16:
14282 ; GCN:       ; %bb.0:
14283 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14284 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
14285 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
14286 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
14287 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14288 ; GCN-NEXT:    v_mul_f32_e32 v14, v14, v30
14289 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
14290 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
14291 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
14292 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14293 ; GCN-NEXT:    v_mul_f32_e32 v13, v13, v29
14294 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
14295 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
14296 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
14297 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14298 ; GCN-NEXT:    v_mul_f32_e32 v12, v12, v28
14299 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
14300 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
14301 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
14302 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14303 ; GCN-NEXT:    v_mul_f32_e32 v11, v11, v27
14304 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
14305 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
14306 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
14307 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14308 ; GCN-NEXT:    v_mul_f32_e32 v10, v10, v26
14309 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
14310 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
14311 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
14312 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14313 ; GCN-NEXT:    v_mul_f32_e32 v9, v9, v25
14314 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
14315 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
14316 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
14317 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14318 ; GCN-NEXT:    v_mul_f32_e32 v8, v8, v24
14319 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
14320 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
14321 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
14322 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14323 ; GCN-NEXT:    v_mul_f32_e32 v7, v7, v23
14324 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
14325 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
14326 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
14327 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14328 ; GCN-NEXT:    v_mul_f32_e32 v6, v6, v22
14329 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
14330 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
14331 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
14332 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14333 ; GCN-NEXT:    v_mul_f32_e32 v5, v5, v21
14334 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
14335 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
14336 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
14337 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
14338 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
14339 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
14340 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
14341 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
14342 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
14343 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
14344 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
14345 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
14346 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14347 ; GCN-NEXT:    v_mul_f32_e32 v4, v4, v20
14348 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32
14349 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14350 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
14351 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14352 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
14353 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14354 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
14355 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14356 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
14357 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14358 ; GCN-NEXT:    v_mul_f32_e32 v3, v3, v19
14359 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v18
14360 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v17
14361 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v16
14362 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14363 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14364 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14365 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14366 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14367 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14368 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14369 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14370 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14371 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14372 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14373 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14374 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14375 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14376 ; GCN-NEXT:    s_waitcnt vmcnt(0)
14377 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v20
14378 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
14379 ; GCN-NEXT:    v_mul_f32_e32 v15, v15, v16
14380 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14381 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14382 ; GCN-NEXT:    s_setpc_b64 s[30:31]
14384 ; GFX7-LABEL: v_fmul_v16bf16:
14385 ; GFX7:       ; %bb.0:
14386 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14387 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
14388 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
14389 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
14390 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14391 ; GFX7-NEXT:    v_mul_f32_e32 v6, v6, v22
14392 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32
14393 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
14394 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
14395 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
14396 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
14397 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
14398 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
14399 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
14400 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
14401 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
14402 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
14403 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
14404 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
14405 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
14406 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
14407 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
14408 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
14409 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
14410 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
14411 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
14412 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
14413 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
14414 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
14415 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
14416 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
14417 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
14418 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
14419 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
14420 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
14421 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
14422 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
14423 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14424 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
14425 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14426 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
14427 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14428 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
14429 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14430 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
14431 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14432 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
14433 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14434 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
14435 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14436 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
14437 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14438 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14439 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
14440 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14441 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
14442 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14443 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
14444 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14445 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
14446 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14447 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
14448 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14449 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
14450 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14451 ; GFX7-NEXT:    v_mul_f32_e32 v14, v14, v30
14452 ; GFX7-NEXT:    v_mul_f32_e32 v13, v13, v29
14453 ; GFX7-NEXT:    v_mul_f32_e32 v12, v12, v28
14454 ; GFX7-NEXT:    v_mul_f32_e32 v11, v11, v27
14455 ; GFX7-NEXT:    v_mul_f32_e32 v10, v10, v26
14456 ; GFX7-NEXT:    v_mul_f32_e32 v9, v9, v25
14457 ; GFX7-NEXT:    v_mul_f32_e32 v8, v8, v24
14458 ; GFX7-NEXT:    v_mul_f32_e32 v7, v7, v23
14459 ; GFX7-NEXT:    v_mul_f32_e32 v5, v5, v21
14460 ; GFX7-NEXT:    v_mul_f32_e32 v4, v4, v20
14461 ; GFX7-NEXT:    v_mul_f32_e32 v3, v3, v19
14462 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v18
14463 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v17
14464 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v16
14465 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14466 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14467 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14468 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14469 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14470 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14471 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14472 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
14473 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
14474 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
14475 ; GFX7-NEXT:    v_mul_f32_e32 v15, v15, v22
14476 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14477 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14478 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14479 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14480 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14481 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14482 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14483 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14484 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14485 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
14487 ; GFX8-LABEL: v_fmul_v16bf16:
14488 ; GFX8:       ; %bb.0:
14489 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14490 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
14491 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
14492 ; GFX8-NEXT:    v_mul_f32_e32 v16, v17, v16
14493 ; GFX8-NEXT:    v_bfe_u32 v17, v16, 16, 1
14494 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v16
14495 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
14496 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14497 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14498 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14499 ; GFX8-NEXT:    v_mul_f32_e32 v7, v7, v15
14500 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v16
14501 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
14502 ; GFX8-NEXT:    v_bfe_u32 v15, v7, 16, 1
14503 ; GFX8-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
14504 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v7
14505 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
14506 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v7
14507 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
14508 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
14509 ; GFX8-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
14510 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
14511 ; GFX8-NEXT:    v_mul_f32_e32 v15, v17, v15
14512 ; GFX8-NEXT:    v_bfe_u32 v17, v15, 16, 1
14513 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v15
14514 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14515 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14516 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14517 ; GFX8-NEXT:    v_mul_f32_e32 v6, v6, v14
14518 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v15
14519 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
14520 ; GFX8-NEXT:    v_bfe_u32 v14, v6, 16, 1
14521 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
14522 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, v14, v6
14523 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, s4, v14
14524 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v6
14525 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
14526 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
14527 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
14528 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
14529 ; GFX8-NEXT:    v_mul_f32_e32 v14, v17, v14
14530 ; GFX8-NEXT:    v_bfe_u32 v17, v14, 16, 1
14531 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v14
14532 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14533 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14534 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14535 ; GFX8-NEXT:    v_mul_f32_e32 v5, v5, v13
14536 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v14
14537 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
14538 ; GFX8-NEXT:    v_bfe_u32 v13, v5, 16, 1
14539 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
14540 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, v13, v5
14541 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, s4, v13
14542 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v5
14543 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
14544 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
14545 ; GFX8-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
14546 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
14547 ; GFX8-NEXT:    v_mul_f32_e32 v13, v17, v13
14548 ; GFX8-NEXT:    v_bfe_u32 v17, v13, 16, 1
14549 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v13
14550 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14551 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14552 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14553 ; GFX8-NEXT:    v_mul_f32_e32 v4, v4, v12
14554 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v13
14555 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
14556 ; GFX8-NEXT:    v_bfe_u32 v12, v4, 16, 1
14557 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
14558 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v4
14559 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, s4, v12
14560 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v4
14561 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
14562 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
14563 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
14564 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
14565 ; GFX8-NEXT:    v_mul_f32_e32 v12, v17, v12
14566 ; GFX8-NEXT:    v_bfe_u32 v17, v12, 16, 1
14567 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v12
14568 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14569 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14570 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14571 ; GFX8-NEXT:    v_mul_f32_e32 v3, v3, v11
14572 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v12
14573 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
14574 ; GFX8-NEXT:    v_bfe_u32 v11, v3, 16, 1
14575 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
14576 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v3
14577 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, s4, v11
14578 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v3
14579 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
14580 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
14581 ; GFX8-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
14582 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
14583 ; GFX8-NEXT:    v_mul_f32_e32 v11, v17, v11
14584 ; GFX8-NEXT:    v_bfe_u32 v17, v11, 16, 1
14585 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v11
14586 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14587 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14588 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14589 ; GFX8-NEXT:    v_mul_f32_e32 v2, v2, v10
14590 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v11
14591 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
14592 ; GFX8-NEXT:    v_bfe_u32 v10, v2, 16, 1
14593 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
14594 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v2
14595 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s4, v10
14596 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v2
14597 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
14598 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
14599 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
14600 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
14601 ; GFX8-NEXT:    v_mul_f32_e32 v10, v17, v10
14602 ; GFX8-NEXT:    v_bfe_u32 v17, v10, 16, 1
14603 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v10
14604 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14605 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14606 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14607 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v9
14608 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v10
14609 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
14610 ; GFX8-NEXT:    v_bfe_u32 v9, v1, 16, 1
14611 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
14612 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v1
14613 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
14614 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v1
14615 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
14616 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
14617 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
14618 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
14619 ; GFX8-NEXT:    v_mul_f32_e32 v9, v17, v9
14620 ; GFX8-NEXT:    v_bfe_u32 v17, v9, 16, 1
14621 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v9
14622 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14623 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14624 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
14625 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v8
14626 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v9
14627 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
14628 ; GFX8-NEXT:    v_bfe_u32 v8, v0, 16, 1
14629 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
14630 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v0
14631 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s4, v8
14632 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v0
14633 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
14634 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
14635 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
14636 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
14637 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
14638 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
14639 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
14640 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
14641 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
14642 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
14643 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v9, 16
14644 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v10, 16
14645 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v11, 16
14646 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v12, 16
14647 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v13, 16
14648 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v14, 16
14649 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v15, 16
14650 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v16, 16
14651 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
14653 ; GFX9-LABEL: v_fmul_v16bf16:
14654 ; GFX9:       ; %bb.0:
14655 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14656 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
14657 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
14658 ; GFX9-NEXT:    v_mul_f32_e32 v16, v17, v16
14659 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14660 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14661 ; GFX9-NEXT:    v_bfe_u32 v17, v16, 16, 1
14662 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
14663 ; GFX9-NEXT:    v_mul_f32_e32 v7, v7, v15
14664 ; GFX9-NEXT:    v_add3_u32 v17, v17, v16, s4
14665 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v16
14666 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
14667 ; GFX9-NEXT:    v_bfe_u32 v15, v7, 16, 1
14668 ; GFX9-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
14669 ; GFX9-NEXT:    v_add3_u32 v15, v15, v7, s4
14670 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v7
14671 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
14672 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
14673 ; GFX9-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
14674 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
14675 ; GFX9-NEXT:    v_mul_f32_e32 v15, v17, v15
14676 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14677 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14678 ; GFX9-NEXT:    v_bfe_u32 v17, v15, 16, 1
14679 ; GFX9-NEXT:    v_mul_f32_e32 v6, v6, v14
14680 ; GFX9-NEXT:    v_add3_u32 v17, v17, v15, s4
14681 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v15
14682 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
14683 ; GFX9-NEXT:    v_bfe_u32 v14, v6, 16, 1
14684 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
14685 ; GFX9-NEXT:    v_add3_u32 v14, v14, v6, s4
14686 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v6
14687 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
14688 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
14689 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
14690 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
14691 ; GFX9-NEXT:    v_mul_f32_e32 v14, v17, v14
14692 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14693 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14694 ; GFX9-NEXT:    v_bfe_u32 v17, v14, 16, 1
14695 ; GFX9-NEXT:    v_mul_f32_e32 v5, v5, v13
14696 ; GFX9-NEXT:    v_add3_u32 v17, v17, v14, s4
14697 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v14
14698 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
14699 ; GFX9-NEXT:    v_bfe_u32 v13, v5, 16, 1
14700 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
14701 ; GFX9-NEXT:    v_add3_u32 v13, v13, v5, s4
14702 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v5
14703 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
14704 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
14705 ; GFX9-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
14706 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
14707 ; GFX9-NEXT:    v_mul_f32_e32 v13, v17, v13
14708 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14709 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14710 ; GFX9-NEXT:    v_bfe_u32 v17, v13, 16, 1
14711 ; GFX9-NEXT:    v_mul_f32_e32 v4, v4, v12
14712 ; GFX9-NEXT:    v_add3_u32 v17, v17, v13, s4
14713 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v13
14714 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
14715 ; GFX9-NEXT:    v_bfe_u32 v12, v4, 16, 1
14716 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
14717 ; GFX9-NEXT:    v_add3_u32 v12, v12, v4, s4
14718 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v4
14719 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
14720 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
14721 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
14722 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
14723 ; GFX9-NEXT:    v_mul_f32_e32 v12, v17, v12
14724 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14725 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14726 ; GFX9-NEXT:    v_bfe_u32 v17, v12, 16, 1
14727 ; GFX9-NEXT:    v_mul_f32_e32 v3, v3, v11
14728 ; GFX9-NEXT:    v_add3_u32 v17, v17, v12, s4
14729 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v12
14730 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
14731 ; GFX9-NEXT:    v_bfe_u32 v11, v3, 16, 1
14732 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
14733 ; GFX9-NEXT:    v_add3_u32 v11, v11, v3, s4
14734 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v3
14735 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
14736 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
14737 ; GFX9-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
14738 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
14739 ; GFX9-NEXT:    v_mul_f32_e32 v11, v17, v11
14740 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14741 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14742 ; GFX9-NEXT:    v_bfe_u32 v17, v11, 16, 1
14743 ; GFX9-NEXT:    v_mul_f32_e32 v2, v2, v10
14744 ; GFX9-NEXT:    v_add3_u32 v17, v17, v11, s4
14745 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v11
14746 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
14747 ; GFX9-NEXT:    v_bfe_u32 v10, v2, 16, 1
14748 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
14749 ; GFX9-NEXT:    v_add3_u32 v10, v10, v2, s4
14750 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v2
14751 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
14752 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
14753 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
14754 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
14755 ; GFX9-NEXT:    v_mul_f32_e32 v10, v17, v10
14756 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14757 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14758 ; GFX9-NEXT:    v_bfe_u32 v17, v10, 16, 1
14759 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v9
14760 ; GFX9-NEXT:    v_add3_u32 v17, v17, v10, s4
14761 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v10
14762 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
14763 ; GFX9-NEXT:    v_bfe_u32 v9, v1, 16, 1
14764 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
14765 ; GFX9-NEXT:    v_add3_u32 v9, v9, v1, s4
14766 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v1
14767 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
14768 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
14769 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
14770 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
14771 ; GFX9-NEXT:    v_mul_f32_e32 v9, v17, v9
14772 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14773 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14774 ; GFX9-NEXT:    v_bfe_u32 v17, v9, 16, 1
14775 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v8
14776 ; GFX9-NEXT:    v_add3_u32 v17, v17, v9, s4
14777 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v9
14778 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
14779 ; GFX9-NEXT:    v_bfe_u32 v8, v0, 16, 1
14780 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
14781 ; GFX9-NEXT:    v_add3_u32 v8, v8, v0, s4
14782 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v0
14783 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
14784 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
14785 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
14786 ; GFX9-NEXT:    v_perm_b32 v0, v0, v9, s4
14787 ; GFX9-NEXT:    v_perm_b32 v1, v1, v10, s4
14788 ; GFX9-NEXT:    v_perm_b32 v2, v2, v11, s4
14789 ; GFX9-NEXT:    v_perm_b32 v3, v3, v12, s4
14790 ; GFX9-NEXT:    v_perm_b32 v4, v4, v13, s4
14791 ; GFX9-NEXT:    v_perm_b32 v5, v5, v14, s4
14792 ; GFX9-NEXT:    v_perm_b32 v6, v6, v15, s4
14793 ; GFX9-NEXT:    v_perm_b32 v7, v7, v16, s4
14794 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
14796 ; GFX10-LABEL: v_fmul_v16bf16:
14797 ; GFX10:       ; %bb.0:
14798 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14799 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
14800 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
14801 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
14802 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14803 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
14804 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14805 ; GFX10-NEXT:    v_mul_f32_e32 v16, v17, v16
14806 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
14807 ; GFX10-NEXT:    v_mul_f32_e32 v7, v7, v15
14808 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14809 ; GFX10-NEXT:    v_bfe_u32 v15, v16, 16, 1
14810 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v16
14811 ; GFX10-NEXT:    v_bfe_u32 v19, v7, 16, 1
14812 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
14813 ; GFX10-NEXT:    v_mul_f32_e32 v17, v18, v17
14814 ; GFX10-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
14815 ; GFX10-NEXT:    v_mul_f32_e32 v6, v6, v14
14816 ; GFX10-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
14817 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v7
14818 ; GFX10-NEXT:    v_bfe_u32 v21, v17, 16, 1
14819 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v15, v20, vcc_lo
14820 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
14821 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v5
14822 ; GFX10-NEXT:    v_or_b32_e32 v16, 0x400000, v17
14823 ; GFX10-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
14824 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14825 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
14826 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
14827 ; GFX10-NEXT:    v_bfe_u32 v18, v6, 16, 1
14828 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14829 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
14830 ; GFX10-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
14831 ; GFX10-NEXT:    v_mul_f32_e32 v17, v20, v19
14832 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
14833 ; GFX10-NEXT:    v_mul_f32_e32 v5, v5, v13
14834 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v14, v16, vcc_lo
14835 ; GFX10-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
14836 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v6
14837 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
14838 ; GFX10-NEXT:    v_bfe_u32 v20, v17, 16, 1
14839 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
14840 ; GFX10-NEXT:    v_bfe_u32 v21, v5, 16, 1
14841 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14842 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14843 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v16, v13, vcc_lo
14844 ; GFX10-NEXT:    v_mul_f32_e32 v13, v19, v18
14845 ; GFX10-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
14846 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v17
14847 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
14848 ; GFX10-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
14849 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v5
14850 ; GFX10-NEXT:    v_bfe_u32 v21, v13, 16, 1
14851 ; GFX10-NEXT:    v_mul_f32_e32 v4, v4, v12
14852 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
14853 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
14854 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
14855 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
14856 ; GFX10-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
14857 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
14858 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
14859 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v13
14860 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
14861 ; GFX10-NEXT:    v_mul_f32_e32 v12, v18, v12
14862 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
14863 ; GFX10-NEXT:    v_bfe_u32 v20, v4, 16, 1
14864 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
14865 ; GFX10-NEXT:    v_mul_f32_e32 v3, v3, v11
14866 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v12
14867 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
14868 ; GFX10-NEXT:    v_bfe_u32 v17, v12, 16, 1
14869 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
14870 ; GFX10-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
14871 ; GFX10-NEXT:    v_bfe_u32 v20, v3, 16, 1
14872 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
14873 ; GFX10-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
14874 ; GFX10-NEXT:    v_mul_f32_e32 v18, v19, v18
14875 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
14876 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
14877 ; GFX10-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
14878 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v3
14879 ; GFX10-NEXT:    v_bfe_u32 v23, v18, 16, 1
14880 ; GFX10-NEXT:    v_mul_f32_e32 v2, v2, v10
14881 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
14882 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
14883 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v18
14884 ; GFX10-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
14885 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
14886 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
14887 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
14888 ; GFX10-NEXT:    v_bfe_u32 v19, v2, 16, 1
14889 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
14890 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
14891 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
14892 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v2
14893 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v4
14894 ; GFX10-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
14895 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
14896 ; GFX10-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
14897 ; GFX10-NEXT:    v_mul_f32_e32 v19, v22, v20
14898 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
14899 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
14900 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
14901 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
14902 ; GFX10-NEXT:    v_bfe_u32 v23, v19, 16, 1
14903 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v9
14904 ; GFX10-NEXT:    v_mul_f32_e32 v9, v22, v20
14905 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v19
14906 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v8
14907 ; GFX10-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
14908 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
14909 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
14910 ; GFX10-NEXT:    v_bfe_u32 v23, v9, 16, 1
14911 ; GFX10-NEXT:    v_or_b32_e32 v24, 0x400000, v9
14912 ; GFX10-NEXT:    v_or_b32_e32 v25, 0x400000, v0
14913 ; GFX10-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
14914 ; GFX10-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
14915 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v1
14916 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
14917 ; GFX10-NEXT:    v_bfe_u32 v20, v0, 16, 1
14918 ; GFX10-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
14919 ; GFX10-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
14920 ; GFX10-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
14921 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
14922 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
14923 ; GFX10-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
14924 ; GFX10-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
14925 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
14926 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
14927 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
14928 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
14929 ; GFX10-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
14930 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
14931 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
14932 ; GFX10-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
14933 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
14934 ; GFX10-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
14935 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
14937 ; GFX11-LABEL: v_fmul_v16bf16:
14938 ; GFX11:       ; %bb.0:
14939 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
14940 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
14941 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
14942 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
14943 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
14944 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
14945 ; GFX11-NEXT:    v_dual_mul_f32 v16, v17, v16 :: v_dual_and_b32 v15, 0xffff0000, v15
14946 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
14947 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
14948 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v16
14949 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
14950 ; GFX11-NEXT:    v_mul_f32_e32 v17, v18, v17
14951 ; GFX11-NEXT:    v_mul_f32_e32 v6, v6, v14
14952 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
14953 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
14954 ; GFX11-NEXT:    v_bfe_u32 v21, v17, 16, 1
14955 ; GFX11-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
14956 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
14957 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
14958 ; GFX11-NEXT:    v_mul_f32_e32 v7, v7, v15
14959 ; GFX11-NEXT:    v_bfe_u32 v15, v16, 16, 1
14960 ; GFX11-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
14961 ; GFX11-NEXT:    v_or_b32_e32 v16, 0x400000, v17
14962 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
14963 ; GFX11-NEXT:    v_dual_cndmask_b32 v15, v15, v20 :: v_dual_lshlrev_b32 v20, 16, v5
14964 ; GFX11-NEXT:    v_bfe_u32 v19, v7, 16, 1
14965 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
14966 ; GFX11-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
14967 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v7
14968 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
14969 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
14970 ; GFX11-NEXT:    v_bfe_u32 v18, v6, 16, 1
14971 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
14972 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
14973 ; GFX11-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
14974 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
14975 ; GFX11-NEXT:    v_dual_mul_f32 v17, v20, v19 :: v_dual_cndmask_b32 v14, v14, v16
14976 ; GFX11-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
14977 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
14978 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
14979 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
14980 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
14981 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
14982 ; GFX11-NEXT:    v_bfe_u32 v20, v17, 16, 1
14983 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
14984 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
14985 ; GFX11-NEXT:    v_mul_f32_e32 v4, v4, v12
14986 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
14987 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
14988 ; GFX11-NEXT:    v_mul_f32_e32 v5, v5, v13
14989 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v6
14990 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
14991 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v16, v13 :: v_dual_mul_f32 v13, v19, v18
14992 ; GFX11-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
14993 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v17
14994 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
14995 ; GFX11-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
14996 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_4)
14997 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
14998 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
14999 ; GFX11-NEXT:    v_bfe_u32 v21, v5, 16, 1
15000 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v5
15001 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
15002 ; GFX11-NEXT:    v_mul_f32_e32 v12, v18, v12
15003 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
15004 ; GFX11-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
15005 ; GFX11-NEXT:    v_bfe_u32 v21, v13, 16, 1
15006 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
15007 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v12
15008 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
15009 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
15010 ; GFX11-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
15011 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v13
15012 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
15013 ; GFX11-NEXT:    v_bfe_u32 v20, v4, 16, 1
15014 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v4
15015 ; GFX11-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
15016 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
15017 ; GFX11-NEXT:    v_bfe_u32 v17, v12, 16, 1
15018 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
15019 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
15020 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15021 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15022 ; GFX11-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
15023 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
15024 ; GFX11-NEXT:    v_mul_f32_e32 v18, v19, v18
15025 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
15026 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
15027 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15028 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15029 ; GFX11-NEXT:    v_bfe_u32 v23, v18, 16, 1
15030 ; GFX11-NEXT:    v_or_b32_e32 v17, 0x400000, v18
15031 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
15032 ; GFX11-NEXT:    v_dual_mul_f32 v2, v2, v10 :: v_dual_and_b32 v1, 0xffff0000, v1
15033 ; GFX11-NEXT:    v_mul_f32_e32 v3, v3, v11
15034 ; GFX11-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
15035 ; GFX11-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
15036 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
15037 ; GFX11-NEXT:    v_bfe_u32 v20, v3, 16, 1
15038 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
15039 ; GFX11-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
15040 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v3
15041 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
15042 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
15043 ; GFX11-NEXT:    v_bfe_u32 v19, v2, 16, 1
15044 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
15045 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
15046 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v2
15047 ; GFX11-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
15048 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
15049 ; GFX11-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
15050 ; GFX11-NEXT:    v_mul_f32_e32 v19, v22, v20
15051 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
15052 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
15053 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15054 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
15055 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
15056 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15057 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15058 ; GFX11-NEXT:    v_bfe_u32 v23, v19, 16, 1
15059 ; GFX11-NEXT:    v_dual_mul_f32 v0, v0, v8 :: v_dual_mul_f32 v1, v1, v9
15060 ; GFX11-NEXT:    v_mul_f32_e32 v9, v22, v20
15061 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
15062 ; GFX11-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
15063 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v19
15064 ; GFX11-NEXT:    v_or_b32_e32 v25, 0x400000, v0
15065 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
15066 ; GFX11-NEXT:    v_bfe_u32 v23, v9, 16, 1
15067 ; GFX11-NEXT:    v_or_b32_e32 v24, 0x400000, v9
15068 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
15069 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v1
15070 ; GFX11-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
15071 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
15072 ; GFX11-NEXT:    v_bfe_u32 v20, v0, 16, 1
15073 ; GFX11-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
15074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
15075 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
15076 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
15077 ; GFX11-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
15078 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
15079 ; GFX11-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
15080 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
15081 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
15082 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
15083 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
15084 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
15085 ; GFX11-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
15086 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
15087 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
15088 ; GFX11-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
15089 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
15090 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
15091 ; GFX11-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
15092 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
15093   %op = fmul <16 x bfloat> %a, %b
15094   ret <16 x bfloat> %op
15097 define <32 x bfloat> @v_fmul_v32bf16(<32 x bfloat> %a, <32 x bfloat> %b) {
15098 ; GCN-LABEL: v_fmul_v32bf16:
15099 ; GCN:       ; %bb.0:
15100 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15101 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32
15102 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
15103 ; GCN-NEXT:    s_waitcnt vmcnt(1)
15104 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v31
15105 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15106 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15107 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15108 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
15109 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:124
15110 ; GCN-NEXT:    v_mul_f32_e32 v31, v31, v32
15111 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
15112 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15113 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15114 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15115 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15116 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:120
15117 ; GCN-NEXT:    v_mul_f32_e32 v30, v30, v32
15118 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
15119 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15120 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15121 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15122 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15123 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:116
15124 ; GCN-NEXT:    v_mul_f32_e32 v29, v29, v32
15125 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
15126 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15127 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15128 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15129 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15130 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:112
15131 ; GCN-NEXT:    v_mul_f32_e32 v28, v28, v32
15132 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
15133 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
15134 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15135 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15136 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15137 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:108
15138 ; GCN-NEXT:    v_mul_f32_e32 v27, v27, v32
15139 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
15140 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
15141 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15142 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15143 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15144 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:104
15145 ; GCN-NEXT:    v_mul_f32_e32 v26, v26, v32
15146 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
15147 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
15148 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15149 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15150 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15151 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:100
15152 ; GCN-NEXT:    v_mul_f32_e32 v25, v25, v32
15153 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
15154 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
15155 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15156 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15157 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15158 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:96
15159 ; GCN-NEXT:    v_mul_f32_e32 v24, v24, v32
15160 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
15161 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
15162 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15163 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15164 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15165 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:92
15166 ; GCN-NEXT:    v_mul_f32_e32 v23, v23, v32
15167 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
15168 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
15169 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15170 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15171 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15172 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:88
15173 ; GCN-NEXT:    v_mul_f32_e32 v22, v22, v32
15174 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
15175 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
15176 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15177 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15178 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15179 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:84
15180 ; GCN-NEXT:    v_mul_f32_e32 v21, v21, v32
15181 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
15182 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
15183 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15184 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15185 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15186 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:80
15187 ; GCN-NEXT:    v_mul_f32_e32 v20, v20, v32
15188 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
15189 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
15190 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15191 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15192 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15193 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:76
15194 ; GCN-NEXT:    v_mul_f32_e32 v19, v19, v32
15195 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
15196 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
15197 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15198 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15199 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15200 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:72
15201 ; GCN-NEXT:    v_mul_f32_e32 v18, v18, v32
15202 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
15203 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
15204 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15205 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15206 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15207 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:68
15208 ; GCN-NEXT:    v_mul_f32_e32 v17, v17, v32
15209 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
15210 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
15211 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15212 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15213 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15214 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:64
15215 ; GCN-NEXT:    v_mul_f32_e32 v16, v16, v32
15216 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
15217 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15218 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15219 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15220 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15221 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:60
15222 ; GCN-NEXT:    v_mul_f32_e32 v15, v15, v32
15223 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
15224 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15225 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15226 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15227 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15228 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:56
15229 ; GCN-NEXT:    v_mul_f32_e32 v14, v14, v32
15230 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
15231 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15232 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15233 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15234 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15235 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:52
15236 ; GCN-NEXT:    v_mul_f32_e32 v13, v13, v32
15237 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
15238 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15239 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15240 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15241 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15242 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:48
15243 ; GCN-NEXT:    v_mul_f32_e32 v12, v12, v32
15244 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
15245 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15246 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15247 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15248 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15249 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:44
15250 ; GCN-NEXT:    v_mul_f32_e32 v11, v11, v32
15251 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
15252 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15253 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15254 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15255 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15256 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:40
15257 ; GCN-NEXT:    v_mul_f32_e32 v10, v10, v32
15258 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
15259 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15260 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15261 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15262 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15263 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:36
15264 ; GCN-NEXT:    v_mul_f32_e32 v9, v9, v32
15265 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
15266 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15267 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15268 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15269 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15270 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:32
15271 ; GCN-NEXT:    v_mul_f32_e32 v8, v8, v32
15272 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
15273 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
15274 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15275 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15276 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15277 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:28
15278 ; GCN-NEXT:    v_mul_f32_e32 v7, v7, v32
15279 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
15280 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
15281 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15282 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15283 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15284 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:24
15285 ; GCN-NEXT:    v_mul_f32_e32 v6, v6, v32
15286 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
15287 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
15288 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15289 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15290 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15291 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:20
15292 ; GCN-NEXT:    v_mul_f32_e32 v5, v5, v32
15293 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
15294 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
15295 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15296 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15297 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15298 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:16
15299 ; GCN-NEXT:    v_mul_f32_e32 v4, v4, v32
15300 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
15301 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15302 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15303 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15304 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15305 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:12
15306 ; GCN-NEXT:    v_mul_f32_e32 v3, v3, v32
15307 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
15308 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15309 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15310 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15311 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15312 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
15313 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v32
15314 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
15315 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
15316 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15317 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15318 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15319 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:4
15320 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v32
15321 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
15322 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15323 ; GCN-NEXT:    s_waitcnt vmcnt(0)
15324 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
15325 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15326 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v32
15327 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15328 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
15329 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15330 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15331 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
15332 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
15333 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
15334 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
15335 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15336 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15337 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15338 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15339 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15340 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15341 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15342 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15343 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
15344 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
15345 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
15346 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
15347 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
15348 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
15349 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
15350 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
15351 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
15352 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
15353 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
15354 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
15355 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15356 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15357 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15358 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
15359 ; GCN-NEXT:    s_setpc_b64 s[30:31]
15361 ; GFX7-LABEL: v_fmul_v32bf16:
15362 ; GFX7:       ; %bb.0:
15363 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15364 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32
15365 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
15366 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
15367 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15368 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
15369 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15370 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
15371 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15372 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
15373 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
15374 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
15375 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
15376 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
15377 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
15378 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
15379 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
15380 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
15381 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
15382 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
15383 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
15384 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
15385 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
15386 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
15387 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
15388 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
15389 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
15390 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
15391 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
15392 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
15393 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
15394 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
15395 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
15396 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
15397 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15398 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
15399 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15400 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
15401 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15402 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
15403 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15404 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
15405 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15406 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
15407 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15408 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
15409 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15410 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
15411 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15412 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
15413 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
15414 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
15415 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
15416 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
15417 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
15418 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
15419 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
15420 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
15421 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15422 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
15423 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15424 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
15425 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
15426 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
15427 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15428 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
15429 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
15430 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15431 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15432 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15433 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
15434 ; GFX7-NEXT:    v_mul_f32_e32 v31, v31, v32
15435 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
15436 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
15437 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15438 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15439 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15440 ; GFX7-NEXT:    v_mul_f32_e32 v30, v30, v32
15441 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:120
15442 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15443 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15444 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15445 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15446 ; GFX7-NEXT:    v_mul_f32_e32 v29, v29, v32
15447 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:116
15448 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15449 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15450 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15451 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15452 ; GFX7-NEXT:    v_mul_f32_e32 v28, v28, v32
15453 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:112
15454 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15455 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15456 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15457 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15458 ; GFX7-NEXT:    v_mul_f32_e32 v27, v27, v32
15459 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:108
15460 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
15461 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15462 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15463 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15464 ; GFX7-NEXT:    v_mul_f32_e32 v26, v26, v32
15465 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:104
15466 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
15467 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15468 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15469 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15470 ; GFX7-NEXT:    v_mul_f32_e32 v25, v25, v32
15471 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:100
15472 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
15473 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15474 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15475 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15476 ; GFX7-NEXT:    v_mul_f32_e32 v24, v24, v32
15477 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:96
15478 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
15479 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15480 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15481 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15482 ; GFX7-NEXT:    v_mul_f32_e32 v23, v23, v32
15483 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:92
15484 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
15485 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15486 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15487 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15488 ; GFX7-NEXT:    v_mul_f32_e32 v22, v22, v32
15489 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:88
15490 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
15491 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15492 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15493 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15494 ; GFX7-NEXT:    v_mul_f32_e32 v21, v21, v32
15495 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:84
15496 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
15497 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15498 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15499 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15500 ; GFX7-NEXT:    v_mul_f32_e32 v20, v20, v32
15501 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:80
15502 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
15503 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15504 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15505 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15506 ; GFX7-NEXT:    v_mul_f32_e32 v19, v19, v32
15507 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:76
15508 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
15509 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15510 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15511 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15512 ; GFX7-NEXT:    v_mul_f32_e32 v18, v18, v32
15513 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:72
15514 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
15515 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15516 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15517 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15518 ; GFX7-NEXT:    v_mul_f32_e32 v17, v17, v32
15519 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:68
15520 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
15521 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15522 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15523 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15524 ; GFX7-NEXT:    v_mul_f32_e32 v16, v16, v32
15525 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
15526 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
15527 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15528 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15529 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15530 ; GFX7-NEXT:    v_mul_f32_e32 v15, v15, v32
15531 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:60
15532 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15533 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15534 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15535 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15536 ; GFX7-NEXT:    v_mul_f32_e32 v14, v14, v32
15537 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:56
15538 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15539 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15540 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15541 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15542 ; GFX7-NEXT:    v_mul_f32_e32 v13, v13, v32
15543 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:52
15544 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15545 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15546 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15547 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15548 ; GFX7-NEXT:    v_mul_f32_e32 v12, v12, v32
15549 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:48
15550 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15551 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15552 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15553 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15554 ; GFX7-NEXT:    v_mul_f32_e32 v11, v11, v32
15555 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:44
15556 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15557 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15558 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15559 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15560 ; GFX7-NEXT:    v_mul_f32_e32 v10, v10, v32
15561 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:40
15562 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15563 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15564 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15565 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15566 ; GFX7-NEXT:    v_mul_f32_e32 v9, v9, v32
15567 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:36
15568 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15569 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15570 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15571 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15572 ; GFX7-NEXT:    v_mul_f32_e32 v8, v8, v32
15573 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:32
15574 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15575 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15576 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15577 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15578 ; GFX7-NEXT:    v_mul_f32_e32 v7, v7, v32
15579 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:28
15580 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
15581 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15582 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15583 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15584 ; GFX7-NEXT:    v_mul_f32_e32 v6, v6, v32
15585 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:24
15586 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
15587 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15588 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15589 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15590 ; GFX7-NEXT:    v_mul_f32_e32 v5, v5, v32
15591 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:20
15592 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
15593 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15594 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15595 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15596 ; GFX7-NEXT:    v_mul_f32_e32 v4, v4, v32
15597 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:16
15598 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
15599 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15600 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15601 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15602 ; GFX7-NEXT:    v_mul_f32_e32 v3, v3, v32
15603 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:12
15604 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15605 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15606 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15607 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15608 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v32
15609 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8
15610 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15611 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15612 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15613 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15614 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v32
15615 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
15616 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
15617 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
15618 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
15619 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
15620 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v32
15621 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15622 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
15624 ; GFX8-LABEL: v_fmul_v32bf16:
15625 ; GFX8:       ; %bb.0:
15626 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15627 ; GFX8-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
15628 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
15629 ; GFX8-NEXT:    v_mul_f32_e32 v31, v32, v31
15630 ; GFX8-NEXT:    v_bfe_u32 v32, v31, 16, 1
15631 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
15632 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, v32, v31
15633 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15634 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15635 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, s4, v32
15636 ; GFX8-NEXT:    v_mul_f32_e32 v14, v14, v30
15637 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v31
15638 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
15639 ; GFX8-NEXT:    v_bfe_u32 v30, v14, 16, 1
15640 ; GFX8-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
15641 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, v30, v14
15642 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, s4, v30
15643 ; GFX8-NEXT:    v_or_b32_e32 v32, 0x400000, v14
15644 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
15645 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
15646 ; GFX8-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
15647 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
15648 ; GFX8-NEXT:    v_mul_f32_e32 v32, v32, v30
15649 ; GFX8-NEXT:    buffer_load_dword v30, off, s[0:3], s32
15650 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
15651 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15652 ; GFX8-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15653 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15654 ; GFX8-NEXT:    v_mul_f32_e32 v13, v13, v29
15655 ; GFX8-NEXT:    v_bfe_u32 v29, v13, 16, 1
15656 ; GFX8-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
15657 ; GFX8-NEXT:    v_alignbit_b32 v14, v14, v31, 16
15658 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
15659 ; GFX8-NEXT:    v_lshlrev_b32_e32 v34, 16, v30
15660 ; GFX8-NEXT:    v_mul_f32_e32 v33, v33, v34
15661 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15662 ; GFX8-NEXT:    v_mul_f32_e32 v30, v15, v30
15663 ; GFX8-NEXT:    v_bfe_u32 v15, v33, 16, 1
15664 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v33
15665 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
15666 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v33
15667 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
15668 ; GFX8-NEXT:    v_bfe_u32 v33, v30, 16, 1
15669 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
15670 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v30
15671 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15672 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v30
15673 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
15674 ; GFX8-NEXT:    v_cndmask_b32_e32 v30, v33, v34, vcc
15675 ; GFX8-NEXT:    v_bfe_u32 v33, v32, 16, 1
15676 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v32
15677 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15678 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v32
15679 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
15680 ; GFX8-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
15681 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, v29, v13
15682 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, s4, v29
15683 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v13
15684 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
15685 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v29, v33, vcc
15686 ; GFX8-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
15687 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v12
15688 ; GFX8-NEXT:    v_mul_f32_e32 v29, v33, v29
15689 ; GFX8-NEXT:    v_bfe_u32 v33, v29, 16, 1
15690 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v29
15691 ; GFX8-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15692 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15693 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15694 ; GFX8-NEXT:    v_mul_f32_e32 v12, v12, v28
15695 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v29
15696 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
15697 ; GFX8-NEXT:    v_bfe_u32 v28, v12, 16, 1
15698 ; GFX8-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
15699 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, v28, v12
15700 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v28
15701 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v12
15702 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
15703 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
15704 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
15705 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
15706 ; GFX8-NEXT:    v_mul_f32_e32 v28, v33, v28
15707 ; GFX8-NEXT:    v_bfe_u32 v33, v28, 16, 1
15708 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v28
15709 ; GFX8-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
15710 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
15711 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15712 ; GFX8-NEXT:    v_mul_f32_e32 v11, v11, v27
15713 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v28
15714 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
15715 ; GFX8-NEXT:    v_bfe_u32 v27, v11, 16, 1
15716 ; GFX8-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
15717 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, v27, v11
15718 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, s4, v27
15719 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v11
15720 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
15721 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
15722 ; GFX8-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
15723 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
15724 ; GFX8-NEXT:    v_mul_f32_e32 v27, v33, v27
15725 ; GFX8-NEXT:    v_bfe_u32 v33, v27, 16, 1
15726 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v27
15727 ; GFX8-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
15728 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
15729 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15730 ; GFX8-NEXT:    v_mul_f32_e32 v10, v10, v26
15731 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v27
15732 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
15733 ; GFX8-NEXT:    v_bfe_u32 v26, v10, 16, 1
15734 ; GFX8-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
15735 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, v26, v10
15736 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, s4, v26
15737 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v10
15738 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
15739 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
15740 ; GFX8-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
15741 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
15742 ; GFX8-NEXT:    v_mul_f32_e32 v26, v33, v26
15743 ; GFX8-NEXT:    v_bfe_u32 v33, v26, 16, 1
15744 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v26
15745 ; GFX8-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
15746 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
15747 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15748 ; GFX8-NEXT:    v_mul_f32_e32 v9, v9, v25
15749 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v26
15750 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
15751 ; GFX8-NEXT:    v_bfe_u32 v25, v9, 16, 1
15752 ; GFX8-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
15753 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, v25, v9
15754 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, s4, v25
15755 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v9
15756 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
15757 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
15758 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
15759 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
15760 ; GFX8-NEXT:    v_mul_f32_e32 v25, v33, v25
15761 ; GFX8-NEXT:    v_bfe_u32 v33, v25, 16, 1
15762 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v25
15763 ; GFX8-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
15764 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
15765 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15766 ; GFX8-NEXT:    v_mul_f32_e32 v8, v8, v24
15767 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v25
15768 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
15769 ; GFX8-NEXT:    v_bfe_u32 v24, v8, 16, 1
15770 ; GFX8-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
15771 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, v24, v8
15772 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, s4, v24
15773 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v8
15774 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
15775 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
15776 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
15777 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
15778 ; GFX8-NEXT:    v_mul_f32_e32 v24, v33, v24
15779 ; GFX8-NEXT:    v_bfe_u32 v33, v24, 16, 1
15780 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v24
15781 ; GFX8-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
15782 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
15783 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15784 ; GFX8-NEXT:    v_mul_f32_e32 v7, v7, v23
15785 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v24
15786 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
15787 ; GFX8-NEXT:    v_bfe_u32 v23, v7, 16, 1
15788 ; GFX8-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
15789 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v7
15790 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, s4, v23
15791 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v7
15792 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
15793 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
15794 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
15795 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
15796 ; GFX8-NEXT:    v_mul_f32_e32 v23, v33, v23
15797 ; GFX8-NEXT:    v_bfe_u32 v33, v23, 16, 1
15798 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v23
15799 ; GFX8-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
15800 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
15801 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15802 ; GFX8-NEXT:    v_mul_f32_e32 v6, v6, v22
15803 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v23
15804 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
15805 ; GFX8-NEXT:    v_bfe_u32 v22, v6, 16, 1
15806 ; GFX8-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
15807 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v6
15808 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, s4, v22
15809 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v6
15810 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
15811 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
15812 ; GFX8-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
15813 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
15814 ; GFX8-NEXT:    v_mul_f32_e32 v22, v33, v22
15815 ; GFX8-NEXT:    v_bfe_u32 v33, v22, 16, 1
15816 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v22
15817 ; GFX8-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
15818 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
15819 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15820 ; GFX8-NEXT:    v_mul_f32_e32 v5, v5, v21
15821 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v22
15822 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
15823 ; GFX8-NEXT:    v_bfe_u32 v21, v5, 16, 1
15824 ; GFX8-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
15825 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v5
15826 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, s4, v21
15827 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v5
15828 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
15829 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
15830 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
15831 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
15832 ; GFX8-NEXT:    v_mul_f32_e32 v21, v33, v21
15833 ; GFX8-NEXT:    v_bfe_u32 v33, v21, 16, 1
15834 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v21
15835 ; GFX8-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
15836 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
15837 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15838 ; GFX8-NEXT:    v_mul_f32_e32 v4, v4, v20
15839 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v21
15840 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
15841 ; GFX8-NEXT:    v_bfe_u32 v20, v4, 16, 1
15842 ; GFX8-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
15843 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v4
15844 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, s4, v20
15845 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v4
15846 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
15847 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
15848 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
15849 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
15850 ; GFX8-NEXT:    v_mul_f32_e32 v20, v33, v20
15851 ; GFX8-NEXT:    v_bfe_u32 v33, v20, 16, 1
15852 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v20
15853 ; GFX8-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
15854 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
15855 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15856 ; GFX8-NEXT:    v_mul_f32_e32 v3, v3, v19
15857 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v20
15858 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
15859 ; GFX8-NEXT:    v_bfe_u32 v19, v3, 16, 1
15860 ; GFX8-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
15861 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v3
15862 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, s4, v19
15863 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v3
15864 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
15865 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
15866 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
15867 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
15868 ; GFX8-NEXT:    v_mul_f32_e32 v19, v33, v19
15869 ; GFX8-NEXT:    v_bfe_u32 v33, v19, 16, 1
15870 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v19
15871 ; GFX8-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
15872 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
15873 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15874 ; GFX8-NEXT:    v_mul_f32_e32 v2, v2, v18
15875 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v19
15876 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
15877 ; GFX8-NEXT:    v_bfe_u32 v18, v2, 16, 1
15878 ; GFX8-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
15879 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v2
15880 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, s4, v18
15881 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v2
15882 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
15883 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
15884 ; GFX8-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
15885 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
15886 ; GFX8-NEXT:    v_mul_f32_e32 v18, v33, v18
15887 ; GFX8-NEXT:    v_bfe_u32 v33, v18, 16, 1
15888 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v18
15889 ; GFX8-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
15890 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
15891 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15892 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v17
15893 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v18
15894 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
15895 ; GFX8-NEXT:    v_bfe_u32 v17, v1, 16, 1
15896 ; GFX8-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
15897 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v1
15898 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
15899 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v1
15900 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
15901 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
15902 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
15903 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
15904 ; GFX8-NEXT:    v_mul_f32_e32 v17, v33, v17
15905 ; GFX8-NEXT:    v_bfe_u32 v33, v17, 16, 1
15906 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v17
15907 ; GFX8-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
15908 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
15909 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
15910 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v16
15911 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v17
15912 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
15913 ; GFX8-NEXT:    v_bfe_u32 v16, v0, 16, 1
15914 ; GFX8-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
15915 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v0
15916 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, s4, v16
15917 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v0
15918 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
15919 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
15920 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
15921 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
15922 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
15923 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
15924 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
15925 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
15926 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
15927 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
15928 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
15929 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
15930 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
15931 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v30
15932 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
15933 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
15934 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
15935 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v17, 16
15936 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v18, 16
15937 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v19, 16
15938 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v20, 16
15939 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v21, 16
15940 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v22, 16
15941 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v23, 16
15942 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v24, 16
15943 ; GFX8-NEXT:    v_alignbit_b32 v8, v8, v25, 16
15944 ; GFX8-NEXT:    v_alignbit_b32 v9, v9, v26, 16
15945 ; GFX8-NEXT:    v_alignbit_b32 v10, v10, v27, 16
15946 ; GFX8-NEXT:    v_alignbit_b32 v11, v11, v28, 16
15947 ; GFX8-NEXT:    v_alignbit_b32 v12, v12, v29, 16
15948 ; GFX8-NEXT:    v_alignbit_b32 v13, v13, v32, 16
15949 ; GFX8-NEXT:    v_alignbit_b32 v15, v16, v15, 16
15950 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
15952 ; GFX9-LABEL: v_fmul_v32bf16:
15953 ; GFX9:       ; %bb.0:
15954 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
15955 ; GFX9-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
15956 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
15957 ; GFX9-NEXT:    v_mul_f32_e32 v31, v32, v31
15958 ; GFX9-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
15959 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
15960 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
15961 ; GFX9-NEXT:    v_bfe_u32 v32, v31, 16, 1
15962 ; GFX9-NEXT:    v_mul_f32_e32 v14, v14, v30
15963 ; GFX9-NEXT:    v_add3_u32 v32, v32, v31, s4
15964 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v31
15965 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
15966 ; GFX9-NEXT:    v_bfe_u32 v30, v14, 16, 1
15967 ; GFX9-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
15968 ; GFX9-NEXT:    v_add3_u32 v30, v30, v14, s4
15969 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v14
15970 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
15971 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
15972 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
15973 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
15974 ; GFX9-NEXT:    v_mul_f32_e32 v30, v32, v30
15975 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
15976 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
15977 ; GFX9-NEXT:    v_bfe_u32 v32, v30, 16, 1
15978 ; GFX9-NEXT:    v_mul_f32_e32 v13, v13, v29
15979 ; GFX9-NEXT:    v_add3_u32 v32, v32, v30, s4
15980 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v30
15981 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
15982 ; GFX9-NEXT:    v_bfe_u32 v29, v13, 16, 1
15983 ; GFX9-NEXT:    v_cndmask_b32_e32 v30, v32, v33, vcc
15984 ; GFX9-NEXT:    v_add3_u32 v29, v29, v13, s4
15985 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v13
15986 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
15987 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v29, v32, vcc
15988 ; GFX9-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
15989 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v12
15990 ; GFX9-NEXT:    v_mul_f32_e32 v32, v32, v29
15991 ; GFX9-NEXT:    buffer_load_dword v29, off, s[0:3], s32
15992 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
15993 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
15994 ; GFX9-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
15995 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
15996 ; GFX9-NEXT:    v_mul_f32_e32 v12, v12, v28
15997 ; GFX9-NEXT:    v_bfe_u32 v28, v12, 16, 1
15998 ; GFX9-NEXT:    v_add3_u32 v28, v28, v12, s4
15999 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
16000 ; GFX9-NEXT:    v_lshlrev_b32_e32 v34, 16, v29
16001 ; GFX9-NEXT:    v_mul_f32_e32 v33, v33, v34
16002 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
16003 ; GFX9-NEXT:    v_mul_f32_e32 v29, v15, v29
16004 ; GFX9-NEXT:    v_bfe_u32 v15, v33, 16, 1
16005 ; GFX9-NEXT:    v_add3_u32 v15, v15, v33, s4
16006 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v33
16007 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
16008 ; GFX9-NEXT:    v_bfe_u32 v33, v29, 16, 1
16009 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
16010 ; GFX9-NEXT:    v_add3_u32 v33, v33, v29, s4
16011 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v29
16012 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
16013 ; GFX9-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
16014 ; GFX9-NEXT:    v_bfe_u32 v33, v32, 16, 1
16015 ; GFX9-NEXT:    v_add3_u32 v33, v33, v32, s4
16016 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v32
16017 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
16018 ; GFX9-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
16019 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v12
16020 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
16021 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
16022 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
16023 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
16024 ; GFX9-NEXT:    v_mul_f32_e32 v28, v33, v28
16025 ; GFX9-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
16026 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
16027 ; GFX9-NEXT:    v_bfe_u32 v33, v28, 16, 1
16028 ; GFX9-NEXT:    v_mul_f32_e32 v11, v11, v27
16029 ; GFX9-NEXT:    v_add3_u32 v33, v33, v28, s4
16030 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v28
16031 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
16032 ; GFX9-NEXT:    v_bfe_u32 v27, v11, 16, 1
16033 ; GFX9-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
16034 ; GFX9-NEXT:    v_add3_u32 v27, v27, v11, s4
16035 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v11
16036 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
16037 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
16038 ; GFX9-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
16039 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
16040 ; GFX9-NEXT:    v_mul_f32_e32 v27, v33, v27
16041 ; GFX9-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
16042 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
16043 ; GFX9-NEXT:    v_bfe_u32 v33, v27, 16, 1
16044 ; GFX9-NEXT:    v_mul_f32_e32 v10, v10, v26
16045 ; GFX9-NEXT:    v_add3_u32 v33, v33, v27, s4
16046 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v27
16047 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
16048 ; GFX9-NEXT:    v_bfe_u32 v26, v10, 16, 1
16049 ; GFX9-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
16050 ; GFX9-NEXT:    v_add3_u32 v26, v26, v10, s4
16051 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v10
16052 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
16053 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
16054 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
16055 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
16056 ; GFX9-NEXT:    v_mul_f32_e32 v26, v33, v26
16057 ; GFX9-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
16058 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
16059 ; GFX9-NEXT:    v_bfe_u32 v33, v26, 16, 1
16060 ; GFX9-NEXT:    v_mul_f32_e32 v9, v9, v25
16061 ; GFX9-NEXT:    v_add3_u32 v33, v33, v26, s4
16062 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v26
16063 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
16064 ; GFX9-NEXT:    v_bfe_u32 v25, v9, 16, 1
16065 ; GFX9-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
16066 ; GFX9-NEXT:    v_add3_u32 v25, v25, v9, s4
16067 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v9
16068 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
16069 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
16070 ; GFX9-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
16071 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
16072 ; GFX9-NEXT:    v_mul_f32_e32 v25, v33, v25
16073 ; GFX9-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
16074 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
16075 ; GFX9-NEXT:    v_bfe_u32 v33, v25, 16, 1
16076 ; GFX9-NEXT:    v_mul_f32_e32 v8, v8, v24
16077 ; GFX9-NEXT:    v_add3_u32 v33, v33, v25, s4
16078 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v25
16079 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
16080 ; GFX9-NEXT:    v_bfe_u32 v24, v8, 16, 1
16081 ; GFX9-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
16082 ; GFX9-NEXT:    v_add3_u32 v24, v24, v8, s4
16083 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v8
16084 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
16085 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
16086 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
16087 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
16088 ; GFX9-NEXT:    v_mul_f32_e32 v24, v33, v24
16089 ; GFX9-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
16090 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
16091 ; GFX9-NEXT:    v_bfe_u32 v33, v24, 16, 1
16092 ; GFX9-NEXT:    v_mul_f32_e32 v7, v7, v23
16093 ; GFX9-NEXT:    v_add3_u32 v33, v33, v24, s4
16094 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v24
16095 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
16096 ; GFX9-NEXT:    v_bfe_u32 v23, v7, 16, 1
16097 ; GFX9-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
16098 ; GFX9-NEXT:    v_add3_u32 v23, v23, v7, s4
16099 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v7
16100 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
16101 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
16102 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
16103 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
16104 ; GFX9-NEXT:    v_mul_f32_e32 v23, v33, v23
16105 ; GFX9-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
16106 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
16107 ; GFX9-NEXT:    v_bfe_u32 v33, v23, 16, 1
16108 ; GFX9-NEXT:    v_mul_f32_e32 v6, v6, v22
16109 ; GFX9-NEXT:    v_add3_u32 v33, v33, v23, s4
16110 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v23
16111 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
16112 ; GFX9-NEXT:    v_bfe_u32 v22, v6, 16, 1
16113 ; GFX9-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
16114 ; GFX9-NEXT:    v_add3_u32 v22, v22, v6, s4
16115 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v6
16116 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
16117 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
16118 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
16119 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
16120 ; GFX9-NEXT:    v_mul_f32_e32 v22, v33, v22
16121 ; GFX9-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
16122 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
16123 ; GFX9-NEXT:    v_bfe_u32 v33, v22, 16, 1
16124 ; GFX9-NEXT:    v_mul_f32_e32 v5, v5, v21
16125 ; GFX9-NEXT:    v_add3_u32 v33, v33, v22, s4
16126 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v22
16127 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
16128 ; GFX9-NEXT:    v_bfe_u32 v21, v5, 16, 1
16129 ; GFX9-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
16130 ; GFX9-NEXT:    v_add3_u32 v21, v21, v5, s4
16131 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v5
16132 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
16133 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
16134 ; GFX9-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
16135 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
16136 ; GFX9-NEXT:    v_mul_f32_e32 v21, v33, v21
16137 ; GFX9-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
16138 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
16139 ; GFX9-NEXT:    v_bfe_u32 v33, v21, 16, 1
16140 ; GFX9-NEXT:    v_mul_f32_e32 v4, v4, v20
16141 ; GFX9-NEXT:    v_add3_u32 v33, v33, v21, s4
16142 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v21
16143 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
16144 ; GFX9-NEXT:    v_bfe_u32 v20, v4, 16, 1
16145 ; GFX9-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
16146 ; GFX9-NEXT:    v_add3_u32 v20, v20, v4, s4
16147 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v4
16148 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
16149 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
16150 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
16151 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
16152 ; GFX9-NEXT:    v_mul_f32_e32 v20, v33, v20
16153 ; GFX9-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
16154 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
16155 ; GFX9-NEXT:    v_bfe_u32 v33, v20, 16, 1
16156 ; GFX9-NEXT:    v_mul_f32_e32 v3, v3, v19
16157 ; GFX9-NEXT:    v_add3_u32 v33, v33, v20, s4
16158 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v20
16159 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
16160 ; GFX9-NEXT:    v_bfe_u32 v19, v3, 16, 1
16161 ; GFX9-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
16162 ; GFX9-NEXT:    v_add3_u32 v19, v19, v3, s4
16163 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v3
16164 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
16165 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
16166 ; GFX9-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
16167 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
16168 ; GFX9-NEXT:    v_mul_f32_e32 v19, v33, v19
16169 ; GFX9-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
16170 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
16171 ; GFX9-NEXT:    v_bfe_u32 v33, v19, 16, 1
16172 ; GFX9-NEXT:    v_mul_f32_e32 v2, v2, v18
16173 ; GFX9-NEXT:    v_add3_u32 v33, v33, v19, s4
16174 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v19
16175 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
16176 ; GFX9-NEXT:    v_bfe_u32 v18, v2, 16, 1
16177 ; GFX9-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
16178 ; GFX9-NEXT:    v_add3_u32 v18, v18, v2, s4
16179 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v2
16180 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
16181 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
16182 ; GFX9-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
16183 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
16184 ; GFX9-NEXT:    v_mul_f32_e32 v18, v33, v18
16185 ; GFX9-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
16186 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
16187 ; GFX9-NEXT:    v_bfe_u32 v33, v18, 16, 1
16188 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v17
16189 ; GFX9-NEXT:    v_add3_u32 v33, v33, v18, s4
16190 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v18
16191 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
16192 ; GFX9-NEXT:    v_bfe_u32 v17, v1, 16, 1
16193 ; GFX9-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
16194 ; GFX9-NEXT:    v_add3_u32 v17, v17, v1, s4
16195 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v1
16196 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
16197 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
16198 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
16199 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
16200 ; GFX9-NEXT:    v_mul_f32_e32 v17, v33, v17
16201 ; GFX9-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
16202 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16203 ; GFX9-NEXT:    v_bfe_u32 v33, v17, 16, 1
16204 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v16
16205 ; GFX9-NEXT:    v_add3_u32 v33, v33, v17, s4
16206 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v17
16207 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
16208 ; GFX9-NEXT:    v_bfe_u32 v16, v0, 16, 1
16209 ; GFX9-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
16210 ; GFX9-NEXT:    v_add3_u32 v16, v16, v0, s4
16211 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v0
16212 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
16213 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
16214 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
16215 ; GFX9-NEXT:    v_perm_b32 v0, v0, v17, s4
16216 ; GFX9-NEXT:    v_perm_b32 v1, v1, v18, s4
16217 ; GFX9-NEXT:    v_perm_b32 v2, v2, v19, s4
16218 ; GFX9-NEXT:    v_perm_b32 v3, v3, v20, s4
16219 ; GFX9-NEXT:    v_perm_b32 v4, v4, v21, s4
16220 ; GFX9-NEXT:    v_perm_b32 v5, v5, v22, s4
16221 ; GFX9-NEXT:    v_perm_b32 v6, v6, v23, s4
16222 ; GFX9-NEXT:    v_perm_b32 v7, v7, v24, s4
16223 ; GFX9-NEXT:    v_perm_b32 v8, v8, v25, s4
16224 ; GFX9-NEXT:    v_perm_b32 v9, v9, v26, s4
16225 ; GFX9-NEXT:    v_perm_b32 v10, v10, v27, s4
16226 ; GFX9-NEXT:    v_perm_b32 v11, v11, v28, s4
16227 ; GFX9-NEXT:    v_perm_b32 v12, v12, v32, s4
16228 ; GFX9-NEXT:    v_perm_b32 v13, v13, v30, s4
16229 ; GFX9-NEXT:    v_perm_b32 v14, v14, v31, s4
16230 ; GFX9-NEXT:    v_perm_b32 v15, v29, v15, s4
16231 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16233 ; GFX10-LABEL: v_fmul_v32bf16:
16234 ; GFX10:       ; %bb.0:
16235 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16236 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32
16237 ; GFX10-NEXT:    v_lshlrev_b32_e32 v39, 16, v27
16238 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
16239 ; GFX10-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
16240 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
16241 ; GFX10-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
16242 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
16243 ; GFX10-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
16244 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
16245 ; GFX10-NEXT:    v_lshlrev_b32_e32 v37, 16, v28
16246 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v12
16247 ; GFX10-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
16248 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
16249 ; GFX10-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
16250 ; GFX10-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
16251 ; GFX10-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
16252 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
16253 ; GFX10-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
16254 ; GFX10-NEXT:    v_lshlrev_b32_e32 v54, 16, v8
16255 ; GFX10-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
16256 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
16257 ; GFX10-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
16258 ; GFX10-NEXT:    v_lshlrev_b32_e32 v64, 16, v7
16259 ; GFX10-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
16260 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
16261 ; GFX10-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
16262 ; GFX10-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
16263 ; GFX10-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
16264 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
16265 ; GFX10-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
16266 ; GFX10-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
16267 ; GFX10-NEXT:    v_mul_f32_e32 v39, v48, v39
16268 ; GFX10-NEXT:    v_mul_f32_e32 v11, v11, v27
16269 ; GFX10-NEXT:    v_mul_f32_e32 v49, v50, v49
16270 ; GFX10-NEXT:    v_mul_f32_e32 v10, v10, v26
16271 ; GFX10-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
16272 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
16273 ; GFX10-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
16274 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
16275 ; GFX10-NEXT:    v_mul_f32_e32 v37, v38, v37
16276 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v18
16277 ; GFX10-NEXT:    v_mul_f32_e32 v12, v12, v28
16278 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v2
16279 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
16280 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
16281 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v17
16282 ; GFX10-NEXT:    v_lshlrev_b32_e32 v27, 16, v1
16283 ; GFX10-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
16284 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
16285 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v16
16286 ; GFX10-NEXT:    v_lshlrev_b32_e32 v26, 16, v0
16287 ; GFX10-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
16288 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16289 ; GFX10-NEXT:    v_mul_f32_e32 v9, v9, v25
16290 ; GFX10-NEXT:    v_mul_f32_e32 v25, v54, v53
16291 ; GFX10-NEXT:    v_mul_f32_e32 v8, v8, v24
16292 ; GFX10-NEXT:    v_mul_f32_e32 v24, v64, v55
16293 ; GFX10-NEXT:    v_mul_f32_e32 v7, v7, v23
16294 ; GFX10-NEXT:    v_mul_f32_e32 v23, v66, v65
16295 ; GFX10-NEXT:    v_mul_f32_e32 v6, v6, v22
16296 ; GFX10-NEXT:    v_mul_f32_e32 v22, v68, v67
16297 ; GFX10-NEXT:    v_bfe_u32 v53, v39, 16, 1
16298 ; GFX10-NEXT:    v_bfe_u32 v55, v11, 16, 1
16299 ; GFX10-NEXT:    v_bfe_u32 v65, v49, 16, 1
16300 ; GFX10-NEXT:    v_bfe_u32 v67, v10, 16, 1
16301 ; GFX10-NEXT:    v_lshlrev_b32_e32 v33, 16, v30
16302 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v14
16303 ; GFX10-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
16304 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
16305 ; GFX10-NEXT:    v_mul_f32_e32 v35, v36, v35
16306 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v19
16307 ; GFX10-NEXT:    v_mul_f32_e32 v13, v13, v29
16308 ; GFX10-NEXT:    v_lshlrev_b32_e32 v29, 16, v3
16309 ; GFX10-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
16310 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
16311 ; GFX10-NEXT:    v_mul_f32_e32 v2, v2, v18
16312 ; GFX10-NEXT:    v_mul_f32_e32 v18, v27, v48
16313 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v17
16314 ; GFX10-NEXT:    v_mul_f32_e32 v17, v26, v50
16315 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v16
16316 ; GFX10-NEXT:    v_or_b32_e32 v54, 0x400000, v39
16317 ; GFX10-NEXT:    v_or_b32_e32 v64, 0x400000, v11
16318 ; GFX10-NEXT:    v_or_b32_e32 v66, 0x400000, v49
16319 ; GFX10-NEXT:    v_or_b32_e32 v68, 0x400000, v10
16320 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v39, v39
16321 ; GFX10-NEXT:    v_add3_u32 v39, v53, v39, 0x7fff
16322 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v11, v11
16323 ; GFX10-NEXT:    v_add3_u32 v11, v55, v11, 0x7fff
16324 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v49, v49
16325 ; GFX10-NEXT:    v_add3_u32 v49, v65, v49, 0x7fff
16326 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v10, v10
16327 ; GFX10-NEXT:    v_add3_u32 v10, v67, v10, 0x7fff
16328 ; GFX10-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
16329 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
16330 ; GFX10-NEXT:    v_mul_f32_e32 v33, v34, v33
16331 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v20
16332 ; GFX10-NEXT:    v_mul_f32_e32 v14, v14, v30
16333 ; GFX10-NEXT:    v_lshlrev_b32_e32 v30, 16, v4
16334 ; GFX10-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
16335 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
16336 ; GFX10-NEXT:    v_mul_f32_e32 v3, v3, v19
16337 ; GFX10-NEXT:    v_mul_f32_e32 v19, v28, v38
16338 ; GFX10-NEXT:    v_bfe_u32 v38, v37, 16, 1
16339 ; GFX10-NEXT:    v_bfe_u32 v50, v12, 16, 1
16340 ; GFX10-NEXT:    v_cndmask_b32_e64 v39, v39, v54, s9
16341 ; GFX10-NEXT:    v_bfe_u32 v54, v18, 16, 1
16342 ; GFX10-NEXT:    v_cndmask_b32_e64 v11, v11, v64, s10
16343 ; GFX10-NEXT:    v_bfe_u32 v64, v1, 16, 1
16344 ; GFX10-NEXT:    v_cndmask_b32_e64 v49, v49, v66, s11
16345 ; GFX10-NEXT:    v_bfe_u32 v66, v17, 16, 1
16346 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v10, v68, s12
16347 ; GFX10-NEXT:    v_bfe_u32 v68, v0, 16, 1
16348 ; GFX10-NEXT:    v_mul_f32_e32 v51, v52, v51
16349 ; GFX10-NEXT:    v_mul_f32_e32 v5, v5, v21
16350 ; GFX10-NEXT:    v_mul_f32_e32 v21, v30, v34
16351 ; GFX10-NEXT:    v_mul_f32_e32 v4, v4, v20
16352 ; GFX10-NEXT:    v_mul_f32_e32 v20, v29, v36
16353 ; GFX10-NEXT:    v_bfe_u32 v16, v33, 16, 1
16354 ; GFX10-NEXT:    v_bfe_u32 v27, v14, 16, 1
16355 ; GFX10-NEXT:    v_bfe_u32 v29, v35, 16, 1
16356 ; GFX10-NEXT:    v_bfe_u32 v34, v13, 16, 1
16357 ; GFX10-NEXT:    v_or_b32_e32 v48, 0x400000, v37
16358 ; GFX10-NEXT:    v_or_b32_e32 v52, 0x400000, v12
16359 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v37, v37
16360 ; GFX10-NEXT:    v_add3_u32 v37, v38, v37, 0x7fff
16361 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v12, v12
16362 ; GFX10-NEXT:    v_add3_u32 v12, v50, v12, 0x7fff
16363 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v18, v18
16364 ; GFX10-NEXT:    v_add3_u32 v54, v54, v18, 0x7fff
16365 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v18
16366 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v1, v1
16367 ; GFX10-NEXT:    v_add3_u32 v64, v64, v1, 0x7fff
16368 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v1
16369 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v17, v17
16370 ; GFX10-NEXT:    v_add3_u32 v66, v66, v17, 0x7fff
16371 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v17
16372 ; GFX10-NEXT:    v_cmp_u_f32_e64 s22, v0, v0
16373 ; GFX10-NEXT:    v_add3_u32 v68, v68, v0, 0x7fff
16374 ; GFX10-NEXT:    v_or_b32_e32 v0, 0x400000, v0
16375 ; GFX10-NEXT:    v_or_b32_e32 v26, 0x400000, v33
16376 ; GFX10-NEXT:    v_or_b32_e32 v28, 0x400000, v14
16377 ; GFX10-NEXT:    v_or_b32_e32 v30, 0x400000, v35
16378 ; GFX10-NEXT:    v_or_b32_e32 v36, 0x400000, v13
16379 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
16380 ; GFX10-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
16381 ; GFX10-NEXT:    v_bfe_u32 v33, v51, 16, 1
16382 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v14, v14
16383 ; GFX10-NEXT:    v_add3_u32 v14, v27, v14, 0x7fff
16384 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v35, v35
16385 ; GFX10-NEXT:    v_add3_u32 v29, v29, v35, 0x7fff
16386 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v13, v13
16387 ; GFX10-NEXT:    v_add3_u32 v13, v34, v13, 0x7fff
16388 ; GFX10-NEXT:    v_bfe_u32 v65, v24, 16, 1
16389 ; GFX10-NEXT:    v_cndmask_b32_e64 v37, v37, v48, s7
16390 ; GFX10-NEXT:    v_bfe_u32 v48, v19, 16, 1
16391 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, v12, v52, s8
16392 ; GFX10-NEXT:    v_bfe_u32 v52, v2, 16, 1
16393 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, v54, v18, s10
16394 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, v66, v17, s12
16395 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v68, v0, s22
16396 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v64, v1, s11
16397 ; GFX10-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
16398 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
16399 ; GFX10-NEXT:    v_or_b32_e32 v27, 0x400000, v51
16400 ; GFX10-NEXT:    v_bfe_u32 v35, v9, 16, 1
16401 ; GFX10-NEXT:    v_bfe_u32 v38, v25, 16, 1
16402 ; GFX10-NEXT:    v_or_b32_e32 v67, 0x400000, v24
16403 ; GFX10-NEXT:    v_cmp_u_f32_e64 s13, v51, v51
16404 ; GFX10-NEXT:    v_add3_u32 v33, v33, v51, 0x7fff
16405 ; GFX10-NEXT:    v_bfe_u32 v51, v7, 16, 1
16406 ; GFX10-NEXT:    v_cmp_u_f32_e64 s17, v24, v24
16407 ; GFX10-NEXT:    v_add3_u32 v24, v65, v24, 0x7fff
16408 ; GFX10-NEXT:    v_bfe_u32 v65, v6, 16, 1
16409 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v26, vcc_lo
16410 ; GFX10-NEXT:    v_bfe_u32 v26, v21, 16, 1
16411 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, v14, v28, s4
16412 ; GFX10-NEXT:    v_bfe_u32 v28, v4, 16, 1
16413 ; GFX10-NEXT:    v_cndmask_b32_e64 v29, v29, v30, s5
16414 ; GFX10-NEXT:    v_bfe_u32 v30, v20, 16, 1
16415 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, v13, v36, s6
16416 ; GFX10-NEXT:    v_bfe_u32 v36, v3, 16, 1
16417 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v19, v19
16418 ; GFX10-NEXT:    v_add3_u32 v48, v48, v19, 0x7fff
16419 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v19
16420 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v2, v2
16421 ; GFX10-NEXT:    v_add3_u32 v52, v52, v2, 0x7fff
16422 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v2
16423 ; GFX10-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
16424 ; GFX10-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
16425 ; GFX10-NEXT:    v_or_b32_e32 v34, 0x400000, v9
16426 ; GFX10-NEXT:    v_or_b32_e32 v50, 0x400000, v25
16427 ; GFX10-NEXT:    v_bfe_u32 v53, v8, 16, 1
16428 ; GFX10-NEXT:    v_cmp_u_f32_e64 s14, v9, v9
16429 ; GFX10-NEXT:    v_add3_u32 v9, v35, v9, 0x7fff
16430 ; GFX10-NEXT:    v_or_b32_e32 v35, 0x400000, v7
16431 ; GFX10-NEXT:    v_cmp_u_f32_e64 s15, v25, v25
16432 ; GFX10-NEXT:    v_add3_u32 v25, v38, v25, 0x7fff
16433 ; GFX10-NEXT:    v_bfe_u32 v38, v23, 16, 1
16434 ; GFX10-NEXT:    v_cmp_u_f32_e64 s18, v7, v7
16435 ; GFX10-NEXT:    v_add3_u32 v7, v51, v7, 0x7fff
16436 ; GFX10-NEXT:    v_or_b32_e32 v51, 0x400000, v6
16437 ; GFX10-NEXT:    v_cmp_u_f32_e64 s20, v6, v6
16438 ; GFX10-NEXT:    v_add3_u32 v6, v65, v6, 0x7fff
16439 ; GFX10-NEXT:    v_bfe_u32 v65, v5, 16, 1
16440 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v21, v21
16441 ; GFX10-NEXT:    v_add3_u32 v26, v26, v21, 0x7fff
16442 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v21
16443 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v4, v4
16444 ; GFX10-NEXT:    v_add3_u32 v28, v28, v4, 0x7fff
16445 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v4
16446 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v20, v20
16447 ; GFX10-NEXT:    v_add3_u32 v30, v30, v20, 0x7fff
16448 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v20
16449 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v3, v3
16450 ; GFX10-NEXT:    v_add3_u32 v36, v36, v3, 0x7fff
16451 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v3
16452 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, v48, v19, s8
16453 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v52, v2, s9
16454 ; GFX10-NEXT:    v_or_b32_e32 v55, 0x400000, v8
16455 ; GFX10-NEXT:    v_cmp_u_f32_e64 s16, v8, v8
16456 ; GFX10-NEXT:    v_add3_u32 v8, v53, v8, 0x7fff
16457 ; GFX10-NEXT:    v_or_b32_e32 v53, 0x400000, v23
16458 ; GFX10-NEXT:    v_cmp_u_f32_e64 s19, v23, v23
16459 ; GFX10-NEXT:    v_add3_u32 v23, v38, v23, 0x7fff
16460 ; GFX10-NEXT:    v_bfe_u32 v38, v22, 16, 1
16461 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
16462 ; GFX10-NEXT:    v_add3_u32 v65, v65, v5, 0x7fff
16463 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v5
16464 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, v26, v21, s4
16465 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v28, v4, s5
16466 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, v30, v20, s6
16467 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v36, v3, s7
16468 ; GFX10-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
16469 ; GFX10-NEXT:    v_cmp_u_f32_e64 s21, v22, v22
16470 ; GFX10-NEXT:    v_add3_u32 v38, v38, v22, 0x7fff
16471 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v22
16472 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v65, v5, vcc_lo
16473 ; GFX10-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
16474 ; GFX10-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
16475 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, v33, v27, s13
16476 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, v9, v34, s14
16477 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, v25, v50, s15
16478 ; GFX10-NEXT:    v_cndmask_b32_e64 v8, v8, v55, s16
16479 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, v24, v67, s17
16480 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v35, s18
16481 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, v23, v53, s19
16482 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v51, s20
16483 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, v38, v22, s21
16484 ; GFX10-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
16485 ; GFX10-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
16486 ; GFX10-NEXT:    v_perm_b32 v9, v9, v27, 0x7060302
16487 ; GFX10-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
16488 ; GFX10-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
16489 ; GFX10-NEXT:    v_perm_b32 v10, v10, v49, 0x7060302
16490 ; GFX10-NEXT:    v_perm_b32 v11, v11, v39, 0x7060302
16491 ; GFX10-NEXT:    v_perm_b32 v12, v12, v37, 0x7060302
16492 ; GFX10-NEXT:    v_perm_b32 v13, v13, v29, 0x7060302
16493 ; GFX10-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
16494 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
16495 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
16496 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v32
16497 ; GFX10-NEXT:    v_mul_f32_e32 v17, v31, v17
16498 ; GFX10-NEXT:    v_mul_f32_e32 v15, v15, v18
16499 ; GFX10-NEXT:    v_bfe_u32 v18, v17, 16, 1
16500 ; GFX10-NEXT:    v_bfe_u32 v19, v15, 16, 1
16501 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v17
16502 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v15
16503 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
16504 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v15, v15
16505 ; GFX10-NEXT:    v_add3_u32 v17, v18, v17, 0x7fff
16506 ; GFX10-NEXT:    v_add3_u32 v15, v19, v15, 0x7fff
16507 ; GFX10-NEXT:    v_cndmask_b32_e32 v17, v17, v20, vcc_lo
16508 ; GFX10-NEXT:    v_cndmask_b32_e64 v15, v15, v21, s4
16509 ; GFX10-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
16510 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16512 ; GFX11-LABEL: v_fmul_v32bf16:
16513 ; GFX11:       ; %bb.0:
16514 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16515 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32
16516 ; GFX11-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
16517 ; GFX11-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
16518 ; GFX11-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
16519 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
16520 ; GFX11-NEXT:    v_lshlrev_b32_e32 v83, 16, v17
16521 ; GFX11-NEXT:    v_lshlrev_b32_e32 v84, 16, v1
16522 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
16523 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
16524 ; GFX11-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
16525 ; GFX11-NEXT:    v_dual_mul_f32 v5, v5, v21 :: v_dual_and_b32 v26, 0xffff0000, v26
16526 ; GFX11-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
16527 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
16528 ; GFX11-NEXT:    v_dual_mul_f32 v1, v1, v17 :: v_dual_and_b32 v24, 0xffff0000, v24
16529 ; GFX11-NEXT:    v_lshlrev_b32_e32 v71, 16, v19
16530 ; GFX11-NEXT:    v_bfe_u32 v103, v5, 16, 1
16531 ; GFX11-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
16532 ; GFX11-NEXT:    v_lshlrev_b32_e32 v81, 16, v18
16533 ; GFX11-NEXT:    v_bfe_u32 v135, v1, 16, 1
16534 ; GFX11-NEXT:    v_or_b32_e32 v112, 0x400000, v5
16535 ; GFX11-NEXT:    v_or_b32_e32 v144, 0x400000, v1
16536 ; GFX11-NEXT:    v_add3_u32 v103, v103, v5, 0x7fff
16537 ; GFX11-NEXT:    v_lshlrev_b32_e32 v80, 16, v3
16538 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
16539 ; GFX11-NEXT:    v_add3_u32 v135, v135, v1, 0x7fff
16540 ; GFX11-NEXT:    v_lshlrev_b32_e32 v82, 16, v2
16541 ; GFX11-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
16542 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
16543 ; GFX11-NEXT:    v_dual_mul_f32 v3, v3, v19 :: v_dual_lshlrev_b32 v54, 16, v8
16544 ; GFX11-NEXT:    v_lshlrev_b32_e32 v85, 16, v16
16545 ; GFX11-NEXT:    v_dual_mul_f32 v19, v82, v81 :: v_dual_lshlrev_b32 v64, 16, v7
16546 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
16547 ; GFX11-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
16548 ; GFX11-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
16549 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
16550 ; GFX11-NEXT:    v_bfe_u32 v129, v19, 16, 1
16551 ; GFX11-NEXT:    v_or_b32_e32 v130, 0x400000, v19
16552 ; GFX11-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
16553 ; GFX11-NEXT:    v_bfe_u32 v119, v3, 16, 1
16554 ; GFX11-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
16555 ; GFX11-NEXT:    v_add3_u32 v129, v129, v19, 0x7fff
16556 ; GFX11-NEXT:    v_lshlrev_b32_e32 v86, 16, v0
16557 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
16558 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16559 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
16560 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
16561 ; GFX11-NEXT:    v_dual_mul_f32 v17, v86, v85 :: v_dual_and_b32 v2, 0xffff0000, v2
16562 ; GFX11-NEXT:    v_dual_mul_f32 v8, v8, v24 :: v_dual_lshlrev_b32 v39, 16, v27
16563 ; GFX11-NEXT:    v_or_b32_e32 v128, 0x400000, v3
16564 ; GFX11-NEXT:    v_add3_u32 v119, v119, v3, 0x7fff
16565 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
16566 ; GFX11-NEXT:    v_bfe_u32 v145, v17, 16, 1
16567 ; GFX11-NEXT:    v_or_b32_e32 v146, 0x400000, v17
16568 ; GFX11-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
16569 ; GFX11-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
16570 ; GFX11-NEXT:    v_lshlrev_b32_e32 v70, 16, v4
16571 ; GFX11-NEXT:    v_add3_u32 v145, v145, v17, 0x7fff
16572 ; GFX11-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
16573 ; GFX11-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
16574 ; GFX11-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
16575 ; GFX11-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
16576 ; GFX11-NEXT:    v_mul_f32_e32 v2, v2, v18
16577 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v16
16578 ; GFX11-NEXT:    v_dual_mul_f32 v24, v64, v55 :: v_dual_lshlrev_b32 v37, 16, v28
16579 ; GFX11-NEXT:    v_mul_f32_e32 v7, v7, v23
16580 ; GFX11-NEXT:    v_dual_mul_f32 v23, v66, v65 :: v_dual_mul_f32 v18, v84, v83
16581 ; GFX11-NEXT:    v_dual_mul_f32 v9, v9, v25 :: v_dual_and_b32 v28, 0xffff0000, v28
16582 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
16583 ; GFX11-NEXT:    v_bfe_u32 v85, v24, 16, 1
16584 ; GFX11-NEXT:    v_bfe_u32 v97, v23, 16, 1
16585 ; GFX11-NEXT:    v_or_b32_e32 v86, 0x400000, v24
16586 ; GFX11-NEXT:    v_or_b32_e32 v98, 0x400000, v23
16587 ; GFX11-NEXT:    v_bfe_u32 v87, v7, 16, 1
16588 ; GFX11-NEXT:    v_add3_u32 v85, v85, v24, 0x7fff
16589 ; GFX11-NEXT:    v_lshlrev_b32_e32 v69, 16, v20
16590 ; GFX11-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
16591 ; GFX11-NEXT:    v_add3_u32 v97, v97, v23, 0x7fff
16592 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
16593 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
16594 ; GFX11-NEXT:    v_or_b32_e32 v96, 0x400000, v7
16595 ; GFX11-NEXT:    v_add3_u32 v87, v87, v7, 0x7fff
16596 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
16597 ; GFX11-NEXT:    v_mul_f32_e32 v4, v4, v20
16598 ; GFX11-NEXT:    v_mul_f32_e32 v20, v80, v71
16599 ; GFX11-NEXT:    v_bfe_u32 v71, v9, 16, 1
16600 ; GFX11-NEXT:    v_or_b32_e32 v80, 0x400000, v9
16601 ; GFX11-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
16602 ; GFX11-NEXT:    v_dual_mul_f32 v21, v70, v69 :: v_dual_and_b32 v10, 0xffff0000, v10
16603 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
16604 ; GFX11-NEXT:    v_add3_u32 v71, v71, v9, 0x7fff
16605 ; GFX11-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
16606 ; GFX11-NEXT:    v_dual_mul_f32 v10, v10, v26 :: v_dual_and_b32 v29, 0xffff0000, v29
16607 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
16608 ; GFX11-NEXT:    v_mul_f32_e32 v26, v52, v51
16609 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
16610 ; GFX11-NEXT:    v_mul_f32_e32 v6, v6, v22
16611 ; GFX11-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
16612 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
16613 ; GFX11-NEXT:    v_dual_mul_f32 v11, v11, v27 :: v_dual_lshlrev_b32 v34, 16, v14
16614 ; GFX11-NEXT:    v_dual_mul_f32 v22, v68, v67 :: v_dual_lshlrev_b32 v33, 16, v30
16615 ; GFX11-NEXT:    v_dual_mul_f32 v27, v50, v49 :: v_dual_lshlrev_b32 v38, 16, v12
16616 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
16617 ; GFX11-NEXT:    v_dual_mul_f32 v25, v54, v53 :: v_dual_and_b32 v12, 0xffff0000, v12
16618 ; GFX11-NEXT:    v_dual_mul_f32 v13, v13, v29 :: v_dual_and_b32 v30, 0xffff0000, v30
16619 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
16620 ; GFX11-NEXT:    v_mul_f32_e32 v29, v38, v37
16621 ; GFX11-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
16622 ; GFX11-NEXT:    v_dual_mul_f32 v12, v12, v28 :: v_dual_and_b32 v15, 0xffff0000, v15
16623 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
16624 ; GFX11-NEXT:    v_mul_f32_e32 v14, v14, v30
16625 ; GFX11-NEXT:    v_mul_f32_e32 v28, v48, v39
16626 ; GFX11-NEXT:    v_dual_mul_f32 v30, v36, v35 :: v_dual_mul_f32 v33, v34, v33
16627 ; GFX11-NEXT:    v_bfe_u32 v39, v13, 16, 1
16628 ; GFX11-NEXT:    v_bfe_u32 v35, v14, 16, 1
16629 ; GFX11-NEXT:    v_or_b32_e32 v36, 0x400000, v14
16630 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
16631 ; GFX11-NEXT:    v_bfe_u32 v37, v30, 16, 1
16632 ; GFX11-NEXT:    v_bfe_u32 v16, v33, 16, 1
16633 ; GFX11-NEXT:    v_or_b32_e32 v34, 0x400000, v33
16634 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
16635 ; GFX11-NEXT:    v_add3_u32 v35, v35, v14, 0x7fff
16636 ; GFX11-NEXT:    v_or_b32_e32 v38, 0x400000, v30
16637 ; GFX11-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
16638 ; GFX11-NEXT:    v_add3_u32 v37, v37, v30, 0x7fff
16639 ; GFX11-NEXT:    v_or_b32_e32 v48, 0x400000, v13
16640 ; GFX11-NEXT:    v_bfe_u32 v49, v29, 16, 1
16641 ; GFX11-NEXT:    v_add3_u32 v39, v39, v13, 0x7fff
16642 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v34, vcc_lo
16643 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v14, v14
16644 ; GFX11-NEXT:    v_or_b32_e32 v50, 0x400000, v29
16645 ; GFX11-NEXT:    v_bfe_u32 v51, v12, 16, 1
16646 ; GFX11-NEXT:    v_add3_u32 v49, v49, v29, 0x7fff
16647 ; GFX11-NEXT:    v_or_b32_e32 v52, 0x400000, v12
16648 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, v35, v36, vcc_lo
16649 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v30, v30
16650 ; GFX11-NEXT:    v_bfe_u32 v53, v28, 16, 1
16651 ; GFX11-NEXT:    v_add3_u32 v51, v51, v12, 0x7fff
16652 ; GFX11-NEXT:    v_or_b32_e32 v54, 0x400000, v28
16653 ; GFX11-NEXT:    v_bfe_u32 v55, v11, 16, 1
16654 ; GFX11-NEXT:    v_cndmask_b32_e32 v30, v37, v38, vcc_lo
16655 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
16656 ; GFX11-NEXT:    v_add3_u32 v53, v53, v28, 0x7fff
16657 ; GFX11-NEXT:    v_or_b32_e32 v64, 0x400000, v11
16658 ; GFX11-NEXT:    v_bfe_u32 v65, v27, 16, 1
16659 ; GFX11-NEXT:    v_add3_u32 v55, v55, v11, 0x7fff
16660 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v39, v48, vcc_lo
16661 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v29, v29
16662 ; GFX11-NEXT:    v_or_b32_e32 v66, 0x400000, v27
16663 ; GFX11-NEXT:    v_bfe_u32 v67, v10, 16, 1
16664 ; GFX11-NEXT:    v_add3_u32 v65, v65, v27, 0x7fff
16665 ; GFX11-NEXT:    v_or_b32_e32 v68, 0x400000, v10
16666 ; GFX11-NEXT:    v_cndmask_b32_e32 v29, v49, v50, vcc_lo
16667 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
16668 ; GFX11-NEXT:    v_bfe_u32 v69, v26, 16, 1
16669 ; GFX11-NEXT:    v_add3_u32 v67, v67, v10, 0x7fff
16670 ; GFX11-NEXT:    v_or_b32_e32 v70, 0x400000, v26
16671 ; GFX11-NEXT:    v_bfe_u32 v81, v25, 16, 1
16672 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v51, v52, vcc_lo
16673 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v28, v28
16674 ; GFX11-NEXT:    v_add3_u32 v69, v69, v26, 0x7fff
16675 ; GFX11-NEXT:    v_or_b32_e32 v82, 0x400000, v25
16676 ; GFX11-NEXT:    v_bfe_u32 v83, v8, 16, 1
16677 ; GFX11-NEXT:    v_add3_u32 v81, v81, v25, 0x7fff
16678 ; GFX11-NEXT:    v_cndmask_b32_e32 v28, v53, v54, vcc_lo
16679 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v11, v11
16680 ; GFX11-NEXT:    v_or_b32_e32 v84, 0x400000, v8
16681 ; GFX11-NEXT:    v_add3_u32 v83, v83, v8, 0x7fff
16682 ; GFX11-NEXT:    v_bfe_u32 v99, v6, 16, 1
16683 ; GFX11-NEXT:    v_or_b32_e32 v100, 0x400000, v6
16684 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v55, v64, vcc_lo
16685 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v27, v27
16686 ; GFX11-NEXT:    v_bfe_u32 v101, v22, 16, 1
16687 ; GFX11-NEXT:    v_add3_u32 v99, v99, v6, 0x7fff
16688 ; GFX11-NEXT:    v_or_b32_e32 v102, 0x400000, v22
16689 ; GFX11-NEXT:    v_bfe_u32 v113, v21, 16, 1
16690 ; GFX11-NEXT:    v_cndmask_b32_e32 v27, v65, v66, vcc_lo
16691 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v10, v10
16692 ; GFX11-NEXT:    v_add3_u32 v101, v101, v22, 0x7fff
16693 ; GFX11-NEXT:    v_or_b32_e32 v114, 0x400000, v21
16694 ; GFX11-NEXT:    v_bfe_u32 v115, v4, 16, 1
16695 ; GFX11-NEXT:    v_add3_u32 v113, v113, v21, 0x7fff
16696 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v67, v68, vcc_lo
16697 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v26, v26
16698 ; GFX11-NEXT:    v_or_b32_e32 v116, 0x400000, v4
16699 ; GFX11-NEXT:    v_bfe_u32 v117, v20, 16, 1
16700 ; GFX11-NEXT:    v_add3_u32 v115, v115, v4, 0x7fff
16701 ; GFX11-NEXT:    v_or_b32_e32 v118, 0x400000, v20
16702 ; GFX11-NEXT:    v_cndmask_b32_e32 v26, v69, v70, vcc_lo
16703 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
16704 ; GFX11-NEXT:    v_add3_u32 v117, v117, v20, 0x7fff
16705 ; GFX11-NEXT:    v_bfe_u32 v133, v18, 16, 1
16706 ; GFX11-NEXT:    v_or_b32_e32 v134, 0x400000, v18
16707 ; GFX11-NEXT:    v_bfe_u32 v147, v0, 16, 1
16708 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v71, v80, vcc_lo
16709 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v25, v25
16710 ; GFX11-NEXT:    v_add3_u32 v133, v133, v18, 0x7fff
16711 ; GFX11-NEXT:    v_or_b32_e32 v33, 0x400000, v0
16712 ; GFX11-NEXT:    v_add3_u32 v147, v147, v0, 0x7fff
16713 ; GFX11-NEXT:    v_bfe_u32 v131, v2, 16, 1
16714 ; GFX11-NEXT:    v_cndmask_b32_e32 v25, v81, v82, vcc_lo
16715 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
16716 ; GFX11-NEXT:    v_or_b32_e32 v132, 0x400000, v2
16717 ; GFX11-NEXT:    v_perm_b32 v9, v9, v26, 0x7060302
16718 ; GFX11-NEXT:    v_add3_u32 v131, v131, v2, 0x7fff
16719 ; GFX11-NEXT:    v_perm_b32 v10, v10, v27, 0x7060302
16720 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v83, v84, vcc_lo
16721 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v24, v24
16722 ; GFX11-NEXT:    v_perm_b32 v11, v11, v28, 0x7060302
16723 ; GFX11-NEXT:    v_perm_b32 v12, v12, v29, 0x7060302
16724 ; GFX11-NEXT:    v_perm_b32 v13, v13, v30, 0x7060302
16725 ; GFX11-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
16726 ; GFX11-NEXT:    v_cndmask_b32_e32 v24, v85, v86, vcc_lo
16727 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
16728 ; GFX11-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
16729 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v87, v96, vcc_lo
16730 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v23, v23
16731 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
16732 ; GFX11-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
16733 ; GFX11-NEXT:    v_cndmask_b32_e32 v23, v97, v98, vcc_lo
16734 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
16735 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v99, v100, vcc_lo
16736 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v22, v22
16737 ; GFX11-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
16738 ; GFX11-NEXT:    v_cndmask_b32_e32 v22, v101, v102, vcc_lo
16739 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
16740 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v103, v112, vcc_lo
16741 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v21, v21
16742 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
16743 ; GFX11-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
16744 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, v113, v114, vcc_lo
16745 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
16746 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v115, v116, vcc_lo
16747 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v20, v20
16748 ; GFX11-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
16749 ; GFX11-NEXT:    v_cndmask_b32_e32 v20, v117, v118, vcc_lo
16750 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
16751 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v129, v130, vcc_lo
16752 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
16753 ; GFX11-NEXT:    v_cndmask_b32_e32 v18, v133, v134, vcc_lo
16754 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
16755 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v135, v144, vcc_lo
16756 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
16757 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
16758 ; GFX11-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
16759 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v145, v146, vcc_lo
16760 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
16761 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v147, v33, vcc_lo
16762 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
16763 ; GFX11-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
16764 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v131, v132, vcc_lo
16765 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
16766 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
16767 ; GFX11-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
16768 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v119, v128, vcc_lo
16769 ; GFX11-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
16770 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
16771 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
16772 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16773 ; GFX11-NEXT:    v_dual_mul_f32 v17, v31, v17 :: v_dual_and_b32 v18, 0xffff0000, v32
16774 ; GFX11-NEXT:    v_mul_f32_e32 v15, v15, v18
16775 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
16776 ; GFX11-NEXT:    v_bfe_u32 v18, v17, 16, 1
16777 ; GFX11-NEXT:    v_bfe_u32 v19, v15, 16, 1
16778 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v17
16779 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
16780 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v15
16781 ; GFX11-NEXT:    v_add3_u32 v18, v18, v17, 0x7fff
16782 ; GFX11-NEXT:    v_add3_u32 v19, v19, v15, 0x7fff
16783 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
16784 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v18, v20, vcc_lo
16785 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v15, v15
16786 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v19, v21, vcc_lo
16787 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16788 ; GFX11-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
16789 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16790   %op = fmul <32 x bfloat> %a, %b
16791   ret <32 x bfloat> %op
16794 define bfloat @v_fdiv_bf16(bfloat %a, bfloat %b) {
16795 ; GCN-LABEL: v_fdiv_bf16:
16796 ; GCN:       ; %bb.0:
16797 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16798 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
16799 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
16800 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16801 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
16802 ; GCN-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
16803 ; GCN-NEXT:    v_rcp_f32_e32 v3, v2
16804 ; GCN-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
16805 ; GCN-NEXT:    v_fma_f32 v3, v4, v3, v3
16806 ; GCN-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
16807 ; GCN-NEXT:    v_mul_f32_e32 v5, v4, v3
16808 ; GCN-NEXT:    v_fma_f32 v6, -v2, v5, v4
16809 ; GCN-NEXT:    v_fma_f32 v5, v6, v3, v5
16810 ; GCN-NEXT:    v_fma_f32 v2, -v2, v5, v4
16811 ; GCN-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
16812 ; GCN-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16813 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16814 ; GCN-NEXT:    s_setpc_b64 s[30:31]
16816 ; GFX7-LABEL: v_fdiv_bf16:
16817 ; GFX7:       ; %bb.0:
16818 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16819 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
16820 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
16821 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16822 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
16823 ; GFX7-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
16824 ; GFX7-NEXT:    v_rcp_f32_e32 v3, v2
16825 ; GFX7-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
16826 ; GFX7-NEXT:    v_fma_f32 v3, v4, v3, v3
16827 ; GFX7-NEXT:    v_div_scale_f32 v4, vcc, v0, v1, v0
16828 ; GFX7-NEXT:    v_mul_f32_e32 v5, v4, v3
16829 ; GFX7-NEXT:    v_fma_f32 v6, -v2, v5, v4
16830 ; GFX7-NEXT:    v_fma_f32 v5, v6, v3, v5
16831 ; GFX7-NEXT:    v_fma_f32 v2, -v2, v5, v4
16832 ; GFX7-NEXT:    v_div_fmas_f32 v2, v2, v3, v5
16833 ; GFX7-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16834 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16835 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
16837 ; GFX8-LABEL: v_fdiv_bf16:
16838 ; GFX8:       ; %bb.0:
16839 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16840 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
16841 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
16842 ; GFX8-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
16843 ; GFX8-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
16844 ; GFX8-NEXT:    v_rcp_f32_e32 v4, v2
16845 ; GFX8-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
16846 ; GFX8-NEXT:    v_fma_f32 v4, v5, v4, v4
16847 ; GFX8-NEXT:    v_mul_f32_e32 v5, v3, v4
16848 ; GFX8-NEXT:    v_fma_f32 v6, -v2, v5, v3
16849 ; GFX8-NEXT:    v_fma_f32 v5, v6, v4, v5
16850 ; GFX8-NEXT:    v_fma_f32 v2, -v2, v5, v3
16851 ; GFX8-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
16852 ; GFX8-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16853 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
16854 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
16855 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
16856 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
16857 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
16858 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
16859 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
16860 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
16862 ; GFX9-LABEL: v_fdiv_bf16:
16863 ; GFX9:       ; %bb.0:
16864 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16865 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
16866 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
16867 ; GFX9-NEXT:    v_div_scale_f32 v2, s[4:5], v1, v1, v0
16868 ; GFX9-NEXT:    v_div_scale_f32 v3, vcc, v0, v1, v0
16869 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
16870 ; GFX9-NEXT:    v_rcp_f32_e32 v4, v2
16871 ; GFX9-NEXT:    v_fma_f32 v5, -v2, v4, 1.0
16872 ; GFX9-NEXT:    v_fma_f32 v4, v5, v4, v4
16873 ; GFX9-NEXT:    v_mul_f32_e32 v5, v3, v4
16874 ; GFX9-NEXT:    v_fma_f32 v6, -v2, v5, v3
16875 ; GFX9-NEXT:    v_fma_f32 v5, v6, v4, v5
16876 ; GFX9-NEXT:    v_fma_f32 v2, -v2, v5, v3
16877 ; GFX9-NEXT:    v_div_fmas_f32 v2, v2, v4, v5
16878 ; GFX9-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16879 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
16880 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
16881 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
16882 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
16883 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
16884 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
16885 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16887 ; GFX10-LABEL: v_fdiv_bf16:
16888 ; GFX10:       ; %bb.0:
16889 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16890 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
16891 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
16892 ; GFX10-NEXT:    v_div_scale_f32 v2, s4, v1, v1, v0
16893 ; GFX10-NEXT:    v_div_scale_f32 v5, vcc_lo, v0, v1, v0
16894 ; GFX10-NEXT:    v_rcp_f32_e32 v3, v2
16895 ; GFX10-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
16896 ; GFX10-NEXT:    v_fmac_f32_e32 v3, v4, v3
16897 ; GFX10-NEXT:    v_mul_f32_e32 v4, v5, v3
16898 ; GFX10-NEXT:    v_fma_f32 v6, -v2, v4, v5
16899 ; GFX10-NEXT:    v_fmac_f32_e32 v4, v6, v3
16900 ; GFX10-NEXT:    v_fma_f32 v2, -v2, v4, v5
16901 ; GFX10-NEXT:    v_div_fmas_f32 v2, v2, v3, v4
16902 ; GFX10-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16903 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
16904 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
16905 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
16906 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
16907 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
16908 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
16909 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16911 ; GFX11-LABEL: v_fdiv_bf16:
16912 ; GFX11:       ; %bb.0:
16913 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16914 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
16915 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
16916 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16917 ; GFX11-NEXT:    v_div_scale_f32 v2, null, v1, v1, v0
16918 ; GFX11-NEXT:    v_rcp_f32_e32 v3, v2
16919 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
16920 ; GFX11-NEXT:    v_fma_f32 v4, -v2, v3, 1.0
16921 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
16922 ; GFX11-NEXT:    v_fmac_f32_e32 v3, v4, v3
16923 ; GFX11-NEXT:    v_div_scale_f32 v5, vcc_lo, v0, v1, v0
16924 ; GFX11-NEXT:    v_mul_f32_e32 v4, v5, v3
16925 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16926 ; GFX11-NEXT:    v_fma_f32 v6, -v2, v4, v5
16927 ; GFX11-NEXT:    v_fmac_f32_e32 v4, v6, v3
16928 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16929 ; GFX11-NEXT:    v_fma_f32 v2, -v2, v4, v5
16930 ; GFX11-NEXT:    v_div_fmas_f32 v2, v2, v3, v4
16931 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
16932 ; GFX11-NEXT:    v_div_fixup_f32 v0, v2, v1, v0
16933 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
16934 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
16935 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
16936 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
16937 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
16938 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
16939 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
16940 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
16941 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16942   %op = fdiv bfloat %a, %b
16943   ret bfloat %op
16946 declare bfloat @llvm.fabs.bf16(bfloat)
16948 define bfloat @v_fabs_bf16(bfloat %a) {
16949 ; GCN-LABEL: v_fabs_bf16:
16950 ; GCN:       ; %bb.0:
16951 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16952 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
16953 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16954 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fffffff, v0
16955 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16956 ; GCN-NEXT:    s_setpc_b64 s[30:31]
16958 ; GFX7-LABEL: v_fabs_bf16:
16959 ; GFX7:       ; %bb.0:
16960 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16961 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
16962 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16963 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fffffff, v0
16964 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
16965 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
16967 ; GFX8-LABEL: v_fabs_bf16:
16968 ; GFX8:       ; %bb.0:
16969 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16970 ; GFX8-NEXT:    v_and_b32_e32 v0, 0x7fff, v0
16971 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
16973 ; GFX9-LABEL: v_fabs_bf16:
16974 ; GFX9:       ; %bb.0:
16975 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16976 ; GFX9-NEXT:    v_and_b32_e32 v0, 0x7fff, v0
16977 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
16979 ; GFX10-LABEL: v_fabs_bf16:
16980 ; GFX10:       ; %bb.0:
16981 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16982 ; GFX10-NEXT:    v_and_b32_e32 v0, 0x7fff, v0
16983 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
16985 ; GFX11-LABEL: v_fabs_bf16:
16986 ; GFX11:       ; %bb.0:
16987 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
16988 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x7fff, v0
16989 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
16990   %op = call bfloat @llvm.fabs.bf16(bfloat %a)
16991   ret bfloat %op
16994 define amdgpu_ps i32 @s_fabs_bf16(bfloat inreg %a) {
16995 ; GCN-LABEL: s_fabs_bf16:
16996 ; GCN:       ; %bb.0:
16997 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
16998 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
16999 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
17000 ; GCN-NEXT:    ; return to shader part epilog
17002 ; GFX7-LABEL: s_fabs_bf16:
17003 ; GFX7:       ; %bb.0:
17004 ; GFX7-NEXT:    v_mul_f32_e64 v0, 1.0, s0
17005 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
17006 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
17007 ; GFX7-NEXT:    ; return to shader part epilog
17009 ; GFX8-LABEL: s_fabs_bf16:
17010 ; GFX8:       ; %bb.0:
17011 ; GFX8-NEXT:    s_and_b32 s0, s0, 0x7fff
17012 ; GFX8-NEXT:    s_and_b32 s0, 0xffff, s0
17013 ; GFX8-NEXT:    ; return to shader part epilog
17015 ; GFX9-LABEL: s_fabs_bf16:
17016 ; GFX9:       ; %bb.0:
17017 ; GFX9-NEXT:    s_and_b32 s0, s0, 0x7fff
17018 ; GFX9-NEXT:    s_and_b32 s0, 0xffff, s0
17019 ; GFX9-NEXT:    ; return to shader part epilog
17021 ; GFX10-LABEL: s_fabs_bf16:
17022 ; GFX10:       ; %bb.0:
17023 ; GFX10-NEXT:    s_and_b32 s0, s0, 0x7fff
17024 ; GFX10-NEXT:    s_and_b32 s0, 0xffff, s0
17025 ; GFX10-NEXT:    ; return to shader part epilog
17027 ; GFX11-LABEL: s_fabs_bf16:
17028 ; GFX11:       ; %bb.0:
17029 ; GFX11-NEXT:    s_and_b32 s0, s0, 0x7fff
17030 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
17031 ; GFX11-NEXT:    s_and_b32 s0, 0xffff, s0
17032 ; GFX11-NEXT:    ; return to shader part epilog
17033   %op = call bfloat @llvm.fabs.bf16(bfloat %a)
17034   %cast = bitcast bfloat %op to i16
17035   %zext = zext i16 %cast to i32
17036   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
17037   ret i32 %readlane
17040 define bfloat @v_fneg_bf16(bfloat %a) {
17041 ; GCN-LABEL: v_fneg_bf16:
17042 ; GCN:       ; %bb.0:
17043 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17044 ; GCN-NEXT:    v_xor_b32_e32 v0, 0x80000000, v0
17045 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17047 ; GFX7-LABEL: v_fneg_bf16:
17048 ; GFX7:       ; %bb.0:
17049 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17050 ; GFX7-NEXT:    v_xor_b32_e32 v0, 0x80000000, v0
17051 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17053 ; GFX8-LABEL: v_fneg_bf16:
17054 ; GFX8:       ; %bb.0:
17055 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17056 ; GFX8-NEXT:    v_xor_b32_e32 v0, 0x8000, v0
17057 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17059 ; GFX9-LABEL: v_fneg_bf16:
17060 ; GFX9:       ; %bb.0:
17061 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17062 ; GFX9-NEXT:    v_xor_b32_e32 v0, 0x8000, v0
17063 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17065 ; GFX10-LABEL: v_fneg_bf16:
17066 ; GFX10:       ; %bb.0:
17067 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17068 ; GFX10-NEXT:    v_xor_b32_e32 v0, 0x8000, v0
17069 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17071 ; GFX11-LABEL: v_fneg_bf16:
17072 ; GFX11:       ; %bb.0:
17073 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17074 ; GFX11-NEXT:    v_xor_b32_e32 v0, 0x8000, v0
17075 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17076   %op = fneg bfloat %a
17077   ret bfloat %op
17080 declare i32 @llvm.amdgcn.readfirstlane(i32)
17082 ; FIXME: readfirstlane hack for other bugs
17083 define amdgpu_ps i32 @s_fneg_bf16(bfloat inreg %a) {
17084 ; GCN-LABEL: s_fneg_bf16:
17085 ; GCN:       ; %bb.0:
17086 ; GCN-NEXT:    v_mul_f32_e64 v0, -1.0, s0
17087 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17088 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
17089 ; GCN-NEXT:    ; return to shader part epilog
17091 ; GFX7-LABEL: s_fneg_bf16:
17092 ; GFX7:       ; %bb.0:
17093 ; GFX7-NEXT:    v_mul_f32_e64 v0, -1.0, s0
17094 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17095 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
17096 ; GFX7-NEXT:    ; return to shader part epilog
17098 ; GFX8-LABEL: s_fneg_bf16:
17099 ; GFX8:       ; %bb.0:
17100 ; GFX8-NEXT:    s_xor_b32 s0, s0, 0x8000
17101 ; GFX8-NEXT:    s_and_b32 s0, 0xffff, s0
17102 ; GFX8-NEXT:    ; return to shader part epilog
17104 ; GFX9-LABEL: s_fneg_bf16:
17105 ; GFX9:       ; %bb.0:
17106 ; GFX9-NEXT:    s_xor_b32 s0, s0, 0x8000
17107 ; GFX9-NEXT:    s_and_b32 s0, 0xffff, s0
17108 ; GFX9-NEXT:    ; return to shader part epilog
17110 ; GFX10-LABEL: s_fneg_bf16:
17111 ; GFX10:       ; %bb.0:
17112 ; GFX10-NEXT:    s_xor_b32 s0, s0, 0x8000
17113 ; GFX10-NEXT:    s_and_b32 s0, 0xffff, s0
17114 ; GFX10-NEXT:    ; return to shader part epilog
17116 ; GFX11-LABEL: s_fneg_bf16:
17117 ; GFX11:       ; %bb.0:
17118 ; GFX11-NEXT:    s_xor_b32 s0, s0, 0x8000
17119 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
17120 ; GFX11-NEXT:    s_and_b32 s0, 0xffff, s0
17121 ; GFX11-NEXT:    ; return to shader part epilog
17122   %op = fneg bfloat %a
17123   %cast = bitcast bfloat %op to i16
17124   %zext = zext i16 %cast to i32
17125   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
17126   ret i32 %readlane
17129 define bfloat @v_fneg_fabs_bf16(bfloat %a) {
17130 ; GCN-LABEL: v_fneg_fabs_bf16:
17131 ; GCN:       ; %bb.0:
17132 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17133 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17134 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17135 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fffffff, v0
17136 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17137 ; GCN-NEXT:    v_xor_b32_e32 v0, 0x80000000, v0
17138 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17139 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17141 ; GFX7-LABEL: v_fneg_fabs_bf16:
17142 ; GFX7:       ; %bb.0:
17143 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17144 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17145 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17146 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fffffff, v0
17147 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17148 ; GFX7-NEXT:    v_xor_b32_e32 v0, 0x80000000, v0
17149 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17150 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17152 ; GFX8-LABEL: v_fneg_fabs_bf16:
17153 ; GFX8:       ; %bb.0:
17154 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17155 ; GFX8-NEXT:    v_or_b32_e32 v0, 0x8000, v0
17156 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17158 ; GFX9-LABEL: v_fneg_fabs_bf16:
17159 ; GFX9:       ; %bb.0:
17160 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17161 ; GFX9-NEXT:    v_or_b32_e32 v0, 0x8000, v0
17162 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17164 ; GFX10-LABEL: v_fneg_fabs_bf16:
17165 ; GFX10:       ; %bb.0:
17166 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17167 ; GFX10-NEXT:    v_or_b32_e32 v0, 0x8000, v0
17168 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17170 ; GFX11-LABEL: v_fneg_fabs_bf16:
17171 ; GFX11:       ; %bb.0:
17172 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17173 ; GFX11-NEXT:    v_or_b32_e32 v0, 0x8000, v0
17174 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17175   %fabs = call bfloat @llvm.fabs.bf16(bfloat %a)
17176   %op = fneg bfloat %fabs
17177   ret bfloat %op
17180 ; FIXME: readfirstlane hack for other bugs
17181 define amdgpu_ps i32 @s_fneg_fabs_bf16(bfloat inreg %a) {
17182 ; GCN-LABEL: s_fneg_fabs_bf16:
17183 ; GCN:       ; %bb.0:
17184 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
17185 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
17186 ; GCN-NEXT:    s_and_b32 s0, s0, 0xffff0000
17187 ; GCN-NEXT:    s_bitset0_b32 s0, 31
17188 ; GCN-NEXT:    s_and_b32 s0, s0, 0xffff0000
17189 ; GCN-NEXT:    s_xor_b32 s0, s0, 0x80000000
17190 ; GCN-NEXT:    s_lshr_b32 s0, s0, 16
17191 ; GCN-NEXT:    ; return to shader part epilog
17193 ; GFX7-LABEL: s_fneg_fabs_bf16:
17194 ; GFX7:       ; %bb.0:
17195 ; GFX7-NEXT:    v_mul_f32_e64 v0, 1.0, s0
17196 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
17197 ; GFX7-NEXT:    s_and_b32 s0, s0, 0xffff0000
17198 ; GFX7-NEXT:    s_bitset0_b32 s0, 31
17199 ; GFX7-NEXT:    s_and_b32 s0, s0, 0xffff0000
17200 ; GFX7-NEXT:    s_xor_b32 s0, s0, 0x80000000
17201 ; GFX7-NEXT:    s_lshr_b32 s0, s0, 16
17202 ; GFX7-NEXT:    ; return to shader part epilog
17204 ; GFX8-LABEL: s_fneg_fabs_bf16:
17205 ; GFX8:       ; %bb.0:
17206 ; GFX8-NEXT:    s_bitset1_b32 s0, 15
17207 ; GFX8-NEXT:    s_and_b32 s0, 0xffff, s0
17208 ; GFX8-NEXT:    ; return to shader part epilog
17210 ; GFX9-LABEL: s_fneg_fabs_bf16:
17211 ; GFX9:       ; %bb.0:
17212 ; GFX9-NEXT:    s_bitset1_b32 s0, 15
17213 ; GFX9-NEXT:    s_and_b32 s0, 0xffff, s0
17214 ; GFX9-NEXT:    ; return to shader part epilog
17216 ; GFX10-LABEL: s_fneg_fabs_bf16:
17217 ; GFX10:       ; %bb.0:
17218 ; GFX10-NEXT:    s_bitset1_b32 s0, 15
17219 ; GFX10-NEXT:    s_and_b32 s0, 0xffff, s0
17220 ; GFX10-NEXT:    ; return to shader part epilog
17222 ; GFX11-LABEL: s_fneg_fabs_bf16:
17223 ; GFX11:       ; %bb.0:
17224 ; GFX11-NEXT:    s_bitset1_b32 s0, 15
17225 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
17226 ; GFX11-NEXT:    s_and_b32 s0, 0xffff, s0
17227 ; GFX11-NEXT:    ; return to shader part epilog
17228   %fabs = call bfloat @llvm.fabs.bf16(bfloat %a)
17229   %op = fneg bfloat %fabs
17230   %cast = bitcast bfloat %op to i16
17231   %zext = zext i16 %cast to i32
17232   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
17233   ret i32 %readlane
17236 declare bfloat @llvm.minnum.bf16(bfloat, bfloat)
17237 declare <2 x bfloat> @llvm.minnum.v2bf16(<2 x bfloat>, <2 x bfloat>)
17238 declare <3 x bfloat> @llvm.minnum.v3bf16(<3 x bfloat>, <3 x bfloat>)
17239 declare <4 x bfloat> @llvm.minnum.v4bf16(<4 x bfloat>, <4 x bfloat>)
17240 declare <8 x bfloat> @llvm.minnum.v8bf16(<8 x bfloat>, <8 x bfloat>)
17241 declare <16 x bfloat> @llvm.minnum.v16bf16(<16 x bfloat>, <16 x bfloat>)
17242 declare <32 x bfloat> @llvm.minnum.v32bf16(<32 x bfloat>, <32 x bfloat>)
17244 define bfloat @v_minnum_bf16(bfloat %a, bfloat %b) {
17245 ; GCN-LABEL: v_minnum_bf16:
17246 ; GCN:       ; %bb.0:
17247 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17248 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17249 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17250 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17251 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17252 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v1
17253 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17254 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17256 ; GFX7-LABEL: v_minnum_bf16:
17257 ; GFX7:       ; %bb.0:
17258 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17259 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17260 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17261 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17262 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17263 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v1
17264 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17265 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17267 ; GFX8-LABEL: v_minnum_bf16:
17268 ; GFX8:       ; %bb.0:
17269 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17270 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17271 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
17272 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
17273 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
17274 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
17275 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
17276 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
17277 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17278 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
17279 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17280 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17282 ; GFX9-LABEL: v_minnum_bf16:
17283 ; GFX9:       ; %bb.0:
17284 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17285 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17286 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
17287 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
17288 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
17289 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
17290 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
17291 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
17292 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17293 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
17294 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17295 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17297 ; GFX10-LABEL: v_minnum_bf16:
17298 ; GFX10:       ; %bb.0:
17299 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17300 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17301 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
17302 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
17303 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
17304 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
17305 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17306 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
17307 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
17308 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17309 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17311 ; GFX11-LABEL: v_minnum_bf16:
17312 ; GFX11:       ; %bb.0:
17313 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17314 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17315 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
17316 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
17317 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
17318 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
17319 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
17320 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17321 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
17322 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
17323 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
17324 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17325 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17326 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17327   %op = call bfloat @llvm.minnum.bf16(bfloat %a, bfloat %b)
17328   ret bfloat %op
17331 define <2 x bfloat> @v_minnum_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
17332 ; GCN-LABEL: v_minnum_v2bf16:
17333 ; GCN:       ; %bb.0:
17334 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17335 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17336 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17337 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17338 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17339 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17340 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17341 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17342 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17343 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v3
17344 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v2
17345 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17346 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17347 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17349 ; GFX7-LABEL: v_minnum_v2bf16:
17350 ; GFX7:       ; %bb.0:
17351 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17352 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17353 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17354 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17355 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17356 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17357 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17358 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17359 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17360 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v3
17361 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v2
17362 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17363 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17364 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17366 ; GFX8-LABEL: v_minnum_v2bf16:
17367 ; GFX8:       ; %bb.0:
17368 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17369 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
17370 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
17371 ; GFX8-NEXT:    v_min_f32_e32 v2, v3, v2
17372 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
17373 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
17374 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17375 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17376 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
17377 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v1
17378 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
17379 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
17380 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
17381 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
17382 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
17383 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
17384 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
17385 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17386 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
17387 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17388 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
17389 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17391 ; GFX9-LABEL: v_minnum_v2bf16:
17392 ; GFX9:       ; %bb.0:
17393 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17394 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
17395 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
17396 ; GFX9-NEXT:    v_min_f32_e32 v2, v3, v2
17397 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17398 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17399 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
17400 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
17401 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v1
17402 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
17403 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
17404 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
17405 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
17406 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
17407 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
17408 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
17409 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17410 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
17411 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
17412 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
17413 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17415 ; GFX10-LABEL: v_minnum_v2bf16:
17416 ; GFX10:       ; %bb.0:
17417 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17418 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
17419 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
17420 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17421 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17422 ; GFX10-NEXT:    v_min_f32_e32 v2, v3, v2
17423 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v1
17424 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
17425 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
17426 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
17427 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
17428 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
17429 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
17430 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
17431 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
17432 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17433 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
17434 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
17435 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17437 ; GFX11-LABEL: v_minnum_v2bf16:
17438 ; GFX11:       ; %bb.0:
17439 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17440 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
17441 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17442 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
17443 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17444 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
17445 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v1
17446 ; GFX11-NEXT:    v_min_f32_e32 v2, v3, v2
17447 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
17448 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
17449 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
17450 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
17451 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
17452 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
17453 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
17454 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
17455 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
17456 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
17457 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17458 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
17459 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17460 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
17461 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17462   %op = call <2 x bfloat> @llvm.minnum.v2bf16(<2 x bfloat> %a, <2 x bfloat> %b)
17463   ret <2 x bfloat> %op
17466 define <3 x bfloat> @v_minnum_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b) {
17467 ; GCN-LABEL: v_minnum_v3bf16:
17468 ; GCN:       ; %bb.0:
17469 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17470 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17471 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17472 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17473 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17474 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17475 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17476 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17477 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17478 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17479 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17480 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17481 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17482 ; GCN-NEXT:    v_min_f32_e32 v2, v2, v5
17483 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v4
17484 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v3
17485 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17486 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17487 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17488 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17490 ; GFX7-LABEL: v_minnum_v3bf16:
17491 ; GFX7:       ; %bb.0:
17492 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17493 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17494 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17495 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17496 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17497 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17498 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17499 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17500 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17501 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17502 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17503 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17504 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17505 ; GFX7-NEXT:    v_min_f32_e32 v2, v2, v5
17506 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v4
17507 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v3
17508 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17509 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17510 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17511 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17513 ; GFX8-LABEL: v_minnum_v3bf16:
17514 ; GFX8:       ; %bb.0:
17515 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17516 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
17517 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17518 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v3
17519 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
17520 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
17521 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
17522 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
17523 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
17524 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
17525 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
17526 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
17527 ; GFX8-NEXT:    v_min_f32_e32 v3, v4, v3
17528 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
17529 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
17530 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
17531 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17532 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17533 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
17534 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v2
17535 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
17536 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
17537 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
17538 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
17539 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
17540 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
17541 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
17542 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17543 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
17544 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17545 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
17546 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
17547 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17549 ; GFX9-LABEL: v_minnum_v3bf16:
17550 ; GFX9:       ; %bb.0:
17551 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17552 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
17553 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17554 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v3
17555 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
17556 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
17557 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
17558 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
17559 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
17560 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
17561 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
17562 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
17563 ; GFX9-NEXT:    v_min_f32_e32 v3, v4, v3
17564 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17565 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17566 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
17567 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v2
17568 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
17569 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
17570 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
17571 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
17572 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
17573 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
17574 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
17575 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17576 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
17577 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
17578 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
17579 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
17580 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17582 ; GFX10-LABEL: v_minnum_v3bf16:
17583 ; GFX10:       ; %bb.0:
17584 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17585 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
17586 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
17587 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17588 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17589 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
17590 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
17591 ; GFX10-NEXT:    v_min_f32_e32 v4, v5, v4
17592 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v2
17593 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v3
17594 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
17595 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
17596 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
17597 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
17598 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
17599 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
17600 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
17601 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
17602 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
17603 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
17604 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
17605 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17606 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
17607 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
17608 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
17609 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc_lo
17610 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
17611 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17612   %op = call <3 x bfloat> @llvm.minnum.v3bf16(<3 x bfloat> %a, <3 x bfloat> %b)
17613   ret <3 x bfloat> %op
17616 define <4 x bfloat> @v_minnum_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
17617 ; GCN-LABEL: v_minnum_v4bf16:
17618 ; GCN:       ; %bb.0:
17619 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17620 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17621 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17622 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17623 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17624 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17625 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
17626 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17627 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
17628 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17629 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17630 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17631 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17632 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17633 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17634 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17635 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17636 ; GCN-NEXT:    v_min_f32_e32 v3, v3, v7
17637 ; GCN-NEXT:    v_min_f32_e32 v2, v2, v6
17638 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v5
17639 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v4
17640 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17641 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17642 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17643 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17644 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17646 ; GFX7-LABEL: v_minnum_v4bf16:
17647 ; GFX7:       ; %bb.0:
17648 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17649 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17650 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17651 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17652 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17653 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17654 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
17655 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17656 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
17657 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17658 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17659 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17660 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17661 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17662 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17663 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17664 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17665 ; GFX7-NEXT:    v_min_f32_e32 v3, v3, v7
17666 ; GFX7-NEXT:    v_min_f32_e32 v2, v2, v6
17667 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v5
17668 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v4
17669 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17670 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17671 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17672 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17673 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17675 ; GFX8-LABEL: v_minnum_v4bf16:
17676 ; GFX8:       ; %bb.0:
17677 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17678 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
17679 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
17680 ; GFX8-NEXT:    v_min_f32_e32 v4, v5, v4
17681 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
17682 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
17683 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17684 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17685 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
17686 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v3
17687 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
17688 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
17689 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
17690 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
17691 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
17692 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
17693 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
17694 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
17695 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
17696 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
17697 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
17698 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
17699 ; GFX8-NEXT:    v_min_f32_e32 v3, v5, v3
17700 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
17701 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
17702 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17703 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17704 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
17705 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v2
17706 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
17707 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
17708 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
17709 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
17710 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
17711 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
17712 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
17713 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17714 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
17715 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
17716 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
17717 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
17718 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v4, 16
17719 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
17721 ; GFX9-LABEL: v_minnum_v4bf16:
17722 ; GFX9:       ; %bb.0:
17723 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17724 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
17725 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
17726 ; GFX9-NEXT:    v_min_f32_e32 v4, v5, v4
17727 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17728 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17729 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
17730 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
17731 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v3
17732 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
17733 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v4
17734 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
17735 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
17736 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
17737 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
17738 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
17739 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
17740 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
17741 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
17742 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
17743 ; GFX9-NEXT:    v_min_f32_e32 v3, v5, v3
17744 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17745 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17746 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
17747 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v2
17748 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
17749 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
17750 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
17751 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
17752 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
17753 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
17754 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
17755 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
17756 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
17757 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
17758 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
17759 ; GFX9-NEXT:    v_perm_b32 v1, v1, v4, s4
17760 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
17762 ; GFX10-LABEL: v_minnum_v4bf16:
17763 ; GFX10:       ; %bb.0:
17764 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17765 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
17766 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
17767 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17768 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17769 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
17770 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
17771 ; GFX10-NEXT:    v_min_f32_e32 v4, v5, v4
17772 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17773 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17774 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v3
17775 ; GFX10-NEXT:    v_min_f32_e32 v3, v7, v6
17776 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
17777 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
17778 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v2
17779 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
17780 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
17781 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
17782 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
17783 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
17784 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
17785 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
17786 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
17787 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
17788 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
17789 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
17790 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
17791 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
17792 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
17793 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17794 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
17795 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
17796 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
17797 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
17798 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
17799 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
17801 ; GFX11-LABEL: v_minnum_v4bf16:
17802 ; GFX11:       ; %bb.0:
17803 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17804 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
17805 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
17806 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17807 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17808 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
17809 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
17810 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
17811 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v2 :: v_dual_and_b32 v1, 0xffff0000, v1
17812 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17813 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
17814 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
17815 ; GFX11-NEXT:    v_min_f32_e32 v1, v1, v3
17816 ; GFX11-NEXT:    v_dual_min_f32 v3, v7, v6 :: v_dual_min_f32 v4, v5, v4
17817 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
17818 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
17819 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
17820 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
17821 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v4
17822 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
17823 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
17824 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
17825 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
17826 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
17827 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_4)
17828 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
17829 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
17830 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
17831 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
17832 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
17833 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
17834 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
17835 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
17836 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
17837 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
17838 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
17839 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
17840 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
17841 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
17842 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
17843   %op = call <4 x bfloat> @llvm.minnum.v4bf16(<4 x bfloat> %a, <4 x bfloat> %b)
17844   ret <4 x bfloat> %op
17847 define <8 x bfloat> @v_minnum_v8bf16(<8 x bfloat> %a, <8 x bfloat> %b) {
17848 ; GCN-LABEL: v_minnum_v8bf16:
17849 ; GCN:       ; %bb.0:
17850 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17851 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17852 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
17853 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17854 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
17855 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17856 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
17857 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17858 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
17859 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17860 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
17861 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17862 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
17863 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
17864 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
17865 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
17866 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
17867 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
17868 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17869 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
17870 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17871 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
17872 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17873 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
17874 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17875 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
17876 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17877 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
17878 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17879 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
17880 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17881 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
17882 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17883 ; GCN-NEXT:    v_min_f32_e32 v7, v7, v15
17884 ; GCN-NEXT:    v_min_f32_e32 v6, v6, v14
17885 ; GCN-NEXT:    v_min_f32_e32 v5, v5, v13
17886 ; GCN-NEXT:    v_min_f32_e32 v4, v4, v12
17887 ; GCN-NEXT:    v_min_f32_e32 v3, v3, v11
17888 ; GCN-NEXT:    v_min_f32_e32 v2, v2, v10
17889 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v9
17890 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v8
17891 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17892 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17893 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17894 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17895 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17896 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17897 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17898 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17899 ; GCN-NEXT:    s_setpc_b64 s[30:31]
17901 ; GFX7-LABEL: v_minnum_v8bf16:
17902 ; GFX7:       ; %bb.0:
17903 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17904 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
17905 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
17906 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
17907 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
17908 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
17909 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
17910 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
17911 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
17912 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
17913 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
17914 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
17915 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
17916 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
17917 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
17918 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
17919 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
17920 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
17921 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17922 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
17923 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17924 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
17925 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17926 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
17927 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17928 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
17929 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17930 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
17931 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17932 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
17933 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17934 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
17935 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17936 ; GFX7-NEXT:    v_min_f32_e32 v7, v7, v15
17937 ; GFX7-NEXT:    v_min_f32_e32 v6, v6, v14
17938 ; GFX7-NEXT:    v_min_f32_e32 v5, v5, v13
17939 ; GFX7-NEXT:    v_min_f32_e32 v4, v4, v12
17940 ; GFX7-NEXT:    v_min_f32_e32 v3, v3, v11
17941 ; GFX7-NEXT:    v_min_f32_e32 v2, v2, v10
17942 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v9
17943 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v8
17944 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
17945 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
17946 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17947 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17948 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
17949 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
17950 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17951 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17952 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
17954 ; GFX8-LABEL: v_minnum_v8bf16:
17955 ; GFX8:       ; %bb.0:
17956 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
17957 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
17958 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
17959 ; GFX8-NEXT:    v_min_f32_e32 v8, v9, v8
17960 ; GFX8-NEXT:    v_bfe_u32 v9, v8, 16, 1
17961 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v8
17962 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
17963 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
17964 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x7fff, v9
17965 ; GFX8-NEXT:    v_min_f32_e32 v3, v3, v7
17966 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v8
17967 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
17968 ; GFX8-NEXT:    v_bfe_u32 v7, v3, 16, 1
17969 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
17970 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
17971 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v3
17972 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v7
17973 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v3
17974 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
17975 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
17976 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
17977 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
17978 ; GFX8-NEXT:    v_min_f32_e32 v7, v9, v7
17979 ; GFX8-NEXT:    v_bfe_u32 v9, v7, 16, 1
17980 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v7
17981 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
17982 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
17983 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
17984 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v6
17985 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v7
17986 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
17987 ; GFX8-NEXT:    v_bfe_u32 v6, v2, 16, 1
17988 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
17989 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v2
17990 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
17991 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v2
17992 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
17993 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
17994 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
17995 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
17996 ; GFX8-NEXT:    v_min_f32_e32 v6, v9, v6
17997 ; GFX8-NEXT:    v_bfe_u32 v9, v6, 16, 1
17998 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v6
17999 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18000 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18001 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
18002 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v5
18003 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v6
18004 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
18005 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
18006 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
18007 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
18008 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
18009 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
18010 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
18011 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
18012 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
18013 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
18014 ; GFX8-NEXT:    v_min_f32_e32 v5, v9, v5
18015 ; GFX8-NEXT:    v_bfe_u32 v9, v5, 16, 1
18016 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v5
18017 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18018 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18019 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
18020 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v4
18021 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v5
18022 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
18023 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
18024 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
18025 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
18026 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
18027 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v0
18028 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
18029 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
18030 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
18031 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
18032 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
18033 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
18034 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v5, 16
18035 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
18036 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v7, 16
18037 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v8, 16
18038 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
18040 ; GFX9-LABEL: v_minnum_v8bf16:
18041 ; GFX9:       ; %bb.0:
18042 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18043 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
18044 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
18045 ; GFX9-NEXT:    v_min_f32_e32 v8, v9, v8
18046 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18047 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18048 ; GFX9-NEXT:    v_bfe_u32 v9, v8, 16, 1
18049 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
18050 ; GFX9-NEXT:    v_min_f32_e32 v3, v3, v7
18051 ; GFX9-NEXT:    v_add3_u32 v9, v9, v8, s4
18052 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v8
18053 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
18054 ; GFX9-NEXT:    v_bfe_u32 v7, v3, 16, 1
18055 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
18056 ; GFX9-NEXT:    v_add3_u32 v7, v7, v3, s4
18057 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v3
18058 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
18059 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
18060 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
18061 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
18062 ; GFX9-NEXT:    v_min_f32_e32 v7, v9, v7
18063 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18064 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18065 ; GFX9-NEXT:    v_bfe_u32 v9, v7, 16, 1
18066 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v6
18067 ; GFX9-NEXT:    v_add3_u32 v9, v9, v7, s4
18068 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v7
18069 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
18070 ; GFX9-NEXT:    v_bfe_u32 v6, v2, 16, 1
18071 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
18072 ; GFX9-NEXT:    v_add3_u32 v6, v6, v2, s4
18073 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v2
18074 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
18075 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
18076 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
18077 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
18078 ; GFX9-NEXT:    v_min_f32_e32 v6, v9, v6
18079 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18080 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18081 ; GFX9-NEXT:    v_bfe_u32 v9, v6, 16, 1
18082 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v5
18083 ; GFX9-NEXT:    v_add3_u32 v9, v9, v6, s4
18084 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v6
18085 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
18086 ; GFX9-NEXT:    v_bfe_u32 v5, v1, 16, 1
18087 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
18088 ; GFX9-NEXT:    v_add3_u32 v5, v5, v1, s4
18089 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v1
18090 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
18091 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
18092 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
18093 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
18094 ; GFX9-NEXT:    v_min_f32_e32 v5, v9, v5
18095 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18096 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18097 ; GFX9-NEXT:    v_bfe_u32 v9, v5, 16, 1
18098 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v4
18099 ; GFX9-NEXT:    v_add3_u32 v9, v9, v5, s4
18100 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v5
18101 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
18102 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
18103 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
18104 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
18105 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v0
18106 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
18107 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
18108 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
18109 ; GFX9-NEXT:    v_perm_b32 v0, v0, v5, s4
18110 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
18111 ; GFX9-NEXT:    v_perm_b32 v2, v2, v7, s4
18112 ; GFX9-NEXT:    v_perm_b32 v3, v3, v8, s4
18113 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
18115 ; GFX10-LABEL: v_minnum_v8bf16:
18116 ; GFX10:       ; %bb.0:
18117 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18118 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
18119 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
18120 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18121 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18122 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
18123 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18124 ; GFX10-NEXT:    v_min_f32_e32 v8, v9, v8
18125 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
18126 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18127 ; GFX10-NEXT:    v_min_f32_e32 v3, v3, v7
18128 ; GFX10-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
18129 ; GFX10-NEXT:    v_bfe_u32 v11, v8, 16, 1
18130 ; GFX10-NEXT:    v_min_f32_e32 v7, v10, v9
18131 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v8
18132 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
18133 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v6
18134 ; GFX10-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
18135 ; GFX10-NEXT:    v_bfe_u32 v11, v3, 16, 1
18136 ; GFX10-NEXT:    v_bfe_u32 v12, v7, 16, 1
18137 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
18138 ; GFX10-NEXT:    v_bfe_u32 v13, v2, 16, 1
18139 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
18140 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
18141 ; GFX10-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
18142 ; GFX10-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
18143 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v7
18144 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
18145 ; GFX10-NEXT:    v_min_f32_e32 v6, v10, v6
18146 ; GFX10-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
18147 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18148 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18149 ; GFX10-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
18150 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v11, v12, vcc_lo
18151 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v2
18152 ; GFX10-NEXT:    v_bfe_u32 v12, v6, 16, 1
18153 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18154 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18155 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
18156 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v5
18157 ; GFX10-NEXT:    v_min_f32_e32 v5, v15, v13
18158 ; GFX10-NEXT:    v_or_b32_e32 v14, 0x400000, v3
18159 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v4
18160 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
18161 ; GFX10-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
18162 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v6
18163 ; GFX10-NEXT:    v_bfe_u32 v11, v1, 16, 1
18164 ; GFX10-NEXT:    v_bfe_u32 v12, v5, 16, 1
18165 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
18166 ; GFX10-NEXT:    v_bfe_u32 v13, v0, 16, 1
18167 ; GFX10-NEXT:    v_or_b32_e32 v15, 0x400000, v1
18168 ; GFX10-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
18169 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v5
18170 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v4, v10, vcc_lo
18171 ; GFX10-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
18172 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
18173 ; GFX10-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
18174 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v0
18175 ; GFX10-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
18176 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
18177 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
18178 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
18179 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
18180 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
18181 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
18182 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
18183 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
18184 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
18185 ; GFX10-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
18186 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
18188 ; GFX11-LABEL: v_minnum_v8bf16:
18189 ; GFX11:       ; %bb.0:
18190 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18191 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
18192 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
18193 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18194 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
18195 ; GFX11-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
18196 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
18197 ; GFX11-NEXT:    v_dual_min_f32 v8, v9, v8 :: v_dual_and_b32 v7, 0xffff0000, v7
18198 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
18199 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
18200 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18201 ; GFX11-NEXT:    v_bfe_u32 v11, v8, 16, 1
18202 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
18203 ; GFX11-NEXT:    v_min_f32_e32 v3, v3, v7
18204 ; GFX11-NEXT:    v_min_f32_e32 v7, v10, v9
18205 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v8
18206 ; GFX11-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
18207 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
18208 ; GFX11-NEXT:    v_bfe_u32 v11, v3, 16, 1
18209 ; GFX11-NEXT:    v_bfe_u32 v12, v7, 16, 1
18210 ; GFX11-NEXT:    v_or_b32_e32 v14, 0x400000, v3
18211 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
18212 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
18213 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
18214 ; GFX11-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
18215 ; GFX11-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
18216 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v7
18217 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18218 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
18219 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18220 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
18221 ; GFX11-NEXT:    v_dual_cndmask_b32 v7, v11, v12 :: v_dual_min_f32 v2, v2, v6
18222 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
18223 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18224 ; GFX11-NEXT:    v_bfe_u32 v13, v2, 16, 1
18225 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
18226 ; GFX11-NEXT:    v_min_f32_e32 v6, v10, v6
18227 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v2
18228 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
18229 ; GFX11-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
18230 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
18231 ; GFX11-NEXT:    v_bfe_u32 v12, v6, 16, 1
18232 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
18233 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v6
18234 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
18235 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
18236 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18237 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18238 ; GFX11-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
18239 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
18240 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v4
18241 ; GFX11-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
18242 ; GFX11-NEXT:    v_dual_min_f32 v1, v1, v5 :: v_dual_cndmask_b32 v4, v4, v10
18243 ; GFX11-NEXT:    v_min_f32_e32 v5, v15, v13
18244 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
18245 ; GFX11-NEXT:    v_bfe_u32 v11, v1, 16, 1
18246 ; GFX11-NEXT:    v_bfe_u32 v13, v0, 16, 1
18247 ; GFX11-NEXT:    v_or_b32_e32 v15, 0x400000, v1
18248 ; GFX11-NEXT:    v_bfe_u32 v12, v5, 16, 1
18249 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
18250 ; GFX11-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
18251 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v5
18252 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
18253 ; GFX11-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
18254 ; GFX11-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
18255 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v0
18256 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
18257 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
18258 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
18259 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
18260 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
18261 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
18262 ; GFX11-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
18263 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
18264 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
18265 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
18266 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
18267 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
18268 ; GFX11-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
18269 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
18270   %op = call <8 x bfloat> @llvm.minnum.v8bf16(<8 x bfloat> %a, <8 x bfloat> %b)
18271   ret <8 x bfloat> %op
18274 define <16 x bfloat> @v_minnum_v16bf16(<16 x bfloat> %a, <16 x bfloat> %b) {
18275 ; GCN-LABEL: v_minnum_v16bf16:
18276 ; GCN:       ; %bb.0:
18277 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18278 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
18279 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
18280 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
18281 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18282 ; GCN-NEXT:    v_min_f32_e32 v14, v14, v30
18283 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
18284 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
18285 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
18286 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18287 ; GCN-NEXT:    v_min_f32_e32 v13, v13, v29
18288 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
18289 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
18290 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
18291 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18292 ; GCN-NEXT:    v_min_f32_e32 v12, v12, v28
18293 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
18294 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
18295 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
18296 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18297 ; GCN-NEXT:    v_min_f32_e32 v11, v11, v27
18298 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
18299 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
18300 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
18301 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18302 ; GCN-NEXT:    v_min_f32_e32 v10, v10, v26
18303 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
18304 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
18305 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
18306 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18307 ; GCN-NEXT:    v_min_f32_e32 v9, v9, v25
18308 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
18309 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
18310 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
18311 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18312 ; GCN-NEXT:    v_min_f32_e32 v8, v8, v24
18313 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
18314 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
18315 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
18316 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18317 ; GCN-NEXT:    v_min_f32_e32 v7, v7, v23
18318 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
18319 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
18320 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
18321 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18322 ; GCN-NEXT:    v_min_f32_e32 v6, v6, v22
18323 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
18324 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
18325 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
18326 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18327 ; GCN-NEXT:    v_min_f32_e32 v5, v5, v21
18328 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
18329 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
18330 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
18331 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
18332 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
18333 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
18334 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
18335 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
18336 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
18337 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
18338 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
18339 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
18340 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18341 ; GCN-NEXT:    v_min_f32_e32 v4, v4, v20
18342 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32
18343 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18344 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
18345 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18346 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
18347 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18348 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
18349 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18350 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
18351 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18352 ; GCN-NEXT:    v_min_f32_e32 v3, v3, v19
18353 ; GCN-NEXT:    v_min_f32_e32 v2, v2, v18
18354 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v17
18355 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v16
18356 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18357 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18358 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18359 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18360 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18361 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18362 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18363 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18364 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18365 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18366 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18367 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18368 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18369 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18370 ; GCN-NEXT:    s_waitcnt vmcnt(0)
18371 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v20
18372 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
18373 ; GCN-NEXT:    v_min_f32_e32 v15, v15, v16
18374 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18375 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18376 ; GCN-NEXT:    s_setpc_b64 s[30:31]
18378 ; GFX7-LABEL: v_minnum_v16bf16:
18379 ; GFX7:       ; %bb.0:
18380 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18381 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
18382 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
18383 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
18384 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18385 ; GFX7-NEXT:    v_min_f32_e32 v6, v6, v22
18386 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32
18387 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
18388 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
18389 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
18390 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
18391 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
18392 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
18393 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
18394 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
18395 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
18396 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
18397 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
18398 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
18399 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
18400 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
18401 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
18402 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
18403 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
18404 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
18405 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
18406 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
18407 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
18408 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
18409 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
18410 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
18411 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
18412 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
18413 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
18414 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
18415 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
18416 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
18417 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18418 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
18419 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18420 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
18421 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18422 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
18423 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18424 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
18425 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18426 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
18427 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18428 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
18429 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18430 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
18431 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18432 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18433 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
18434 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18435 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
18436 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18437 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
18438 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18439 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
18440 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18441 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
18442 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18443 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
18444 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18445 ; GFX7-NEXT:    v_min_f32_e32 v14, v14, v30
18446 ; GFX7-NEXT:    v_min_f32_e32 v13, v13, v29
18447 ; GFX7-NEXT:    v_min_f32_e32 v12, v12, v28
18448 ; GFX7-NEXT:    v_min_f32_e32 v11, v11, v27
18449 ; GFX7-NEXT:    v_min_f32_e32 v10, v10, v26
18450 ; GFX7-NEXT:    v_min_f32_e32 v9, v9, v25
18451 ; GFX7-NEXT:    v_min_f32_e32 v8, v8, v24
18452 ; GFX7-NEXT:    v_min_f32_e32 v7, v7, v23
18453 ; GFX7-NEXT:    v_min_f32_e32 v5, v5, v21
18454 ; GFX7-NEXT:    v_min_f32_e32 v4, v4, v20
18455 ; GFX7-NEXT:    v_min_f32_e32 v3, v3, v19
18456 ; GFX7-NEXT:    v_min_f32_e32 v2, v2, v18
18457 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v17
18458 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v16
18459 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18460 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18461 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18462 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18463 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18464 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18465 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18466 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
18467 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
18468 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
18469 ; GFX7-NEXT:    v_min_f32_e32 v15, v15, v22
18470 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18471 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18472 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18473 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18474 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18475 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18476 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18477 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18478 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18479 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
18481 ; GFX8-LABEL: v_minnum_v16bf16:
18482 ; GFX8:       ; %bb.0:
18483 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18484 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
18485 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
18486 ; GFX8-NEXT:    v_min_f32_e32 v16, v17, v16
18487 ; GFX8-NEXT:    v_bfe_u32 v17, v16, 16, 1
18488 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v16
18489 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
18490 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18491 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18492 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18493 ; GFX8-NEXT:    v_min_f32_e32 v7, v7, v15
18494 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v16
18495 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
18496 ; GFX8-NEXT:    v_bfe_u32 v15, v7, 16, 1
18497 ; GFX8-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
18498 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v7
18499 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
18500 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v7
18501 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
18502 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
18503 ; GFX8-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
18504 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
18505 ; GFX8-NEXT:    v_min_f32_e32 v15, v17, v15
18506 ; GFX8-NEXT:    v_bfe_u32 v17, v15, 16, 1
18507 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v15
18508 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18509 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18510 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18511 ; GFX8-NEXT:    v_min_f32_e32 v6, v6, v14
18512 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v15
18513 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
18514 ; GFX8-NEXT:    v_bfe_u32 v14, v6, 16, 1
18515 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
18516 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, v14, v6
18517 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, s4, v14
18518 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v6
18519 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
18520 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
18521 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
18522 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
18523 ; GFX8-NEXT:    v_min_f32_e32 v14, v17, v14
18524 ; GFX8-NEXT:    v_bfe_u32 v17, v14, 16, 1
18525 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v14
18526 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18527 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18528 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18529 ; GFX8-NEXT:    v_min_f32_e32 v5, v5, v13
18530 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v14
18531 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
18532 ; GFX8-NEXT:    v_bfe_u32 v13, v5, 16, 1
18533 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
18534 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, v13, v5
18535 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, s4, v13
18536 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v5
18537 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
18538 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
18539 ; GFX8-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
18540 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
18541 ; GFX8-NEXT:    v_min_f32_e32 v13, v17, v13
18542 ; GFX8-NEXT:    v_bfe_u32 v17, v13, 16, 1
18543 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v13
18544 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18545 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18546 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18547 ; GFX8-NEXT:    v_min_f32_e32 v4, v4, v12
18548 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v13
18549 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
18550 ; GFX8-NEXT:    v_bfe_u32 v12, v4, 16, 1
18551 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
18552 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v4
18553 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, s4, v12
18554 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v4
18555 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
18556 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
18557 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
18558 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
18559 ; GFX8-NEXT:    v_min_f32_e32 v12, v17, v12
18560 ; GFX8-NEXT:    v_bfe_u32 v17, v12, 16, 1
18561 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v12
18562 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18563 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18564 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18565 ; GFX8-NEXT:    v_min_f32_e32 v3, v3, v11
18566 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v12
18567 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
18568 ; GFX8-NEXT:    v_bfe_u32 v11, v3, 16, 1
18569 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
18570 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v3
18571 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, s4, v11
18572 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v3
18573 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
18574 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
18575 ; GFX8-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
18576 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
18577 ; GFX8-NEXT:    v_min_f32_e32 v11, v17, v11
18578 ; GFX8-NEXT:    v_bfe_u32 v17, v11, 16, 1
18579 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v11
18580 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18581 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18582 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18583 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v10
18584 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v11
18585 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
18586 ; GFX8-NEXT:    v_bfe_u32 v10, v2, 16, 1
18587 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
18588 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v2
18589 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s4, v10
18590 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v2
18591 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
18592 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
18593 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
18594 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
18595 ; GFX8-NEXT:    v_min_f32_e32 v10, v17, v10
18596 ; GFX8-NEXT:    v_bfe_u32 v17, v10, 16, 1
18597 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v10
18598 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18599 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18600 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18601 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v9
18602 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v10
18603 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
18604 ; GFX8-NEXT:    v_bfe_u32 v9, v1, 16, 1
18605 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
18606 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v1
18607 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
18608 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v1
18609 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
18610 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
18611 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
18612 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
18613 ; GFX8-NEXT:    v_min_f32_e32 v9, v17, v9
18614 ; GFX8-NEXT:    v_bfe_u32 v17, v9, 16, 1
18615 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v9
18616 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18617 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18618 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
18619 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v8
18620 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v9
18621 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
18622 ; GFX8-NEXT:    v_bfe_u32 v8, v0, 16, 1
18623 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
18624 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v0
18625 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s4, v8
18626 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v0
18627 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
18628 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
18629 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
18630 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
18631 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
18632 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
18633 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
18634 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
18635 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
18636 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
18637 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v9, 16
18638 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v10, 16
18639 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v11, 16
18640 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v12, 16
18641 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v13, 16
18642 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v14, 16
18643 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v15, 16
18644 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v16, 16
18645 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
18647 ; GFX9-LABEL: v_minnum_v16bf16:
18648 ; GFX9:       ; %bb.0:
18649 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18650 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
18651 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
18652 ; GFX9-NEXT:    v_min_f32_e32 v16, v17, v16
18653 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18654 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18655 ; GFX9-NEXT:    v_bfe_u32 v17, v16, 16, 1
18656 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
18657 ; GFX9-NEXT:    v_min_f32_e32 v7, v7, v15
18658 ; GFX9-NEXT:    v_add3_u32 v17, v17, v16, s4
18659 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v16
18660 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
18661 ; GFX9-NEXT:    v_bfe_u32 v15, v7, 16, 1
18662 ; GFX9-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
18663 ; GFX9-NEXT:    v_add3_u32 v15, v15, v7, s4
18664 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v7
18665 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
18666 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
18667 ; GFX9-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
18668 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
18669 ; GFX9-NEXT:    v_min_f32_e32 v15, v17, v15
18670 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18671 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18672 ; GFX9-NEXT:    v_bfe_u32 v17, v15, 16, 1
18673 ; GFX9-NEXT:    v_min_f32_e32 v6, v6, v14
18674 ; GFX9-NEXT:    v_add3_u32 v17, v17, v15, s4
18675 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v15
18676 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
18677 ; GFX9-NEXT:    v_bfe_u32 v14, v6, 16, 1
18678 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
18679 ; GFX9-NEXT:    v_add3_u32 v14, v14, v6, s4
18680 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v6
18681 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
18682 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
18683 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
18684 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
18685 ; GFX9-NEXT:    v_min_f32_e32 v14, v17, v14
18686 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18687 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18688 ; GFX9-NEXT:    v_bfe_u32 v17, v14, 16, 1
18689 ; GFX9-NEXT:    v_min_f32_e32 v5, v5, v13
18690 ; GFX9-NEXT:    v_add3_u32 v17, v17, v14, s4
18691 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v14
18692 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
18693 ; GFX9-NEXT:    v_bfe_u32 v13, v5, 16, 1
18694 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
18695 ; GFX9-NEXT:    v_add3_u32 v13, v13, v5, s4
18696 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v5
18697 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
18698 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
18699 ; GFX9-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
18700 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
18701 ; GFX9-NEXT:    v_min_f32_e32 v13, v17, v13
18702 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18703 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18704 ; GFX9-NEXT:    v_bfe_u32 v17, v13, 16, 1
18705 ; GFX9-NEXT:    v_min_f32_e32 v4, v4, v12
18706 ; GFX9-NEXT:    v_add3_u32 v17, v17, v13, s4
18707 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v13
18708 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
18709 ; GFX9-NEXT:    v_bfe_u32 v12, v4, 16, 1
18710 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
18711 ; GFX9-NEXT:    v_add3_u32 v12, v12, v4, s4
18712 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v4
18713 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
18714 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
18715 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
18716 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
18717 ; GFX9-NEXT:    v_min_f32_e32 v12, v17, v12
18718 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18719 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18720 ; GFX9-NEXT:    v_bfe_u32 v17, v12, 16, 1
18721 ; GFX9-NEXT:    v_min_f32_e32 v3, v3, v11
18722 ; GFX9-NEXT:    v_add3_u32 v17, v17, v12, s4
18723 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v12
18724 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
18725 ; GFX9-NEXT:    v_bfe_u32 v11, v3, 16, 1
18726 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
18727 ; GFX9-NEXT:    v_add3_u32 v11, v11, v3, s4
18728 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v3
18729 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
18730 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
18731 ; GFX9-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
18732 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
18733 ; GFX9-NEXT:    v_min_f32_e32 v11, v17, v11
18734 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18735 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18736 ; GFX9-NEXT:    v_bfe_u32 v17, v11, 16, 1
18737 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v10
18738 ; GFX9-NEXT:    v_add3_u32 v17, v17, v11, s4
18739 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v11
18740 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
18741 ; GFX9-NEXT:    v_bfe_u32 v10, v2, 16, 1
18742 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
18743 ; GFX9-NEXT:    v_add3_u32 v10, v10, v2, s4
18744 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v2
18745 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
18746 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
18747 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
18748 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
18749 ; GFX9-NEXT:    v_min_f32_e32 v10, v17, v10
18750 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18751 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18752 ; GFX9-NEXT:    v_bfe_u32 v17, v10, 16, 1
18753 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v9
18754 ; GFX9-NEXT:    v_add3_u32 v17, v17, v10, s4
18755 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v10
18756 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
18757 ; GFX9-NEXT:    v_bfe_u32 v9, v1, 16, 1
18758 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
18759 ; GFX9-NEXT:    v_add3_u32 v9, v9, v1, s4
18760 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v1
18761 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
18762 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
18763 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
18764 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
18765 ; GFX9-NEXT:    v_min_f32_e32 v9, v17, v9
18766 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18767 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18768 ; GFX9-NEXT:    v_bfe_u32 v17, v9, 16, 1
18769 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v8
18770 ; GFX9-NEXT:    v_add3_u32 v17, v17, v9, s4
18771 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v9
18772 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
18773 ; GFX9-NEXT:    v_bfe_u32 v8, v0, 16, 1
18774 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
18775 ; GFX9-NEXT:    v_add3_u32 v8, v8, v0, s4
18776 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v0
18777 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
18778 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
18779 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
18780 ; GFX9-NEXT:    v_perm_b32 v0, v0, v9, s4
18781 ; GFX9-NEXT:    v_perm_b32 v1, v1, v10, s4
18782 ; GFX9-NEXT:    v_perm_b32 v2, v2, v11, s4
18783 ; GFX9-NEXT:    v_perm_b32 v3, v3, v12, s4
18784 ; GFX9-NEXT:    v_perm_b32 v4, v4, v13, s4
18785 ; GFX9-NEXT:    v_perm_b32 v5, v5, v14, s4
18786 ; GFX9-NEXT:    v_perm_b32 v6, v6, v15, s4
18787 ; GFX9-NEXT:    v_perm_b32 v7, v7, v16, s4
18788 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
18790 ; GFX10-LABEL: v_minnum_v16bf16:
18791 ; GFX10:       ; %bb.0:
18792 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18793 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
18794 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
18795 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
18796 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18797 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
18798 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18799 ; GFX10-NEXT:    v_min_f32_e32 v16, v17, v16
18800 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
18801 ; GFX10-NEXT:    v_min_f32_e32 v7, v7, v15
18802 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18803 ; GFX10-NEXT:    v_bfe_u32 v15, v16, 16, 1
18804 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v16
18805 ; GFX10-NEXT:    v_bfe_u32 v19, v7, 16, 1
18806 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
18807 ; GFX10-NEXT:    v_min_f32_e32 v17, v18, v17
18808 ; GFX10-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
18809 ; GFX10-NEXT:    v_min_f32_e32 v6, v6, v14
18810 ; GFX10-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
18811 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v7
18812 ; GFX10-NEXT:    v_bfe_u32 v21, v17, 16, 1
18813 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v15, v20, vcc_lo
18814 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
18815 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v5
18816 ; GFX10-NEXT:    v_or_b32_e32 v16, 0x400000, v17
18817 ; GFX10-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
18818 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18819 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
18820 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
18821 ; GFX10-NEXT:    v_bfe_u32 v18, v6, 16, 1
18822 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18823 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
18824 ; GFX10-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
18825 ; GFX10-NEXT:    v_min_f32_e32 v17, v20, v19
18826 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
18827 ; GFX10-NEXT:    v_min_f32_e32 v5, v5, v13
18828 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v14, v16, vcc_lo
18829 ; GFX10-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
18830 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v6
18831 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
18832 ; GFX10-NEXT:    v_bfe_u32 v20, v17, 16, 1
18833 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
18834 ; GFX10-NEXT:    v_bfe_u32 v21, v5, 16, 1
18835 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18836 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18837 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v16, v13, vcc_lo
18838 ; GFX10-NEXT:    v_min_f32_e32 v13, v19, v18
18839 ; GFX10-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
18840 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v17
18841 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
18842 ; GFX10-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
18843 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v5
18844 ; GFX10-NEXT:    v_bfe_u32 v21, v13, 16, 1
18845 ; GFX10-NEXT:    v_min_f32_e32 v4, v4, v12
18846 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
18847 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
18848 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
18849 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
18850 ; GFX10-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
18851 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
18852 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
18853 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v13
18854 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
18855 ; GFX10-NEXT:    v_min_f32_e32 v12, v18, v12
18856 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
18857 ; GFX10-NEXT:    v_bfe_u32 v20, v4, 16, 1
18858 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
18859 ; GFX10-NEXT:    v_min_f32_e32 v3, v3, v11
18860 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v12
18861 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
18862 ; GFX10-NEXT:    v_bfe_u32 v17, v12, 16, 1
18863 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
18864 ; GFX10-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
18865 ; GFX10-NEXT:    v_bfe_u32 v20, v3, 16, 1
18866 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
18867 ; GFX10-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
18868 ; GFX10-NEXT:    v_min_f32_e32 v18, v19, v18
18869 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
18870 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
18871 ; GFX10-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
18872 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v3
18873 ; GFX10-NEXT:    v_bfe_u32 v23, v18, 16, 1
18874 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v10
18875 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
18876 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
18877 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v18
18878 ; GFX10-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
18879 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
18880 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
18881 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
18882 ; GFX10-NEXT:    v_bfe_u32 v19, v2, 16, 1
18883 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
18884 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
18885 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
18886 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v2
18887 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v4
18888 ; GFX10-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
18889 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
18890 ; GFX10-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
18891 ; GFX10-NEXT:    v_min_f32_e32 v19, v22, v20
18892 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
18893 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
18894 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
18895 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
18896 ; GFX10-NEXT:    v_bfe_u32 v23, v19, 16, 1
18897 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v9
18898 ; GFX10-NEXT:    v_min_f32_e32 v9, v22, v20
18899 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v19
18900 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v8
18901 ; GFX10-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
18902 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
18903 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
18904 ; GFX10-NEXT:    v_bfe_u32 v23, v9, 16, 1
18905 ; GFX10-NEXT:    v_or_b32_e32 v24, 0x400000, v9
18906 ; GFX10-NEXT:    v_or_b32_e32 v25, 0x400000, v0
18907 ; GFX10-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
18908 ; GFX10-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
18909 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v1
18910 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
18911 ; GFX10-NEXT:    v_bfe_u32 v20, v0, 16, 1
18912 ; GFX10-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
18913 ; GFX10-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
18914 ; GFX10-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
18915 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
18916 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
18917 ; GFX10-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
18918 ; GFX10-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
18919 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
18920 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
18921 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
18922 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
18923 ; GFX10-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
18924 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
18925 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
18926 ; GFX10-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
18927 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
18928 ; GFX10-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
18929 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
18931 ; GFX11-LABEL: v_minnum_v16bf16:
18932 ; GFX11:       ; %bb.0:
18933 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
18934 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
18935 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
18936 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
18937 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
18938 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
18939 ; GFX11-NEXT:    v_dual_min_f32 v16, v17, v16 :: v_dual_and_b32 v15, 0xffff0000, v15
18940 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
18941 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
18942 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v16
18943 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
18944 ; GFX11-NEXT:    v_min_f32_e32 v17, v18, v17
18945 ; GFX11-NEXT:    v_min_f32_e32 v6, v6, v14
18946 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
18947 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
18948 ; GFX11-NEXT:    v_bfe_u32 v21, v17, 16, 1
18949 ; GFX11-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
18950 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
18951 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
18952 ; GFX11-NEXT:    v_min_f32_e32 v7, v7, v15
18953 ; GFX11-NEXT:    v_bfe_u32 v15, v16, 16, 1
18954 ; GFX11-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
18955 ; GFX11-NEXT:    v_or_b32_e32 v16, 0x400000, v17
18956 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
18957 ; GFX11-NEXT:    v_dual_cndmask_b32 v15, v15, v20 :: v_dual_lshlrev_b32 v20, 16, v5
18958 ; GFX11-NEXT:    v_bfe_u32 v19, v7, 16, 1
18959 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
18960 ; GFX11-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
18961 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v7
18962 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
18963 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
18964 ; GFX11-NEXT:    v_bfe_u32 v18, v6, 16, 1
18965 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
18966 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
18967 ; GFX11-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
18968 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
18969 ; GFX11-NEXT:    v_dual_min_f32 v17, v20, v19 :: v_dual_cndmask_b32 v14, v14, v16
18970 ; GFX11-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
18971 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
18972 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
18973 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
18974 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
18975 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
18976 ; GFX11-NEXT:    v_bfe_u32 v20, v17, 16, 1
18977 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
18978 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
18979 ; GFX11-NEXT:    v_min_f32_e32 v4, v4, v12
18980 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
18981 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
18982 ; GFX11-NEXT:    v_min_f32_e32 v5, v5, v13
18983 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v6
18984 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
18985 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v16, v13 :: v_dual_min_f32 v13, v19, v18
18986 ; GFX11-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
18987 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v17
18988 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
18989 ; GFX11-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
18990 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_4)
18991 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
18992 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
18993 ; GFX11-NEXT:    v_bfe_u32 v21, v5, 16, 1
18994 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v5
18995 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
18996 ; GFX11-NEXT:    v_min_f32_e32 v12, v18, v12
18997 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
18998 ; GFX11-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
18999 ; GFX11-NEXT:    v_bfe_u32 v21, v13, 16, 1
19000 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
19001 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v12
19002 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
19003 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
19004 ; GFX11-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
19005 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v13
19006 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
19007 ; GFX11-NEXT:    v_bfe_u32 v20, v4, 16, 1
19008 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v4
19009 ; GFX11-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
19010 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
19011 ; GFX11-NEXT:    v_bfe_u32 v17, v12, 16, 1
19012 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
19013 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
19014 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19015 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19016 ; GFX11-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
19017 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
19018 ; GFX11-NEXT:    v_min_f32_e32 v18, v19, v18
19019 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
19020 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
19021 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19022 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19023 ; GFX11-NEXT:    v_bfe_u32 v23, v18, 16, 1
19024 ; GFX11-NEXT:    v_or_b32_e32 v17, 0x400000, v18
19025 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
19026 ; GFX11-NEXT:    v_dual_min_f32 v2, v2, v10 :: v_dual_and_b32 v1, 0xffff0000, v1
19027 ; GFX11-NEXT:    v_min_f32_e32 v3, v3, v11
19028 ; GFX11-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
19029 ; GFX11-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
19030 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
19031 ; GFX11-NEXT:    v_bfe_u32 v20, v3, 16, 1
19032 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
19033 ; GFX11-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
19034 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v3
19035 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
19036 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
19037 ; GFX11-NEXT:    v_bfe_u32 v19, v2, 16, 1
19038 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
19039 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
19040 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v2
19041 ; GFX11-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
19042 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
19043 ; GFX11-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
19044 ; GFX11-NEXT:    v_min_f32_e32 v19, v22, v20
19045 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
19046 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
19047 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19048 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
19049 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
19050 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19051 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19052 ; GFX11-NEXT:    v_bfe_u32 v23, v19, 16, 1
19053 ; GFX11-NEXT:    v_dual_min_f32 v0, v0, v8 :: v_dual_min_f32 v1, v1, v9
19054 ; GFX11-NEXT:    v_min_f32_e32 v9, v22, v20
19055 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
19056 ; GFX11-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
19057 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v19
19058 ; GFX11-NEXT:    v_or_b32_e32 v25, 0x400000, v0
19059 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
19060 ; GFX11-NEXT:    v_bfe_u32 v23, v9, 16, 1
19061 ; GFX11-NEXT:    v_or_b32_e32 v24, 0x400000, v9
19062 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
19063 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v1
19064 ; GFX11-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
19065 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
19066 ; GFX11-NEXT:    v_bfe_u32 v20, v0, 16, 1
19067 ; GFX11-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
19068 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
19069 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
19070 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
19071 ; GFX11-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
19072 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
19073 ; GFX11-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
19074 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
19075 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
19076 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
19077 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
19078 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
19079 ; GFX11-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
19080 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
19081 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
19082 ; GFX11-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
19083 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
19084 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
19085 ; GFX11-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
19086 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
19087   %op = call <16 x bfloat> @llvm.minnum.v16bf16(<16 x bfloat> %a, <16 x bfloat> %b)
19088   ret <16 x bfloat> %op
19091 define <32 x bfloat> @v_minnum_v32bf16(<32 x bfloat> %a, <32 x bfloat> %b) {
19092 ; GCN-LABEL: v_minnum_v32bf16:
19093 ; GCN:       ; %bb.0:
19094 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19095 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32
19096 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
19097 ; GCN-NEXT:    s_waitcnt vmcnt(1)
19098 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v31
19099 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19100 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19101 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19102 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
19103 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:124
19104 ; GCN-NEXT:    v_min_f32_e32 v31, v31, v32
19105 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
19106 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19107 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19108 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19109 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19110 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:120
19111 ; GCN-NEXT:    v_min_f32_e32 v30, v30, v32
19112 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
19113 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19114 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19115 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19116 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19117 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:116
19118 ; GCN-NEXT:    v_min_f32_e32 v29, v29, v32
19119 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
19120 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19121 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19122 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19123 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19124 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:112
19125 ; GCN-NEXT:    v_min_f32_e32 v28, v28, v32
19126 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
19127 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
19128 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19129 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19130 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19131 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:108
19132 ; GCN-NEXT:    v_min_f32_e32 v27, v27, v32
19133 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
19134 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
19135 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19136 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19137 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19138 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:104
19139 ; GCN-NEXT:    v_min_f32_e32 v26, v26, v32
19140 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
19141 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
19142 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19143 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19144 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19145 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:100
19146 ; GCN-NEXT:    v_min_f32_e32 v25, v25, v32
19147 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
19148 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
19149 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19150 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19151 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19152 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:96
19153 ; GCN-NEXT:    v_min_f32_e32 v24, v24, v32
19154 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
19155 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
19156 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19157 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19158 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19159 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:92
19160 ; GCN-NEXT:    v_min_f32_e32 v23, v23, v32
19161 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
19162 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
19163 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19164 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19165 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19166 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:88
19167 ; GCN-NEXT:    v_min_f32_e32 v22, v22, v32
19168 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
19169 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
19170 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19171 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19172 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19173 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:84
19174 ; GCN-NEXT:    v_min_f32_e32 v21, v21, v32
19175 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
19176 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
19177 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19178 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19179 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19180 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:80
19181 ; GCN-NEXT:    v_min_f32_e32 v20, v20, v32
19182 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
19183 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
19184 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19185 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19186 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19187 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:76
19188 ; GCN-NEXT:    v_min_f32_e32 v19, v19, v32
19189 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
19190 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
19191 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19192 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19193 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19194 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:72
19195 ; GCN-NEXT:    v_min_f32_e32 v18, v18, v32
19196 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
19197 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
19198 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19199 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19200 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19201 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:68
19202 ; GCN-NEXT:    v_min_f32_e32 v17, v17, v32
19203 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
19204 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
19205 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19206 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19207 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19208 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:64
19209 ; GCN-NEXT:    v_min_f32_e32 v16, v16, v32
19210 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
19211 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19212 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19213 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19214 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19215 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:60
19216 ; GCN-NEXT:    v_min_f32_e32 v15, v15, v32
19217 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
19218 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19219 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19220 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19221 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19222 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:56
19223 ; GCN-NEXT:    v_min_f32_e32 v14, v14, v32
19224 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
19225 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19226 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19227 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19228 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19229 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:52
19230 ; GCN-NEXT:    v_min_f32_e32 v13, v13, v32
19231 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
19232 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19233 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19234 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19235 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19236 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:48
19237 ; GCN-NEXT:    v_min_f32_e32 v12, v12, v32
19238 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
19239 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19240 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19241 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19242 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19243 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:44
19244 ; GCN-NEXT:    v_min_f32_e32 v11, v11, v32
19245 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
19246 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19247 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19248 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19249 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19250 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:40
19251 ; GCN-NEXT:    v_min_f32_e32 v10, v10, v32
19252 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
19253 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19254 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19255 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19256 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19257 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:36
19258 ; GCN-NEXT:    v_min_f32_e32 v9, v9, v32
19259 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
19260 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19261 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19262 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19263 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19264 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:32
19265 ; GCN-NEXT:    v_min_f32_e32 v8, v8, v32
19266 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
19267 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
19268 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19269 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19270 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19271 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:28
19272 ; GCN-NEXT:    v_min_f32_e32 v7, v7, v32
19273 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
19274 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
19275 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19276 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19277 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19278 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:24
19279 ; GCN-NEXT:    v_min_f32_e32 v6, v6, v32
19280 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
19281 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
19282 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19283 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19284 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19285 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:20
19286 ; GCN-NEXT:    v_min_f32_e32 v5, v5, v32
19287 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
19288 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
19289 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19290 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19291 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19292 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:16
19293 ; GCN-NEXT:    v_min_f32_e32 v4, v4, v32
19294 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
19295 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19296 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19297 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19298 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19299 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:12
19300 ; GCN-NEXT:    v_min_f32_e32 v3, v3, v32
19301 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
19302 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19303 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19304 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19305 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19306 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
19307 ; GCN-NEXT:    v_min_f32_e32 v2, v2, v32
19308 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
19309 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
19310 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19311 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19312 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19313 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:4
19314 ; GCN-NEXT:    v_min_f32_e32 v1, v1, v32
19315 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
19316 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19317 ; GCN-NEXT:    s_waitcnt vmcnt(0)
19318 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
19319 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19320 ; GCN-NEXT:    v_min_f32_e32 v0, v0, v32
19321 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19322 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
19323 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19324 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19325 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
19326 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
19327 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
19328 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
19329 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19330 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19331 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19332 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19333 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19334 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19335 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19336 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19337 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
19338 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
19339 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
19340 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
19341 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
19342 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
19343 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
19344 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
19345 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
19346 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
19347 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
19348 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
19349 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19350 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19351 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19352 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
19353 ; GCN-NEXT:    s_setpc_b64 s[30:31]
19355 ; GFX7-LABEL: v_minnum_v32bf16:
19356 ; GFX7:       ; %bb.0:
19357 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19358 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32
19359 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
19360 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
19361 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19362 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
19363 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19364 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
19365 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19366 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
19367 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
19368 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
19369 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
19370 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
19371 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
19372 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
19373 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
19374 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
19375 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
19376 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
19377 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
19378 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
19379 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
19380 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
19381 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
19382 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
19383 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
19384 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
19385 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
19386 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
19387 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
19388 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
19389 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
19390 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
19391 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19392 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
19393 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19394 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
19395 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19396 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
19397 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19398 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
19399 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19400 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
19401 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19402 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
19403 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19404 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
19405 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19406 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
19407 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
19408 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
19409 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
19410 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
19411 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
19412 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
19413 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
19414 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
19415 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19416 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
19417 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19418 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
19419 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
19420 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
19421 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19422 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
19423 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
19424 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19425 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19426 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19427 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
19428 ; GFX7-NEXT:    v_min_f32_e32 v31, v31, v32
19429 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
19430 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
19431 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19432 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19433 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19434 ; GFX7-NEXT:    v_min_f32_e32 v30, v30, v32
19435 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:120
19436 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19437 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19438 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19439 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19440 ; GFX7-NEXT:    v_min_f32_e32 v29, v29, v32
19441 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:116
19442 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19443 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19444 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19445 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19446 ; GFX7-NEXT:    v_min_f32_e32 v28, v28, v32
19447 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:112
19448 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19449 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19450 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19451 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19452 ; GFX7-NEXT:    v_min_f32_e32 v27, v27, v32
19453 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:108
19454 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
19455 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19456 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19457 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19458 ; GFX7-NEXT:    v_min_f32_e32 v26, v26, v32
19459 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:104
19460 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
19461 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19462 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19463 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19464 ; GFX7-NEXT:    v_min_f32_e32 v25, v25, v32
19465 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:100
19466 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
19467 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19468 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19469 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19470 ; GFX7-NEXT:    v_min_f32_e32 v24, v24, v32
19471 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:96
19472 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
19473 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19474 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19475 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19476 ; GFX7-NEXT:    v_min_f32_e32 v23, v23, v32
19477 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:92
19478 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
19479 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19480 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19481 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19482 ; GFX7-NEXT:    v_min_f32_e32 v22, v22, v32
19483 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:88
19484 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
19485 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19486 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19487 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19488 ; GFX7-NEXT:    v_min_f32_e32 v21, v21, v32
19489 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:84
19490 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
19491 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19492 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19493 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19494 ; GFX7-NEXT:    v_min_f32_e32 v20, v20, v32
19495 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:80
19496 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
19497 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19498 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19499 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19500 ; GFX7-NEXT:    v_min_f32_e32 v19, v19, v32
19501 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:76
19502 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
19503 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19504 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19505 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19506 ; GFX7-NEXT:    v_min_f32_e32 v18, v18, v32
19507 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:72
19508 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
19509 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19510 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19511 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19512 ; GFX7-NEXT:    v_min_f32_e32 v17, v17, v32
19513 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:68
19514 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
19515 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19516 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19517 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19518 ; GFX7-NEXT:    v_min_f32_e32 v16, v16, v32
19519 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
19520 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
19521 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19522 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19523 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19524 ; GFX7-NEXT:    v_min_f32_e32 v15, v15, v32
19525 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:60
19526 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19527 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19528 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19529 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19530 ; GFX7-NEXT:    v_min_f32_e32 v14, v14, v32
19531 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:56
19532 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19533 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19534 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19535 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19536 ; GFX7-NEXT:    v_min_f32_e32 v13, v13, v32
19537 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:52
19538 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19539 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19540 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19541 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19542 ; GFX7-NEXT:    v_min_f32_e32 v12, v12, v32
19543 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:48
19544 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19545 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19546 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19547 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19548 ; GFX7-NEXT:    v_min_f32_e32 v11, v11, v32
19549 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:44
19550 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19551 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19552 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19553 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19554 ; GFX7-NEXT:    v_min_f32_e32 v10, v10, v32
19555 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:40
19556 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19557 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19558 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19559 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19560 ; GFX7-NEXT:    v_min_f32_e32 v9, v9, v32
19561 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:36
19562 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19563 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19564 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19565 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19566 ; GFX7-NEXT:    v_min_f32_e32 v8, v8, v32
19567 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:32
19568 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19569 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19570 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19571 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19572 ; GFX7-NEXT:    v_min_f32_e32 v7, v7, v32
19573 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:28
19574 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
19575 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19576 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19577 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19578 ; GFX7-NEXT:    v_min_f32_e32 v6, v6, v32
19579 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:24
19580 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
19581 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19582 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19583 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19584 ; GFX7-NEXT:    v_min_f32_e32 v5, v5, v32
19585 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:20
19586 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
19587 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19588 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19589 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19590 ; GFX7-NEXT:    v_min_f32_e32 v4, v4, v32
19591 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:16
19592 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
19593 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19594 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19595 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19596 ; GFX7-NEXT:    v_min_f32_e32 v3, v3, v32
19597 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:12
19598 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19599 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19600 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19601 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19602 ; GFX7-NEXT:    v_min_f32_e32 v2, v2, v32
19603 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8
19604 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19605 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19606 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19607 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19608 ; GFX7-NEXT:    v_min_f32_e32 v1, v1, v32
19609 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
19610 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
19611 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
19612 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
19613 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
19614 ; GFX7-NEXT:    v_min_f32_e32 v0, v0, v32
19615 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19616 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
19618 ; GFX8-LABEL: v_minnum_v32bf16:
19619 ; GFX8:       ; %bb.0:
19620 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19621 ; GFX8-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
19622 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
19623 ; GFX8-NEXT:    v_min_f32_e32 v31, v32, v31
19624 ; GFX8-NEXT:    v_bfe_u32 v32, v31, 16, 1
19625 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
19626 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, v32, v31
19627 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19628 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19629 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, s4, v32
19630 ; GFX8-NEXT:    v_min_f32_e32 v14, v14, v30
19631 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v31
19632 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
19633 ; GFX8-NEXT:    v_bfe_u32 v30, v14, 16, 1
19634 ; GFX8-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
19635 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, v30, v14
19636 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, s4, v30
19637 ; GFX8-NEXT:    v_or_b32_e32 v32, 0x400000, v14
19638 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
19639 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
19640 ; GFX8-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
19641 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
19642 ; GFX8-NEXT:    v_min_f32_e32 v32, v32, v30
19643 ; GFX8-NEXT:    buffer_load_dword v30, off, s[0:3], s32
19644 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
19645 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19646 ; GFX8-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19647 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19648 ; GFX8-NEXT:    v_min_f32_e32 v13, v13, v29
19649 ; GFX8-NEXT:    v_bfe_u32 v29, v13, 16, 1
19650 ; GFX8-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
19651 ; GFX8-NEXT:    v_alignbit_b32 v14, v14, v31, 16
19652 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
19653 ; GFX8-NEXT:    v_lshlrev_b32_e32 v34, 16, v30
19654 ; GFX8-NEXT:    v_min_f32_e32 v33, v33, v34
19655 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19656 ; GFX8-NEXT:    v_min_f32_e32 v30, v15, v30
19657 ; GFX8-NEXT:    v_bfe_u32 v15, v33, 16, 1
19658 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v33
19659 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
19660 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v33
19661 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
19662 ; GFX8-NEXT:    v_bfe_u32 v33, v30, 16, 1
19663 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
19664 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v30
19665 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19666 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v30
19667 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
19668 ; GFX8-NEXT:    v_cndmask_b32_e32 v30, v33, v34, vcc
19669 ; GFX8-NEXT:    v_bfe_u32 v33, v32, 16, 1
19670 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v32
19671 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19672 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v32
19673 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
19674 ; GFX8-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
19675 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, v29, v13
19676 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, s4, v29
19677 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v13
19678 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
19679 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v29, v33, vcc
19680 ; GFX8-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
19681 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v12
19682 ; GFX8-NEXT:    v_min_f32_e32 v29, v33, v29
19683 ; GFX8-NEXT:    v_bfe_u32 v33, v29, 16, 1
19684 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v29
19685 ; GFX8-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19686 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19687 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19688 ; GFX8-NEXT:    v_min_f32_e32 v12, v12, v28
19689 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v29
19690 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
19691 ; GFX8-NEXT:    v_bfe_u32 v28, v12, 16, 1
19692 ; GFX8-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
19693 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, v28, v12
19694 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v28
19695 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v12
19696 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
19697 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
19698 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
19699 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
19700 ; GFX8-NEXT:    v_min_f32_e32 v28, v33, v28
19701 ; GFX8-NEXT:    v_bfe_u32 v33, v28, 16, 1
19702 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v28
19703 ; GFX8-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
19704 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
19705 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19706 ; GFX8-NEXT:    v_min_f32_e32 v11, v11, v27
19707 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v28
19708 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
19709 ; GFX8-NEXT:    v_bfe_u32 v27, v11, 16, 1
19710 ; GFX8-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
19711 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, v27, v11
19712 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, s4, v27
19713 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v11
19714 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
19715 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
19716 ; GFX8-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
19717 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
19718 ; GFX8-NEXT:    v_min_f32_e32 v27, v33, v27
19719 ; GFX8-NEXT:    v_bfe_u32 v33, v27, 16, 1
19720 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v27
19721 ; GFX8-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
19722 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
19723 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19724 ; GFX8-NEXT:    v_min_f32_e32 v10, v10, v26
19725 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v27
19726 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
19727 ; GFX8-NEXT:    v_bfe_u32 v26, v10, 16, 1
19728 ; GFX8-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
19729 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, v26, v10
19730 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, s4, v26
19731 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v10
19732 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
19733 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
19734 ; GFX8-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
19735 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
19736 ; GFX8-NEXT:    v_min_f32_e32 v26, v33, v26
19737 ; GFX8-NEXT:    v_bfe_u32 v33, v26, 16, 1
19738 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v26
19739 ; GFX8-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
19740 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
19741 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19742 ; GFX8-NEXT:    v_min_f32_e32 v9, v9, v25
19743 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v26
19744 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
19745 ; GFX8-NEXT:    v_bfe_u32 v25, v9, 16, 1
19746 ; GFX8-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
19747 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, v25, v9
19748 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, s4, v25
19749 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v9
19750 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
19751 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
19752 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
19753 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
19754 ; GFX8-NEXT:    v_min_f32_e32 v25, v33, v25
19755 ; GFX8-NEXT:    v_bfe_u32 v33, v25, 16, 1
19756 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v25
19757 ; GFX8-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
19758 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
19759 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19760 ; GFX8-NEXT:    v_min_f32_e32 v8, v8, v24
19761 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v25
19762 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
19763 ; GFX8-NEXT:    v_bfe_u32 v24, v8, 16, 1
19764 ; GFX8-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
19765 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, v24, v8
19766 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, s4, v24
19767 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v8
19768 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
19769 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
19770 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
19771 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
19772 ; GFX8-NEXT:    v_min_f32_e32 v24, v33, v24
19773 ; GFX8-NEXT:    v_bfe_u32 v33, v24, 16, 1
19774 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v24
19775 ; GFX8-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
19776 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
19777 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19778 ; GFX8-NEXT:    v_min_f32_e32 v7, v7, v23
19779 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v24
19780 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
19781 ; GFX8-NEXT:    v_bfe_u32 v23, v7, 16, 1
19782 ; GFX8-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
19783 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v7
19784 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, s4, v23
19785 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v7
19786 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
19787 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
19788 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
19789 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
19790 ; GFX8-NEXT:    v_min_f32_e32 v23, v33, v23
19791 ; GFX8-NEXT:    v_bfe_u32 v33, v23, 16, 1
19792 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v23
19793 ; GFX8-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
19794 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
19795 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19796 ; GFX8-NEXT:    v_min_f32_e32 v6, v6, v22
19797 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v23
19798 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
19799 ; GFX8-NEXT:    v_bfe_u32 v22, v6, 16, 1
19800 ; GFX8-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
19801 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v6
19802 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, s4, v22
19803 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v6
19804 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
19805 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
19806 ; GFX8-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
19807 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
19808 ; GFX8-NEXT:    v_min_f32_e32 v22, v33, v22
19809 ; GFX8-NEXT:    v_bfe_u32 v33, v22, 16, 1
19810 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v22
19811 ; GFX8-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
19812 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
19813 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19814 ; GFX8-NEXT:    v_min_f32_e32 v5, v5, v21
19815 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v22
19816 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
19817 ; GFX8-NEXT:    v_bfe_u32 v21, v5, 16, 1
19818 ; GFX8-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
19819 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v5
19820 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, s4, v21
19821 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v5
19822 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
19823 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
19824 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
19825 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
19826 ; GFX8-NEXT:    v_min_f32_e32 v21, v33, v21
19827 ; GFX8-NEXT:    v_bfe_u32 v33, v21, 16, 1
19828 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v21
19829 ; GFX8-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
19830 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
19831 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19832 ; GFX8-NEXT:    v_min_f32_e32 v4, v4, v20
19833 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v21
19834 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
19835 ; GFX8-NEXT:    v_bfe_u32 v20, v4, 16, 1
19836 ; GFX8-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
19837 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v4
19838 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, s4, v20
19839 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v4
19840 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
19841 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
19842 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
19843 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
19844 ; GFX8-NEXT:    v_min_f32_e32 v20, v33, v20
19845 ; GFX8-NEXT:    v_bfe_u32 v33, v20, 16, 1
19846 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v20
19847 ; GFX8-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
19848 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
19849 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19850 ; GFX8-NEXT:    v_min_f32_e32 v3, v3, v19
19851 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v20
19852 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
19853 ; GFX8-NEXT:    v_bfe_u32 v19, v3, 16, 1
19854 ; GFX8-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
19855 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v3
19856 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, s4, v19
19857 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v3
19858 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
19859 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
19860 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
19861 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
19862 ; GFX8-NEXT:    v_min_f32_e32 v19, v33, v19
19863 ; GFX8-NEXT:    v_bfe_u32 v33, v19, 16, 1
19864 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v19
19865 ; GFX8-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
19866 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
19867 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19868 ; GFX8-NEXT:    v_min_f32_e32 v2, v2, v18
19869 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v19
19870 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
19871 ; GFX8-NEXT:    v_bfe_u32 v18, v2, 16, 1
19872 ; GFX8-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
19873 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v2
19874 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, s4, v18
19875 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v2
19876 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
19877 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
19878 ; GFX8-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
19879 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
19880 ; GFX8-NEXT:    v_min_f32_e32 v18, v33, v18
19881 ; GFX8-NEXT:    v_bfe_u32 v33, v18, 16, 1
19882 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v18
19883 ; GFX8-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
19884 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
19885 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19886 ; GFX8-NEXT:    v_min_f32_e32 v1, v1, v17
19887 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v18
19888 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
19889 ; GFX8-NEXT:    v_bfe_u32 v17, v1, 16, 1
19890 ; GFX8-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
19891 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v1
19892 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
19893 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v1
19894 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
19895 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
19896 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
19897 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
19898 ; GFX8-NEXT:    v_min_f32_e32 v17, v33, v17
19899 ; GFX8-NEXT:    v_bfe_u32 v33, v17, 16, 1
19900 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v17
19901 ; GFX8-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
19902 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
19903 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
19904 ; GFX8-NEXT:    v_min_f32_e32 v0, v0, v16
19905 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v17
19906 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
19907 ; GFX8-NEXT:    v_bfe_u32 v16, v0, 16, 1
19908 ; GFX8-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
19909 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v0
19910 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, s4, v16
19911 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v0
19912 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
19913 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
19914 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
19915 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
19916 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
19917 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
19918 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
19919 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
19920 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
19921 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
19922 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
19923 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
19924 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
19925 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v30
19926 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
19927 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
19928 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
19929 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v17, 16
19930 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v18, 16
19931 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v19, 16
19932 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v20, 16
19933 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v21, 16
19934 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v22, 16
19935 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v23, 16
19936 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v24, 16
19937 ; GFX8-NEXT:    v_alignbit_b32 v8, v8, v25, 16
19938 ; GFX8-NEXT:    v_alignbit_b32 v9, v9, v26, 16
19939 ; GFX8-NEXT:    v_alignbit_b32 v10, v10, v27, 16
19940 ; GFX8-NEXT:    v_alignbit_b32 v11, v11, v28, 16
19941 ; GFX8-NEXT:    v_alignbit_b32 v12, v12, v29, 16
19942 ; GFX8-NEXT:    v_alignbit_b32 v13, v13, v32, 16
19943 ; GFX8-NEXT:    v_alignbit_b32 v15, v16, v15, 16
19944 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
19946 ; GFX9-LABEL: v_minnum_v32bf16:
19947 ; GFX9:       ; %bb.0:
19948 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
19949 ; GFX9-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
19950 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
19951 ; GFX9-NEXT:    v_min_f32_e32 v31, v32, v31
19952 ; GFX9-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
19953 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
19954 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
19955 ; GFX9-NEXT:    v_bfe_u32 v32, v31, 16, 1
19956 ; GFX9-NEXT:    v_min_f32_e32 v14, v14, v30
19957 ; GFX9-NEXT:    v_add3_u32 v32, v32, v31, s4
19958 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v31
19959 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
19960 ; GFX9-NEXT:    v_bfe_u32 v30, v14, 16, 1
19961 ; GFX9-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
19962 ; GFX9-NEXT:    v_add3_u32 v30, v30, v14, s4
19963 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v14
19964 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
19965 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
19966 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
19967 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
19968 ; GFX9-NEXT:    v_min_f32_e32 v30, v32, v30
19969 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19970 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
19971 ; GFX9-NEXT:    v_bfe_u32 v32, v30, 16, 1
19972 ; GFX9-NEXT:    v_min_f32_e32 v13, v13, v29
19973 ; GFX9-NEXT:    v_add3_u32 v32, v32, v30, s4
19974 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v30
19975 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
19976 ; GFX9-NEXT:    v_bfe_u32 v29, v13, 16, 1
19977 ; GFX9-NEXT:    v_cndmask_b32_e32 v30, v32, v33, vcc
19978 ; GFX9-NEXT:    v_add3_u32 v29, v29, v13, s4
19979 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v13
19980 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
19981 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v29, v32, vcc
19982 ; GFX9-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
19983 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v12
19984 ; GFX9-NEXT:    v_min_f32_e32 v32, v32, v29
19985 ; GFX9-NEXT:    buffer_load_dword v29, off, s[0:3], s32
19986 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
19987 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
19988 ; GFX9-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
19989 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
19990 ; GFX9-NEXT:    v_min_f32_e32 v12, v12, v28
19991 ; GFX9-NEXT:    v_bfe_u32 v28, v12, 16, 1
19992 ; GFX9-NEXT:    v_add3_u32 v28, v28, v12, s4
19993 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
19994 ; GFX9-NEXT:    v_lshlrev_b32_e32 v34, 16, v29
19995 ; GFX9-NEXT:    v_min_f32_e32 v33, v33, v34
19996 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
19997 ; GFX9-NEXT:    v_min_f32_e32 v29, v15, v29
19998 ; GFX9-NEXT:    v_bfe_u32 v15, v33, 16, 1
19999 ; GFX9-NEXT:    v_add3_u32 v15, v15, v33, s4
20000 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v33
20001 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
20002 ; GFX9-NEXT:    v_bfe_u32 v33, v29, 16, 1
20003 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
20004 ; GFX9-NEXT:    v_add3_u32 v33, v33, v29, s4
20005 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v29
20006 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
20007 ; GFX9-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
20008 ; GFX9-NEXT:    v_bfe_u32 v33, v32, 16, 1
20009 ; GFX9-NEXT:    v_add3_u32 v33, v33, v32, s4
20010 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v32
20011 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
20012 ; GFX9-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
20013 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v12
20014 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
20015 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
20016 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
20017 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
20018 ; GFX9-NEXT:    v_min_f32_e32 v28, v33, v28
20019 ; GFX9-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
20020 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
20021 ; GFX9-NEXT:    v_bfe_u32 v33, v28, 16, 1
20022 ; GFX9-NEXT:    v_min_f32_e32 v11, v11, v27
20023 ; GFX9-NEXT:    v_add3_u32 v33, v33, v28, s4
20024 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v28
20025 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
20026 ; GFX9-NEXT:    v_bfe_u32 v27, v11, 16, 1
20027 ; GFX9-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
20028 ; GFX9-NEXT:    v_add3_u32 v27, v27, v11, s4
20029 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v11
20030 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
20031 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
20032 ; GFX9-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
20033 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
20034 ; GFX9-NEXT:    v_min_f32_e32 v27, v33, v27
20035 ; GFX9-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
20036 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
20037 ; GFX9-NEXT:    v_bfe_u32 v33, v27, 16, 1
20038 ; GFX9-NEXT:    v_min_f32_e32 v10, v10, v26
20039 ; GFX9-NEXT:    v_add3_u32 v33, v33, v27, s4
20040 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v27
20041 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
20042 ; GFX9-NEXT:    v_bfe_u32 v26, v10, 16, 1
20043 ; GFX9-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
20044 ; GFX9-NEXT:    v_add3_u32 v26, v26, v10, s4
20045 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v10
20046 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
20047 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
20048 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
20049 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
20050 ; GFX9-NEXT:    v_min_f32_e32 v26, v33, v26
20051 ; GFX9-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
20052 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
20053 ; GFX9-NEXT:    v_bfe_u32 v33, v26, 16, 1
20054 ; GFX9-NEXT:    v_min_f32_e32 v9, v9, v25
20055 ; GFX9-NEXT:    v_add3_u32 v33, v33, v26, s4
20056 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v26
20057 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
20058 ; GFX9-NEXT:    v_bfe_u32 v25, v9, 16, 1
20059 ; GFX9-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
20060 ; GFX9-NEXT:    v_add3_u32 v25, v25, v9, s4
20061 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v9
20062 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
20063 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
20064 ; GFX9-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
20065 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
20066 ; GFX9-NEXT:    v_min_f32_e32 v25, v33, v25
20067 ; GFX9-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
20068 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
20069 ; GFX9-NEXT:    v_bfe_u32 v33, v25, 16, 1
20070 ; GFX9-NEXT:    v_min_f32_e32 v8, v8, v24
20071 ; GFX9-NEXT:    v_add3_u32 v33, v33, v25, s4
20072 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v25
20073 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
20074 ; GFX9-NEXT:    v_bfe_u32 v24, v8, 16, 1
20075 ; GFX9-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
20076 ; GFX9-NEXT:    v_add3_u32 v24, v24, v8, s4
20077 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v8
20078 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
20079 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
20080 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
20081 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
20082 ; GFX9-NEXT:    v_min_f32_e32 v24, v33, v24
20083 ; GFX9-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
20084 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
20085 ; GFX9-NEXT:    v_bfe_u32 v33, v24, 16, 1
20086 ; GFX9-NEXT:    v_min_f32_e32 v7, v7, v23
20087 ; GFX9-NEXT:    v_add3_u32 v33, v33, v24, s4
20088 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v24
20089 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
20090 ; GFX9-NEXT:    v_bfe_u32 v23, v7, 16, 1
20091 ; GFX9-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
20092 ; GFX9-NEXT:    v_add3_u32 v23, v23, v7, s4
20093 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v7
20094 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
20095 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
20096 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
20097 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
20098 ; GFX9-NEXT:    v_min_f32_e32 v23, v33, v23
20099 ; GFX9-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
20100 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
20101 ; GFX9-NEXT:    v_bfe_u32 v33, v23, 16, 1
20102 ; GFX9-NEXT:    v_min_f32_e32 v6, v6, v22
20103 ; GFX9-NEXT:    v_add3_u32 v33, v33, v23, s4
20104 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v23
20105 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
20106 ; GFX9-NEXT:    v_bfe_u32 v22, v6, 16, 1
20107 ; GFX9-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
20108 ; GFX9-NEXT:    v_add3_u32 v22, v22, v6, s4
20109 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v6
20110 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
20111 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
20112 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
20113 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
20114 ; GFX9-NEXT:    v_min_f32_e32 v22, v33, v22
20115 ; GFX9-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
20116 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
20117 ; GFX9-NEXT:    v_bfe_u32 v33, v22, 16, 1
20118 ; GFX9-NEXT:    v_min_f32_e32 v5, v5, v21
20119 ; GFX9-NEXT:    v_add3_u32 v33, v33, v22, s4
20120 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v22
20121 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
20122 ; GFX9-NEXT:    v_bfe_u32 v21, v5, 16, 1
20123 ; GFX9-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
20124 ; GFX9-NEXT:    v_add3_u32 v21, v21, v5, s4
20125 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v5
20126 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
20127 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
20128 ; GFX9-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
20129 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
20130 ; GFX9-NEXT:    v_min_f32_e32 v21, v33, v21
20131 ; GFX9-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
20132 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
20133 ; GFX9-NEXT:    v_bfe_u32 v33, v21, 16, 1
20134 ; GFX9-NEXT:    v_min_f32_e32 v4, v4, v20
20135 ; GFX9-NEXT:    v_add3_u32 v33, v33, v21, s4
20136 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v21
20137 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
20138 ; GFX9-NEXT:    v_bfe_u32 v20, v4, 16, 1
20139 ; GFX9-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
20140 ; GFX9-NEXT:    v_add3_u32 v20, v20, v4, s4
20141 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v4
20142 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
20143 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
20144 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
20145 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
20146 ; GFX9-NEXT:    v_min_f32_e32 v20, v33, v20
20147 ; GFX9-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
20148 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
20149 ; GFX9-NEXT:    v_bfe_u32 v33, v20, 16, 1
20150 ; GFX9-NEXT:    v_min_f32_e32 v3, v3, v19
20151 ; GFX9-NEXT:    v_add3_u32 v33, v33, v20, s4
20152 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v20
20153 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
20154 ; GFX9-NEXT:    v_bfe_u32 v19, v3, 16, 1
20155 ; GFX9-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
20156 ; GFX9-NEXT:    v_add3_u32 v19, v19, v3, s4
20157 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v3
20158 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
20159 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
20160 ; GFX9-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
20161 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
20162 ; GFX9-NEXT:    v_min_f32_e32 v19, v33, v19
20163 ; GFX9-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
20164 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
20165 ; GFX9-NEXT:    v_bfe_u32 v33, v19, 16, 1
20166 ; GFX9-NEXT:    v_min_f32_e32 v2, v2, v18
20167 ; GFX9-NEXT:    v_add3_u32 v33, v33, v19, s4
20168 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v19
20169 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
20170 ; GFX9-NEXT:    v_bfe_u32 v18, v2, 16, 1
20171 ; GFX9-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
20172 ; GFX9-NEXT:    v_add3_u32 v18, v18, v2, s4
20173 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v2
20174 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
20175 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
20176 ; GFX9-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
20177 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
20178 ; GFX9-NEXT:    v_min_f32_e32 v18, v33, v18
20179 ; GFX9-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
20180 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20181 ; GFX9-NEXT:    v_bfe_u32 v33, v18, 16, 1
20182 ; GFX9-NEXT:    v_min_f32_e32 v1, v1, v17
20183 ; GFX9-NEXT:    v_add3_u32 v33, v33, v18, s4
20184 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v18
20185 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
20186 ; GFX9-NEXT:    v_bfe_u32 v17, v1, 16, 1
20187 ; GFX9-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
20188 ; GFX9-NEXT:    v_add3_u32 v17, v17, v1, s4
20189 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v1
20190 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
20191 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
20192 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
20193 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
20194 ; GFX9-NEXT:    v_min_f32_e32 v17, v33, v17
20195 ; GFX9-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
20196 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20197 ; GFX9-NEXT:    v_bfe_u32 v33, v17, 16, 1
20198 ; GFX9-NEXT:    v_min_f32_e32 v0, v0, v16
20199 ; GFX9-NEXT:    v_add3_u32 v33, v33, v17, s4
20200 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v17
20201 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
20202 ; GFX9-NEXT:    v_bfe_u32 v16, v0, 16, 1
20203 ; GFX9-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
20204 ; GFX9-NEXT:    v_add3_u32 v16, v16, v0, s4
20205 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v0
20206 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
20207 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
20208 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
20209 ; GFX9-NEXT:    v_perm_b32 v0, v0, v17, s4
20210 ; GFX9-NEXT:    v_perm_b32 v1, v1, v18, s4
20211 ; GFX9-NEXT:    v_perm_b32 v2, v2, v19, s4
20212 ; GFX9-NEXT:    v_perm_b32 v3, v3, v20, s4
20213 ; GFX9-NEXT:    v_perm_b32 v4, v4, v21, s4
20214 ; GFX9-NEXT:    v_perm_b32 v5, v5, v22, s4
20215 ; GFX9-NEXT:    v_perm_b32 v6, v6, v23, s4
20216 ; GFX9-NEXT:    v_perm_b32 v7, v7, v24, s4
20217 ; GFX9-NEXT:    v_perm_b32 v8, v8, v25, s4
20218 ; GFX9-NEXT:    v_perm_b32 v9, v9, v26, s4
20219 ; GFX9-NEXT:    v_perm_b32 v10, v10, v27, s4
20220 ; GFX9-NEXT:    v_perm_b32 v11, v11, v28, s4
20221 ; GFX9-NEXT:    v_perm_b32 v12, v12, v32, s4
20222 ; GFX9-NEXT:    v_perm_b32 v13, v13, v30, s4
20223 ; GFX9-NEXT:    v_perm_b32 v14, v14, v31, s4
20224 ; GFX9-NEXT:    v_perm_b32 v15, v29, v15, s4
20225 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
20227 ; GFX10-LABEL: v_minnum_v32bf16:
20228 ; GFX10:       ; %bb.0:
20229 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20230 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32
20231 ; GFX10-NEXT:    v_lshlrev_b32_e32 v39, 16, v27
20232 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
20233 ; GFX10-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
20234 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
20235 ; GFX10-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
20236 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
20237 ; GFX10-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
20238 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
20239 ; GFX10-NEXT:    v_lshlrev_b32_e32 v37, 16, v28
20240 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v12
20241 ; GFX10-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
20242 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
20243 ; GFX10-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
20244 ; GFX10-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
20245 ; GFX10-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
20246 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
20247 ; GFX10-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
20248 ; GFX10-NEXT:    v_lshlrev_b32_e32 v54, 16, v8
20249 ; GFX10-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
20250 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
20251 ; GFX10-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
20252 ; GFX10-NEXT:    v_lshlrev_b32_e32 v64, 16, v7
20253 ; GFX10-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
20254 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
20255 ; GFX10-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
20256 ; GFX10-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
20257 ; GFX10-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
20258 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
20259 ; GFX10-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
20260 ; GFX10-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
20261 ; GFX10-NEXT:    v_min_f32_e32 v39, v48, v39
20262 ; GFX10-NEXT:    v_min_f32_e32 v11, v11, v27
20263 ; GFX10-NEXT:    v_min_f32_e32 v49, v50, v49
20264 ; GFX10-NEXT:    v_min_f32_e32 v10, v10, v26
20265 ; GFX10-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
20266 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
20267 ; GFX10-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
20268 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
20269 ; GFX10-NEXT:    v_min_f32_e32 v37, v38, v37
20270 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v18
20271 ; GFX10-NEXT:    v_min_f32_e32 v12, v12, v28
20272 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v2
20273 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
20274 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
20275 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v17
20276 ; GFX10-NEXT:    v_lshlrev_b32_e32 v27, 16, v1
20277 ; GFX10-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
20278 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20279 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v16
20280 ; GFX10-NEXT:    v_lshlrev_b32_e32 v26, 16, v0
20281 ; GFX10-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
20282 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20283 ; GFX10-NEXT:    v_min_f32_e32 v9, v9, v25
20284 ; GFX10-NEXT:    v_min_f32_e32 v25, v54, v53
20285 ; GFX10-NEXT:    v_min_f32_e32 v8, v8, v24
20286 ; GFX10-NEXT:    v_min_f32_e32 v24, v64, v55
20287 ; GFX10-NEXT:    v_min_f32_e32 v7, v7, v23
20288 ; GFX10-NEXT:    v_min_f32_e32 v23, v66, v65
20289 ; GFX10-NEXT:    v_min_f32_e32 v6, v6, v22
20290 ; GFX10-NEXT:    v_min_f32_e32 v22, v68, v67
20291 ; GFX10-NEXT:    v_bfe_u32 v53, v39, 16, 1
20292 ; GFX10-NEXT:    v_bfe_u32 v55, v11, 16, 1
20293 ; GFX10-NEXT:    v_bfe_u32 v65, v49, 16, 1
20294 ; GFX10-NEXT:    v_bfe_u32 v67, v10, 16, 1
20295 ; GFX10-NEXT:    v_lshlrev_b32_e32 v33, 16, v30
20296 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v14
20297 ; GFX10-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
20298 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
20299 ; GFX10-NEXT:    v_min_f32_e32 v35, v36, v35
20300 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v19
20301 ; GFX10-NEXT:    v_min_f32_e32 v13, v13, v29
20302 ; GFX10-NEXT:    v_lshlrev_b32_e32 v29, 16, v3
20303 ; GFX10-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
20304 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
20305 ; GFX10-NEXT:    v_min_f32_e32 v2, v2, v18
20306 ; GFX10-NEXT:    v_min_f32_e32 v18, v27, v48
20307 ; GFX10-NEXT:    v_min_f32_e32 v1, v1, v17
20308 ; GFX10-NEXT:    v_min_f32_e32 v17, v26, v50
20309 ; GFX10-NEXT:    v_min_f32_e32 v0, v0, v16
20310 ; GFX10-NEXT:    v_or_b32_e32 v54, 0x400000, v39
20311 ; GFX10-NEXT:    v_or_b32_e32 v64, 0x400000, v11
20312 ; GFX10-NEXT:    v_or_b32_e32 v66, 0x400000, v49
20313 ; GFX10-NEXT:    v_or_b32_e32 v68, 0x400000, v10
20314 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v39, v39
20315 ; GFX10-NEXT:    v_add3_u32 v39, v53, v39, 0x7fff
20316 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v11, v11
20317 ; GFX10-NEXT:    v_add3_u32 v11, v55, v11, 0x7fff
20318 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v49, v49
20319 ; GFX10-NEXT:    v_add3_u32 v49, v65, v49, 0x7fff
20320 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v10, v10
20321 ; GFX10-NEXT:    v_add3_u32 v10, v67, v10, 0x7fff
20322 ; GFX10-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
20323 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
20324 ; GFX10-NEXT:    v_min_f32_e32 v33, v34, v33
20325 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v20
20326 ; GFX10-NEXT:    v_min_f32_e32 v14, v14, v30
20327 ; GFX10-NEXT:    v_lshlrev_b32_e32 v30, 16, v4
20328 ; GFX10-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
20329 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
20330 ; GFX10-NEXT:    v_min_f32_e32 v3, v3, v19
20331 ; GFX10-NEXT:    v_min_f32_e32 v19, v28, v38
20332 ; GFX10-NEXT:    v_bfe_u32 v38, v37, 16, 1
20333 ; GFX10-NEXT:    v_bfe_u32 v50, v12, 16, 1
20334 ; GFX10-NEXT:    v_cndmask_b32_e64 v39, v39, v54, s9
20335 ; GFX10-NEXT:    v_bfe_u32 v54, v18, 16, 1
20336 ; GFX10-NEXT:    v_cndmask_b32_e64 v11, v11, v64, s10
20337 ; GFX10-NEXT:    v_bfe_u32 v64, v1, 16, 1
20338 ; GFX10-NEXT:    v_cndmask_b32_e64 v49, v49, v66, s11
20339 ; GFX10-NEXT:    v_bfe_u32 v66, v17, 16, 1
20340 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v10, v68, s12
20341 ; GFX10-NEXT:    v_bfe_u32 v68, v0, 16, 1
20342 ; GFX10-NEXT:    v_min_f32_e32 v51, v52, v51
20343 ; GFX10-NEXT:    v_min_f32_e32 v5, v5, v21
20344 ; GFX10-NEXT:    v_min_f32_e32 v21, v30, v34
20345 ; GFX10-NEXT:    v_min_f32_e32 v4, v4, v20
20346 ; GFX10-NEXT:    v_min_f32_e32 v20, v29, v36
20347 ; GFX10-NEXT:    v_bfe_u32 v16, v33, 16, 1
20348 ; GFX10-NEXT:    v_bfe_u32 v27, v14, 16, 1
20349 ; GFX10-NEXT:    v_bfe_u32 v29, v35, 16, 1
20350 ; GFX10-NEXT:    v_bfe_u32 v34, v13, 16, 1
20351 ; GFX10-NEXT:    v_or_b32_e32 v48, 0x400000, v37
20352 ; GFX10-NEXT:    v_or_b32_e32 v52, 0x400000, v12
20353 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v37, v37
20354 ; GFX10-NEXT:    v_add3_u32 v37, v38, v37, 0x7fff
20355 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v12, v12
20356 ; GFX10-NEXT:    v_add3_u32 v12, v50, v12, 0x7fff
20357 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v18, v18
20358 ; GFX10-NEXT:    v_add3_u32 v54, v54, v18, 0x7fff
20359 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v18
20360 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v1, v1
20361 ; GFX10-NEXT:    v_add3_u32 v64, v64, v1, 0x7fff
20362 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v1
20363 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v17, v17
20364 ; GFX10-NEXT:    v_add3_u32 v66, v66, v17, 0x7fff
20365 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v17
20366 ; GFX10-NEXT:    v_cmp_u_f32_e64 s22, v0, v0
20367 ; GFX10-NEXT:    v_add3_u32 v68, v68, v0, 0x7fff
20368 ; GFX10-NEXT:    v_or_b32_e32 v0, 0x400000, v0
20369 ; GFX10-NEXT:    v_or_b32_e32 v26, 0x400000, v33
20370 ; GFX10-NEXT:    v_or_b32_e32 v28, 0x400000, v14
20371 ; GFX10-NEXT:    v_or_b32_e32 v30, 0x400000, v35
20372 ; GFX10-NEXT:    v_or_b32_e32 v36, 0x400000, v13
20373 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
20374 ; GFX10-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
20375 ; GFX10-NEXT:    v_bfe_u32 v33, v51, 16, 1
20376 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v14, v14
20377 ; GFX10-NEXT:    v_add3_u32 v14, v27, v14, 0x7fff
20378 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v35, v35
20379 ; GFX10-NEXT:    v_add3_u32 v29, v29, v35, 0x7fff
20380 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v13, v13
20381 ; GFX10-NEXT:    v_add3_u32 v13, v34, v13, 0x7fff
20382 ; GFX10-NEXT:    v_bfe_u32 v65, v24, 16, 1
20383 ; GFX10-NEXT:    v_cndmask_b32_e64 v37, v37, v48, s7
20384 ; GFX10-NEXT:    v_bfe_u32 v48, v19, 16, 1
20385 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, v12, v52, s8
20386 ; GFX10-NEXT:    v_bfe_u32 v52, v2, 16, 1
20387 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, v54, v18, s10
20388 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, v66, v17, s12
20389 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v68, v0, s22
20390 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v64, v1, s11
20391 ; GFX10-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
20392 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
20393 ; GFX10-NEXT:    v_or_b32_e32 v27, 0x400000, v51
20394 ; GFX10-NEXT:    v_bfe_u32 v35, v9, 16, 1
20395 ; GFX10-NEXT:    v_bfe_u32 v38, v25, 16, 1
20396 ; GFX10-NEXT:    v_or_b32_e32 v67, 0x400000, v24
20397 ; GFX10-NEXT:    v_cmp_u_f32_e64 s13, v51, v51
20398 ; GFX10-NEXT:    v_add3_u32 v33, v33, v51, 0x7fff
20399 ; GFX10-NEXT:    v_bfe_u32 v51, v7, 16, 1
20400 ; GFX10-NEXT:    v_cmp_u_f32_e64 s17, v24, v24
20401 ; GFX10-NEXT:    v_add3_u32 v24, v65, v24, 0x7fff
20402 ; GFX10-NEXT:    v_bfe_u32 v65, v6, 16, 1
20403 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v26, vcc_lo
20404 ; GFX10-NEXT:    v_bfe_u32 v26, v21, 16, 1
20405 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, v14, v28, s4
20406 ; GFX10-NEXT:    v_bfe_u32 v28, v4, 16, 1
20407 ; GFX10-NEXT:    v_cndmask_b32_e64 v29, v29, v30, s5
20408 ; GFX10-NEXT:    v_bfe_u32 v30, v20, 16, 1
20409 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, v13, v36, s6
20410 ; GFX10-NEXT:    v_bfe_u32 v36, v3, 16, 1
20411 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v19, v19
20412 ; GFX10-NEXT:    v_add3_u32 v48, v48, v19, 0x7fff
20413 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v19
20414 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v2, v2
20415 ; GFX10-NEXT:    v_add3_u32 v52, v52, v2, 0x7fff
20416 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v2
20417 ; GFX10-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
20418 ; GFX10-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
20419 ; GFX10-NEXT:    v_or_b32_e32 v34, 0x400000, v9
20420 ; GFX10-NEXT:    v_or_b32_e32 v50, 0x400000, v25
20421 ; GFX10-NEXT:    v_bfe_u32 v53, v8, 16, 1
20422 ; GFX10-NEXT:    v_cmp_u_f32_e64 s14, v9, v9
20423 ; GFX10-NEXT:    v_add3_u32 v9, v35, v9, 0x7fff
20424 ; GFX10-NEXT:    v_or_b32_e32 v35, 0x400000, v7
20425 ; GFX10-NEXT:    v_cmp_u_f32_e64 s15, v25, v25
20426 ; GFX10-NEXT:    v_add3_u32 v25, v38, v25, 0x7fff
20427 ; GFX10-NEXT:    v_bfe_u32 v38, v23, 16, 1
20428 ; GFX10-NEXT:    v_cmp_u_f32_e64 s18, v7, v7
20429 ; GFX10-NEXT:    v_add3_u32 v7, v51, v7, 0x7fff
20430 ; GFX10-NEXT:    v_or_b32_e32 v51, 0x400000, v6
20431 ; GFX10-NEXT:    v_cmp_u_f32_e64 s20, v6, v6
20432 ; GFX10-NEXT:    v_add3_u32 v6, v65, v6, 0x7fff
20433 ; GFX10-NEXT:    v_bfe_u32 v65, v5, 16, 1
20434 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v21, v21
20435 ; GFX10-NEXT:    v_add3_u32 v26, v26, v21, 0x7fff
20436 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v21
20437 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v4, v4
20438 ; GFX10-NEXT:    v_add3_u32 v28, v28, v4, 0x7fff
20439 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v4
20440 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v20, v20
20441 ; GFX10-NEXT:    v_add3_u32 v30, v30, v20, 0x7fff
20442 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v20
20443 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v3, v3
20444 ; GFX10-NEXT:    v_add3_u32 v36, v36, v3, 0x7fff
20445 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v3
20446 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, v48, v19, s8
20447 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v52, v2, s9
20448 ; GFX10-NEXT:    v_or_b32_e32 v55, 0x400000, v8
20449 ; GFX10-NEXT:    v_cmp_u_f32_e64 s16, v8, v8
20450 ; GFX10-NEXT:    v_add3_u32 v8, v53, v8, 0x7fff
20451 ; GFX10-NEXT:    v_or_b32_e32 v53, 0x400000, v23
20452 ; GFX10-NEXT:    v_cmp_u_f32_e64 s19, v23, v23
20453 ; GFX10-NEXT:    v_add3_u32 v23, v38, v23, 0x7fff
20454 ; GFX10-NEXT:    v_bfe_u32 v38, v22, 16, 1
20455 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
20456 ; GFX10-NEXT:    v_add3_u32 v65, v65, v5, 0x7fff
20457 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v5
20458 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, v26, v21, s4
20459 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v28, v4, s5
20460 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, v30, v20, s6
20461 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v36, v3, s7
20462 ; GFX10-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
20463 ; GFX10-NEXT:    v_cmp_u_f32_e64 s21, v22, v22
20464 ; GFX10-NEXT:    v_add3_u32 v38, v38, v22, 0x7fff
20465 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v22
20466 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v65, v5, vcc_lo
20467 ; GFX10-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
20468 ; GFX10-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
20469 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, v33, v27, s13
20470 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, v9, v34, s14
20471 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, v25, v50, s15
20472 ; GFX10-NEXT:    v_cndmask_b32_e64 v8, v8, v55, s16
20473 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, v24, v67, s17
20474 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v35, s18
20475 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, v23, v53, s19
20476 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v51, s20
20477 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, v38, v22, s21
20478 ; GFX10-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
20479 ; GFX10-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
20480 ; GFX10-NEXT:    v_perm_b32 v9, v9, v27, 0x7060302
20481 ; GFX10-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
20482 ; GFX10-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
20483 ; GFX10-NEXT:    v_perm_b32 v10, v10, v49, 0x7060302
20484 ; GFX10-NEXT:    v_perm_b32 v11, v11, v39, 0x7060302
20485 ; GFX10-NEXT:    v_perm_b32 v12, v12, v37, 0x7060302
20486 ; GFX10-NEXT:    v_perm_b32 v13, v13, v29, 0x7060302
20487 ; GFX10-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
20488 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
20489 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
20490 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v32
20491 ; GFX10-NEXT:    v_min_f32_e32 v17, v31, v17
20492 ; GFX10-NEXT:    v_min_f32_e32 v15, v15, v18
20493 ; GFX10-NEXT:    v_bfe_u32 v18, v17, 16, 1
20494 ; GFX10-NEXT:    v_bfe_u32 v19, v15, 16, 1
20495 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v17
20496 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v15
20497 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
20498 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v15, v15
20499 ; GFX10-NEXT:    v_add3_u32 v17, v18, v17, 0x7fff
20500 ; GFX10-NEXT:    v_add3_u32 v15, v19, v15, 0x7fff
20501 ; GFX10-NEXT:    v_cndmask_b32_e32 v17, v17, v20, vcc_lo
20502 ; GFX10-NEXT:    v_cndmask_b32_e64 v15, v15, v21, s4
20503 ; GFX10-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
20504 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
20506 ; GFX11-LABEL: v_minnum_v32bf16:
20507 ; GFX11:       ; %bb.0:
20508 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20509 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32
20510 ; GFX11-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
20511 ; GFX11-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
20512 ; GFX11-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
20513 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
20514 ; GFX11-NEXT:    v_lshlrev_b32_e32 v83, 16, v17
20515 ; GFX11-NEXT:    v_lshlrev_b32_e32 v84, 16, v1
20516 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
20517 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20518 ; GFX11-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
20519 ; GFX11-NEXT:    v_dual_min_f32 v5, v5, v21 :: v_dual_and_b32 v26, 0xffff0000, v26
20520 ; GFX11-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
20521 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
20522 ; GFX11-NEXT:    v_dual_min_f32 v1, v1, v17 :: v_dual_and_b32 v24, 0xffff0000, v24
20523 ; GFX11-NEXT:    v_lshlrev_b32_e32 v71, 16, v19
20524 ; GFX11-NEXT:    v_bfe_u32 v103, v5, 16, 1
20525 ; GFX11-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
20526 ; GFX11-NEXT:    v_lshlrev_b32_e32 v81, 16, v18
20527 ; GFX11-NEXT:    v_bfe_u32 v135, v1, 16, 1
20528 ; GFX11-NEXT:    v_or_b32_e32 v112, 0x400000, v5
20529 ; GFX11-NEXT:    v_or_b32_e32 v144, 0x400000, v1
20530 ; GFX11-NEXT:    v_add3_u32 v103, v103, v5, 0x7fff
20531 ; GFX11-NEXT:    v_lshlrev_b32_e32 v80, 16, v3
20532 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
20533 ; GFX11-NEXT:    v_add3_u32 v135, v135, v1, 0x7fff
20534 ; GFX11-NEXT:    v_lshlrev_b32_e32 v82, 16, v2
20535 ; GFX11-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
20536 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
20537 ; GFX11-NEXT:    v_dual_min_f32 v3, v3, v19 :: v_dual_lshlrev_b32 v54, 16, v8
20538 ; GFX11-NEXT:    v_lshlrev_b32_e32 v85, 16, v16
20539 ; GFX11-NEXT:    v_dual_min_f32 v19, v82, v81 :: v_dual_lshlrev_b32 v64, 16, v7
20540 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
20541 ; GFX11-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
20542 ; GFX11-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
20543 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
20544 ; GFX11-NEXT:    v_bfe_u32 v129, v19, 16, 1
20545 ; GFX11-NEXT:    v_or_b32_e32 v130, 0x400000, v19
20546 ; GFX11-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
20547 ; GFX11-NEXT:    v_bfe_u32 v119, v3, 16, 1
20548 ; GFX11-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
20549 ; GFX11-NEXT:    v_add3_u32 v129, v129, v19, 0x7fff
20550 ; GFX11-NEXT:    v_lshlrev_b32_e32 v86, 16, v0
20551 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
20552 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20553 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
20554 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
20555 ; GFX11-NEXT:    v_dual_min_f32 v17, v86, v85 :: v_dual_and_b32 v2, 0xffff0000, v2
20556 ; GFX11-NEXT:    v_dual_min_f32 v8, v8, v24 :: v_dual_lshlrev_b32 v39, 16, v27
20557 ; GFX11-NEXT:    v_or_b32_e32 v128, 0x400000, v3
20558 ; GFX11-NEXT:    v_add3_u32 v119, v119, v3, 0x7fff
20559 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
20560 ; GFX11-NEXT:    v_bfe_u32 v145, v17, 16, 1
20561 ; GFX11-NEXT:    v_or_b32_e32 v146, 0x400000, v17
20562 ; GFX11-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
20563 ; GFX11-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
20564 ; GFX11-NEXT:    v_lshlrev_b32_e32 v70, 16, v4
20565 ; GFX11-NEXT:    v_add3_u32 v145, v145, v17, 0x7fff
20566 ; GFX11-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
20567 ; GFX11-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
20568 ; GFX11-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
20569 ; GFX11-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
20570 ; GFX11-NEXT:    v_min_f32_e32 v2, v2, v18
20571 ; GFX11-NEXT:    v_min_f32_e32 v0, v0, v16
20572 ; GFX11-NEXT:    v_dual_min_f32 v24, v64, v55 :: v_dual_lshlrev_b32 v37, 16, v28
20573 ; GFX11-NEXT:    v_min_f32_e32 v7, v7, v23
20574 ; GFX11-NEXT:    v_dual_min_f32 v23, v66, v65 :: v_dual_min_f32 v18, v84, v83
20575 ; GFX11-NEXT:    v_dual_min_f32 v9, v9, v25 :: v_dual_and_b32 v28, 0xffff0000, v28
20576 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
20577 ; GFX11-NEXT:    v_bfe_u32 v85, v24, 16, 1
20578 ; GFX11-NEXT:    v_bfe_u32 v97, v23, 16, 1
20579 ; GFX11-NEXT:    v_or_b32_e32 v86, 0x400000, v24
20580 ; GFX11-NEXT:    v_or_b32_e32 v98, 0x400000, v23
20581 ; GFX11-NEXT:    v_bfe_u32 v87, v7, 16, 1
20582 ; GFX11-NEXT:    v_add3_u32 v85, v85, v24, 0x7fff
20583 ; GFX11-NEXT:    v_lshlrev_b32_e32 v69, 16, v20
20584 ; GFX11-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
20585 ; GFX11-NEXT:    v_add3_u32 v97, v97, v23, 0x7fff
20586 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
20587 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
20588 ; GFX11-NEXT:    v_or_b32_e32 v96, 0x400000, v7
20589 ; GFX11-NEXT:    v_add3_u32 v87, v87, v7, 0x7fff
20590 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
20591 ; GFX11-NEXT:    v_min_f32_e32 v4, v4, v20
20592 ; GFX11-NEXT:    v_min_f32_e32 v20, v80, v71
20593 ; GFX11-NEXT:    v_bfe_u32 v71, v9, 16, 1
20594 ; GFX11-NEXT:    v_or_b32_e32 v80, 0x400000, v9
20595 ; GFX11-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
20596 ; GFX11-NEXT:    v_dual_min_f32 v21, v70, v69 :: v_dual_and_b32 v10, 0xffff0000, v10
20597 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
20598 ; GFX11-NEXT:    v_add3_u32 v71, v71, v9, 0x7fff
20599 ; GFX11-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
20600 ; GFX11-NEXT:    v_dual_min_f32 v10, v10, v26 :: v_dual_and_b32 v29, 0xffff0000, v29
20601 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
20602 ; GFX11-NEXT:    v_min_f32_e32 v26, v52, v51
20603 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
20604 ; GFX11-NEXT:    v_min_f32_e32 v6, v6, v22
20605 ; GFX11-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
20606 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
20607 ; GFX11-NEXT:    v_dual_min_f32 v11, v11, v27 :: v_dual_lshlrev_b32 v34, 16, v14
20608 ; GFX11-NEXT:    v_dual_min_f32 v22, v68, v67 :: v_dual_lshlrev_b32 v33, 16, v30
20609 ; GFX11-NEXT:    v_dual_min_f32 v27, v50, v49 :: v_dual_lshlrev_b32 v38, 16, v12
20610 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
20611 ; GFX11-NEXT:    v_dual_min_f32 v25, v54, v53 :: v_dual_and_b32 v12, 0xffff0000, v12
20612 ; GFX11-NEXT:    v_dual_min_f32 v13, v13, v29 :: v_dual_and_b32 v30, 0xffff0000, v30
20613 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
20614 ; GFX11-NEXT:    v_min_f32_e32 v29, v38, v37
20615 ; GFX11-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
20616 ; GFX11-NEXT:    v_dual_min_f32 v12, v12, v28 :: v_dual_and_b32 v15, 0xffff0000, v15
20617 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
20618 ; GFX11-NEXT:    v_min_f32_e32 v14, v14, v30
20619 ; GFX11-NEXT:    v_min_f32_e32 v28, v48, v39
20620 ; GFX11-NEXT:    v_dual_min_f32 v30, v36, v35 :: v_dual_min_f32 v33, v34, v33
20621 ; GFX11-NEXT:    v_bfe_u32 v39, v13, 16, 1
20622 ; GFX11-NEXT:    v_bfe_u32 v35, v14, 16, 1
20623 ; GFX11-NEXT:    v_or_b32_e32 v36, 0x400000, v14
20624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
20625 ; GFX11-NEXT:    v_bfe_u32 v37, v30, 16, 1
20626 ; GFX11-NEXT:    v_bfe_u32 v16, v33, 16, 1
20627 ; GFX11-NEXT:    v_or_b32_e32 v34, 0x400000, v33
20628 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
20629 ; GFX11-NEXT:    v_add3_u32 v35, v35, v14, 0x7fff
20630 ; GFX11-NEXT:    v_or_b32_e32 v38, 0x400000, v30
20631 ; GFX11-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
20632 ; GFX11-NEXT:    v_add3_u32 v37, v37, v30, 0x7fff
20633 ; GFX11-NEXT:    v_or_b32_e32 v48, 0x400000, v13
20634 ; GFX11-NEXT:    v_bfe_u32 v49, v29, 16, 1
20635 ; GFX11-NEXT:    v_add3_u32 v39, v39, v13, 0x7fff
20636 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v34, vcc_lo
20637 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v14, v14
20638 ; GFX11-NEXT:    v_or_b32_e32 v50, 0x400000, v29
20639 ; GFX11-NEXT:    v_bfe_u32 v51, v12, 16, 1
20640 ; GFX11-NEXT:    v_add3_u32 v49, v49, v29, 0x7fff
20641 ; GFX11-NEXT:    v_or_b32_e32 v52, 0x400000, v12
20642 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, v35, v36, vcc_lo
20643 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v30, v30
20644 ; GFX11-NEXT:    v_bfe_u32 v53, v28, 16, 1
20645 ; GFX11-NEXT:    v_add3_u32 v51, v51, v12, 0x7fff
20646 ; GFX11-NEXT:    v_or_b32_e32 v54, 0x400000, v28
20647 ; GFX11-NEXT:    v_bfe_u32 v55, v11, 16, 1
20648 ; GFX11-NEXT:    v_cndmask_b32_e32 v30, v37, v38, vcc_lo
20649 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
20650 ; GFX11-NEXT:    v_add3_u32 v53, v53, v28, 0x7fff
20651 ; GFX11-NEXT:    v_or_b32_e32 v64, 0x400000, v11
20652 ; GFX11-NEXT:    v_bfe_u32 v65, v27, 16, 1
20653 ; GFX11-NEXT:    v_add3_u32 v55, v55, v11, 0x7fff
20654 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v39, v48, vcc_lo
20655 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v29, v29
20656 ; GFX11-NEXT:    v_or_b32_e32 v66, 0x400000, v27
20657 ; GFX11-NEXT:    v_bfe_u32 v67, v10, 16, 1
20658 ; GFX11-NEXT:    v_add3_u32 v65, v65, v27, 0x7fff
20659 ; GFX11-NEXT:    v_or_b32_e32 v68, 0x400000, v10
20660 ; GFX11-NEXT:    v_cndmask_b32_e32 v29, v49, v50, vcc_lo
20661 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
20662 ; GFX11-NEXT:    v_bfe_u32 v69, v26, 16, 1
20663 ; GFX11-NEXT:    v_add3_u32 v67, v67, v10, 0x7fff
20664 ; GFX11-NEXT:    v_or_b32_e32 v70, 0x400000, v26
20665 ; GFX11-NEXT:    v_bfe_u32 v81, v25, 16, 1
20666 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v51, v52, vcc_lo
20667 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v28, v28
20668 ; GFX11-NEXT:    v_add3_u32 v69, v69, v26, 0x7fff
20669 ; GFX11-NEXT:    v_or_b32_e32 v82, 0x400000, v25
20670 ; GFX11-NEXT:    v_bfe_u32 v83, v8, 16, 1
20671 ; GFX11-NEXT:    v_add3_u32 v81, v81, v25, 0x7fff
20672 ; GFX11-NEXT:    v_cndmask_b32_e32 v28, v53, v54, vcc_lo
20673 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v11, v11
20674 ; GFX11-NEXT:    v_or_b32_e32 v84, 0x400000, v8
20675 ; GFX11-NEXT:    v_add3_u32 v83, v83, v8, 0x7fff
20676 ; GFX11-NEXT:    v_bfe_u32 v99, v6, 16, 1
20677 ; GFX11-NEXT:    v_or_b32_e32 v100, 0x400000, v6
20678 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v55, v64, vcc_lo
20679 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v27, v27
20680 ; GFX11-NEXT:    v_bfe_u32 v101, v22, 16, 1
20681 ; GFX11-NEXT:    v_add3_u32 v99, v99, v6, 0x7fff
20682 ; GFX11-NEXT:    v_or_b32_e32 v102, 0x400000, v22
20683 ; GFX11-NEXT:    v_bfe_u32 v113, v21, 16, 1
20684 ; GFX11-NEXT:    v_cndmask_b32_e32 v27, v65, v66, vcc_lo
20685 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v10, v10
20686 ; GFX11-NEXT:    v_add3_u32 v101, v101, v22, 0x7fff
20687 ; GFX11-NEXT:    v_or_b32_e32 v114, 0x400000, v21
20688 ; GFX11-NEXT:    v_bfe_u32 v115, v4, 16, 1
20689 ; GFX11-NEXT:    v_add3_u32 v113, v113, v21, 0x7fff
20690 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v67, v68, vcc_lo
20691 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v26, v26
20692 ; GFX11-NEXT:    v_or_b32_e32 v116, 0x400000, v4
20693 ; GFX11-NEXT:    v_bfe_u32 v117, v20, 16, 1
20694 ; GFX11-NEXT:    v_add3_u32 v115, v115, v4, 0x7fff
20695 ; GFX11-NEXT:    v_or_b32_e32 v118, 0x400000, v20
20696 ; GFX11-NEXT:    v_cndmask_b32_e32 v26, v69, v70, vcc_lo
20697 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
20698 ; GFX11-NEXT:    v_add3_u32 v117, v117, v20, 0x7fff
20699 ; GFX11-NEXT:    v_bfe_u32 v133, v18, 16, 1
20700 ; GFX11-NEXT:    v_or_b32_e32 v134, 0x400000, v18
20701 ; GFX11-NEXT:    v_bfe_u32 v147, v0, 16, 1
20702 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v71, v80, vcc_lo
20703 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v25, v25
20704 ; GFX11-NEXT:    v_add3_u32 v133, v133, v18, 0x7fff
20705 ; GFX11-NEXT:    v_or_b32_e32 v33, 0x400000, v0
20706 ; GFX11-NEXT:    v_add3_u32 v147, v147, v0, 0x7fff
20707 ; GFX11-NEXT:    v_bfe_u32 v131, v2, 16, 1
20708 ; GFX11-NEXT:    v_cndmask_b32_e32 v25, v81, v82, vcc_lo
20709 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
20710 ; GFX11-NEXT:    v_or_b32_e32 v132, 0x400000, v2
20711 ; GFX11-NEXT:    v_perm_b32 v9, v9, v26, 0x7060302
20712 ; GFX11-NEXT:    v_add3_u32 v131, v131, v2, 0x7fff
20713 ; GFX11-NEXT:    v_perm_b32 v10, v10, v27, 0x7060302
20714 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v83, v84, vcc_lo
20715 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v24, v24
20716 ; GFX11-NEXT:    v_perm_b32 v11, v11, v28, 0x7060302
20717 ; GFX11-NEXT:    v_perm_b32 v12, v12, v29, 0x7060302
20718 ; GFX11-NEXT:    v_perm_b32 v13, v13, v30, 0x7060302
20719 ; GFX11-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
20720 ; GFX11-NEXT:    v_cndmask_b32_e32 v24, v85, v86, vcc_lo
20721 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
20722 ; GFX11-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
20723 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v87, v96, vcc_lo
20724 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v23, v23
20725 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
20726 ; GFX11-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
20727 ; GFX11-NEXT:    v_cndmask_b32_e32 v23, v97, v98, vcc_lo
20728 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
20729 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v99, v100, vcc_lo
20730 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v22, v22
20731 ; GFX11-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
20732 ; GFX11-NEXT:    v_cndmask_b32_e32 v22, v101, v102, vcc_lo
20733 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
20734 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v103, v112, vcc_lo
20735 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v21, v21
20736 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
20737 ; GFX11-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
20738 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, v113, v114, vcc_lo
20739 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
20740 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v115, v116, vcc_lo
20741 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v20, v20
20742 ; GFX11-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
20743 ; GFX11-NEXT:    v_cndmask_b32_e32 v20, v117, v118, vcc_lo
20744 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
20745 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v129, v130, vcc_lo
20746 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
20747 ; GFX11-NEXT:    v_cndmask_b32_e32 v18, v133, v134, vcc_lo
20748 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
20749 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v135, v144, vcc_lo
20750 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
20751 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
20752 ; GFX11-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
20753 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v145, v146, vcc_lo
20754 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
20755 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v147, v33, vcc_lo
20756 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
20757 ; GFX11-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
20758 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v131, v132, vcc_lo
20759 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
20760 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
20761 ; GFX11-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
20762 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v119, v128, vcc_lo
20763 ; GFX11-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
20764 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
20765 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
20766 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
20767 ; GFX11-NEXT:    v_dual_min_f32 v17, v31, v17 :: v_dual_and_b32 v18, 0xffff0000, v32
20768 ; GFX11-NEXT:    v_min_f32_e32 v15, v15, v18
20769 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
20770 ; GFX11-NEXT:    v_bfe_u32 v18, v17, 16, 1
20771 ; GFX11-NEXT:    v_bfe_u32 v19, v15, 16, 1
20772 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v17
20773 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
20774 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v15
20775 ; GFX11-NEXT:    v_add3_u32 v18, v18, v17, 0x7fff
20776 ; GFX11-NEXT:    v_add3_u32 v19, v19, v15, 0x7fff
20777 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
20778 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v18, v20, vcc_lo
20779 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v15, v15
20780 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v19, v21, vcc_lo
20781 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
20782 ; GFX11-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
20783 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
20784   %op = call <32 x bfloat> @llvm.minnum.v32bf16(<32 x bfloat> %a, <32 x bfloat> %b)
20785   ret <32 x bfloat> %op
20789 declare bfloat @llvm.maxnum.bf16(bfloat, bfloat)
20790 declare <2 x bfloat> @llvm.maxnum.v2bf16(<2 x bfloat>, <2 x bfloat>)
20791 declare <3 x bfloat> @llvm.maxnum.v3bf16(<3 x bfloat>, <3 x bfloat>)
20792 declare <4 x bfloat> @llvm.maxnum.v4bf16(<4 x bfloat>, <4 x bfloat>)
20793 declare <8 x bfloat> @llvm.maxnum.v8bf16(<8 x bfloat>, <8 x bfloat>)
20794 declare <16 x bfloat> @llvm.maxnum.v16bf16(<16 x bfloat>, <16 x bfloat>)
20795 declare <32 x bfloat> @llvm.maxnum.v32bf16(<32 x bfloat>, <32 x bfloat>)
20797 define bfloat @v_maxnum_bf16(bfloat %a, bfloat %b) {
20798 ; GCN-LABEL: v_maxnum_bf16:
20799 ; GCN:       ; %bb.0:
20800 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20801 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
20802 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
20803 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20804 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20805 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v1
20806 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20807 ; GCN-NEXT:    s_setpc_b64 s[30:31]
20809 ; GFX7-LABEL: v_maxnum_bf16:
20810 ; GFX7:       ; %bb.0:
20811 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20812 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
20813 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
20814 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20815 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20816 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v1
20817 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20818 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
20820 ; GFX8-LABEL: v_maxnum_bf16:
20821 ; GFX8:       ; %bb.0:
20822 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20823 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
20824 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
20825 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
20826 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
20827 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
20828 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
20829 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
20830 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
20831 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
20832 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
20833 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
20835 ; GFX9-LABEL: v_maxnum_bf16:
20836 ; GFX9:       ; %bb.0:
20837 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20838 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
20839 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
20840 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
20841 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
20842 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
20843 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
20844 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
20845 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
20846 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
20847 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
20848 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
20850 ; GFX10-LABEL: v_maxnum_bf16:
20851 ; GFX10:       ; %bb.0:
20852 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20853 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
20854 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
20855 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
20856 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
20857 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
20858 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
20859 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
20860 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
20861 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
20862 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
20864 ; GFX11-LABEL: v_maxnum_bf16:
20865 ; GFX11:       ; %bb.0:
20866 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20867 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
20868 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
20869 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
20870 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
20871 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
20872 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
20873 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
20874 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
20875 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
20876 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
20877 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
20878 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
20879 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
20880   %op = call bfloat @llvm.maxnum.bf16(bfloat %a, bfloat %b)
20881   ret bfloat %op
20884 define <2 x bfloat> @v_maxnum_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
20885 ; GCN-LABEL: v_maxnum_v2bf16:
20886 ; GCN:       ; %bb.0:
20887 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20888 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
20889 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
20890 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
20891 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
20892 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
20893 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20894 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
20895 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20896 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v3
20897 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v2
20898 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20899 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20900 ; GCN-NEXT:    s_setpc_b64 s[30:31]
20902 ; GFX7-LABEL: v_maxnum_v2bf16:
20903 ; GFX7:       ; %bb.0:
20904 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20905 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
20906 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
20907 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
20908 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
20909 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
20910 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20911 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
20912 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20913 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v3
20914 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v2
20915 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20916 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20917 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
20919 ; GFX8-LABEL: v_maxnum_v2bf16:
20920 ; GFX8:       ; %bb.0:
20921 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20922 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
20923 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
20924 ; GFX8-NEXT:    v_max_f32_e32 v2, v3, v2
20925 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
20926 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
20927 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20928 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20929 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
20930 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v1
20931 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
20932 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
20933 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
20934 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
20935 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
20936 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
20937 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
20938 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
20939 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
20940 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
20941 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
20942 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
20944 ; GFX9-LABEL: v_maxnum_v2bf16:
20945 ; GFX9:       ; %bb.0:
20946 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20947 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
20948 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
20949 ; GFX9-NEXT:    v_max_f32_e32 v2, v3, v2
20950 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20951 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20952 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
20953 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
20954 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v1
20955 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
20956 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
20957 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
20958 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
20959 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
20960 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
20961 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
20962 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
20963 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
20964 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
20965 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
20966 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
20968 ; GFX10-LABEL: v_maxnum_v2bf16:
20969 ; GFX10:       ; %bb.0:
20970 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20971 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
20972 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
20973 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20974 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20975 ; GFX10-NEXT:    v_max_f32_e32 v2, v3, v2
20976 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v1
20977 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
20978 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v2
20979 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
20980 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
20981 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
20982 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
20983 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
20984 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
20985 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
20986 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
20987 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
20988 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
20990 ; GFX11-LABEL: v_maxnum_v2bf16:
20991 ; GFX11:       ; %bb.0:
20992 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
20993 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
20994 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
20995 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
20996 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
20997 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
20998 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v1
20999 ; GFX11-NEXT:    v_max_f32_e32 v2, v3, v2
21000 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
21001 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
21002 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
21003 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v2
21004 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
21005 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
21006 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
21007 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
21008 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
21009 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
21010 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21011 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
21012 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
21013 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
21014 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
21015   %op = call <2 x bfloat> @llvm.maxnum.v2bf16(<2 x bfloat> %a, <2 x bfloat> %b)
21016   ret <2 x bfloat> %op
21019 define <3 x bfloat> @v_maxnum_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b) {
21020 ; GCN-LABEL: v_maxnum_v3bf16:
21021 ; GCN:       ; %bb.0:
21022 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21023 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21024 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21025 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21026 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21027 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21028 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21029 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21030 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21031 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21032 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21033 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21034 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21035 ; GCN-NEXT:    v_max_f32_e32 v2, v2, v5
21036 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v4
21037 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v3
21038 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21039 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21040 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21041 ; GCN-NEXT:    s_setpc_b64 s[30:31]
21043 ; GFX7-LABEL: v_maxnum_v3bf16:
21044 ; GFX7:       ; %bb.0:
21045 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21046 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21047 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21048 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21049 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21050 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21051 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21052 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21053 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21054 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21055 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21056 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21057 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21058 ; GFX7-NEXT:    v_max_f32_e32 v2, v2, v5
21059 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v4
21060 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v3
21061 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21062 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21063 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21064 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
21066 ; GFX8-LABEL: v_maxnum_v3bf16:
21067 ; GFX8:       ; %bb.0:
21068 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21069 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
21070 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
21071 ; GFX8-NEXT:    v_max_f32_e32 v1, v1, v3
21072 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
21073 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
21074 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
21075 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
21076 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21077 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
21078 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
21079 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
21080 ; GFX8-NEXT:    v_max_f32_e32 v3, v4, v3
21081 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
21082 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
21083 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
21084 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21085 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21086 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
21087 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v2
21088 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
21089 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21090 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
21091 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
21092 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
21093 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
21094 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
21095 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21096 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
21097 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
21098 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
21099 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
21100 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
21102 ; GFX9-LABEL: v_maxnum_v3bf16:
21103 ; GFX9:       ; %bb.0:
21104 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21105 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
21106 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
21107 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v3
21108 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
21109 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
21110 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
21111 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
21112 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21113 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
21114 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
21115 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
21116 ; GFX9-NEXT:    v_max_f32_e32 v3, v4, v3
21117 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21118 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21119 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
21120 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v2
21121 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
21122 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
21123 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21124 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
21125 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
21126 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
21127 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
21128 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21129 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
21130 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
21131 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
21132 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
21133 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
21135 ; GFX10-LABEL: v_maxnum_v3bf16:
21136 ; GFX10:       ; %bb.0:
21137 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21138 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
21139 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
21140 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21141 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21142 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
21143 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
21144 ; GFX10-NEXT:    v_max_f32_e32 v4, v5, v4
21145 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v2
21146 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v3
21147 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
21148 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
21149 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
21150 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
21151 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
21152 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
21153 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
21154 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
21155 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
21156 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
21157 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
21158 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21159 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
21160 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
21161 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
21162 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc_lo
21163 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
21164 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
21165   %op = call <3 x bfloat> @llvm.maxnum.v3bf16(<3 x bfloat> %a, <3 x bfloat> %b)
21166   ret <3 x bfloat> %op
21169 define <4 x bfloat> @v_maxnum_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
21170 ; GCN-LABEL: v_maxnum_v4bf16:
21171 ; GCN:       ; %bb.0:
21172 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21173 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21174 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21175 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21176 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21177 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21178 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21179 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21180 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21181 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21182 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21183 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21184 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21185 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21186 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21187 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21188 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21189 ; GCN-NEXT:    v_max_f32_e32 v3, v3, v7
21190 ; GCN-NEXT:    v_max_f32_e32 v2, v2, v6
21191 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v5
21192 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v4
21193 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21194 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21195 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21196 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21197 ; GCN-NEXT:    s_setpc_b64 s[30:31]
21199 ; GFX7-LABEL: v_maxnum_v4bf16:
21200 ; GFX7:       ; %bb.0:
21201 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21202 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21203 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21204 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21205 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21206 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21207 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21208 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21209 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21210 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21211 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21212 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21213 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21214 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21215 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21216 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21217 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21218 ; GFX7-NEXT:    v_max_f32_e32 v3, v3, v7
21219 ; GFX7-NEXT:    v_max_f32_e32 v2, v2, v6
21220 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v5
21221 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v4
21222 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21223 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21224 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21225 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21226 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
21228 ; GFX8-LABEL: v_maxnum_v4bf16:
21229 ; GFX8:       ; %bb.0:
21230 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21231 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
21232 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
21233 ; GFX8-NEXT:    v_max_f32_e32 v4, v5, v4
21234 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
21235 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
21236 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21237 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21238 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
21239 ; GFX8-NEXT:    v_max_f32_e32 v1, v1, v3
21240 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
21241 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
21242 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
21243 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
21244 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
21245 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
21246 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
21247 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
21248 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21249 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
21250 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
21251 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
21252 ; GFX8-NEXT:    v_max_f32_e32 v3, v5, v3
21253 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
21254 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
21255 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21256 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21257 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
21258 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v2
21259 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
21260 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21261 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
21262 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
21263 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
21264 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
21265 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
21266 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21267 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
21268 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
21269 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
21270 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
21271 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v4, 16
21272 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
21274 ; GFX9-LABEL: v_maxnum_v4bf16:
21275 ; GFX9:       ; %bb.0:
21276 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21277 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
21278 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
21279 ; GFX9-NEXT:    v_max_f32_e32 v4, v5, v4
21280 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21281 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21282 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
21283 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
21284 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v3
21285 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
21286 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v4
21287 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
21288 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
21289 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
21290 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
21291 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
21292 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21293 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
21294 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
21295 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
21296 ; GFX9-NEXT:    v_max_f32_e32 v3, v5, v3
21297 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21298 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21299 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
21300 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v2
21301 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
21302 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
21303 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21304 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
21305 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
21306 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
21307 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
21308 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21309 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
21310 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
21311 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
21312 ; GFX9-NEXT:    v_perm_b32 v1, v1, v4, s4
21313 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
21315 ; GFX10-LABEL: v_maxnum_v4bf16:
21316 ; GFX10:       ; %bb.0:
21317 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21318 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
21319 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
21320 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21321 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21322 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
21323 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
21324 ; GFX10-NEXT:    v_max_f32_e32 v4, v5, v4
21325 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21326 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21327 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v3
21328 ; GFX10-NEXT:    v_max_f32_e32 v3, v7, v6
21329 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
21330 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
21331 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v2
21332 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
21333 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
21334 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
21335 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
21336 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
21337 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
21338 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
21339 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
21340 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
21341 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
21342 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
21343 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
21344 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
21345 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
21346 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21347 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
21348 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
21349 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
21350 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
21351 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
21352 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
21354 ; GFX11-LABEL: v_maxnum_v4bf16:
21355 ; GFX11:       ; %bb.0:
21356 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21357 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
21358 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
21359 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21360 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21361 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
21362 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
21363 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
21364 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v2 :: v_dual_and_b32 v1, 0xffff0000, v1
21365 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21366 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
21367 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
21368 ; GFX11-NEXT:    v_max_f32_e32 v1, v1, v3
21369 ; GFX11-NEXT:    v_dual_max_f32 v3, v7, v6 :: v_dual_max_f32 v4, v5, v4
21370 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
21371 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
21372 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
21373 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
21374 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v4
21375 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
21376 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
21377 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
21378 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
21379 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
21380 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_4)
21381 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc_lo
21382 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
21383 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
21384 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
21385 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
21386 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
21387 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21388 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
21389 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
21390 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
21391 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
21392 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v9, vcc_lo
21393 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
21394 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
21395 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
21396   %op = call <4 x bfloat> @llvm.maxnum.v4bf16(<4 x bfloat> %a, <4 x bfloat> %b)
21397   ret <4 x bfloat> %op
21400 define <8 x bfloat> @v_maxnum_v8bf16(<8 x bfloat> %a, <8 x bfloat> %b) {
21401 ; GCN-LABEL: v_maxnum_v8bf16:
21402 ; GCN:       ; %bb.0:
21403 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21404 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21405 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
21406 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21407 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
21408 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21409 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
21410 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21411 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
21412 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21413 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
21414 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21415 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
21416 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21417 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
21418 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21419 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
21420 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
21421 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21422 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
21423 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21424 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
21425 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21426 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
21427 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21428 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
21429 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21430 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
21431 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21432 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
21433 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21434 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
21435 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21436 ; GCN-NEXT:    v_max_f32_e32 v7, v7, v15
21437 ; GCN-NEXT:    v_max_f32_e32 v6, v6, v14
21438 ; GCN-NEXT:    v_max_f32_e32 v5, v5, v13
21439 ; GCN-NEXT:    v_max_f32_e32 v4, v4, v12
21440 ; GCN-NEXT:    v_max_f32_e32 v3, v3, v11
21441 ; GCN-NEXT:    v_max_f32_e32 v2, v2, v10
21442 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v9
21443 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v8
21444 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21445 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21446 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21447 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21448 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21449 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21450 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21451 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21452 ; GCN-NEXT:    s_setpc_b64 s[30:31]
21454 ; GFX7-LABEL: v_maxnum_v8bf16:
21455 ; GFX7:       ; %bb.0:
21456 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21457 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21458 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
21459 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21460 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
21461 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21462 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
21463 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21464 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
21465 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21466 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
21467 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21468 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
21469 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21470 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
21471 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21472 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
21473 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
21474 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21475 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
21476 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21477 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
21478 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21479 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
21480 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21481 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
21482 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21483 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
21484 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21485 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
21486 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21487 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
21488 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21489 ; GFX7-NEXT:    v_max_f32_e32 v7, v7, v15
21490 ; GFX7-NEXT:    v_max_f32_e32 v6, v6, v14
21491 ; GFX7-NEXT:    v_max_f32_e32 v5, v5, v13
21492 ; GFX7-NEXT:    v_max_f32_e32 v4, v4, v12
21493 ; GFX7-NEXT:    v_max_f32_e32 v3, v3, v11
21494 ; GFX7-NEXT:    v_max_f32_e32 v2, v2, v10
21495 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v9
21496 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v8
21497 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21498 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21499 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21500 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21501 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21502 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21503 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21504 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21505 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
21507 ; GFX8-LABEL: v_maxnum_v8bf16:
21508 ; GFX8:       ; %bb.0:
21509 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21510 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
21511 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
21512 ; GFX8-NEXT:    v_max_f32_e32 v8, v9, v8
21513 ; GFX8-NEXT:    v_bfe_u32 v9, v8, 16, 1
21514 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v8
21515 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21516 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21517 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x7fff, v9
21518 ; GFX8-NEXT:    v_max_f32_e32 v3, v3, v7
21519 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v8
21520 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
21521 ; GFX8-NEXT:    v_bfe_u32 v7, v3, 16, 1
21522 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
21523 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
21524 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v3
21525 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v7
21526 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v3
21527 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21528 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
21529 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
21530 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
21531 ; GFX8-NEXT:    v_max_f32_e32 v7, v9, v7
21532 ; GFX8-NEXT:    v_bfe_u32 v9, v7, 16, 1
21533 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v7
21534 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21535 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21536 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
21537 ; GFX8-NEXT:    v_max_f32_e32 v2, v2, v6
21538 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v7
21539 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
21540 ; GFX8-NEXT:    v_bfe_u32 v6, v2, 16, 1
21541 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
21542 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v2
21543 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
21544 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v2
21545 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
21546 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
21547 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
21548 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
21549 ; GFX8-NEXT:    v_max_f32_e32 v6, v9, v6
21550 ; GFX8-NEXT:    v_bfe_u32 v9, v6, 16, 1
21551 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v6
21552 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21553 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21554 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
21555 ; GFX8-NEXT:    v_max_f32_e32 v1, v1, v5
21556 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v6
21557 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
21558 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
21559 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
21560 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
21561 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
21562 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
21563 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21564 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
21565 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
21566 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
21567 ; GFX8-NEXT:    v_max_f32_e32 v5, v9, v5
21568 ; GFX8-NEXT:    v_bfe_u32 v9, v5, 16, 1
21569 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v5
21570 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21571 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21572 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
21573 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v4
21574 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v5
21575 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
21576 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
21577 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
21578 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
21579 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
21580 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v0
21581 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21582 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
21583 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
21584 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
21585 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
21586 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
21587 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v5, 16
21588 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
21589 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v7, 16
21590 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v8, 16
21591 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
21593 ; GFX9-LABEL: v_maxnum_v8bf16:
21594 ; GFX9:       ; %bb.0:
21595 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21596 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
21597 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
21598 ; GFX9-NEXT:    v_max_f32_e32 v8, v9, v8
21599 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21600 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21601 ; GFX9-NEXT:    v_bfe_u32 v9, v8, 16, 1
21602 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
21603 ; GFX9-NEXT:    v_max_f32_e32 v3, v3, v7
21604 ; GFX9-NEXT:    v_add3_u32 v9, v9, v8, s4
21605 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v8
21606 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
21607 ; GFX9-NEXT:    v_bfe_u32 v7, v3, 16, 1
21608 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v9, v10, vcc
21609 ; GFX9-NEXT:    v_add3_u32 v7, v7, v3, s4
21610 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v3
21611 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
21612 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v7, v9, vcc
21613 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
21614 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v2
21615 ; GFX9-NEXT:    v_max_f32_e32 v7, v9, v7
21616 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21617 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21618 ; GFX9-NEXT:    v_bfe_u32 v9, v7, 16, 1
21619 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v6
21620 ; GFX9-NEXT:    v_add3_u32 v9, v9, v7, s4
21621 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v7
21622 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
21623 ; GFX9-NEXT:    v_bfe_u32 v6, v2, 16, 1
21624 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v9, v10, vcc
21625 ; GFX9-NEXT:    v_add3_u32 v6, v6, v2, s4
21626 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v2
21627 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
21628 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v6, v9, vcc
21629 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
21630 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v1
21631 ; GFX9-NEXT:    v_max_f32_e32 v6, v9, v6
21632 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21633 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21634 ; GFX9-NEXT:    v_bfe_u32 v9, v6, 16, 1
21635 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v5
21636 ; GFX9-NEXT:    v_add3_u32 v9, v9, v6, s4
21637 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v6
21638 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
21639 ; GFX9-NEXT:    v_bfe_u32 v5, v1, 16, 1
21640 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v9, v10, vcc
21641 ; GFX9-NEXT:    v_add3_u32 v5, v5, v1, s4
21642 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v1
21643 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
21644 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
21645 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
21646 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
21647 ; GFX9-NEXT:    v_max_f32_e32 v5, v9, v5
21648 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21649 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21650 ; GFX9-NEXT:    v_bfe_u32 v9, v5, 16, 1
21651 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v4
21652 ; GFX9-NEXT:    v_add3_u32 v9, v9, v5, s4
21653 ; GFX9-NEXT:    v_or_b32_e32 v10, 0x400000, v5
21654 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
21655 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
21656 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v10, vcc
21657 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
21658 ; GFX9-NEXT:    v_or_b32_e32 v9, 0x400000, v0
21659 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
21660 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v9, vcc
21661 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
21662 ; GFX9-NEXT:    v_perm_b32 v0, v0, v5, s4
21663 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
21664 ; GFX9-NEXT:    v_perm_b32 v2, v2, v7, s4
21665 ; GFX9-NEXT:    v_perm_b32 v3, v3, v8, s4
21666 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
21668 ; GFX10-LABEL: v_maxnum_v8bf16:
21669 ; GFX10:       ; %bb.0:
21670 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21671 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
21672 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
21673 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21674 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21675 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
21676 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21677 ; GFX10-NEXT:    v_max_f32_e32 v8, v9, v8
21678 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
21679 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21680 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v7
21681 ; GFX10-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
21682 ; GFX10-NEXT:    v_bfe_u32 v11, v8, 16, 1
21683 ; GFX10-NEXT:    v_max_f32_e32 v7, v10, v9
21684 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v8
21685 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
21686 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v6
21687 ; GFX10-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
21688 ; GFX10-NEXT:    v_bfe_u32 v11, v3, 16, 1
21689 ; GFX10-NEXT:    v_bfe_u32 v12, v7, 16, 1
21690 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
21691 ; GFX10-NEXT:    v_bfe_u32 v13, v2, 16, 1
21692 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
21693 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
21694 ; GFX10-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
21695 ; GFX10-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
21696 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v7
21697 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
21698 ; GFX10-NEXT:    v_max_f32_e32 v6, v10, v6
21699 ; GFX10-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
21700 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21701 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21702 ; GFX10-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
21703 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v11, v12, vcc_lo
21704 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v2
21705 ; GFX10-NEXT:    v_bfe_u32 v12, v6, 16, 1
21706 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21707 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21708 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
21709 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v5
21710 ; GFX10-NEXT:    v_max_f32_e32 v5, v15, v13
21711 ; GFX10-NEXT:    v_or_b32_e32 v14, 0x400000, v3
21712 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v4
21713 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
21714 ; GFX10-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
21715 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v6
21716 ; GFX10-NEXT:    v_bfe_u32 v11, v1, 16, 1
21717 ; GFX10-NEXT:    v_bfe_u32 v12, v5, 16, 1
21718 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
21719 ; GFX10-NEXT:    v_bfe_u32 v13, v0, 16, 1
21720 ; GFX10-NEXT:    v_or_b32_e32 v15, 0x400000, v1
21721 ; GFX10-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
21722 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v5
21723 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v4, v10, vcc_lo
21724 ; GFX10-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
21725 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
21726 ; GFX10-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
21727 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v0
21728 ; GFX10-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
21729 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
21730 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21731 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
21732 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
21733 ; GFX10-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
21734 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
21735 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
21736 ; GFX10-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
21737 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
21738 ; GFX10-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
21739 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
21741 ; GFX11-LABEL: v_maxnum_v8bf16:
21742 ; GFX11:       ; %bb.0:
21743 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21744 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v2
21745 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v7
21746 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21747 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v3
21748 ; GFX11-NEXT:    v_lshlrev_b32_e32 v15, 16, v0
21749 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
21750 ; GFX11-NEXT:    v_dual_max_f32 v8, v9, v8 :: v_dual_and_b32 v7, 0xffff0000, v7
21751 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v6
21752 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
21753 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21754 ; GFX11-NEXT:    v_bfe_u32 v11, v8, 16, 1
21755 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
21756 ; GFX11-NEXT:    v_max_f32_e32 v3, v3, v7
21757 ; GFX11-NEXT:    v_max_f32_e32 v7, v10, v9
21758 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v8
21759 ; GFX11-NEXT:    v_add3_u32 v10, v11, v8, 0x7fff
21760 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
21761 ; GFX11-NEXT:    v_bfe_u32 v11, v3, 16, 1
21762 ; GFX11-NEXT:    v_bfe_u32 v12, v7, 16, 1
21763 ; GFX11-NEXT:    v_or_b32_e32 v14, 0x400000, v3
21764 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
21765 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v10, v9, vcc_lo
21766 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
21767 ; GFX11-NEXT:    v_add3_u32 v9, v11, v3, 0x7fff
21768 ; GFX11-NEXT:    v_add3_u32 v11, v12, v7, 0x7fff
21769 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v7
21770 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21771 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v1
21772 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21773 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
21774 ; GFX11-NEXT:    v_dual_cndmask_b32 v7, v11, v12 :: v_dual_max_f32 v2, v2, v6
21775 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
21776 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21777 ; GFX11-NEXT:    v_bfe_u32 v13, v2, 16, 1
21778 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
21779 ; GFX11-NEXT:    v_max_f32_e32 v6, v10, v6
21780 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v2
21781 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
21782 ; GFX11-NEXT:    v_add3_u32 v10, v13, v2, 0x7fff
21783 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
21784 ; GFX11-NEXT:    v_bfe_u32 v12, v6, 16, 1
21785 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v10, v11, vcc_lo
21786 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v6
21787 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
21788 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
21789 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21790 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21791 ; GFX11-NEXT:    v_perm_b32 v2, v2, v7, 0x7060302
21792 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
21793 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v4
21794 ; GFX11-NEXT:    v_add3_u32 v4, v12, v6, 0x7fff
21795 ; GFX11-NEXT:    v_dual_max_f32 v1, v1, v5 :: v_dual_cndmask_b32 v4, v4, v10
21796 ; GFX11-NEXT:    v_max_f32_e32 v5, v15, v13
21797 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
21798 ; GFX11-NEXT:    v_bfe_u32 v11, v1, 16, 1
21799 ; GFX11-NEXT:    v_bfe_u32 v13, v0, 16, 1
21800 ; GFX11-NEXT:    v_or_b32_e32 v15, 0x400000, v1
21801 ; GFX11-NEXT:    v_bfe_u32 v12, v5, 16, 1
21802 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
21803 ; GFX11-NEXT:    v_add3_u32 v6, v11, v1, 0x7fff
21804 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v5
21805 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
21806 ; GFX11-NEXT:    v_add3_u32 v10, v12, v5, 0x7fff
21807 ; GFX11-NEXT:    v_add3_u32 v12, v13, v0, 0x7fff
21808 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v0
21809 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
21810 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc_lo
21811 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
21812 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v12, v13, vcc_lo
21813 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
21814 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
21815 ; GFX11-NEXT:    v_perm_b32 v0, v0, v5, 0x7060302
21816 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v15, vcc_lo
21817 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
21818 ; GFX11-NEXT:    v_perm_b32 v1, v1, v4, 0x7060302
21819 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v9, v14, vcc_lo
21820 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
21821 ; GFX11-NEXT:    v_perm_b32 v3, v3, v8, 0x7060302
21822 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
21823   %op = call <8 x bfloat> @llvm.maxnum.v8bf16(<8 x bfloat> %a, <8 x bfloat> %b)
21824   ret <8 x bfloat> %op
21827 define <16 x bfloat> @v_maxnum_v16bf16(<16 x bfloat> %a, <16 x bfloat> %b) {
21828 ; GCN-LABEL: v_maxnum_v16bf16:
21829 ; GCN:       ; %bb.0:
21830 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21831 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
21832 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
21833 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
21834 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
21835 ; GCN-NEXT:    v_max_f32_e32 v14, v14, v30
21836 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
21837 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
21838 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
21839 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
21840 ; GCN-NEXT:    v_max_f32_e32 v13, v13, v29
21841 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
21842 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
21843 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
21844 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
21845 ; GCN-NEXT:    v_max_f32_e32 v12, v12, v28
21846 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
21847 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
21848 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
21849 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
21850 ; GCN-NEXT:    v_max_f32_e32 v11, v11, v27
21851 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
21852 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
21853 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
21854 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
21855 ; GCN-NEXT:    v_max_f32_e32 v10, v10, v26
21856 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
21857 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
21858 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
21859 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
21860 ; GCN-NEXT:    v_max_f32_e32 v9, v9, v25
21861 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
21862 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
21863 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
21864 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
21865 ; GCN-NEXT:    v_max_f32_e32 v8, v8, v24
21866 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21867 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
21868 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
21869 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21870 ; GCN-NEXT:    v_max_f32_e32 v7, v7, v23
21871 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21872 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
21873 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
21874 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21875 ; GCN-NEXT:    v_max_f32_e32 v6, v6, v22
21876 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21877 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
21878 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
21879 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21880 ; GCN-NEXT:    v_max_f32_e32 v5, v5, v21
21881 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21882 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
21883 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21884 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
21885 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21886 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
21887 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21888 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
21889 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21890 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
21891 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
21892 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
21893 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21894 ; GCN-NEXT:    v_max_f32_e32 v4, v4, v20
21895 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32
21896 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
21897 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
21898 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21899 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
21900 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21901 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
21902 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21903 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
21904 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21905 ; GCN-NEXT:    v_max_f32_e32 v3, v3, v19
21906 ; GCN-NEXT:    v_max_f32_e32 v2, v2, v18
21907 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v17
21908 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v16
21909 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21910 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21911 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21912 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21913 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21914 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21915 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21916 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21917 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
21918 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
21919 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
21920 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
21921 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
21922 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
21923 ; GCN-NEXT:    s_waitcnt vmcnt(0)
21924 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v20
21925 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
21926 ; GCN-NEXT:    v_max_f32_e32 v15, v15, v16
21927 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
21928 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
21929 ; GCN-NEXT:    s_setpc_b64 s[30:31]
21931 ; GFX7-LABEL: v_maxnum_v16bf16:
21932 ; GFX7:       ; %bb.0:
21933 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21934 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
21935 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
21936 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
21937 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
21938 ; GFX7-NEXT:    v_max_f32_e32 v6, v6, v22
21939 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32
21940 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
21941 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
21942 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
21943 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
21944 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
21945 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
21946 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
21947 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
21948 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
21949 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
21950 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
21951 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
21952 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
21953 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
21954 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
21955 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
21956 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
21957 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
21958 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
21959 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
21960 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
21961 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
21962 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
21963 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
21964 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
21965 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
21966 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
21967 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
21968 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
21969 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
21970 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
21971 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
21972 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
21973 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
21974 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
21975 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
21976 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
21977 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
21978 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
21979 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
21980 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
21981 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
21982 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
21983 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
21984 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
21985 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
21986 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
21987 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
21988 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
21989 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
21990 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
21991 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
21992 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
21993 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
21994 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
21995 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
21996 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
21997 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
21998 ; GFX7-NEXT:    v_max_f32_e32 v14, v14, v30
21999 ; GFX7-NEXT:    v_max_f32_e32 v13, v13, v29
22000 ; GFX7-NEXT:    v_max_f32_e32 v12, v12, v28
22001 ; GFX7-NEXT:    v_max_f32_e32 v11, v11, v27
22002 ; GFX7-NEXT:    v_max_f32_e32 v10, v10, v26
22003 ; GFX7-NEXT:    v_max_f32_e32 v9, v9, v25
22004 ; GFX7-NEXT:    v_max_f32_e32 v8, v8, v24
22005 ; GFX7-NEXT:    v_max_f32_e32 v7, v7, v23
22006 ; GFX7-NEXT:    v_max_f32_e32 v5, v5, v21
22007 ; GFX7-NEXT:    v_max_f32_e32 v4, v4, v20
22008 ; GFX7-NEXT:    v_max_f32_e32 v3, v3, v19
22009 ; GFX7-NEXT:    v_max_f32_e32 v2, v2, v18
22010 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v17
22011 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v16
22012 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22013 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22014 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22015 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22016 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22017 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22018 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22019 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
22020 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
22021 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
22022 ; GFX7-NEXT:    v_max_f32_e32 v15, v15, v22
22023 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22024 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22025 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22026 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22027 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22028 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22029 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22030 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22031 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22032 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
22034 ; GFX8-LABEL: v_maxnum_v16bf16:
22035 ; GFX8:       ; %bb.0:
22036 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22037 ; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
22038 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
22039 ; GFX8-NEXT:    v_max_f32_e32 v16, v17, v16
22040 ; GFX8-NEXT:    v_bfe_u32 v17, v16, 16, 1
22041 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v16
22042 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
22043 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22044 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22045 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22046 ; GFX8-NEXT:    v_max_f32_e32 v7, v7, v15
22047 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v16
22048 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
22049 ; GFX8-NEXT:    v_bfe_u32 v15, v7, 16, 1
22050 ; GFX8-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
22051 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v7
22052 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
22053 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v7
22054 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
22055 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
22056 ; GFX8-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
22057 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
22058 ; GFX8-NEXT:    v_max_f32_e32 v15, v17, v15
22059 ; GFX8-NEXT:    v_bfe_u32 v17, v15, 16, 1
22060 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v15
22061 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22062 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22063 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22064 ; GFX8-NEXT:    v_max_f32_e32 v6, v6, v14
22065 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v15
22066 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
22067 ; GFX8-NEXT:    v_bfe_u32 v14, v6, 16, 1
22068 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
22069 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, v14, v6
22070 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, s4, v14
22071 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v6
22072 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
22073 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
22074 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
22075 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
22076 ; GFX8-NEXT:    v_max_f32_e32 v14, v17, v14
22077 ; GFX8-NEXT:    v_bfe_u32 v17, v14, 16, 1
22078 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v14
22079 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22080 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22081 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22082 ; GFX8-NEXT:    v_max_f32_e32 v5, v5, v13
22083 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v14
22084 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
22085 ; GFX8-NEXT:    v_bfe_u32 v13, v5, 16, 1
22086 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
22087 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, v13, v5
22088 ; GFX8-NEXT:    v_add_u32_e32 v13, vcc, s4, v13
22089 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v5
22090 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
22091 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
22092 ; GFX8-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
22093 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
22094 ; GFX8-NEXT:    v_max_f32_e32 v13, v17, v13
22095 ; GFX8-NEXT:    v_bfe_u32 v17, v13, 16, 1
22096 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v13
22097 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22098 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22099 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22100 ; GFX8-NEXT:    v_max_f32_e32 v4, v4, v12
22101 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v13
22102 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
22103 ; GFX8-NEXT:    v_bfe_u32 v12, v4, 16, 1
22104 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
22105 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v4
22106 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, s4, v12
22107 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v4
22108 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
22109 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
22110 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
22111 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
22112 ; GFX8-NEXT:    v_max_f32_e32 v12, v17, v12
22113 ; GFX8-NEXT:    v_bfe_u32 v17, v12, 16, 1
22114 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v12
22115 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22116 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22117 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22118 ; GFX8-NEXT:    v_max_f32_e32 v3, v3, v11
22119 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v12
22120 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
22121 ; GFX8-NEXT:    v_bfe_u32 v11, v3, 16, 1
22122 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
22123 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v3
22124 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, s4, v11
22125 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v3
22126 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
22127 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
22128 ; GFX8-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
22129 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
22130 ; GFX8-NEXT:    v_max_f32_e32 v11, v17, v11
22131 ; GFX8-NEXT:    v_bfe_u32 v17, v11, 16, 1
22132 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v11
22133 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22134 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22135 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22136 ; GFX8-NEXT:    v_max_f32_e32 v2, v2, v10
22137 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v11
22138 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
22139 ; GFX8-NEXT:    v_bfe_u32 v10, v2, 16, 1
22140 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
22141 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v2
22142 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s4, v10
22143 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v2
22144 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
22145 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
22146 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
22147 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
22148 ; GFX8-NEXT:    v_max_f32_e32 v10, v17, v10
22149 ; GFX8-NEXT:    v_bfe_u32 v17, v10, 16, 1
22150 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v10
22151 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22152 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22153 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22154 ; GFX8-NEXT:    v_max_f32_e32 v1, v1, v9
22155 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v10
22156 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
22157 ; GFX8-NEXT:    v_bfe_u32 v9, v1, 16, 1
22158 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
22159 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v1
22160 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v9
22161 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v1
22162 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
22163 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
22164 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
22165 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
22166 ; GFX8-NEXT:    v_max_f32_e32 v9, v17, v9
22167 ; GFX8-NEXT:    v_bfe_u32 v17, v9, 16, 1
22168 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v9
22169 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22170 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22171 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
22172 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v8
22173 ; GFX8-NEXT:    v_or_b32_e32 v18, 0x400000, v9
22174 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
22175 ; GFX8-NEXT:    v_bfe_u32 v8, v0, 16, 1
22176 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
22177 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v0
22178 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s4, v8
22179 ; GFX8-NEXT:    v_or_b32_e32 v17, 0x400000, v0
22180 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
22181 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
22182 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
22183 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
22184 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
22185 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
22186 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
22187 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
22188 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
22189 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
22190 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v9, 16
22191 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v10, 16
22192 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v11, 16
22193 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v12, 16
22194 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v13, 16
22195 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v14, 16
22196 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v15, 16
22197 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v16, 16
22198 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
22200 ; GFX9-LABEL: v_maxnum_v16bf16:
22201 ; GFX9:       ; %bb.0:
22202 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22203 ; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
22204 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
22205 ; GFX9-NEXT:    v_max_f32_e32 v16, v17, v16
22206 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22207 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22208 ; GFX9-NEXT:    v_bfe_u32 v17, v16, 16, 1
22209 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
22210 ; GFX9-NEXT:    v_max_f32_e32 v7, v7, v15
22211 ; GFX9-NEXT:    v_add3_u32 v17, v17, v16, s4
22212 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v16
22213 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v16, v16
22214 ; GFX9-NEXT:    v_bfe_u32 v15, v7, 16, 1
22215 ; GFX9-NEXT:    v_cndmask_b32_e32 v16, v17, v18, vcc
22216 ; GFX9-NEXT:    v_add3_u32 v15, v15, v7, s4
22217 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v7
22218 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
22219 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v15, v17, vcc
22220 ; GFX9-NEXT:    v_lshlrev_b32_e32 v15, 16, v14
22221 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v6
22222 ; GFX9-NEXT:    v_max_f32_e32 v15, v17, v15
22223 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22224 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22225 ; GFX9-NEXT:    v_bfe_u32 v17, v15, 16, 1
22226 ; GFX9-NEXT:    v_max_f32_e32 v6, v6, v14
22227 ; GFX9-NEXT:    v_add3_u32 v17, v17, v15, s4
22228 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v15
22229 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v15, v15
22230 ; GFX9-NEXT:    v_bfe_u32 v14, v6, 16, 1
22231 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v17, v18, vcc
22232 ; GFX9-NEXT:    v_add3_u32 v14, v14, v6, s4
22233 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v6
22234 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
22235 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v14, v17, vcc
22236 ; GFX9-NEXT:    v_lshlrev_b32_e32 v14, 16, v13
22237 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v5
22238 ; GFX9-NEXT:    v_max_f32_e32 v14, v17, v14
22239 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22240 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22241 ; GFX9-NEXT:    v_bfe_u32 v17, v14, 16, 1
22242 ; GFX9-NEXT:    v_max_f32_e32 v5, v5, v13
22243 ; GFX9-NEXT:    v_add3_u32 v17, v17, v14, s4
22244 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v14
22245 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
22246 ; GFX9-NEXT:    v_bfe_u32 v13, v5, 16, 1
22247 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v18, vcc
22248 ; GFX9-NEXT:    v_add3_u32 v13, v13, v5, s4
22249 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v5
22250 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
22251 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v13, v17, vcc
22252 ; GFX9-NEXT:    v_lshlrev_b32_e32 v13, 16, v12
22253 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v4
22254 ; GFX9-NEXT:    v_max_f32_e32 v13, v17, v13
22255 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22256 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22257 ; GFX9-NEXT:    v_bfe_u32 v17, v13, 16, 1
22258 ; GFX9-NEXT:    v_max_f32_e32 v4, v4, v12
22259 ; GFX9-NEXT:    v_add3_u32 v17, v17, v13, s4
22260 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v13
22261 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
22262 ; GFX9-NEXT:    v_bfe_u32 v12, v4, 16, 1
22263 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v17, v18, vcc
22264 ; GFX9-NEXT:    v_add3_u32 v12, v12, v4, s4
22265 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v4
22266 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
22267 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v12, v17, vcc
22268 ; GFX9-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
22269 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v3
22270 ; GFX9-NEXT:    v_max_f32_e32 v12, v17, v12
22271 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22272 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22273 ; GFX9-NEXT:    v_bfe_u32 v17, v12, 16, 1
22274 ; GFX9-NEXT:    v_max_f32_e32 v3, v3, v11
22275 ; GFX9-NEXT:    v_add3_u32 v17, v17, v12, s4
22276 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v12
22277 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
22278 ; GFX9-NEXT:    v_bfe_u32 v11, v3, 16, 1
22279 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v17, v18, vcc
22280 ; GFX9-NEXT:    v_add3_u32 v11, v11, v3, s4
22281 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v3
22282 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
22283 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v11, v17, vcc
22284 ; GFX9-NEXT:    v_lshlrev_b32_e32 v11, 16, v10
22285 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
22286 ; GFX9-NEXT:    v_max_f32_e32 v11, v17, v11
22287 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22288 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22289 ; GFX9-NEXT:    v_bfe_u32 v17, v11, 16, 1
22290 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v10
22291 ; GFX9-NEXT:    v_add3_u32 v17, v17, v11, s4
22292 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v11
22293 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
22294 ; GFX9-NEXT:    v_bfe_u32 v10, v2, 16, 1
22295 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v17, v18, vcc
22296 ; GFX9-NEXT:    v_add3_u32 v10, v10, v2, s4
22297 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v2
22298 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
22299 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v10, v17, vcc
22300 ; GFX9-NEXT:    v_lshlrev_b32_e32 v10, 16, v9
22301 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v1
22302 ; GFX9-NEXT:    v_max_f32_e32 v10, v17, v10
22303 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22304 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22305 ; GFX9-NEXT:    v_bfe_u32 v17, v10, 16, 1
22306 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v9
22307 ; GFX9-NEXT:    v_add3_u32 v17, v17, v10, s4
22308 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v10
22309 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
22310 ; GFX9-NEXT:    v_bfe_u32 v9, v1, 16, 1
22311 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v17, v18, vcc
22312 ; GFX9-NEXT:    v_add3_u32 v9, v9, v1, s4
22313 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v1
22314 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
22315 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v17, vcc
22316 ; GFX9-NEXT:    v_lshlrev_b32_e32 v9, 16, v8
22317 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v0
22318 ; GFX9-NEXT:    v_max_f32_e32 v9, v17, v9
22319 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22320 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22321 ; GFX9-NEXT:    v_bfe_u32 v17, v9, 16, 1
22322 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v8
22323 ; GFX9-NEXT:    v_add3_u32 v17, v17, v9, s4
22324 ; GFX9-NEXT:    v_or_b32_e32 v18, 0x400000, v9
22325 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
22326 ; GFX9-NEXT:    v_bfe_u32 v8, v0, 16, 1
22327 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v17, v18, vcc
22328 ; GFX9-NEXT:    v_add3_u32 v8, v8, v0, s4
22329 ; GFX9-NEXT:    v_or_b32_e32 v17, 0x400000, v0
22330 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
22331 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v8, v17, vcc
22332 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
22333 ; GFX9-NEXT:    v_perm_b32 v0, v0, v9, s4
22334 ; GFX9-NEXT:    v_perm_b32 v1, v1, v10, s4
22335 ; GFX9-NEXT:    v_perm_b32 v2, v2, v11, s4
22336 ; GFX9-NEXT:    v_perm_b32 v3, v3, v12, s4
22337 ; GFX9-NEXT:    v_perm_b32 v4, v4, v13, s4
22338 ; GFX9-NEXT:    v_perm_b32 v5, v5, v14, s4
22339 ; GFX9-NEXT:    v_perm_b32 v6, v6, v15, s4
22340 ; GFX9-NEXT:    v_perm_b32 v7, v7, v16, s4
22341 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
22343 ; GFX10-LABEL: v_maxnum_v16bf16:
22344 ; GFX10:       ; %bb.0:
22345 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22346 ; GFX10-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
22347 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
22348 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22349 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22350 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
22351 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22352 ; GFX10-NEXT:    v_max_f32_e32 v16, v17, v16
22353 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
22354 ; GFX10-NEXT:    v_max_f32_e32 v7, v7, v15
22355 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22356 ; GFX10-NEXT:    v_bfe_u32 v15, v16, 16, 1
22357 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v16
22358 ; GFX10-NEXT:    v_bfe_u32 v19, v7, 16, 1
22359 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
22360 ; GFX10-NEXT:    v_max_f32_e32 v17, v18, v17
22361 ; GFX10-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
22362 ; GFX10-NEXT:    v_max_f32_e32 v6, v6, v14
22363 ; GFX10-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
22364 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v7
22365 ; GFX10-NEXT:    v_bfe_u32 v21, v17, 16, 1
22366 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v15, v20, vcc_lo
22367 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
22368 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v5
22369 ; GFX10-NEXT:    v_or_b32_e32 v16, 0x400000, v17
22370 ; GFX10-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
22371 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22372 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
22373 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
22374 ; GFX10-NEXT:    v_bfe_u32 v18, v6, 16, 1
22375 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22376 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
22377 ; GFX10-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
22378 ; GFX10-NEXT:    v_max_f32_e32 v17, v20, v19
22379 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
22380 ; GFX10-NEXT:    v_max_f32_e32 v5, v5, v13
22381 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v14, v16, vcc_lo
22382 ; GFX10-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
22383 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v6
22384 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
22385 ; GFX10-NEXT:    v_bfe_u32 v20, v17, 16, 1
22386 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
22387 ; GFX10-NEXT:    v_bfe_u32 v21, v5, 16, 1
22388 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22389 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22390 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v16, v13, vcc_lo
22391 ; GFX10-NEXT:    v_max_f32_e32 v13, v19, v18
22392 ; GFX10-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
22393 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v17
22394 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
22395 ; GFX10-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
22396 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v5
22397 ; GFX10-NEXT:    v_bfe_u32 v21, v13, 16, 1
22398 ; GFX10-NEXT:    v_max_f32_e32 v4, v4, v12
22399 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
22400 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
22401 ; GFX10-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
22402 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
22403 ; GFX10-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
22404 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22405 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
22406 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v13
22407 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22408 ; GFX10-NEXT:    v_max_f32_e32 v12, v18, v12
22409 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
22410 ; GFX10-NEXT:    v_bfe_u32 v20, v4, 16, 1
22411 ; GFX10-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
22412 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v11
22413 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v12
22414 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
22415 ; GFX10-NEXT:    v_bfe_u32 v17, v12, 16, 1
22416 ; GFX10-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
22417 ; GFX10-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
22418 ; GFX10-NEXT:    v_bfe_u32 v20, v3, 16, 1
22419 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22420 ; GFX10-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
22421 ; GFX10-NEXT:    v_max_f32_e32 v18, v19, v18
22422 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22423 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
22424 ; GFX10-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
22425 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v3
22426 ; GFX10-NEXT:    v_bfe_u32 v23, v18, 16, 1
22427 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v10
22428 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
22429 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
22430 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v18
22431 ; GFX10-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
22432 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
22433 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22434 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
22435 ; GFX10-NEXT:    v_bfe_u32 v19, v2, 16, 1
22436 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
22437 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
22438 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22439 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v2
22440 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v4
22441 ; GFX10-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
22442 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
22443 ; GFX10-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
22444 ; GFX10-NEXT:    v_max_f32_e32 v19, v22, v20
22445 ; GFX10-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
22446 ; GFX10-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
22447 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22448 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22449 ; GFX10-NEXT:    v_bfe_u32 v23, v19, 16, 1
22450 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v9
22451 ; GFX10-NEXT:    v_max_f32_e32 v9, v22, v20
22452 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v19
22453 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v8
22454 ; GFX10-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
22455 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
22456 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
22457 ; GFX10-NEXT:    v_bfe_u32 v23, v9, 16, 1
22458 ; GFX10-NEXT:    v_or_b32_e32 v24, 0x400000, v9
22459 ; GFX10-NEXT:    v_or_b32_e32 v25, 0x400000, v0
22460 ; GFX10-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
22461 ; GFX10-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
22462 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v1
22463 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
22464 ; GFX10-NEXT:    v_bfe_u32 v20, v0, 16, 1
22465 ; GFX10-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
22466 ; GFX10-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
22467 ; GFX10-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
22468 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
22469 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
22470 ; GFX10-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
22471 ; GFX10-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
22472 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
22473 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
22474 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
22475 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
22476 ; GFX10-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
22477 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
22478 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
22479 ; GFX10-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
22480 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
22481 ; GFX10-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
22482 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
22484 ; GFX11-LABEL: v_maxnum_v16bf16:
22485 ; GFX11:       ; %bb.0:
22486 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22487 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v6
22488 ; GFX11-NEXT:    v_lshlrev_b32_e32 v16, 16, v15
22489 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22490 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v7
22491 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
22492 ; GFX11-NEXT:    v_dual_max_f32 v16, v17, v16 :: v_dual_and_b32 v15, 0xffff0000, v15
22493 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v14
22494 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22495 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v16
22496 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
22497 ; GFX11-NEXT:    v_max_f32_e32 v17, v18, v17
22498 ; GFX11-NEXT:    v_max_f32_e32 v6, v6, v14
22499 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v16, v16
22500 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
22501 ; GFX11-NEXT:    v_bfe_u32 v21, v17, 16, 1
22502 ; GFX11-NEXT:    v_add3_u32 v14, v21, v17, 0x7fff
22503 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22504 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
22505 ; GFX11-NEXT:    v_max_f32_e32 v7, v7, v15
22506 ; GFX11-NEXT:    v_bfe_u32 v15, v16, 16, 1
22507 ; GFX11-NEXT:    v_add3_u32 v15, v15, v16, 0x7fff
22508 ; GFX11-NEXT:    v_or_b32_e32 v16, 0x400000, v17
22509 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
22510 ; GFX11-NEXT:    v_dual_cndmask_b32 v15, v15, v20 :: v_dual_lshlrev_b32 v20, 16, v5
22511 ; GFX11-NEXT:    v_bfe_u32 v19, v7, 16, 1
22512 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
22513 ; GFX11-NEXT:    v_add3_u32 v18, v19, v7, 0x7fff
22514 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v7
22515 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
22516 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v18, v19, vcc_lo
22517 ; GFX11-NEXT:    v_bfe_u32 v18, v6, 16, 1
22518 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v13
22519 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
22520 ; GFX11-NEXT:    v_perm_b32 v7, v7, v15, 0x7060302
22521 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
22522 ; GFX11-NEXT:    v_dual_max_f32 v17, v20, v19 :: v_dual_cndmask_b32 v14, v14, v16
22523 ; GFX11-NEXT:    v_add3_u32 v16, v18, v6, 0x7fff
22524 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v12
22525 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v4
22526 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22527 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22528 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22529 ; GFX11-NEXT:    v_bfe_u32 v20, v17, 16, 1
22530 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
22531 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_1)
22532 ; GFX11-NEXT:    v_max_f32_e32 v4, v4, v12
22533 ; GFX11-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
22534 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22535 ; GFX11-NEXT:    v_max_f32_e32 v5, v5, v13
22536 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v6
22537 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
22538 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v16, v13 :: v_dual_max_f32 v13, v19, v18
22539 ; GFX11-NEXT:    v_add3_u32 v16, v20, v17, 0x7fff
22540 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v17
22541 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
22542 ; GFX11-NEXT:    v_perm_b32 v6, v6, v14, 0x7060302
22543 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_4)
22544 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v18, vcc_lo
22545 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v3
22546 ; GFX11-NEXT:    v_bfe_u32 v21, v5, 16, 1
22547 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v5
22548 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
22549 ; GFX11-NEXT:    v_max_f32_e32 v12, v18, v12
22550 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_4)
22551 ; GFX11-NEXT:    v_add3_u32 v19, v21, v5, 0x7fff
22552 ; GFX11-NEXT:    v_bfe_u32 v21, v13, 16, 1
22553 ; GFX11-NEXT:    v_lshlrev_b32_e32 v18, 16, v10
22554 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v12
22555 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
22556 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v19, v20, vcc_lo
22557 ; GFX11-NEXT:    v_add3_u32 v17, v21, v13, 0x7fff
22558 ; GFX11-NEXT:    v_or_b32_e32 v19, 0x400000, v13
22559 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
22560 ; GFX11-NEXT:    v_bfe_u32 v20, v4, 16, 1
22561 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v4
22562 ; GFX11-NEXT:    v_perm_b32 v5, v5, v16, 0x7060302
22563 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v17, v19, vcc_lo
22564 ; GFX11-NEXT:    v_bfe_u32 v17, v12, 16, 1
22565 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
22566 ; GFX11-NEXT:    v_lshlrev_b32_e32 v19, 16, v2
22567 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22568 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22569 ; GFX11-NEXT:    v_add3_u32 v17, v17, v12, 0x7fff
22570 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
22571 ; GFX11-NEXT:    v_max_f32_e32 v18, v19, v18
22572 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v17, v22, vcc_lo
22573 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v1
22574 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22575 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22576 ; GFX11-NEXT:    v_bfe_u32 v23, v18, 16, 1
22577 ; GFX11-NEXT:    v_or_b32_e32 v17, 0x400000, v18
22578 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
22579 ; GFX11-NEXT:    v_dual_max_f32 v2, v2, v10 :: v_dual_and_b32 v1, 0xffff0000, v1
22580 ; GFX11-NEXT:    v_max_f32_e32 v3, v3, v11
22581 ; GFX11-NEXT:    v_add3_u32 v11, v20, v4, 0x7fff
22582 ; GFX11-NEXT:    v_add3_u32 v10, v23, v18, 0x7fff
22583 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
22584 ; GFX11-NEXT:    v_bfe_u32 v20, v3, 16, 1
22585 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
22586 ; GFX11-NEXT:    v_add3_u32 v19, v20, v3, 0x7fff
22587 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v3
22588 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
22589 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v19, v20, vcc_lo
22590 ; GFX11-NEXT:    v_bfe_u32 v19, v2, 16, 1
22591 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v9
22592 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
22593 ; GFX11-NEXT:    v_or_b32_e32 v18, 0x400000, v2
22594 ; GFX11-NEXT:    v_perm_b32 v3, v3, v12, 0x7060302
22595 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v10, v17, vcc_lo
22596 ; GFX11-NEXT:    v_add3_u32 v17, v19, v2, 0x7fff
22597 ; GFX11-NEXT:    v_max_f32_e32 v19, v22, v20
22598 ; GFX11-NEXT:    v_lshlrev_b32_e32 v20, 16, v8
22599 ; GFX11-NEXT:    v_lshlrev_b32_e32 v22, 16, v0
22600 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22601 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_2)
22602 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
22603 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22604 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22605 ; GFX11-NEXT:    v_bfe_u32 v23, v19, 16, 1
22606 ; GFX11-NEXT:    v_dual_max_f32 v0, v0, v8 :: v_dual_max_f32 v1, v1, v9
22607 ; GFX11-NEXT:    v_max_f32_e32 v9, v22, v20
22608 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_4)
22609 ; GFX11-NEXT:    v_add3_u32 v20, v23, v19, 0x7fff
22610 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v19
22611 ; GFX11-NEXT:    v_or_b32_e32 v25, 0x400000, v0
22612 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
22613 ; GFX11-NEXT:    v_bfe_u32 v23, v9, 16, 1
22614 ; GFX11-NEXT:    v_or_b32_e32 v24, 0x400000, v9
22615 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v20, v22, vcc_lo
22616 ; GFX11-NEXT:    v_or_b32_e32 v22, 0x400000, v1
22617 ; GFX11-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
22618 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
22619 ; GFX11-NEXT:    v_bfe_u32 v20, v0, 16, 1
22620 ; GFX11-NEXT:    v_add3_u32 v23, v23, v9, 0x7fff
22621 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
22622 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v8, v22, vcc_lo
22623 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
22624 ; GFX11-NEXT:    v_add3_u32 v20, v20, v0, 0x7fff
22625 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_4)
22626 ; GFX11-NEXT:    v_perm_b32 v1, v1, v19, 0x7060302
22627 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v23, v24, vcc_lo
22628 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
22629 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v20, v25, vcc_lo
22630 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
22631 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
22632 ; GFX11-NEXT:    v_perm_b32 v0, v0, v8, 0x7060302
22633 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v17, v18, vcc_lo
22634 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
22635 ; GFX11-NEXT:    v_perm_b32 v2, v2, v10, 0x7060302
22636 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v11, v21, vcc_lo
22637 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
22638 ; GFX11-NEXT:    v_perm_b32 v4, v4, v13, 0x7060302
22639 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
22640   %op = call <16 x bfloat> @llvm.maxnum.v16bf16(<16 x bfloat> %a, <16 x bfloat> %b)
22641   ret <16 x bfloat> %op
22644 define <32 x bfloat> @v_maxnum_v32bf16(<32 x bfloat> %a, <32 x bfloat> %b) {
22645 ; GCN-LABEL: v_maxnum_v32bf16:
22646 ; GCN:       ; %bb.0:
22647 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22648 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32
22649 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
22650 ; GCN-NEXT:    s_waitcnt vmcnt(1)
22651 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v31
22652 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22653 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
22654 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22655 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
22656 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:124
22657 ; GCN-NEXT:    v_max_f32_e32 v31, v31, v32
22658 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v30
22659 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
22660 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22661 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22662 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22663 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:120
22664 ; GCN-NEXT:    v_max_f32_e32 v30, v30, v32
22665 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v29
22666 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
22667 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22668 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22669 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22670 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:116
22671 ; GCN-NEXT:    v_max_f32_e32 v29, v29, v32
22672 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v28
22673 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
22674 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22675 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22676 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22677 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:112
22678 ; GCN-NEXT:    v_max_f32_e32 v28, v28, v32
22679 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v27
22680 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
22681 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22682 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22683 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22684 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:108
22685 ; GCN-NEXT:    v_max_f32_e32 v27, v27, v32
22686 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v26
22687 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
22688 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22689 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22690 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22691 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:104
22692 ; GCN-NEXT:    v_max_f32_e32 v26, v26, v32
22693 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v25
22694 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
22695 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22696 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22697 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22698 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:100
22699 ; GCN-NEXT:    v_max_f32_e32 v25, v25, v32
22700 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v24
22701 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
22702 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22703 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22704 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22705 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:96
22706 ; GCN-NEXT:    v_max_f32_e32 v24, v24, v32
22707 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
22708 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
22709 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22710 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22711 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22712 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:92
22713 ; GCN-NEXT:    v_max_f32_e32 v23, v23, v32
22714 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
22715 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
22716 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22717 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22718 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22719 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:88
22720 ; GCN-NEXT:    v_max_f32_e32 v22, v22, v32
22721 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
22722 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
22723 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22724 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22725 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22726 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:84
22727 ; GCN-NEXT:    v_max_f32_e32 v21, v21, v32
22728 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
22729 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
22730 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22731 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22732 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22733 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:80
22734 ; GCN-NEXT:    v_max_f32_e32 v20, v20, v32
22735 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
22736 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
22737 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22738 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22739 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22740 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:76
22741 ; GCN-NEXT:    v_max_f32_e32 v19, v19, v32
22742 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
22743 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
22744 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22745 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22746 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22747 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:72
22748 ; GCN-NEXT:    v_max_f32_e32 v18, v18, v32
22749 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
22750 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
22751 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22752 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22753 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22754 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:68
22755 ; GCN-NEXT:    v_max_f32_e32 v17, v17, v32
22756 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
22757 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
22758 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22759 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22760 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22761 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:64
22762 ; GCN-NEXT:    v_max_f32_e32 v16, v16, v32
22763 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
22764 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22765 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22766 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22767 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22768 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:60
22769 ; GCN-NEXT:    v_max_f32_e32 v15, v15, v32
22770 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
22771 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22772 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22773 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22774 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22775 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:56
22776 ; GCN-NEXT:    v_max_f32_e32 v14, v14, v32
22777 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
22778 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22779 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22780 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22781 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22782 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:52
22783 ; GCN-NEXT:    v_max_f32_e32 v13, v13, v32
22784 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
22785 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22786 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22787 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22788 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22789 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:48
22790 ; GCN-NEXT:    v_max_f32_e32 v12, v12, v32
22791 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
22792 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22793 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22794 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22795 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22796 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:44
22797 ; GCN-NEXT:    v_max_f32_e32 v11, v11, v32
22798 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
22799 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22800 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22801 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22802 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22803 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:40
22804 ; GCN-NEXT:    v_max_f32_e32 v10, v10, v32
22805 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
22806 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22807 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22808 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22809 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22810 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:36
22811 ; GCN-NEXT:    v_max_f32_e32 v9, v9, v32
22812 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
22813 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22814 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22815 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22816 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22817 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:32
22818 ; GCN-NEXT:    v_max_f32_e32 v8, v8, v32
22819 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
22820 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22821 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22822 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22823 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22824 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:28
22825 ; GCN-NEXT:    v_max_f32_e32 v7, v7, v32
22826 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
22827 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22828 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22829 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22830 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22831 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:24
22832 ; GCN-NEXT:    v_max_f32_e32 v6, v6, v32
22833 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
22834 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22835 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22836 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22837 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22838 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:20
22839 ; GCN-NEXT:    v_max_f32_e32 v5, v5, v32
22840 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
22841 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22842 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22843 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22844 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22845 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:16
22846 ; GCN-NEXT:    v_max_f32_e32 v4, v4, v32
22847 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
22848 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22849 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22850 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22851 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22852 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:12
22853 ; GCN-NEXT:    v_max_f32_e32 v3, v3, v32
22854 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
22855 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22856 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22857 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22858 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22859 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:8
22860 ; GCN-NEXT:    v_max_f32_e32 v2, v2, v32
22861 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
22862 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22863 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22864 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22865 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22866 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:4
22867 ; GCN-NEXT:    v_max_f32_e32 v1, v1, v32
22868 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
22869 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22870 ; GCN-NEXT:    s_waitcnt vmcnt(0)
22871 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
22872 ; GCN-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22873 ; GCN-NEXT:    v_max_f32_e32 v0, v0, v32
22874 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22875 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22876 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22877 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22878 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22879 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22880 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22881 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22882 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22883 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22884 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22885 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22886 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22887 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22888 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22889 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22890 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
22891 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
22892 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
22893 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
22894 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
22895 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
22896 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
22897 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
22898 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
22899 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
22900 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
22901 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
22902 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
22903 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
22904 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
22905 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
22906 ; GCN-NEXT:    s_setpc_b64 s[30:31]
22908 ; GFX7-LABEL: v_maxnum_v32bf16:
22909 ; GFX7:       ; %bb.0:
22910 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22911 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32
22912 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:128
22913 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
22914 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
22915 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
22916 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
22917 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
22918 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
22919 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
22920 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
22921 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
22922 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
22923 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
22924 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
22925 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
22926 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
22927 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
22928 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
22929 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
22930 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
22931 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
22932 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
22933 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
22934 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
22935 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
22936 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
22937 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
22938 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
22939 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
22940 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
22941 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
22942 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
22943 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
22944 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
22945 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
22946 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
22947 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
22948 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
22949 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
22950 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
22951 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
22952 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
22953 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
22954 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
22955 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
22956 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
22957 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
22958 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
22959 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
22960 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
22961 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
22962 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
22963 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
22964 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
22965 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
22966 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
22967 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
22968 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
22969 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
22970 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
22971 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
22972 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
22973 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
22974 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
22975 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
22976 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
22977 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
22978 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
22979 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22980 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
22981 ; GFX7-NEXT:    v_max_f32_e32 v31, v31, v32
22982 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
22983 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
22984 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
22985 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
22986 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22987 ; GFX7-NEXT:    v_max_f32_e32 v30, v30, v32
22988 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:120
22989 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
22990 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
22991 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
22992 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22993 ; GFX7-NEXT:    v_max_f32_e32 v29, v29, v32
22994 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:116
22995 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
22996 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
22997 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
22998 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
22999 ; GFX7-NEXT:    v_max_f32_e32 v28, v28, v32
23000 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:112
23001 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
23002 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23003 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23004 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23005 ; GFX7-NEXT:    v_max_f32_e32 v27, v27, v32
23006 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:108
23007 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
23008 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23009 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23010 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23011 ; GFX7-NEXT:    v_max_f32_e32 v26, v26, v32
23012 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:104
23013 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
23014 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23015 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23016 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23017 ; GFX7-NEXT:    v_max_f32_e32 v25, v25, v32
23018 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:100
23019 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
23020 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23021 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23022 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23023 ; GFX7-NEXT:    v_max_f32_e32 v24, v24, v32
23024 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:96
23025 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
23026 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23027 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23028 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23029 ; GFX7-NEXT:    v_max_f32_e32 v23, v23, v32
23030 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:92
23031 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
23032 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23033 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23034 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23035 ; GFX7-NEXT:    v_max_f32_e32 v22, v22, v32
23036 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:88
23037 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
23038 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23039 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23040 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23041 ; GFX7-NEXT:    v_max_f32_e32 v21, v21, v32
23042 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:84
23043 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
23044 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23045 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23046 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23047 ; GFX7-NEXT:    v_max_f32_e32 v20, v20, v32
23048 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:80
23049 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
23050 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23051 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23052 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23053 ; GFX7-NEXT:    v_max_f32_e32 v19, v19, v32
23054 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:76
23055 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
23056 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23057 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23058 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23059 ; GFX7-NEXT:    v_max_f32_e32 v18, v18, v32
23060 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:72
23061 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
23062 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23063 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23064 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23065 ; GFX7-NEXT:    v_max_f32_e32 v17, v17, v32
23066 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:68
23067 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
23068 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23069 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23070 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23071 ; GFX7-NEXT:    v_max_f32_e32 v16, v16, v32
23072 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
23073 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
23074 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23075 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23076 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23077 ; GFX7-NEXT:    v_max_f32_e32 v15, v15, v32
23078 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:60
23079 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
23080 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23081 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23082 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23083 ; GFX7-NEXT:    v_max_f32_e32 v14, v14, v32
23084 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:56
23085 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
23086 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23087 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23088 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23089 ; GFX7-NEXT:    v_max_f32_e32 v13, v13, v32
23090 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:52
23091 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
23092 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23093 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23094 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23095 ; GFX7-NEXT:    v_max_f32_e32 v12, v12, v32
23096 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:48
23097 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
23098 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23099 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23100 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23101 ; GFX7-NEXT:    v_max_f32_e32 v11, v11, v32
23102 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:44
23103 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
23104 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23105 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23106 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23107 ; GFX7-NEXT:    v_max_f32_e32 v10, v10, v32
23108 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:40
23109 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
23110 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23111 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23112 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23113 ; GFX7-NEXT:    v_max_f32_e32 v9, v9, v32
23114 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:36
23115 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
23116 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23117 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23118 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23119 ; GFX7-NEXT:    v_max_f32_e32 v8, v8, v32
23120 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:32
23121 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
23122 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23123 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23124 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23125 ; GFX7-NEXT:    v_max_f32_e32 v7, v7, v32
23126 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:28
23127 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
23128 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23129 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23130 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23131 ; GFX7-NEXT:    v_max_f32_e32 v6, v6, v32
23132 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:24
23133 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
23134 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23135 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23136 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23137 ; GFX7-NEXT:    v_max_f32_e32 v5, v5, v32
23138 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:20
23139 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
23140 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23141 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23142 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23143 ; GFX7-NEXT:    v_max_f32_e32 v4, v4, v32
23144 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:16
23145 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
23146 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23147 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23148 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23149 ; GFX7-NEXT:    v_max_f32_e32 v3, v3, v32
23150 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:12
23151 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
23152 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23153 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23154 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23155 ; GFX7-NEXT:    v_max_f32_e32 v2, v2, v32
23156 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:8
23157 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
23158 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23159 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23160 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23161 ; GFX7-NEXT:    v_max_f32_e32 v1, v1, v32
23162 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
23163 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
23164 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
23165 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
23166 ; GFX7-NEXT:    v_and_b32_e32 v32, 0xffff0000, v32
23167 ; GFX7-NEXT:    v_max_f32_e32 v0, v0, v32
23168 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
23169 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
23171 ; GFX8-LABEL: v_maxnum_v32bf16:
23172 ; GFX8:       ; %bb.0:
23173 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23174 ; GFX8-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
23175 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
23176 ; GFX8-NEXT:    v_max_f32_e32 v31, v32, v31
23177 ; GFX8-NEXT:    v_bfe_u32 v32, v31, 16, 1
23178 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
23179 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, v32, v31
23180 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
23181 ; GFX8-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
23182 ; GFX8-NEXT:    v_add_u32_e32 v32, vcc, s4, v32
23183 ; GFX8-NEXT:    v_max_f32_e32 v14, v14, v30
23184 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v31
23185 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
23186 ; GFX8-NEXT:    v_bfe_u32 v30, v14, 16, 1
23187 ; GFX8-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
23188 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, v30, v14
23189 ; GFX8-NEXT:    v_add_u32_e32 v30, vcc, s4, v30
23190 ; GFX8-NEXT:    v_or_b32_e32 v32, 0x400000, v14
23191 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
23192 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
23193 ; GFX8-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
23194 ; GFX8-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
23195 ; GFX8-NEXT:    v_max_f32_e32 v32, v32, v30
23196 ; GFX8-NEXT:    buffer_load_dword v30, off, s[0:3], s32
23197 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
23198 ; GFX8-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
23199 ; GFX8-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
23200 ; GFX8-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
23201 ; GFX8-NEXT:    v_max_f32_e32 v13, v13, v29
23202 ; GFX8-NEXT:    v_bfe_u32 v29, v13, 16, 1
23203 ; GFX8-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
23204 ; GFX8-NEXT:    v_alignbit_b32 v14, v14, v31, 16
23205 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
23206 ; GFX8-NEXT:    v_lshlrev_b32_e32 v34, 16, v30
23207 ; GFX8-NEXT:    v_max_f32_e32 v33, v33, v34
23208 ; GFX8-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
23209 ; GFX8-NEXT:    v_max_f32_e32 v30, v15, v30
23210 ; GFX8-NEXT:    v_bfe_u32 v15, v33, 16, 1
23211 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, v15, v33
23212 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, s4, v15
23213 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v33
23214 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
23215 ; GFX8-NEXT:    v_bfe_u32 v33, v30, 16, 1
23216 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
23217 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v30
23218 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23219 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v30
23220 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
23221 ; GFX8-NEXT:    v_cndmask_b32_e32 v30, v33, v34, vcc
23222 ; GFX8-NEXT:    v_bfe_u32 v33, v32, 16, 1
23223 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v32
23224 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23225 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v32
23226 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
23227 ; GFX8-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
23228 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, v29, v13
23229 ; GFX8-NEXT:    v_add_u32_e32 v29, vcc, s4, v29
23230 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v13
23231 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
23232 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v29, v33, vcc
23233 ; GFX8-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
23234 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v12
23235 ; GFX8-NEXT:    v_max_f32_e32 v29, v33, v29
23236 ; GFX8-NEXT:    v_bfe_u32 v33, v29, 16, 1
23237 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v29
23238 ; GFX8-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
23239 ; GFX8-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
23240 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23241 ; GFX8-NEXT:    v_max_f32_e32 v12, v12, v28
23242 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v29
23243 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
23244 ; GFX8-NEXT:    v_bfe_u32 v28, v12, 16, 1
23245 ; GFX8-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
23246 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, v28, v12
23247 ; GFX8-NEXT:    v_add_u32_e32 v28, vcc, s4, v28
23248 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v12
23249 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
23250 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
23251 ; GFX8-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
23252 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
23253 ; GFX8-NEXT:    v_max_f32_e32 v28, v33, v28
23254 ; GFX8-NEXT:    v_bfe_u32 v33, v28, 16, 1
23255 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v28
23256 ; GFX8-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
23257 ; GFX8-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
23258 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23259 ; GFX8-NEXT:    v_max_f32_e32 v11, v11, v27
23260 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v28
23261 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
23262 ; GFX8-NEXT:    v_bfe_u32 v27, v11, 16, 1
23263 ; GFX8-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
23264 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, v27, v11
23265 ; GFX8-NEXT:    v_add_u32_e32 v27, vcc, s4, v27
23266 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v11
23267 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
23268 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
23269 ; GFX8-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
23270 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
23271 ; GFX8-NEXT:    v_max_f32_e32 v27, v33, v27
23272 ; GFX8-NEXT:    v_bfe_u32 v33, v27, 16, 1
23273 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v27
23274 ; GFX8-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
23275 ; GFX8-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
23276 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23277 ; GFX8-NEXT:    v_max_f32_e32 v10, v10, v26
23278 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v27
23279 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
23280 ; GFX8-NEXT:    v_bfe_u32 v26, v10, 16, 1
23281 ; GFX8-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
23282 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, v26, v10
23283 ; GFX8-NEXT:    v_add_u32_e32 v26, vcc, s4, v26
23284 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v10
23285 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
23286 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
23287 ; GFX8-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
23288 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
23289 ; GFX8-NEXT:    v_max_f32_e32 v26, v33, v26
23290 ; GFX8-NEXT:    v_bfe_u32 v33, v26, 16, 1
23291 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v26
23292 ; GFX8-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
23293 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
23294 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23295 ; GFX8-NEXT:    v_max_f32_e32 v9, v9, v25
23296 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v26
23297 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
23298 ; GFX8-NEXT:    v_bfe_u32 v25, v9, 16, 1
23299 ; GFX8-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
23300 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, v25, v9
23301 ; GFX8-NEXT:    v_add_u32_e32 v25, vcc, s4, v25
23302 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v9
23303 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
23304 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
23305 ; GFX8-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
23306 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
23307 ; GFX8-NEXT:    v_max_f32_e32 v25, v33, v25
23308 ; GFX8-NEXT:    v_bfe_u32 v33, v25, 16, 1
23309 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v25
23310 ; GFX8-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
23311 ; GFX8-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
23312 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23313 ; GFX8-NEXT:    v_max_f32_e32 v8, v8, v24
23314 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v25
23315 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
23316 ; GFX8-NEXT:    v_bfe_u32 v24, v8, 16, 1
23317 ; GFX8-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
23318 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, v24, v8
23319 ; GFX8-NEXT:    v_add_u32_e32 v24, vcc, s4, v24
23320 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v8
23321 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
23322 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
23323 ; GFX8-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
23324 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
23325 ; GFX8-NEXT:    v_max_f32_e32 v24, v33, v24
23326 ; GFX8-NEXT:    v_bfe_u32 v33, v24, 16, 1
23327 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v24
23328 ; GFX8-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
23329 ; GFX8-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
23330 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23331 ; GFX8-NEXT:    v_max_f32_e32 v7, v7, v23
23332 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v24
23333 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
23334 ; GFX8-NEXT:    v_bfe_u32 v23, v7, 16, 1
23335 ; GFX8-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
23336 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v7
23337 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, s4, v23
23338 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v7
23339 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
23340 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
23341 ; GFX8-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
23342 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
23343 ; GFX8-NEXT:    v_max_f32_e32 v23, v33, v23
23344 ; GFX8-NEXT:    v_bfe_u32 v33, v23, 16, 1
23345 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v23
23346 ; GFX8-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
23347 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
23348 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23349 ; GFX8-NEXT:    v_max_f32_e32 v6, v6, v22
23350 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v23
23351 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
23352 ; GFX8-NEXT:    v_bfe_u32 v22, v6, 16, 1
23353 ; GFX8-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
23354 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v6
23355 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, s4, v22
23356 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v6
23357 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
23358 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
23359 ; GFX8-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
23360 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
23361 ; GFX8-NEXT:    v_max_f32_e32 v22, v33, v22
23362 ; GFX8-NEXT:    v_bfe_u32 v33, v22, 16, 1
23363 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v22
23364 ; GFX8-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
23365 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
23366 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23367 ; GFX8-NEXT:    v_max_f32_e32 v5, v5, v21
23368 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v22
23369 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
23370 ; GFX8-NEXT:    v_bfe_u32 v21, v5, 16, 1
23371 ; GFX8-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
23372 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v5
23373 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, s4, v21
23374 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v5
23375 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
23376 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
23377 ; GFX8-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
23378 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
23379 ; GFX8-NEXT:    v_max_f32_e32 v21, v33, v21
23380 ; GFX8-NEXT:    v_bfe_u32 v33, v21, 16, 1
23381 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v21
23382 ; GFX8-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
23383 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
23384 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23385 ; GFX8-NEXT:    v_max_f32_e32 v4, v4, v20
23386 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v21
23387 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
23388 ; GFX8-NEXT:    v_bfe_u32 v20, v4, 16, 1
23389 ; GFX8-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
23390 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v4
23391 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, s4, v20
23392 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v4
23393 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
23394 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
23395 ; GFX8-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
23396 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
23397 ; GFX8-NEXT:    v_max_f32_e32 v20, v33, v20
23398 ; GFX8-NEXT:    v_bfe_u32 v33, v20, 16, 1
23399 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v20
23400 ; GFX8-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
23401 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
23402 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23403 ; GFX8-NEXT:    v_max_f32_e32 v3, v3, v19
23404 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v20
23405 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
23406 ; GFX8-NEXT:    v_bfe_u32 v19, v3, 16, 1
23407 ; GFX8-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
23408 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v3
23409 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, s4, v19
23410 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v3
23411 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
23412 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
23413 ; GFX8-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
23414 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
23415 ; GFX8-NEXT:    v_max_f32_e32 v19, v33, v19
23416 ; GFX8-NEXT:    v_bfe_u32 v33, v19, 16, 1
23417 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v19
23418 ; GFX8-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
23419 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
23420 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23421 ; GFX8-NEXT:    v_max_f32_e32 v2, v2, v18
23422 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v19
23423 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
23424 ; GFX8-NEXT:    v_bfe_u32 v18, v2, 16, 1
23425 ; GFX8-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
23426 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v2
23427 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, s4, v18
23428 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v2
23429 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
23430 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
23431 ; GFX8-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
23432 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
23433 ; GFX8-NEXT:    v_max_f32_e32 v18, v33, v18
23434 ; GFX8-NEXT:    v_bfe_u32 v33, v18, 16, 1
23435 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v18
23436 ; GFX8-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
23437 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
23438 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23439 ; GFX8-NEXT:    v_max_f32_e32 v1, v1, v17
23440 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v18
23441 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
23442 ; GFX8-NEXT:    v_bfe_u32 v17, v1, 16, 1
23443 ; GFX8-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
23444 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v1
23445 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s4, v17
23446 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v1
23447 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
23448 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
23449 ; GFX8-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
23450 ; GFX8-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
23451 ; GFX8-NEXT:    v_max_f32_e32 v17, v33, v17
23452 ; GFX8-NEXT:    v_bfe_u32 v33, v17, 16, 1
23453 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, v33, v17
23454 ; GFX8-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
23455 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
23456 ; GFX8-NEXT:    v_add_u32_e32 v33, vcc, s4, v33
23457 ; GFX8-NEXT:    v_max_f32_e32 v0, v0, v16
23458 ; GFX8-NEXT:    v_or_b32_e32 v34, 0x400000, v17
23459 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
23460 ; GFX8-NEXT:    v_bfe_u32 v16, v0, 16, 1
23461 ; GFX8-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
23462 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v0
23463 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, s4, v16
23464 ; GFX8-NEXT:    v_or_b32_e32 v33, 0x400000, v0
23465 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
23466 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
23467 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
23468 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
23469 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
23470 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
23471 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
23472 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
23473 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
23474 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
23475 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
23476 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
23477 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
23478 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v30
23479 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
23480 ; GFX8-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
23481 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
23482 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v17, 16
23483 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v18, 16
23484 ; GFX8-NEXT:    v_alignbit_b32 v2, v2, v19, 16
23485 ; GFX8-NEXT:    v_alignbit_b32 v3, v3, v20, 16
23486 ; GFX8-NEXT:    v_alignbit_b32 v4, v4, v21, 16
23487 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v22, 16
23488 ; GFX8-NEXT:    v_alignbit_b32 v6, v6, v23, 16
23489 ; GFX8-NEXT:    v_alignbit_b32 v7, v7, v24, 16
23490 ; GFX8-NEXT:    v_alignbit_b32 v8, v8, v25, 16
23491 ; GFX8-NEXT:    v_alignbit_b32 v9, v9, v26, 16
23492 ; GFX8-NEXT:    v_alignbit_b32 v10, v10, v27, 16
23493 ; GFX8-NEXT:    v_alignbit_b32 v11, v11, v28, 16
23494 ; GFX8-NEXT:    v_alignbit_b32 v12, v12, v29, 16
23495 ; GFX8-NEXT:    v_alignbit_b32 v13, v13, v32, 16
23496 ; GFX8-NEXT:    v_alignbit_b32 v15, v16, v15, 16
23497 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
23499 ; GFX9-LABEL: v_maxnum_v32bf16:
23500 ; GFX9:       ; %bb.0:
23501 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23502 ; GFX9-NEXT:    v_lshlrev_b32_e32 v31, 16, v30
23503 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v14
23504 ; GFX9-NEXT:    v_max_f32_e32 v31, v32, v31
23505 ; GFX9-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
23506 ; GFX9-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
23507 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
23508 ; GFX9-NEXT:    v_bfe_u32 v32, v31, 16, 1
23509 ; GFX9-NEXT:    v_max_f32_e32 v14, v14, v30
23510 ; GFX9-NEXT:    v_add3_u32 v32, v32, v31, s4
23511 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v31
23512 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v31, v31
23513 ; GFX9-NEXT:    v_bfe_u32 v30, v14, 16, 1
23514 ; GFX9-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc
23515 ; GFX9-NEXT:    v_add3_u32 v30, v30, v14, s4
23516 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v14
23517 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v14, v14
23518 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v30, v32, vcc
23519 ; GFX9-NEXT:    v_lshlrev_b32_e32 v30, 16, v29
23520 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v13
23521 ; GFX9-NEXT:    v_max_f32_e32 v30, v32, v30
23522 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
23523 ; GFX9-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
23524 ; GFX9-NEXT:    v_bfe_u32 v32, v30, 16, 1
23525 ; GFX9-NEXT:    v_max_f32_e32 v13, v13, v29
23526 ; GFX9-NEXT:    v_add3_u32 v32, v32, v30, s4
23527 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v30
23528 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v30, v30
23529 ; GFX9-NEXT:    v_bfe_u32 v29, v13, 16, 1
23530 ; GFX9-NEXT:    v_cndmask_b32_e32 v30, v32, v33, vcc
23531 ; GFX9-NEXT:    v_add3_u32 v29, v29, v13, s4
23532 ; GFX9-NEXT:    v_or_b32_e32 v32, 0x400000, v13
23533 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v13, v13
23534 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v29, v32, vcc
23535 ; GFX9-NEXT:    v_lshlrev_b32_e32 v29, 16, v28
23536 ; GFX9-NEXT:    v_lshlrev_b32_e32 v32, 16, v12
23537 ; GFX9-NEXT:    v_max_f32_e32 v32, v32, v29
23538 ; GFX9-NEXT:    buffer_load_dword v29, off, s[0:3], s32
23539 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v15
23540 ; GFX9-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
23541 ; GFX9-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
23542 ; GFX9-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
23543 ; GFX9-NEXT:    v_max_f32_e32 v12, v12, v28
23544 ; GFX9-NEXT:    v_bfe_u32 v28, v12, 16, 1
23545 ; GFX9-NEXT:    v_add3_u32 v28, v28, v12, s4
23546 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
23547 ; GFX9-NEXT:    v_lshlrev_b32_e32 v34, 16, v29
23548 ; GFX9-NEXT:    v_max_f32_e32 v33, v33, v34
23549 ; GFX9-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
23550 ; GFX9-NEXT:    v_max_f32_e32 v29, v15, v29
23551 ; GFX9-NEXT:    v_bfe_u32 v15, v33, 16, 1
23552 ; GFX9-NEXT:    v_add3_u32 v15, v15, v33, s4
23553 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v33
23554 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v33, v33
23555 ; GFX9-NEXT:    v_bfe_u32 v33, v29, 16, 1
23556 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v15, v34, vcc
23557 ; GFX9-NEXT:    v_add3_u32 v33, v33, v29, s4
23558 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v29
23559 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v29, v29
23560 ; GFX9-NEXT:    v_cndmask_b32_e32 v29, v33, v34, vcc
23561 ; GFX9-NEXT:    v_bfe_u32 v33, v32, 16, 1
23562 ; GFX9-NEXT:    v_add3_u32 v33, v33, v32, s4
23563 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v32
23564 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v32, v32
23565 ; GFX9-NEXT:    v_cndmask_b32_e32 v32, v33, v34, vcc
23566 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v12
23567 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v12, v12
23568 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v28, v33, vcc
23569 ; GFX9-NEXT:    v_lshlrev_b32_e32 v28, 16, v27
23570 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v11
23571 ; GFX9-NEXT:    v_max_f32_e32 v28, v33, v28
23572 ; GFX9-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
23573 ; GFX9-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
23574 ; GFX9-NEXT:    v_bfe_u32 v33, v28, 16, 1
23575 ; GFX9-NEXT:    v_max_f32_e32 v11, v11, v27
23576 ; GFX9-NEXT:    v_add3_u32 v33, v33, v28, s4
23577 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v28
23578 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v28, v28
23579 ; GFX9-NEXT:    v_bfe_u32 v27, v11, 16, 1
23580 ; GFX9-NEXT:    v_cndmask_b32_e32 v28, v33, v34, vcc
23581 ; GFX9-NEXT:    v_add3_u32 v27, v27, v11, s4
23582 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v11
23583 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v11, v11
23584 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v27, v33, vcc
23585 ; GFX9-NEXT:    v_lshlrev_b32_e32 v27, 16, v26
23586 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v10
23587 ; GFX9-NEXT:    v_max_f32_e32 v27, v33, v27
23588 ; GFX9-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
23589 ; GFX9-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
23590 ; GFX9-NEXT:    v_bfe_u32 v33, v27, 16, 1
23591 ; GFX9-NEXT:    v_max_f32_e32 v10, v10, v26
23592 ; GFX9-NEXT:    v_add3_u32 v33, v33, v27, s4
23593 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v27
23594 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v27, v27
23595 ; GFX9-NEXT:    v_bfe_u32 v26, v10, 16, 1
23596 ; GFX9-NEXT:    v_cndmask_b32_e32 v27, v33, v34, vcc
23597 ; GFX9-NEXT:    v_add3_u32 v26, v26, v10, s4
23598 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v10
23599 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v10, v10
23600 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v26, v33, vcc
23601 ; GFX9-NEXT:    v_lshlrev_b32_e32 v26, 16, v25
23602 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v9
23603 ; GFX9-NEXT:    v_max_f32_e32 v26, v33, v26
23604 ; GFX9-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
23605 ; GFX9-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
23606 ; GFX9-NEXT:    v_bfe_u32 v33, v26, 16, 1
23607 ; GFX9-NEXT:    v_max_f32_e32 v9, v9, v25
23608 ; GFX9-NEXT:    v_add3_u32 v33, v33, v26, s4
23609 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v26
23610 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v26, v26
23611 ; GFX9-NEXT:    v_bfe_u32 v25, v9, 16, 1
23612 ; GFX9-NEXT:    v_cndmask_b32_e32 v26, v33, v34, vcc
23613 ; GFX9-NEXT:    v_add3_u32 v25, v25, v9, s4
23614 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v9
23615 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v9, v9
23616 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v25, v33, vcc
23617 ; GFX9-NEXT:    v_lshlrev_b32_e32 v25, 16, v24
23618 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v8
23619 ; GFX9-NEXT:    v_max_f32_e32 v25, v33, v25
23620 ; GFX9-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
23621 ; GFX9-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
23622 ; GFX9-NEXT:    v_bfe_u32 v33, v25, 16, 1
23623 ; GFX9-NEXT:    v_max_f32_e32 v8, v8, v24
23624 ; GFX9-NEXT:    v_add3_u32 v33, v33, v25, s4
23625 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v25
23626 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v25, v25
23627 ; GFX9-NEXT:    v_bfe_u32 v24, v8, 16, 1
23628 ; GFX9-NEXT:    v_cndmask_b32_e32 v25, v33, v34, vcc
23629 ; GFX9-NEXT:    v_add3_u32 v24, v24, v8, s4
23630 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v8
23631 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
23632 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v24, v33, vcc
23633 ; GFX9-NEXT:    v_lshlrev_b32_e32 v24, 16, v23
23634 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v7
23635 ; GFX9-NEXT:    v_max_f32_e32 v24, v33, v24
23636 ; GFX9-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
23637 ; GFX9-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
23638 ; GFX9-NEXT:    v_bfe_u32 v33, v24, 16, 1
23639 ; GFX9-NEXT:    v_max_f32_e32 v7, v7, v23
23640 ; GFX9-NEXT:    v_add3_u32 v33, v33, v24, s4
23641 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v24
23642 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v24, v24
23643 ; GFX9-NEXT:    v_bfe_u32 v23, v7, 16, 1
23644 ; GFX9-NEXT:    v_cndmask_b32_e32 v24, v33, v34, vcc
23645 ; GFX9-NEXT:    v_add3_u32 v23, v23, v7, s4
23646 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v7
23647 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v7, v7
23648 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v23, v33, vcc
23649 ; GFX9-NEXT:    v_lshlrev_b32_e32 v23, 16, v22
23650 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v6
23651 ; GFX9-NEXT:    v_max_f32_e32 v23, v33, v23
23652 ; GFX9-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
23653 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
23654 ; GFX9-NEXT:    v_bfe_u32 v33, v23, 16, 1
23655 ; GFX9-NEXT:    v_max_f32_e32 v6, v6, v22
23656 ; GFX9-NEXT:    v_add3_u32 v33, v33, v23, s4
23657 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v23
23658 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v23, v23
23659 ; GFX9-NEXT:    v_bfe_u32 v22, v6, 16, 1
23660 ; GFX9-NEXT:    v_cndmask_b32_e32 v23, v33, v34, vcc
23661 ; GFX9-NEXT:    v_add3_u32 v22, v22, v6, s4
23662 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v6
23663 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
23664 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v22, v33, vcc
23665 ; GFX9-NEXT:    v_lshlrev_b32_e32 v22, 16, v21
23666 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v5
23667 ; GFX9-NEXT:    v_max_f32_e32 v22, v33, v22
23668 ; GFX9-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
23669 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
23670 ; GFX9-NEXT:    v_bfe_u32 v33, v22, 16, 1
23671 ; GFX9-NEXT:    v_max_f32_e32 v5, v5, v21
23672 ; GFX9-NEXT:    v_add3_u32 v33, v33, v22, s4
23673 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v22
23674 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v22, v22
23675 ; GFX9-NEXT:    v_bfe_u32 v21, v5, 16, 1
23676 ; GFX9-NEXT:    v_cndmask_b32_e32 v22, v33, v34, vcc
23677 ; GFX9-NEXT:    v_add3_u32 v21, v21, v5, s4
23678 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v5
23679 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
23680 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v21, v33, vcc
23681 ; GFX9-NEXT:    v_lshlrev_b32_e32 v21, 16, v20
23682 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v4
23683 ; GFX9-NEXT:    v_max_f32_e32 v21, v33, v21
23684 ; GFX9-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
23685 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
23686 ; GFX9-NEXT:    v_bfe_u32 v33, v21, 16, 1
23687 ; GFX9-NEXT:    v_max_f32_e32 v4, v4, v20
23688 ; GFX9-NEXT:    v_add3_u32 v33, v33, v21, s4
23689 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v21
23690 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v21, v21
23691 ; GFX9-NEXT:    v_bfe_u32 v20, v4, 16, 1
23692 ; GFX9-NEXT:    v_cndmask_b32_e32 v21, v33, v34, vcc
23693 ; GFX9-NEXT:    v_add3_u32 v20, v20, v4, s4
23694 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v4
23695 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
23696 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v20, v33, vcc
23697 ; GFX9-NEXT:    v_lshlrev_b32_e32 v20, 16, v19
23698 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v3
23699 ; GFX9-NEXT:    v_max_f32_e32 v20, v33, v20
23700 ; GFX9-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
23701 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
23702 ; GFX9-NEXT:    v_bfe_u32 v33, v20, 16, 1
23703 ; GFX9-NEXT:    v_max_f32_e32 v3, v3, v19
23704 ; GFX9-NEXT:    v_add3_u32 v33, v33, v20, s4
23705 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v20
23706 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v20, v20
23707 ; GFX9-NEXT:    v_bfe_u32 v19, v3, 16, 1
23708 ; GFX9-NEXT:    v_cndmask_b32_e32 v20, v33, v34, vcc
23709 ; GFX9-NEXT:    v_add3_u32 v19, v19, v3, s4
23710 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v3
23711 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
23712 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v19, v33, vcc
23713 ; GFX9-NEXT:    v_lshlrev_b32_e32 v19, 16, v18
23714 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v2
23715 ; GFX9-NEXT:    v_max_f32_e32 v19, v33, v19
23716 ; GFX9-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
23717 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
23718 ; GFX9-NEXT:    v_bfe_u32 v33, v19, 16, 1
23719 ; GFX9-NEXT:    v_max_f32_e32 v2, v2, v18
23720 ; GFX9-NEXT:    v_add3_u32 v33, v33, v19, s4
23721 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v19
23722 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v19, v19
23723 ; GFX9-NEXT:    v_bfe_u32 v18, v2, 16, 1
23724 ; GFX9-NEXT:    v_cndmask_b32_e32 v19, v33, v34, vcc
23725 ; GFX9-NEXT:    v_add3_u32 v18, v18, v2, s4
23726 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v2
23727 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
23728 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v18, v33, vcc
23729 ; GFX9-NEXT:    v_lshlrev_b32_e32 v18, 16, v17
23730 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v1
23731 ; GFX9-NEXT:    v_max_f32_e32 v18, v33, v18
23732 ; GFX9-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
23733 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
23734 ; GFX9-NEXT:    v_bfe_u32 v33, v18, 16, 1
23735 ; GFX9-NEXT:    v_max_f32_e32 v1, v1, v17
23736 ; GFX9-NEXT:    v_add3_u32 v33, v33, v18, s4
23737 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v18
23738 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v18, v18
23739 ; GFX9-NEXT:    v_bfe_u32 v17, v1, 16, 1
23740 ; GFX9-NEXT:    v_cndmask_b32_e32 v18, v33, v34, vcc
23741 ; GFX9-NEXT:    v_add3_u32 v17, v17, v1, s4
23742 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v1
23743 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
23744 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v33, vcc
23745 ; GFX9-NEXT:    v_lshlrev_b32_e32 v17, 16, v16
23746 ; GFX9-NEXT:    v_lshlrev_b32_e32 v33, 16, v0
23747 ; GFX9-NEXT:    v_max_f32_e32 v17, v33, v17
23748 ; GFX9-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
23749 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
23750 ; GFX9-NEXT:    v_bfe_u32 v33, v17, 16, 1
23751 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v16
23752 ; GFX9-NEXT:    v_add3_u32 v33, v33, v17, s4
23753 ; GFX9-NEXT:    v_or_b32_e32 v34, 0x400000, v17
23754 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v17, v17
23755 ; GFX9-NEXT:    v_bfe_u32 v16, v0, 16, 1
23756 ; GFX9-NEXT:    v_cndmask_b32_e32 v17, v33, v34, vcc
23757 ; GFX9-NEXT:    v_add3_u32 v16, v16, v0, s4
23758 ; GFX9-NEXT:    v_or_b32_e32 v33, 0x400000, v0
23759 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
23760 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v16, v33, vcc
23761 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
23762 ; GFX9-NEXT:    v_perm_b32 v0, v0, v17, s4
23763 ; GFX9-NEXT:    v_perm_b32 v1, v1, v18, s4
23764 ; GFX9-NEXT:    v_perm_b32 v2, v2, v19, s4
23765 ; GFX9-NEXT:    v_perm_b32 v3, v3, v20, s4
23766 ; GFX9-NEXT:    v_perm_b32 v4, v4, v21, s4
23767 ; GFX9-NEXT:    v_perm_b32 v5, v5, v22, s4
23768 ; GFX9-NEXT:    v_perm_b32 v6, v6, v23, s4
23769 ; GFX9-NEXT:    v_perm_b32 v7, v7, v24, s4
23770 ; GFX9-NEXT:    v_perm_b32 v8, v8, v25, s4
23771 ; GFX9-NEXT:    v_perm_b32 v9, v9, v26, s4
23772 ; GFX9-NEXT:    v_perm_b32 v10, v10, v27, s4
23773 ; GFX9-NEXT:    v_perm_b32 v11, v11, v28, s4
23774 ; GFX9-NEXT:    v_perm_b32 v12, v12, v32, s4
23775 ; GFX9-NEXT:    v_perm_b32 v13, v13, v30, s4
23776 ; GFX9-NEXT:    v_perm_b32 v14, v14, v31, s4
23777 ; GFX9-NEXT:    v_perm_b32 v15, v29, v15, s4
23778 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
23780 ; GFX10-LABEL: v_maxnum_v32bf16:
23781 ; GFX10:       ; %bb.0:
23782 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23783 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32
23784 ; GFX10-NEXT:    v_lshlrev_b32_e32 v39, 16, v27
23785 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
23786 ; GFX10-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
23787 ; GFX10-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
23788 ; GFX10-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
23789 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
23790 ; GFX10-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
23791 ; GFX10-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
23792 ; GFX10-NEXT:    v_lshlrev_b32_e32 v37, 16, v28
23793 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v12
23794 ; GFX10-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
23795 ; GFX10-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
23796 ; GFX10-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
23797 ; GFX10-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
23798 ; GFX10-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
23799 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
23800 ; GFX10-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
23801 ; GFX10-NEXT:    v_lshlrev_b32_e32 v54, 16, v8
23802 ; GFX10-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
23803 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
23804 ; GFX10-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
23805 ; GFX10-NEXT:    v_lshlrev_b32_e32 v64, 16, v7
23806 ; GFX10-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
23807 ; GFX10-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
23808 ; GFX10-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
23809 ; GFX10-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
23810 ; GFX10-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
23811 ; GFX10-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
23812 ; GFX10-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
23813 ; GFX10-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
23814 ; GFX10-NEXT:    v_max_f32_e32 v39, v48, v39
23815 ; GFX10-NEXT:    v_max_f32_e32 v11, v11, v27
23816 ; GFX10-NEXT:    v_max_f32_e32 v49, v50, v49
23817 ; GFX10-NEXT:    v_max_f32_e32 v10, v10, v26
23818 ; GFX10-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
23819 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
23820 ; GFX10-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
23821 ; GFX10-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
23822 ; GFX10-NEXT:    v_max_f32_e32 v37, v38, v37
23823 ; GFX10-NEXT:    v_lshlrev_b32_e32 v38, 16, v18
23824 ; GFX10-NEXT:    v_max_f32_e32 v12, v12, v28
23825 ; GFX10-NEXT:    v_lshlrev_b32_e32 v28, 16, v2
23826 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
23827 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
23828 ; GFX10-NEXT:    v_lshlrev_b32_e32 v48, 16, v17
23829 ; GFX10-NEXT:    v_lshlrev_b32_e32 v27, 16, v1
23830 ; GFX10-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
23831 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
23832 ; GFX10-NEXT:    v_lshlrev_b32_e32 v50, 16, v16
23833 ; GFX10-NEXT:    v_lshlrev_b32_e32 v26, 16, v0
23834 ; GFX10-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
23835 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
23836 ; GFX10-NEXT:    v_max_f32_e32 v9, v9, v25
23837 ; GFX10-NEXT:    v_max_f32_e32 v25, v54, v53
23838 ; GFX10-NEXT:    v_max_f32_e32 v8, v8, v24
23839 ; GFX10-NEXT:    v_max_f32_e32 v24, v64, v55
23840 ; GFX10-NEXT:    v_max_f32_e32 v7, v7, v23
23841 ; GFX10-NEXT:    v_max_f32_e32 v23, v66, v65
23842 ; GFX10-NEXT:    v_max_f32_e32 v6, v6, v22
23843 ; GFX10-NEXT:    v_max_f32_e32 v22, v68, v67
23844 ; GFX10-NEXT:    v_bfe_u32 v53, v39, 16, 1
23845 ; GFX10-NEXT:    v_bfe_u32 v55, v11, 16, 1
23846 ; GFX10-NEXT:    v_bfe_u32 v65, v49, 16, 1
23847 ; GFX10-NEXT:    v_bfe_u32 v67, v10, 16, 1
23848 ; GFX10-NEXT:    v_lshlrev_b32_e32 v33, 16, v30
23849 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v14
23850 ; GFX10-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
23851 ; GFX10-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
23852 ; GFX10-NEXT:    v_max_f32_e32 v35, v36, v35
23853 ; GFX10-NEXT:    v_lshlrev_b32_e32 v36, 16, v19
23854 ; GFX10-NEXT:    v_max_f32_e32 v13, v13, v29
23855 ; GFX10-NEXT:    v_lshlrev_b32_e32 v29, 16, v3
23856 ; GFX10-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
23857 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
23858 ; GFX10-NEXT:    v_max_f32_e32 v2, v2, v18
23859 ; GFX10-NEXT:    v_max_f32_e32 v18, v27, v48
23860 ; GFX10-NEXT:    v_max_f32_e32 v1, v1, v17
23861 ; GFX10-NEXT:    v_max_f32_e32 v17, v26, v50
23862 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v16
23863 ; GFX10-NEXT:    v_or_b32_e32 v54, 0x400000, v39
23864 ; GFX10-NEXT:    v_or_b32_e32 v64, 0x400000, v11
23865 ; GFX10-NEXT:    v_or_b32_e32 v66, 0x400000, v49
23866 ; GFX10-NEXT:    v_or_b32_e32 v68, 0x400000, v10
23867 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v39, v39
23868 ; GFX10-NEXT:    v_add3_u32 v39, v53, v39, 0x7fff
23869 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v11, v11
23870 ; GFX10-NEXT:    v_add3_u32 v11, v55, v11, 0x7fff
23871 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v49, v49
23872 ; GFX10-NEXT:    v_add3_u32 v49, v65, v49, 0x7fff
23873 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v10, v10
23874 ; GFX10-NEXT:    v_add3_u32 v10, v67, v10, 0x7fff
23875 ; GFX10-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
23876 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
23877 ; GFX10-NEXT:    v_max_f32_e32 v33, v34, v33
23878 ; GFX10-NEXT:    v_lshlrev_b32_e32 v34, 16, v20
23879 ; GFX10-NEXT:    v_max_f32_e32 v14, v14, v30
23880 ; GFX10-NEXT:    v_lshlrev_b32_e32 v30, 16, v4
23881 ; GFX10-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
23882 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
23883 ; GFX10-NEXT:    v_max_f32_e32 v3, v3, v19
23884 ; GFX10-NEXT:    v_max_f32_e32 v19, v28, v38
23885 ; GFX10-NEXT:    v_bfe_u32 v38, v37, 16, 1
23886 ; GFX10-NEXT:    v_bfe_u32 v50, v12, 16, 1
23887 ; GFX10-NEXT:    v_cndmask_b32_e64 v39, v39, v54, s9
23888 ; GFX10-NEXT:    v_bfe_u32 v54, v18, 16, 1
23889 ; GFX10-NEXT:    v_cndmask_b32_e64 v11, v11, v64, s10
23890 ; GFX10-NEXT:    v_bfe_u32 v64, v1, 16, 1
23891 ; GFX10-NEXT:    v_cndmask_b32_e64 v49, v49, v66, s11
23892 ; GFX10-NEXT:    v_bfe_u32 v66, v17, 16, 1
23893 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v10, v68, s12
23894 ; GFX10-NEXT:    v_bfe_u32 v68, v0, 16, 1
23895 ; GFX10-NEXT:    v_max_f32_e32 v51, v52, v51
23896 ; GFX10-NEXT:    v_max_f32_e32 v5, v5, v21
23897 ; GFX10-NEXT:    v_max_f32_e32 v21, v30, v34
23898 ; GFX10-NEXT:    v_max_f32_e32 v4, v4, v20
23899 ; GFX10-NEXT:    v_max_f32_e32 v20, v29, v36
23900 ; GFX10-NEXT:    v_bfe_u32 v16, v33, 16, 1
23901 ; GFX10-NEXT:    v_bfe_u32 v27, v14, 16, 1
23902 ; GFX10-NEXT:    v_bfe_u32 v29, v35, 16, 1
23903 ; GFX10-NEXT:    v_bfe_u32 v34, v13, 16, 1
23904 ; GFX10-NEXT:    v_or_b32_e32 v48, 0x400000, v37
23905 ; GFX10-NEXT:    v_or_b32_e32 v52, 0x400000, v12
23906 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v37, v37
23907 ; GFX10-NEXT:    v_add3_u32 v37, v38, v37, 0x7fff
23908 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v12, v12
23909 ; GFX10-NEXT:    v_add3_u32 v12, v50, v12, 0x7fff
23910 ; GFX10-NEXT:    v_cmp_u_f32_e64 s10, v18, v18
23911 ; GFX10-NEXT:    v_add3_u32 v54, v54, v18, 0x7fff
23912 ; GFX10-NEXT:    v_or_b32_e32 v18, 0x400000, v18
23913 ; GFX10-NEXT:    v_cmp_u_f32_e64 s11, v1, v1
23914 ; GFX10-NEXT:    v_add3_u32 v64, v64, v1, 0x7fff
23915 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v1
23916 ; GFX10-NEXT:    v_cmp_u_f32_e64 s12, v17, v17
23917 ; GFX10-NEXT:    v_add3_u32 v66, v66, v17, 0x7fff
23918 ; GFX10-NEXT:    v_or_b32_e32 v17, 0x400000, v17
23919 ; GFX10-NEXT:    v_cmp_u_f32_e64 s22, v0, v0
23920 ; GFX10-NEXT:    v_add3_u32 v68, v68, v0, 0x7fff
23921 ; GFX10-NEXT:    v_or_b32_e32 v0, 0x400000, v0
23922 ; GFX10-NEXT:    v_or_b32_e32 v26, 0x400000, v33
23923 ; GFX10-NEXT:    v_or_b32_e32 v28, 0x400000, v14
23924 ; GFX10-NEXT:    v_or_b32_e32 v30, 0x400000, v35
23925 ; GFX10-NEXT:    v_or_b32_e32 v36, 0x400000, v13
23926 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
23927 ; GFX10-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
23928 ; GFX10-NEXT:    v_bfe_u32 v33, v51, 16, 1
23929 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v14, v14
23930 ; GFX10-NEXT:    v_add3_u32 v14, v27, v14, 0x7fff
23931 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v35, v35
23932 ; GFX10-NEXT:    v_add3_u32 v29, v29, v35, 0x7fff
23933 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v13, v13
23934 ; GFX10-NEXT:    v_add3_u32 v13, v34, v13, 0x7fff
23935 ; GFX10-NEXT:    v_bfe_u32 v65, v24, 16, 1
23936 ; GFX10-NEXT:    v_cndmask_b32_e64 v37, v37, v48, s7
23937 ; GFX10-NEXT:    v_bfe_u32 v48, v19, 16, 1
23938 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, v12, v52, s8
23939 ; GFX10-NEXT:    v_bfe_u32 v52, v2, 16, 1
23940 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, v54, v18, s10
23941 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, v66, v17, s12
23942 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v68, v0, s22
23943 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v64, v1, s11
23944 ; GFX10-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
23945 ; GFX10-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
23946 ; GFX10-NEXT:    v_or_b32_e32 v27, 0x400000, v51
23947 ; GFX10-NEXT:    v_bfe_u32 v35, v9, 16, 1
23948 ; GFX10-NEXT:    v_bfe_u32 v38, v25, 16, 1
23949 ; GFX10-NEXT:    v_or_b32_e32 v67, 0x400000, v24
23950 ; GFX10-NEXT:    v_cmp_u_f32_e64 s13, v51, v51
23951 ; GFX10-NEXT:    v_add3_u32 v33, v33, v51, 0x7fff
23952 ; GFX10-NEXT:    v_bfe_u32 v51, v7, 16, 1
23953 ; GFX10-NEXT:    v_cmp_u_f32_e64 s17, v24, v24
23954 ; GFX10-NEXT:    v_add3_u32 v24, v65, v24, 0x7fff
23955 ; GFX10-NEXT:    v_bfe_u32 v65, v6, 16, 1
23956 ; GFX10-NEXT:    v_cndmask_b32_e32 v16, v16, v26, vcc_lo
23957 ; GFX10-NEXT:    v_bfe_u32 v26, v21, 16, 1
23958 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, v14, v28, s4
23959 ; GFX10-NEXT:    v_bfe_u32 v28, v4, 16, 1
23960 ; GFX10-NEXT:    v_cndmask_b32_e64 v29, v29, v30, s5
23961 ; GFX10-NEXT:    v_bfe_u32 v30, v20, 16, 1
23962 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, v13, v36, s6
23963 ; GFX10-NEXT:    v_bfe_u32 v36, v3, 16, 1
23964 ; GFX10-NEXT:    v_cmp_u_f32_e64 s8, v19, v19
23965 ; GFX10-NEXT:    v_add3_u32 v48, v48, v19, 0x7fff
23966 ; GFX10-NEXT:    v_or_b32_e32 v19, 0x400000, v19
23967 ; GFX10-NEXT:    v_cmp_u_f32_e64 s9, v2, v2
23968 ; GFX10-NEXT:    v_add3_u32 v52, v52, v2, 0x7fff
23969 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v2
23970 ; GFX10-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
23971 ; GFX10-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
23972 ; GFX10-NEXT:    v_or_b32_e32 v34, 0x400000, v9
23973 ; GFX10-NEXT:    v_or_b32_e32 v50, 0x400000, v25
23974 ; GFX10-NEXT:    v_bfe_u32 v53, v8, 16, 1
23975 ; GFX10-NEXT:    v_cmp_u_f32_e64 s14, v9, v9
23976 ; GFX10-NEXT:    v_add3_u32 v9, v35, v9, 0x7fff
23977 ; GFX10-NEXT:    v_or_b32_e32 v35, 0x400000, v7
23978 ; GFX10-NEXT:    v_cmp_u_f32_e64 s15, v25, v25
23979 ; GFX10-NEXT:    v_add3_u32 v25, v38, v25, 0x7fff
23980 ; GFX10-NEXT:    v_bfe_u32 v38, v23, 16, 1
23981 ; GFX10-NEXT:    v_cmp_u_f32_e64 s18, v7, v7
23982 ; GFX10-NEXT:    v_add3_u32 v7, v51, v7, 0x7fff
23983 ; GFX10-NEXT:    v_or_b32_e32 v51, 0x400000, v6
23984 ; GFX10-NEXT:    v_cmp_u_f32_e64 s20, v6, v6
23985 ; GFX10-NEXT:    v_add3_u32 v6, v65, v6, 0x7fff
23986 ; GFX10-NEXT:    v_bfe_u32 v65, v5, 16, 1
23987 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v21, v21
23988 ; GFX10-NEXT:    v_add3_u32 v26, v26, v21, 0x7fff
23989 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v21
23990 ; GFX10-NEXT:    v_cmp_u_f32_e64 s5, v4, v4
23991 ; GFX10-NEXT:    v_add3_u32 v28, v28, v4, 0x7fff
23992 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v4
23993 ; GFX10-NEXT:    v_cmp_u_f32_e64 s6, v20, v20
23994 ; GFX10-NEXT:    v_add3_u32 v30, v30, v20, 0x7fff
23995 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v20
23996 ; GFX10-NEXT:    v_cmp_u_f32_e64 s7, v3, v3
23997 ; GFX10-NEXT:    v_add3_u32 v36, v36, v3, 0x7fff
23998 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v3
23999 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, v48, v19, s8
24000 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v52, v2, s9
24001 ; GFX10-NEXT:    v_or_b32_e32 v55, 0x400000, v8
24002 ; GFX10-NEXT:    v_cmp_u_f32_e64 s16, v8, v8
24003 ; GFX10-NEXT:    v_add3_u32 v8, v53, v8, 0x7fff
24004 ; GFX10-NEXT:    v_or_b32_e32 v53, 0x400000, v23
24005 ; GFX10-NEXT:    v_cmp_u_f32_e64 s19, v23, v23
24006 ; GFX10-NEXT:    v_add3_u32 v23, v38, v23, 0x7fff
24007 ; GFX10-NEXT:    v_bfe_u32 v38, v22, 16, 1
24008 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
24009 ; GFX10-NEXT:    v_add3_u32 v65, v65, v5, 0x7fff
24010 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v5
24011 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, v26, v21, s4
24012 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v28, v4, s5
24013 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, v30, v20, s6
24014 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v36, v3, s7
24015 ; GFX10-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
24016 ; GFX10-NEXT:    v_cmp_u_f32_e64 s21, v22, v22
24017 ; GFX10-NEXT:    v_add3_u32 v38, v38, v22, 0x7fff
24018 ; GFX10-NEXT:    v_or_b32_e32 v22, 0x400000, v22
24019 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v65, v5, vcc_lo
24020 ; GFX10-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
24021 ; GFX10-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
24022 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, v33, v27, s13
24023 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, v9, v34, s14
24024 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, v25, v50, s15
24025 ; GFX10-NEXT:    v_cndmask_b32_e64 v8, v8, v55, s16
24026 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, v24, v67, s17
24027 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v35, s18
24028 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, v23, v53, s19
24029 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v51, s20
24030 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, v38, v22, s21
24031 ; GFX10-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
24032 ; GFX10-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
24033 ; GFX10-NEXT:    v_perm_b32 v9, v9, v27, 0x7060302
24034 ; GFX10-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
24035 ; GFX10-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
24036 ; GFX10-NEXT:    v_perm_b32 v10, v10, v49, 0x7060302
24037 ; GFX10-NEXT:    v_perm_b32 v11, v11, v39, 0x7060302
24038 ; GFX10-NEXT:    v_perm_b32 v12, v12, v37, 0x7060302
24039 ; GFX10-NEXT:    v_perm_b32 v13, v13, v29, 0x7060302
24040 ; GFX10-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
24041 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
24042 ; GFX10-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
24043 ; GFX10-NEXT:    v_and_b32_e32 v18, 0xffff0000, v32
24044 ; GFX10-NEXT:    v_max_f32_e32 v17, v31, v17
24045 ; GFX10-NEXT:    v_max_f32_e32 v15, v15, v18
24046 ; GFX10-NEXT:    v_bfe_u32 v18, v17, 16, 1
24047 ; GFX10-NEXT:    v_bfe_u32 v19, v15, 16, 1
24048 ; GFX10-NEXT:    v_or_b32_e32 v20, 0x400000, v17
24049 ; GFX10-NEXT:    v_or_b32_e32 v21, 0x400000, v15
24050 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
24051 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v15, v15
24052 ; GFX10-NEXT:    v_add3_u32 v17, v18, v17, 0x7fff
24053 ; GFX10-NEXT:    v_add3_u32 v15, v19, v15, 0x7fff
24054 ; GFX10-NEXT:    v_cndmask_b32_e32 v17, v17, v20, vcc_lo
24055 ; GFX10-NEXT:    v_cndmask_b32_e64 v15, v15, v21, s4
24056 ; GFX10-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
24057 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24059 ; GFX11-LABEL: v_maxnum_v32bf16:
24060 ; GFX11:       ; %bb.0:
24061 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24062 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32
24063 ; GFX11-NEXT:    v_lshlrev_b32_e32 v67, 16, v21
24064 ; GFX11-NEXT:    v_lshlrev_b32_e32 v68, 16, v5
24065 ; GFX11-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
24066 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
24067 ; GFX11-NEXT:    v_lshlrev_b32_e32 v83, 16, v17
24068 ; GFX11-NEXT:    v_lshlrev_b32_e32 v84, 16, v1
24069 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
24070 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
24071 ; GFX11-NEXT:    v_lshlrev_b32_e32 v49, 16, v26
24072 ; GFX11-NEXT:    v_dual_max_f32 v5, v5, v21 :: v_dual_and_b32 v26, 0xffff0000, v26
24073 ; GFX11-NEXT:    v_lshlrev_b32_e32 v53, 16, v24
24074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
24075 ; GFX11-NEXT:    v_dual_max_f32 v1, v1, v17 :: v_dual_and_b32 v24, 0xffff0000, v24
24076 ; GFX11-NEXT:    v_lshlrev_b32_e32 v71, 16, v19
24077 ; GFX11-NEXT:    v_bfe_u32 v103, v5, 16, 1
24078 ; GFX11-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
24079 ; GFX11-NEXT:    v_lshlrev_b32_e32 v81, 16, v18
24080 ; GFX11-NEXT:    v_bfe_u32 v135, v1, 16, 1
24081 ; GFX11-NEXT:    v_or_b32_e32 v112, 0x400000, v5
24082 ; GFX11-NEXT:    v_or_b32_e32 v144, 0x400000, v1
24083 ; GFX11-NEXT:    v_add3_u32 v103, v103, v5, 0x7fff
24084 ; GFX11-NEXT:    v_lshlrev_b32_e32 v80, 16, v3
24085 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
24086 ; GFX11-NEXT:    v_add3_u32 v135, v135, v1, 0x7fff
24087 ; GFX11-NEXT:    v_lshlrev_b32_e32 v82, 16, v2
24088 ; GFX11-NEXT:    v_lshlrev_b32_e32 v52, 16, v9
24089 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
24090 ; GFX11-NEXT:    v_dual_max_f32 v3, v3, v19 :: v_dual_lshlrev_b32 v54, 16, v8
24091 ; GFX11-NEXT:    v_lshlrev_b32_e32 v85, 16, v16
24092 ; GFX11-NEXT:    v_dual_max_f32 v19, v82, v81 :: v_dual_lshlrev_b32 v64, 16, v7
24093 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
24094 ; GFX11-NEXT:    v_lshlrev_b32_e32 v65, 16, v22
24095 ; GFX11-NEXT:    v_lshlrev_b32_e32 v66, 16, v6
24096 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
24097 ; GFX11-NEXT:    v_bfe_u32 v129, v19, 16, 1
24098 ; GFX11-NEXT:    v_or_b32_e32 v130, 0x400000, v19
24099 ; GFX11-NEXT:    v_lshlrev_b32_e32 v48, 16, v11
24100 ; GFX11-NEXT:    v_bfe_u32 v119, v3, 16, 1
24101 ; GFX11-NEXT:    v_lshlrev_b32_e32 v51, 16, v25
24102 ; GFX11-NEXT:    v_add3_u32 v129, v129, v19, 0x7fff
24103 ; GFX11-NEXT:    v_lshlrev_b32_e32 v86, 16, v0
24104 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
24105 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24106 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
24107 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
24108 ; GFX11-NEXT:    v_dual_max_f32 v17, v86, v85 :: v_dual_and_b32 v2, 0xffff0000, v2
24109 ; GFX11-NEXT:    v_dual_max_f32 v8, v8, v24 :: v_dual_lshlrev_b32 v39, 16, v27
24110 ; GFX11-NEXT:    v_or_b32_e32 v128, 0x400000, v3
24111 ; GFX11-NEXT:    v_add3_u32 v119, v119, v3, 0x7fff
24112 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
24113 ; GFX11-NEXT:    v_bfe_u32 v145, v17, 16, 1
24114 ; GFX11-NEXT:    v_or_b32_e32 v146, 0x400000, v17
24115 ; GFX11-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
24116 ; GFX11-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
24117 ; GFX11-NEXT:    v_lshlrev_b32_e32 v70, 16, v4
24118 ; GFX11-NEXT:    v_add3_u32 v145, v145, v17, 0x7fff
24119 ; GFX11-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
24120 ; GFX11-NEXT:    v_lshlrev_b32_e32 v55, 16, v23
24121 ; GFX11-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
24122 ; GFX11-NEXT:    v_lshlrev_b32_e32 v50, 16, v10
24123 ; GFX11-NEXT:    v_max_f32_e32 v2, v2, v18
24124 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v16
24125 ; GFX11-NEXT:    v_dual_max_f32 v24, v64, v55 :: v_dual_lshlrev_b32 v37, 16, v28
24126 ; GFX11-NEXT:    v_max_f32_e32 v7, v7, v23
24127 ; GFX11-NEXT:    v_dual_max_f32 v23, v66, v65 :: v_dual_max_f32 v18, v84, v83
24128 ; GFX11-NEXT:    v_dual_max_f32 v9, v9, v25 :: v_dual_and_b32 v28, 0xffff0000, v28
24129 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
24130 ; GFX11-NEXT:    v_bfe_u32 v85, v24, 16, 1
24131 ; GFX11-NEXT:    v_bfe_u32 v97, v23, 16, 1
24132 ; GFX11-NEXT:    v_or_b32_e32 v86, 0x400000, v24
24133 ; GFX11-NEXT:    v_or_b32_e32 v98, 0x400000, v23
24134 ; GFX11-NEXT:    v_bfe_u32 v87, v7, 16, 1
24135 ; GFX11-NEXT:    v_add3_u32 v85, v85, v24, 0x7fff
24136 ; GFX11-NEXT:    v_lshlrev_b32_e32 v69, 16, v20
24137 ; GFX11-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
24138 ; GFX11-NEXT:    v_add3_u32 v97, v97, v23, 0x7fff
24139 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
24140 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
24141 ; GFX11-NEXT:    v_or_b32_e32 v96, 0x400000, v7
24142 ; GFX11-NEXT:    v_add3_u32 v87, v87, v7, 0x7fff
24143 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
24144 ; GFX11-NEXT:    v_max_f32_e32 v4, v4, v20
24145 ; GFX11-NEXT:    v_max_f32_e32 v20, v80, v71
24146 ; GFX11-NEXT:    v_bfe_u32 v71, v9, 16, 1
24147 ; GFX11-NEXT:    v_or_b32_e32 v80, 0x400000, v9
24148 ; GFX11-NEXT:    v_lshlrev_b32_e32 v35, 16, v29
24149 ; GFX11-NEXT:    v_dual_max_f32 v21, v70, v69 :: v_dual_and_b32 v10, 0xffff0000, v10
24150 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
24151 ; GFX11-NEXT:    v_add3_u32 v71, v71, v9, 0x7fff
24152 ; GFX11-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
24153 ; GFX11-NEXT:    v_dual_max_f32 v10, v10, v26 :: v_dual_and_b32 v29, 0xffff0000, v29
24154 ; GFX11-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
24155 ; GFX11-NEXT:    v_max_f32_e32 v26, v52, v51
24156 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
24157 ; GFX11-NEXT:    v_max_f32_e32 v6, v6, v22
24158 ; GFX11-NEXT:    v_lshlrev_b32_e32 v36, 16, v13
24159 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
24160 ; GFX11-NEXT:    v_dual_max_f32 v11, v11, v27 :: v_dual_lshlrev_b32 v34, 16, v14
24161 ; GFX11-NEXT:    v_dual_max_f32 v22, v68, v67 :: v_dual_lshlrev_b32 v33, 16, v30
24162 ; GFX11-NEXT:    v_dual_max_f32 v27, v50, v49 :: v_dual_lshlrev_b32 v38, 16, v12
24163 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
24164 ; GFX11-NEXT:    v_dual_max_f32 v25, v54, v53 :: v_dual_and_b32 v12, 0xffff0000, v12
24165 ; GFX11-NEXT:    v_dual_max_f32 v13, v13, v29 :: v_dual_and_b32 v30, 0xffff0000, v30
24166 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
24167 ; GFX11-NEXT:    v_max_f32_e32 v29, v38, v37
24168 ; GFX11-NEXT:    v_lshlrev_b32_e32 v31, 16, v15
24169 ; GFX11-NEXT:    v_dual_max_f32 v12, v12, v28 :: v_dual_and_b32 v15, 0xffff0000, v15
24170 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
24171 ; GFX11-NEXT:    v_max_f32_e32 v14, v14, v30
24172 ; GFX11-NEXT:    v_max_f32_e32 v28, v48, v39
24173 ; GFX11-NEXT:    v_dual_max_f32 v30, v36, v35 :: v_dual_max_f32 v33, v34, v33
24174 ; GFX11-NEXT:    v_bfe_u32 v39, v13, 16, 1
24175 ; GFX11-NEXT:    v_bfe_u32 v35, v14, 16, 1
24176 ; GFX11-NEXT:    v_or_b32_e32 v36, 0x400000, v14
24177 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
24178 ; GFX11-NEXT:    v_bfe_u32 v37, v30, 16, 1
24179 ; GFX11-NEXT:    v_bfe_u32 v16, v33, 16, 1
24180 ; GFX11-NEXT:    v_or_b32_e32 v34, 0x400000, v33
24181 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v33, v33
24182 ; GFX11-NEXT:    v_add3_u32 v35, v35, v14, 0x7fff
24183 ; GFX11-NEXT:    v_or_b32_e32 v38, 0x400000, v30
24184 ; GFX11-NEXT:    v_add3_u32 v16, v16, v33, 0x7fff
24185 ; GFX11-NEXT:    v_add3_u32 v37, v37, v30, 0x7fff
24186 ; GFX11-NEXT:    v_or_b32_e32 v48, 0x400000, v13
24187 ; GFX11-NEXT:    v_bfe_u32 v49, v29, 16, 1
24188 ; GFX11-NEXT:    v_add3_u32 v39, v39, v13, 0x7fff
24189 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v16, v34, vcc_lo
24190 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v14, v14
24191 ; GFX11-NEXT:    v_or_b32_e32 v50, 0x400000, v29
24192 ; GFX11-NEXT:    v_bfe_u32 v51, v12, 16, 1
24193 ; GFX11-NEXT:    v_add3_u32 v49, v49, v29, 0x7fff
24194 ; GFX11-NEXT:    v_or_b32_e32 v52, 0x400000, v12
24195 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, v35, v36, vcc_lo
24196 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v30, v30
24197 ; GFX11-NEXT:    v_bfe_u32 v53, v28, 16, 1
24198 ; GFX11-NEXT:    v_add3_u32 v51, v51, v12, 0x7fff
24199 ; GFX11-NEXT:    v_or_b32_e32 v54, 0x400000, v28
24200 ; GFX11-NEXT:    v_bfe_u32 v55, v11, 16, 1
24201 ; GFX11-NEXT:    v_cndmask_b32_e32 v30, v37, v38, vcc_lo
24202 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v13, v13
24203 ; GFX11-NEXT:    v_add3_u32 v53, v53, v28, 0x7fff
24204 ; GFX11-NEXT:    v_or_b32_e32 v64, 0x400000, v11
24205 ; GFX11-NEXT:    v_bfe_u32 v65, v27, 16, 1
24206 ; GFX11-NEXT:    v_add3_u32 v55, v55, v11, 0x7fff
24207 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v39, v48, vcc_lo
24208 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v29, v29
24209 ; GFX11-NEXT:    v_or_b32_e32 v66, 0x400000, v27
24210 ; GFX11-NEXT:    v_bfe_u32 v67, v10, 16, 1
24211 ; GFX11-NEXT:    v_add3_u32 v65, v65, v27, 0x7fff
24212 ; GFX11-NEXT:    v_or_b32_e32 v68, 0x400000, v10
24213 ; GFX11-NEXT:    v_cndmask_b32_e32 v29, v49, v50, vcc_lo
24214 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v12, v12
24215 ; GFX11-NEXT:    v_bfe_u32 v69, v26, 16, 1
24216 ; GFX11-NEXT:    v_add3_u32 v67, v67, v10, 0x7fff
24217 ; GFX11-NEXT:    v_or_b32_e32 v70, 0x400000, v26
24218 ; GFX11-NEXT:    v_bfe_u32 v81, v25, 16, 1
24219 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v51, v52, vcc_lo
24220 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v28, v28
24221 ; GFX11-NEXT:    v_add3_u32 v69, v69, v26, 0x7fff
24222 ; GFX11-NEXT:    v_or_b32_e32 v82, 0x400000, v25
24223 ; GFX11-NEXT:    v_bfe_u32 v83, v8, 16, 1
24224 ; GFX11-NEXT:    v_add3_u32 v81, v81, v25, 0x7fff
24225 ; GFX11-NEXT:    v_cndmask_b32_e32 v28, v53, v54, vcc_lo
24226 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v11, v11
24227 ; GFX11-NEXT:    v_or_b32_e32 v84, 0x400000, v8
24228 ; GFX11-NEXT:    v_add3_u32 v83, v83, v8, 0x7fff
24229 ; GFX11-NEXT:    v_bfe_u32 v99, v6, 16, 1
24230 ; GFX11-NEXT:    v_or_b32_e32 v100, 0x400000, v6
24231 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v55, v64, vcc_lo
24232 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v27, v27
24233 ; GFX11-NEXT:    v_bfe_u32 v101, v22, 16, 1
24234 ; GFX11-NEXT:    v_add3_u32 v99, v99, v6, 0x7fff
24235 ; GFX11-NEXT:    v_or_b32_e32 v102, 0x400000, v22
24236 ; GFX11-NEXT:    v_bfe_u32 v113, v21, 16, 1
24237 ; GFX11-NEXT:    v_cndmask_b32_e32 v27, v65, v66, vcc_lo
24238 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v10, v10
24239 ; GFX11-NEXT:    v_add3_u32 v101, v101, v22, 0x7fff
24240 ; GFX11-NEXT:    v_or_b32_e32 v114, 0x400000, v21
24241 ; GFX11-NEXT:    v_bfe_u32 v115, v4, 16, 1
24242 ; GFX11-NEXT:    v_add3_u32 v113, v113, v21, 0x7fff
24243 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v67, v68, vcc_lo
24244 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v26, v26
24245 ; GFX11-NEXT:    v_or_b32_e32 v116, 0x400000, v4
24246 ; GFX11-NEXT:    v_bfe_u32 v117, v20, 16, 1
24247 ; GFX11-NEXT:    v_add3_u32 v115, v115, v4, 0x7fff
24248 ; GFX11-NEXT:    v_or_b32_e32 v118, 0x400000, v20
24249 ; GFX11-NEXT:    v_cndmask_b32_e32 v26, v69, v70, vcc_lo
24250 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v9, v9
24251 ; GFX11-NEXT:    v_add3_u32 v117, v117, v20, 0x7fff
24252 ; GFX11-NEXT:    v_bfe_u32 v133, v18, 16, 1
24253 ; GFX11-NEXT:    v_or_b32_e32 v134, 0x400000, v18
24254 ; GFX11-NEXT:    v_bfe_u32 v147, v0, 16, 1
24255 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v71, v80, vcc_lo
24256 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v25, v25
24257 ; GFX11-NEXT:    v_add3_u32 v133, v133, v18, 0x7fff
24258 ; GFX11-NEXT:    v_or_b32_e32 v33, 0x400000, v0
24259 ; GFX11-NEXT:    v_add3_u32 v147, v147, v0, 0x7fff
24260 ; GFX11-NEXT:    v_bfe_u32 v131, v2, 16, 1
24261 ; GFX11-NEXT:    v_cndmask_b32_e32 v25, v81, v82, vcc_lo
24262 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v8, v8
24263 ; GFX11-NEXT:    v_or_b32_e32 v132, 0x400000, v2
24264 ; GFX11-NEXT:    v_perm_b32 v9, v9, v26, 0x7060302
24265 ; GFX11-NEXT:    v_add3_u32 v131, v131, v2, 0x7fff
24266 ; GFX11-NEXT:    v_perm_b32 v10, v10, v27, 0x7060302
24267 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v83, v84, vcc_lo
24268 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v24, v24
24269 ; GFX11-NEXT:    v_perm_b32 v11, v11, v28, 0x7060302
24270 ; GFX11-NEXT:    v_perm_b32 v12, v12, v29, 0x7060302
24271 ; GFX11-NEXT:    v_perm_b32 v13, v13, v30, 0x7060302
24272 ; GFX11-NEXT:    v_perm_b32 v8, v8, v25, 0x7060302
24273 ; GFX11-NEXT:    v_cndmask_b32_e32 v24, v85, v86, vcc_lo
24274 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
24275 ; GFX11-NEXT:    v_perm_b32 v14, v14, v16, 0x7060302
24276 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v87, v96, vcc_lo
24277 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v23, v23
24278 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
24279 ; GFX11-NEXT:    v_perm_b32 v7, v7, v24, 0x7060302
24280 ; GFX11-NEXT:    v_cndmask_b32_e32 v23, v97, v98, vcc_lo
24281 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
24282 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v99, v100, vcc_lo
24283 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v22, v22
24284 ; GFX11-NEXT:    v_perm_b32 v6, v6, v23, 0x7060302
24285 ; GFX11-NEXT:    v_cndmask_b32_e32 v22, v101, v102, vcc_lo
24286 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
24287 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v103, v112, vcc_lo
24288 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v21, v21
24289 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
24290 ; GFX11-NEXT:    v_perm_b32 v5, v5, v22, 0x7060302
24291 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, v113, v114, vcc_lo
24292 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
24293 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v115, v116, vcc_lo
24294 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v20, v20
24295 ; GFX11-NEXT:    v_perm_b32 v4, v4, v21, 0x7060302
24296 ; GFX11-NEXT:    v_cndmask_b32_e32 v20, v117, v118, vcc_lo
24297 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v19, v19
24298 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v129, v130, vcc_lo
24299 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v18, v18
24300 ; GFX11-NEXT:    v_cndmask_b32_e32 v18, v133, v134, vcc_lo
24301 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
24302 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v135, v144, vcc_lo
24303 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
24304 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
24305 ; GFX11-NEXT:    v_perm_b32 v1, v1, v18, 0x7060302
24306 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v145, v146, vcc_lo
24307 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24308 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v147, v33, vcc_lo
24309 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
24310 ; GFX11-NEXT:    v_perm_b32 v0, v0, v17, 0x7060302
24311 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v131, v132, vcc_lo
24312 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
24313 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
24314 ; GFX11-NEXT:    v_perm_b32 v2, v2, v19, 0x7060302
24315 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v119, v128, vcc_lo
24316 ; GFX11-NEXT:    v_perm_b32 v3, v3, v20, 0x7060302
24317 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
24318 ; GFX11-NEXT:    v_lshlrev_b32_e32 v17, 16, v32
24319 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24320 ; GFX11-NEXT:    v_dual_max_f32 v17, v31, v17 :: v_dual_and_b32 v18, 0xffff0000, v32
24321 ; GFX11-NEXT:    v_max_f32_e32 v15, v15, v18
24322 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
24323 ; GFX11-NEXT:    v_bfe_u32 v18, v17, 16, 1
24324 ; GFX11-NEXT:    v_bfe_u32 v19, v15, 16, 1
24325 ; GFX11-NEXT:    v_or_b32_e32 v20, 0x400000, v17
24326 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v17, v17
24327 ; GFX11-NEXT:    v_or_b32_e32 v21, 0x400000, v15
24328 ; GFX11-NEXT:    v_add3_u32 v18, v18, v17, 0x7fff
24329 ; GFX11-NEXT:    v_add3_u32 v19, v19, v15, 0x7fff
24330 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
24331 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v18, v20, vcc_lo
24332 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v15, v15
24333 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v19, v21, vcc_lo
24334 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
24335 ; GFX11-NEXT:    v_perm_b32 v15, v15, v17, 0x7060302
24336 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
24337   %op = call <32 x bfloat> @llvm.maxnum.v32bf16(<32 x bfloat> %a, <32 x bfloat> %b)
24338   ret <32 x bfloat> %op
24341 declare bfloat @llvm.sqrt.bf16(bfloat)
24343 define bfloat @v_sqrt_bf16(bfloat %a) {
24344 ; GCN-LABEL: v_sqrt_bf16:
24345 ; GCN:       ; %bb.0:
24346 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24347 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24348 ; GCN-NEXT:    s_mov_b32 s4, 0xf800000
24349 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x260
24350 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24351 ; GCN-NEXT:    v_mul_f32_e32 v2, 0x4f800000, v0
24352 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24353 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
24354 ; GCN-NEXT:    v_sqrt_f32_e32 v2, v0
24355 ; GCN-NEXT:    v_add_i32_e64 v3, s[4:5], -1, v2
24356 ; GCN-NEXT:    v_add_i32_e64 v4, s[4:5], 1, v2
24357 ; GCN-NEXT:    v_fma_f32 v5, -v3, v2, v0
24358 ; GCN-NEXT:    v_fma_f32 v6, -v4, v2, v0
24359 ; GCN-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v5
24360 ; GCN-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[4:5]
24361 ; GCN-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v6
24362 ; GCN-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[4:5]
24363 ; GCN-NEXT:    v_mul_f32_e32 v3, 0x37800000, v2
24364 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
24365 ; GCN-NEXT:    v_cmp_class_f32_e32 vcc, v0, v1
24366 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
24367 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24368 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24370 ; GFX7-LABEL: v_sqrt_bf16:
24371 ; GFX7:       ; %bb.0:
24372 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24373 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24374 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24375 ; GFX7-NEXT:    s_mov_b32 s4, 0xf800000
24376 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
24377 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24378 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
24379 ; GFX7-NEXT:    v_sqrt_f32_e32 v1, v0
24380 ; GFX7-NEXT:    v_add_i32_e64 v2, s[4:5], -1, v1
24381 ; GFX7-NEXT:    v_fma_f32 v3, -v2, v1, v0
24382 ; GFX7-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
24383 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
24384 ; GFX7-NEXT:    v_add_i32_e64 v3, s[4:5], 1, v1
24385 ; GFX7-NEXT:    v_fma_f32 v1, -v3, v1, v0
24386 ; GFX7-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
24387 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
24388 ; GFX7-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
24389 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
24390 ; GFX7-NEXT:    v_mov_b32_e32 v2, 0x260
24391 ; GFX7-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
24392 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
24393 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24394 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
24396 ; GFX8-LABEL: v_sqrt_bf16:
24397 ; GFX8:       ; %bb.0:
24398 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24399 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24400 ; GFX8-NEXT:    s_mov_b32 s4, 0xf800000
24401 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
24402 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24403 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
24404 ; GFX8-NEXT:    v_sqrt_f32_e32 v1, v0
24405 ; GFX8-NEXT:    v_add_u32_e64 v2, s[4:5], -1, v1
24406 ; GFX8-NEXT:    v_fma_f32 v3, -v2, v1, v0
24407 ; GFX8-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
24408 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
24409 ; GFX8-NEXT:    v_add_u32_e64 v3, s[4:5], 1, v1
24410 ; GFX8-NEXT:    v_fma_f32 v1, -v3, v1, v0
24411 ; GFX8-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
24412 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
24413 ; GFX8-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
24414 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
24415 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0x260
24416 ; GFX8-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
24417 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
24418 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
24419 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
24420 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
24421 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24422 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24423 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24424 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24425 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
24427 ; GFX9-LABEL: v_sqrt_bf16:
24428 ; GFX9:       ; %bb.0:
24429 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24430 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24431 ; GFX9-NEXT:    s_mov_b32 s4, 0xf800000
24432 ; GFX9-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
24433 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24434 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
24435 ; GFX9-NEXT:    v_sqrt_f32_e32 v1, v0
24436 ; GFX9-NEXT:    v_add_u32_e32 v2, -1, v1
24437 ; GFX9-NEXT:    v_fma_f32 v3, -v2, v1, v0
24438 ; GFX9-NEXT:    v_cmp_ge_f32_e64 s[4:5], 0, v3
24439 ; GFX9-NEXT:    v_add_u32_e32 v3, 1, v1
24440 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v1, v2, s[4:5]
24441 ; GFX9-NEXT:    v_fma_f32 v1, -v3, v1, v0
24442 ; GFX9-NEXT:    v_cmp_lt_f32_e64 s[4:5], 0, v1
24443 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v2, v3, s[4:5]
24444 ; GFX9-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
24445 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
24446 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x260
24447 ; GFX9-NEXT:    v_cmp_class_f32_e32 vcc, v0, v2
24448 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc
24449 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
24450 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
24451 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
24452 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24453 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24454 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24455 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24456 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
24458 ; GFX10-LABEL: v_sqrt_bf16:
24459 ; GFX10:       ; %bb.0:
24460 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24461 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24462 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
24463 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xf800000, v0
24464 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
24465 ; GFX10-NEXT:    v_sqrt_f32_e32 v1, v0
24466 ; GFX10-NEXT:    v_add_nc_u32_e32 v2, -1, v1
24467 ; GFX10-NEXT:    v_add_nc_u32_e32 v3, 1, v1
24468 ; GFX10-NEXT:    v_fma_f32 v4, -v2, v1, v0
24469 ; GFX10-NEXT:    v_fma_f32 v5, -v3, v1, v0
24470 ; GFX10-NEXT:    v_cmp_ge_f32_e64 s4, 0, v4
24471 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s4
24472 ; GFX10-NEXT:    v_cmp_lt_f32_e64 s4, 0, v5
24473 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s4
24474 ; GFX10-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
24475 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc_lo
24476 ; GFX10-NEXT:    v_cmp_class_f32_e64 vcc_lo, v0, 0x260
24477 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc_lo
24478 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
24479 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24480 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24481 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24482 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24483 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24484 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24486 ; GFX11-LABEL: v_sqrt_bf16:
24487 ; GFX11:       ; %bb.0:
24488 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24489 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24490 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
24491 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x4f800000, v0
24492 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xf800000, v0
24493 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
24494 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_2)
24495 ; GFX11-NEXT:    v_sqrt_f32_e32 v1, v0
24496 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
24497 ; GFX11-NEXT:    v_add_nc_u32_e32 v2, -1, v1
24498 ; GFX11-NEXT:    v_add_nc_u32_e32 v3, 1, v1
24499 ; GFX11-NEXT:    v_fma_f32 v4, -v2, v1, v0
24500 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
24501 ; GFX11-NEXT:    v_fma_f32 v5, -v3, v1, v0
24502 ; GFX11-NEXT:    v_cmp_ge_f32_e64 s0, 0, v4
24503 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
24504 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v2, s0
24505 ; GFX11-NEXT:    v_cmp_lt_f32_e64 s0, 0, v5
24506 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24507 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s0
24508 ; GFX11-NEXT:    v_mul_f32_e32 v2, 0x37800000, v1
24509 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
24510 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc_lo
24511 ; GFX11-NEXT:    v_cmp_class_f32_e64 vcc_lo, v0, 0x260
24512 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v0, vcc_lo
24513 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
24514 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
24515 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24516 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24517 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24518 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24519 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24520 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24521 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
24522   %op = call bfloat @llvm.sqrt.bf16(bfloat %a)
24523   ret bfloat %op
24526 declare bfloat @llvm.ldexp.bf16.i32(bfloat, i32)
24528 define bfloat @v_ldexp_bf16_i32(bfloat %a, i32 %b) {
24529 ; GCN-LABEL: v_ldexp_bf16_i32:
24530 ; GCN:       ; %bb.0:
24531 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24532 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24533 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24534 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v1
24535 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24536 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24538 ; GFX7-LABEL: v_ldexp_bf16_i32:
24539 ; GFX7:       ; %bb.0:
24540 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24541 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24542 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24543 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
24544 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24545 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
24547 ; GFX8-LABEL: v_ldexp_bf16_i32:
24548 ; GFX8:       ; %bb.0:
24549 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24550 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24551 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
24552 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
24553 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
24554 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
24555 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24556 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24557 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24558 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24559 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
24561 ; GFX9-LABEL: v_ldexp_bf16_i32:
24562 ; GFX9:       ; %bb.0:
24563 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24564 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24565 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v1
24566 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
24567 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
24568 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
24569 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24570 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24571 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24572 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24573 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
24575 ; GFX10-LABEL: v_ldexp_bf16_i32:
24576 ; GFX10:       ; %bb.0:
24577 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24578 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24579 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v1
24580 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
24581 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24582 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24583 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24584 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24585 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24586 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24588 ; GFX11-LABEL: v_ldexp_bf16_i32:
24589 ; GFX11:       ; %bb.0:
24590 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24591 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24592 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24593 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v1
24594 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
24595 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24596 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24597 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
24598 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24599 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24600 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
24601 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24602 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
24603   %op = call bfloat @llvm.ldexp.bf16.i32(bfloat %a, i32 %b)
24604   ret bfloat %op
24607 declare { bfloat, i16 } @llvm.frexp.bf16.i16(bfloat)
24609 define { bfloat, i16 } @v_frexp_bf16_i16(bfloat %a) {
24610 ; GCN-LABEL: v_frexp_bf16_i16:
24611 ; GCN:       ; %bb.0:
24612 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24613 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24614 ; GCN-NEXT:    s_mov_b32 s4, 0x7f800000
24615 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24616 ; GCN-NEXT:    v_frexp_mant_f32_e32 v1, v0
24617 ; GCN-NEXT:    v_frexp_exp_i32_f32_e32 v2, v0
24618 ; GCN-NEXT:    v_cmp_lt_f32_e64 vcc, |v0|, s4
24619 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
24620 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
24621 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24622 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24624 ; GFX7-LABEL: v_frexp_bf16_i16:
24625 ; GFX7:       ; %bb.0:
24626 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24627 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24628 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24629 ; GFX7-NEXT:    v_frexp_exp_i32_f32_e32 v1, v0
24630 ; GFX7-NEXT:    v_frexp_mant_f32_e32 v0, v0
24631 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24632 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
24634 ; GFX8-LABEL: v_frexp_bf16_i16:
24635 ; GFX8:       ; %bb.0:
24636 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24637 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
24638 ; GFX8-NEXT:    v_frexp_mant_f32_e32 v0, v1
24639 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
24640 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
24641 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
24642 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
24643 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24644 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
24645 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24646 ; GFX8-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
24647 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
24649 ; GFX9-LABEL: v_frexp_bf16_i16:
24650 ; GFX9:       ; %bb.0:
24651 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24652 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
24653 ; GFX9-NEXT:    v_frexp_mant_f32_e32 v0, v1
24654 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
24655 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
24656 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
24657 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
24658 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24659 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
24660 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24661 ; GFX9-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
24662 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
24664 ; GFX10-LABEL: v_frexp_bf16_i16:
24665 ; GFX10:       ; %bb.0:
24666 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24667 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
24668 ; GFX10-NEXT:    v_frexp_mant_f32_e32 v0, v1
24669 ; GFX10-NEXT:    v_frexp_exp_i32_f32_e32 v1, v1
24670 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
24671 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v0
24672 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24673 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
24674 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc_lo
24675 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24676 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24677   %op = call { bfloat, i16 } @llvm.frexp.bf16.i16(bfloat %a)
24678   ret { bfloat, i16 } %op
24682 declare bfloat @llvm.log.bf16(bfloat)
24683 declare bfloat @llvm.log2.bf16(bfloat)
24684 declare bfloat @llvm.log10.bf16(bfloat)
24686 define bfloat @v_log_bf16(bfloat %a) {
24687 ; GCN-LABEL: v_log_bf16:
24688 ; GCN:       ; %bb.0:
24689 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24690 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24691 ; GCN-NEXT:    s_mov_b32 s4, 0x800000
24692 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24693 ; GCN-NEXT:    s_mov_b32 s5, 0x7f800000
24694 ; GCN-NEXT:    v_mov_b32_e32 v2, 0x41b17218
24695 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24696 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24697 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24698 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
24699 ; GCN-NEXT:    v_log_f32_e32 v0, v0
24700 ; GCN-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
24701 ; GCN-NEXT:    v_sub_f32_e32 v3, v0, v1
24702 ; GCN-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
24703 ; GCN-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
24704 ; GCN-NEXT:    v_mul_f32_e32 v5, 0x3f317000, v3
24705 ; GCN-NEXT:    v_mul_f32_e32 v3, 0x3805fdf4, v3
24706 ; GCN-NEXT:    v_add_f32_e32 v3, v4, v3
24707 ; GCN-NEXT:    v_add_f32_e32 v3, v5, v3
24708 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v3
24709 ; GCN-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s5
24710 ; GCN-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
24711 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
24712 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v1
24713 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24714 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24716 ; GFX7-LABEL: v_log_bf16:
24717 ; GFX7:       ; %bb.0:
24718 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24719 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24720 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24721 ; GFX7-NEXT:    s_mov_b32 s4, 0x800000
24722 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24723 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24724 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24725 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
24726 ; GFX7-NEXT:    v_log_f32_e32 v0, v0
24727 ; GFX7-NEXT:    s_mov_b32 s4, 0x3f317217
24728 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
24729 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, -v1
24730 ; GFX7-NEXT:    s_mov_b32 s4, 0x3377d1cf
24731 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, v2
24732 ; GFX7-NEXT:    s_mov_b32 s4, 0x7f800000
24733 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v2
24734 ; GFX7-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
24735 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
24736 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x41b17218
24737 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24738 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v1
24739 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24740 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
24742 ; GFX8-LABEL: v_log_bf16:
24743 ; GFX8:       ; %bb.0:
24744 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24745 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24746 ; GFX8-NEXT:    s_mov_b32 s4, 0x800000
24747 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24748 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24749 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24750 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
24751 ; GFX8-NEXT:    v_log_f32_e32 v0, v0
24752 ; GFX8-NEXT:    s_mov_b32 s4, 0x7f800000
24753 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
24754 ; GFX8-NEXT:    v_sub_f32_e32 v2, v0, v1
24755 ; GFX8-NEXT:    v_mul_f32_e32 v3, 0x3f317000, v2
24756 ; GFX8-NEXT:    v_mul_f32_e32 v2, 0x3805fdf4, v2
24757 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x3805fdf4, v1
24758 ; GFX8-NEXT:    v_add_f32_e32 v2, v4, v2
24759 ; GFX8-NEXT:    v_add_f32_e32 v2, v3, v2
24760 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x3f317000, v1
24761 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v2
24762 ; GFX8-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
24763 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
24764 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x41b17218
24765 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24766 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v1
24767 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
24768 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
24769 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
24770 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24771 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24772 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24773 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24774 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
24776 ; GFX9-LABEL: v_log_bf16:
24777 ; GFX9:       ; %bb.0:
24778 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24779 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24780 ; GFX9-NEXT:    s_mov_b32 s4, 0x800000
24781 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24782 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24783 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24784 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
24785 ; GFX9-NEXT:    v_log_f32_e32 v0, v0
24786 ; GFX9-NEXT:    s_mov_b32 s4, 0x3f317217
24787 ; GFX9-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
24788 ; GFX9-NEXT:    v_fma_f32 v2, v0, s4, -v1
24789 ; GFX9-NEXT:    s_mov_b32 s4, 0x3377d1cf
24790 ; GFX9-NEXT:    v_fma_f32 v2, v0, s4, v2
24791 ; GFX9-NEXT:    s_mov_b32 s4, 0x7f800000
24792 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v2
24793 ; GFX9-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
24794 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
24795 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x41b17218
24796 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24797 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v1
24798 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
24799 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
24800 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
24801 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24802 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24803 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24804 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24805 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
24807 ; GFX10-LABEL: v_log_bf16:
24808 ; GFX10:       ; %bb.0:
24809 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24810 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24811 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
24812 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
24813 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
24814 ; GFX10-NEXT:    v_log_f32_e32 v0, v0
24815 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
24816 ; GFX10-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
24817 ; GFX10-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
24818 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v2
24819 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, 0, 0x41b17218, vcc_lo
24820 ; GFX10-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
24821 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
24822 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2
24823 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
24824 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24825 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24826 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24827 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24828 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24829 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24831 ; GFX11-LABEL: v_log_bf16:
24832 ; GFX11:       ; %bb.0:
24833 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24834 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24835 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
24836 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
24837 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
24838 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
24839 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
24840 ; GFX11-NEXT:    v_log_f32_e32 v0, v0
24841 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
24842 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x3f317217, v0
24843 ; GFX11-NEXT:    v_fma_f32 v2, 0x3f317217, v0, -v1
24844 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24845 ; GFX11-NEXT:    v_fmamk_f32 v2, v0, 0x3377d1cf, v2
24846 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v2
24847 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, 0, 0x41b17218, vcc_lo
24848 ; GFX11-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
24849 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
24850 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
24851 ; GFX11-NEXT:    v_sub_f32_e32 v0, v0, v2
24852 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
24853 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
24854 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24855 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24856 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24857 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
24858 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24859 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24860 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
24861   %op = call bfloat @llvm.log.bf16(bfloat %a)
24862   ret bfloat %op
24865 define bfloat @v_log2_bf16(bfloat %a) {
24866 ; GCN-LABEL: v_log2_bf16:
24867 ; GCN:       ; %bb.0:
24868 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24869 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24870 ; GCN-NEXT:    s_mov_b32 s4, 0x800000
24871 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24872 ; GCN-NEXT:    v_mov_b32_e32 v2, 0x42000000
24873 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24874 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24875 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24876 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
24877 ; GCN-NEXT:    v_log_f32_e32 v0, v0
24878 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
24879 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v1
24880 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24881 ; GCN-NEXT:    s_setpc_b64 s[30:31]
24883 ; GFX7-LABEL: v_log2_bf16:
24884 ; GFX7:       ; %bb.0:
24885 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24886 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24887 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24888 ; GFX7-NEXT:    s_mov_b32 s4, 0x800000
24889 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24890 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24891 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24892 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
24893 ; GFX7-NEXT:    v_log_f32_e32 v0, v0
24894 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x42000000
24895 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24896 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v1
24897 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24898 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
24900 ; GFX8-LABEL: v_log2_bf16:
24901 ; GFX8:       ; %bb.0:
24902 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24903 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24904 ; GFX8-NEXT:    s_mov_b32 s4, 0x800000
24905 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24906 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24907 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
24908 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
24909 ; GFX8-NEXT:    v_log_f32_e32 v0, v0
24910 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x42000000
24911 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24912 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v1
24913 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
24914 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
24915 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
24916 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24917 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24918 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24919 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24920 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
24922 ; GFX9-LABEL: v_log2_bf16:
24923 ; GFX9:       ; %bb.0:
24924 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24925 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24926 ; GFX9-NEXT:    s_mov_b32 s4, 0x800000
24927 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24928 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x4f800000
24929 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, 1.0, v2, vcc
24930 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v2
24931 ; GFX9-NEXT:    v_log_f32_e32 v0, v0
24932 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x42000000
24933 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
24934 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
24935 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v1
24936 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
24937 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
24938 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24939 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
24940 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
24941 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24942 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
24944 ; GFX10-LABEL: v_log2_bf16:
24945 ; GFX10:       ; %bb.0:
24946 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24947 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24948 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
24949 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
24950 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
24951 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
24952 ; GFX10-NEXT:    v_log_f32_e32 v0, v0
24953 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v1
24954 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
24955 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24956 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24957 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24958 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24959 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24960 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
24962 ; GFX11-LABEL: v_log2_bf16:
24963 ; GFX11:       ; %bb.0:
24964 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24965 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
24966 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
24967 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
24968 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, 1.0, 0x4f800000, vcc_lo
24969 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, 0, 0x42000000, vcc_lo
24970 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v2
24971 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
24972 ; GFX11-NEXT:    v_log_f32_e32 v0, v0
24973 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
24974 ; GFX11-NEXT:    v_sub_f32_e32 v0, v0, v1
24975 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
24976 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
24977 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
24978 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
24979 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
24980 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
24981 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
24982 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
24983 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
24984   %op = call bfloat @llvm.log2.bf16(bfloat %a)
24985   ret bfloat %op
24988 define bfloat @v_log10_bf16(bfloat %a) {
24989 ; GCN-LABEL: v_log10_bf16:
24990 ; GCN:       ; %bb.0:
24991 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
24992 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
24993 ; GCN-NEXT:    s_mov_b32 s4, 0x800000
24994 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x4f800000
24995 ; GCN-NEXT:    s_mov_b32 s5, 0x7f800000
24996 ; GCN-NEXT:    v_mov_b32_e32 v2, 0x411a209b
24997 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
24998 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
24999 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25000 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
25001 ; GCN-NEXT:    v_log_f32_e32 v0, v0
25002 ; GCN-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
25003 ; GCN-NEXT:    v_sub_f32_e32 v3, v0, v1
25004 ; GCN-NEXT:    v_mul_f32_e32 v4, 0x369a84fb, v1
25005 ; GCN-NEXT:    v_mul_f32_e32 v1, 0x3e9a2000, v1
25006 ; GCN-NEXT:    v_mul_f32_e32 v5, 0x3e9a2000, v3
25007 ; GCN-NEXT:    v_mul_f32_e32 v3, 0x369a84fb, v3
25008 ; GCN-NEXT:    v_add_f32_e32 v3, v4, v3
25009 ; GCN-NEXT:    v_add_f32_e32 v3, v5, v3
25010 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v3
25011 ; GCN-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s5
25012 ; GCN-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
25013 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v2, vcc
25014 ; GCN-NEXT:    v_sub_f32_e32 v0, v0, v1
25015 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25016 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25018 ; GFX7-LABEL: v_log10_bf16:
25019 ; GFX7:       ; %bb.0:
25020 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25021 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25022 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25023 ; GFX7-NEXT:    s_mov_b32 s4, 0x800000
25024 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x4f800000
25025 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25026 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25027 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
25028 ; GFX7-NEXT:    v_log_f32_e32 v0, v0
25029 ; GFX7-NEXT:    s_mov_b32 s4, 0x3e9a209a
25030 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x3e9a209a, v0
25031 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, -v1
25032 ; GFX7-NEXT:    s_mov_b32 s4, 0x3284fbcf
25033 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, v2
25034 ; GFX7-NEXT:    s_mov_b32 s4, 0x7f800000
25035 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v2
25036 ; GFX7-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
25037 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
25038 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x411a209b
25039 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25040 ; GFX7-NEXT:    v_sub_f32_e32 v0, v0, v1
25041 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25042 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25044 ; GFX8-LABEL: v_log10_bf16:
25045 ; GFX8:       ; %bb.0:
25046 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25047 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25048 ; GFX8-NEXT:    s_mov_b32 s4, 0x800000
25049 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x4f800000
25050 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25051 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25052 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
25053 ; GFX8-NEXT:    v_log_f32_e32 v0, v0
25054 ; GFX8-NEXT:    s_mov_b32 s4, 0x7f800000
25055 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xfffff000, v0
25056 ; GFX8-NEXT:    v_sub_f32_e32 v2, v0, v1
25057 ; GFX8-NEXT:    v_mul_f32_e32 v3, 0x3e9a2000, v2
25058 ; GFX8-NEXT:    v_mul_f32_e32 v2, 0x369a84fb, v2
25059 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x369a84fb, v1
25060 ; GFX8-NEXT:    v_add_f32_e32 v2, v4, v2
25061 ; GFX8-NEXT:    v_add_f32_e32 v2, v3, v2
25062 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x3e9a2000, v1
25063 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v2
25064 ; GFX8-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
25065 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
25066 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x411a209b
25067 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25068 ; GFX8-NEXT:    v_sub_f32_e32 v0, v0, v1
25069 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25070 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25071 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25072 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25073 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25074 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25075 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25076 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25078 ; GFX9-LABEL: v_log10_bf16:
25079 ; GFX9:       ; %bb.0:
25080 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25081 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25082 ; GFX9-NEXT:    s_mov_b32 s4, 0x800000
25083 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x4f800000
25084 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25085 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25086 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
25087 ; GFX9-NEXT:    v_log_f32_e32 v0, v0
25088 ; GFX9-NEXT:    s_mov_b32 s4, 0x3e9a209a
25089 ; GFX9-NEXT:    v_mul_f32_e32 v1, 0x3e9a209a, v0
25090 ; GFX9-NEXT:    v_fma_f32 v2, v0, s4, -v1
25091 ; GFX9-NEXT:    s_mov_b32 s4, 0x3284fbcf
25092 ; GFX9-NEXT:    v_fma_f32 v2, v0, s4, v2
25093 ; GFX9-NEXT:    s_mov_b32 s4, 0x7f800000
25094 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v2
25095 ; GFX9-NEXT:    v_cmp_lt_f32_e64 s[4:5], |v0|, s4
25096 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v1, s[4:5]
25097 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x411a209b
25098 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25099 ; GFX9-NEXT:    v_sub_f32_e32 v0, v0, v1
25100 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25101 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25102 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25103 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25104 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25105 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25106 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25107 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25109 ; GFX10-LABEL: v_log10_bf16:
25110 ; GFX10:       ; %bb.0:
25111 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25112 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25113 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
25114 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
25115 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
25116 ; GFX10-NEXT:    v_log_f32_e32 v0, v0
25117 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x3e9a209a, v0
25118 ; GFX10-NEXT:    v_fma_f32 v2, 0x3e9a209a, v0, -v1
25119 ; GFX10-NEXT:    v_fmamk_f32 v2, v0, 0x3284fbcf, v2
25120 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v2
25121 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, 0, 0x411a209b, vcc_lo
25122 ; GFX10-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
25123 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
25124 ; GFX10-NEXT:    v_sub_f32_e32 v0, v0, v2
25125 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25126 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25127 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25128 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25129 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25130 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25131 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25133 ; GFX11-LABEL: v_log10_bf16:
25134 ; GFX11:       ; %bb.0:
25135 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25136 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25137 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
25138 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0x800000, v0
25139 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x4f800000, vcc_lo
25140 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
25141 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
25142 ; GFX11-NEXT:    v_log_f32_e32 v0, v0
25143 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
25144 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x3e9a209a, v0
25145 ; GFX11-NEXT:    v_fma_f32 v2, 0x3e9a209a, v0, -v1
25146 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25147 ; GFX11-NEXT:    v_fmamk_f32 v2, v0, 0x3284fbcf, v2
25148 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v2
25149 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, 0, 0x411a209b, vcc_lo
25150 ; GFX11-NEXT:    v_cmp_gt_f32_e64 vcc_lo, 0x7f800000, |v0|
25151 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25152 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
25153 ; GFX11-NEXT:    v_sub_f32_e32 v0, v0, v2
25154 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
25155 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25156 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25157 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25158 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25159 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25160 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25161 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25162 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25163   %op = call bfloat @llvm.log10.bf16(bfloat %a)
25164   ret bfloat %op
25167 declare bfloat @llvm.exp.bf16(bfloat)
25168 declare bfloat @llvm.exp2.bf16(bfloat)
25169 declare bfloat @llvm.exp10.bf16(bfloat)
25171 define bfloat @v_exp_bf16(bfloat %a) {
25172 ; GCN-LABEL: v_exp_bf16:
25173 ; GCN:       ; %bb.0:
25174 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25175 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25176 ; GCN-NEXT:    s_mov_b32 s4, 0xc2ce8ed0
25177 ; GCN-NEXT:    s_mov_b32 s5, 0x42b17218
25178 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x7f800000
25179 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25180 ; GCN-NEXT:    v_mul_f32_e32 v2, 0x3fb8a000, v0
25181 ; GCN-NEXT:    v_sub_f32_e32 v3, v0, v0
25182 ; GCN-NEXT:    v_mul_f32_e32 v4, 0x39a3b295, v0
25183 ; GCN-NEXT:    v_rndne_f32_e32 v5, v2
25184 ; GCN-NEXT:    v_mul_f32_e32 v6, 0x39a3b295, v3
25185 ; GCN-NEXT:    v_mul_f32_e32 v3, 0x3fb8a000, v3
25186 ; GCN-NEXT:    v_sub_f32_e32 v2, v2, v5
25187 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v6
25188 ; GCN-NEXT:    v_cvt_i32_f32_e32 v5, v5
25189 ; GCN-NEXT:    v_add_f32_e32 v3, v4, v3
25190 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v3
25191 ; GCN-NEXT:    v_exp_f32_e32 v2, v2
25192 ; GCN-NEXT:    v_ldexp_f32_e32 v2, v2, v5
25193 ; GCN-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25194 ; GCN-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc
25195 ; GCN-NEXT:    v_cmp_nlt_f32_e32 vcc, s5, v0
25196 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25197 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25198 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25200 ; GFX7-LABEL: v_exp_bf16:
25201 ; GFX7:       ; %bb.0:
25202 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25203 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25204 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25205 ; GFX7-NEXT:    s_mov_b32 s4, 0x3fb8aa3b
25206 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x3fb8aa3b, v0
25207 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, -v1
25208 ; GFX7-NEXT:    s_mov_b32 s4, 0x32a5705f
25209 ; GFX7-NEXT:    v_rndne_f32_e32 v3, v1
25210 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, v2
25211 ; GFX7-NEXT:    v_sub_f32_e32 v1, v1, v3
25212 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v2
25213 ; GFX7-NEXT:    v_exp_f32_e32 v1, v1
25214 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v2, v3
25215 ; GFX7-NEXT:    s_mov_b32 s4, 0xc2ce8ed0
25216 ; GFX7-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25217 ; GFX7-NEXT:    s_mov_b32 s4, 0x42b17218
25218 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v1, v2
25219 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25220 ; GFX7-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25221 ; GFX7-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25222 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25223 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25224 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25226 ; GFX8-LABEL: v_exp_bf16:
25227 ; GFX8:       ; %bb.0:
25228 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25229 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25230 ; GFX8-NEXT:    v_sub_f32_e32 v3, v0, v0
25231 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x3fb8a000, v0
25232 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x39a3b295, v3
25233 ; GFX8-NEXT:    v_mul_f32_e32 v3, 0x3fb8a000, v3
25234 ; GFX8-NEXT:    v_rndne_f32_e32 v2, v1
25235 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v4
25236 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x39a3b295, v0
25237 ; GFX8-NEXT:    v_sub_f32_e32 v1, v1, v2
25238 ; GFX8-NEXT:    v_add_f32_e32 v3, v4, v3
25239 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
25240 ; GFX8-NEXT:    v_exp_f32_e32 v1, v1
25241 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v2
25242 ; GFX8-NEXT:    s_mov_b32 s4, 0xc2ce8ed0
25243 ; GFX8-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25244 ; GFX8-NEXT:    s_mov_b32 s4, 0x42b17218
25245 ; GFX8-NEXT:    v_ldexp_f32 v1, v1, v2
25246 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25247 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25248 ; GFX8-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25249 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25250 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25251 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25252 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25253 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25254 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25255 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25256 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25257 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25259 ; GFX9-LABEL: v_exp_bf16:
25260 ; GFX9:       ; %bb.0:
25261 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25262 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25263 ; GFX9-NEXT:    v_mul_f32_e32 v1, 0x3fb8aa3b, v0
25264 ; GFX9-NEXT:    s_mov_b32 s4, 0x3fb8aa3b
25265 ; GFX9-NEXT:    v_rndne_f32_e32 v2, v1
25266 ; GFX9-NEXT:    v_sub_f32_e32 v3, v1, v2
25267 ; GFX9-NEXT:    v_fma_f32 v1, v0, s4, -v1
25268 ; GFX9-NEXT:    s_mov_b32 s4, 0x32a5705f
25269 ; GFX9-NEXT:    v_fma_f32 v1, v0, s4, v1
25270 ; GFX9-NEXT:    v_add_f32_e32 v1, v3, v1
25271 ; GFX9-NEXT:    v_exp_f32_e32 v1, v1
25272 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v2
25273 ; GFX9-NEXT:    s_mov_b32 s4, 0xc2ce8ed0
25274 ; GFX9-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25275 ; GFX9-NEXT:    s_mov_b32 s4, 0x42b17218
25276 ; GFX9-NEXT:    v_ldexp_f32 v1, v1, v2
25277 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25278 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25279 ; GFX9-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25280 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25281 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25282 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25283 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25284 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25285 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25286 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25287 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25288 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25290 ; GFX10-LABEL: v_exp_bf16:
25291 ; GFX10:       ; %bb.0:
25292 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25293 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25294 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x3fb8aa3b, v0
25295 ; GFX10-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, 0xc2ce8ed0, v0
25296 ; GFX10-NEXT:    v_rndne_f32_e32 v2, v1
25297 ; GFX10-NEXT:    v_fma_f32 v3, 0x3fb8aa3b, v0, -v1
25298 ; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v2
25299 ; GFX10-NEXT:    v_fmamk_f32 v3, v0, 0x32a5705f, v3
25300 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v2
25301 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
25302 ; GFX10-NEXT:    v_exp_f32_e32 v1, v1
25303 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v2
25304 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc_lo
25305 ; GFX10-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, 0x42b17218, v0
25306 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7f800000, v1, vcc_lo
25307 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25308 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25309 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25310 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25311 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25312 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25313 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25315 ; GFX11-LABEL: v_exp_bf16:
25316 ; GFX11:       ; %bb.0:
25317 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25318 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25319 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25320 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x3fb8aa3b, v0
25321 ; GFX11-NEXT:    v_rndne_f32_e32 v2, v1
25322 ; GFX11-NEXT:    v_fma_f32 v3, 0x3fb8aa3b, v0, -v1
25323 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
25324 ; GFX11-NEXT:    v_sub_f32_e32 v1, v1, v2
25325 ; GFX11-NEXT:    v_fmamk_f32 v3, v0, 0x32a5705f, v3
25326 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v2
25327 ; GFX11-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, 0xc2ce8ed0, v0
25328 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25329 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
25330 ; GFX11-NEXT:    v_exp_f32_e32 v1, v1
25331 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
25332 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v2
25333 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
25334 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc_lo
25335 ; GFX11-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, 0x42b17218, v0
25336 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7f800000, v1, vcc_lo
25337 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
25338 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25339 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25340 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25341 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25342 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25343 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25344 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25345 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25346   %op = call bfloat @llvm.exp.bf16(bfloat %a)
25347   ret bfloat %op
25350 define bfloat @v_exp2_bf16(bfloat %a) {
25351 ; GCN-LABEL: v_exp2_bf16:
25352 ; GCN:       ; %bb.0:
25353 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25354 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25355 ; GCN-NEXT:    s_mov_b32 s4, 0xc2fc0000
25356 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x42800000
25357 ; GCN-NEXT:    v_mov_b32_e32 v2, 0x1f800000
25358 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25359 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25360 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25361 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v1
25362 ; GCN-NEXT:    v_exp_f32_e32 v0, v0
25363 ; GCN-NEXT:    v_cndmask_b32_e32 v1, 1.0, v2, vcc
25364 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
25365 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25366 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25368 ; GFX7-LABEL: v_exp2_bf16:
25369 ; GFX7:       ; %bb.0:
25370 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25371 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25372 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25373 ; GFX7-NEXT:    s_mov_b32 s4, 0xc2fc0000
25374 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x42800000
25375 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25376 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25377 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v1
25378 ; GFX7-NEXT:    v_exp_f32_e32 v0, v0
25379 ; GFX7-NEXT:    v_mov_b32_e32 v1, 0x1f800000
25380 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25381 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
25382 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25383 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25385 ; GFX8-LABEL: v_exp2_bf16:
25386 ; GFX8:       ; %bb.0:
25387 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25388 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25389 ; GFX8-NEXT:    s_mov_b32 s4, 0xc2fc0000
25390 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x42800000
25391 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25392 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25393 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v1
25394 ; GFX8-NEXT:    v_exp_f32_e32 v0, v0
25395 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0x1f800000
25396 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25397 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
25398 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25399 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25400 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25401 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25402 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25403 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25404 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25405 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25407 ; GFX9-LABEL: v_exp2_bf16:
25408 ; GFX9:       ; %bb.0:
25409 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25410 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25411 ; GFX9-NEXT:    s_mov_b32 s4, 0xc2fc0000
25412 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, s4, v0
25413 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x42800000
25414 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc
25415 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
25416 ; GFX9-NEXT:    v_exp_f32_e32 v0, v0
25417 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x1f800000
25418 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 1.0, v1, vcc
25419 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25420 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
25421 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25422 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25423 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25424 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25425 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25426 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25427 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25429 ; GFX10-LABEL: v_exp2_bf16:
25430 ; GFX10:       ; %bb.0:
25431 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25432 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25433 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
25434 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo
25435 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
25436 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
25437 ; GFX10-NEXT:    v_exp_f32_e32 v0, v0
25438 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
25439 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25440 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25441 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25442 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25443 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25444 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25445 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25447 ; GFX11-LABEL: v_exp2_bf16:
25448 ; GFX11:       ; %bb.0:
25449 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25450 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25451 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
25452 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, 0xc2fc0000, v0
25453 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, 0, 0x42800000, vcc_lo
25454 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, 1.0, 0x1f800000, vcc_lo
25455 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
25456 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
25457 ; GFX11-NEXT:    v_exp_f32_e32 v0, v0
25458 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
25459 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
25460 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25461 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25462 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25463 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25464 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25465 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25466 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
25467 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25468 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25469   %op = call bfloat @llvm.exp2.bf16(bfloat %a)
25470   ret bfloat %op
25473 define bfloat @v_exp10_bf16(bfloat %a) {
25474 ; GCN-LABEL: v_exp10_bf16:
25475 ; GCN:       ; %bb.0:
25476 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25477 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25478 ; GCN-NEXT:    s_mov_b32 s4, 0xc23369f4
25479 ; GCN-NEXT:    s_mov_b32 s5, 0x421a209b
25480 ; GCN-NEXT:    v_mov_b32_e32 v1, 0x7f800000
25481 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25482 ; GCN-NEXT:    v_mul_f32_e32 v2, 0x40549000, v0
25483 ; GCN-NEXT:    v_sub_f32_e32 v3, v0, v0
25484 ; GCN-NEXT:    v_mul_f32_e32 v4, 0x3a2784bc, v0
25485 ; GCN-NEXT:    v_rndne_f32_e32 v5, v2
25486 ; GCN-NEXT:    v_mul_f32_e32 v6, 0x3a2784bc, v3
25487 ; GCN-NEXT:    v_mul_f32_e32 v3, 0x40549000, v3
25488 ; GCN-NEXT:    v_sub_f32_e32 v2, v2, v5
25489 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v6
25490 ; GCN-NEXT:    v_cvt_i32_f32_e32 v5, v5
25491 ; GCN-NEXT:    v_add_f32_e32 v3, v4, v3
25492 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v3
25493 ; GCN-NEXT:    v_exp_f32_e32 v2, v2
25494 ; GCN-NEXT:    v_ldexp_f32_e32 v2, v2, v5
25495 ; GCN-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25496 ; GCN-NEXT:    v_cndmask_b32_e32 v2, 0, v2, vcc
25497 ; GCN-NEXT:    v_cmp_nlt_f32_e32 vcc, s5, v0
25498 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25499 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25500 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25502 ; GFX7-LABEL: v_exp10_bf16:
25503 ; GFX7:       ; %bb.0:
25504 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25505 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25506 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25507 ; GFX7-NEXT:    s_mov_b32 s4, 0x40549a78
25508 ; GFX7-NEXT:    v_mul_f32_e32 v1, 0x40549a78, v0
25509 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, -v1
25510 ; GFX7-NEXT:    s_mov_b32 s4, 0x33979a37
25511 ; GFX7-NEXT:    v_rndne_f32_e32 v3, v1
25512 ; GFX7-NEXT:    v_fma_f32 v2, v0, s4, v2
25513 ; GFX7-NEXT:    v_sub_f32_e32 v1, v1, v3
25514 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v2
25515 ; GFX7-NEXT:    v_exp_f32_e32 v1, v1
25516 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v2, v3
25517 ; GFX7-NEXT:    s_mov_b32 s4, 0xc23369f4
25518 ; GFX7-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25519 ; GFX7-NEXT:    s_mov_b32 s4, 0x421a209b
25520 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v1, v2
25521 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25522 ; GFX7-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25523 ; GFX7-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25524 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25525 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25526 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25528 ; GFX8-LABEL: v_exp10_bf16:
25529 ; GFX8:       ; %bb.0:
25530 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25531 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25532 ; GFX8-NEXT:    v_sub_f32_e32 v3, v0, v0
25533 ; GFX8-NEXT:    v_mul_f32_e32 v1, 0x40549000, v0
25534 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x3a2784bc, v3
25535 ; GFX8-NEXT:    v_mul_f32_e32 v3, 0x40549000, v3
25536 ; GFX8-NEXT:    v_rndne_f32_e32 v2, v1
25537 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v4
25538 ; GFX8-NEXT:    v_mul_f32_e32 v4, 0x3a2784bc, v0
25539 ; GFX8-NEXT:    v_sub_f32_e32 v1, v1, v2
25540 ; GFX8-NEXT:    v_add_f32_e32 v3, v4, v3
25541 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
25542 ; GFX8-NEXT:    v_exp_f32_e32 v1, v1
25543 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v2
25544 ; GFX8-NEXT:    s_mov_b32 s4, 0xc23369f4
25545 ; GFX8-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25546 ; GFX8-NEXT:    s_mov_b32 s4, 0x421a209b
25547 ; GFX8-NEXT:    v_ldexp_f32 v1, v1, v2
25548 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25549 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25550 ; GFX8-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25551 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25552 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25553 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25554 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25555 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25556 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25557 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25558 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25559 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25561 ; GFX9-LABEL: v_exp10_bf16:
25562 ; GFX9:       ; %bb.0:
25563 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25564 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25565 ; GFX9-NEXT:    v_mul_f32_e32 v1, 0x40549a78, v0
25566 ; GFX9-NEXT:    s_mov_b32 s4, 0x40549a78
25567 ; GFX9-NEXT:    v_rndne_f32_e32 v2, v1
25568 ; GFX9-NEXT:    v_sub_f32_e32 v3, v1, v2
25569 ; GFX9-NEXT:    v_fma_f32 v1, v0, s4, -v1
25570 ; GFX9-NEXT:    s_mov_b32 s4, 0x33979a37
25571 ; GFX9-NEXT:    v_fma_f32 v1, v0, s4, v1
25572 ; GFX9-NEXT:    v_add_f32_e32 v1, v3, v1
25573 ; GFX9-NEXT:    v_exp_f32_e32 v1, v1
25574 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v2
25575 ; GFX9-NEXT:    s_mov_b32 s4, 0xc23369f4
25576 ; GFX9-NEXT:    v_cmp_ngt_f32_e32 vcc, s4, v0
25577 ; GFX9-NEXT:    s_mov_b32 s4, 0x421a209b
25578 ; GFX9-NEXT:    v_ldexp_f32 v1, v1, v2
25579 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc
25580 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x7f800000
25581 ; GFX9-NEXT:    v_cmp_nlt_f32_e32 vcc, s4, v0
25582 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
25583 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25584 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25585 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25586 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25587 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25588 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25589 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25590 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25592 ; GFX10-LABEL: v_exp10_bf16:
25593 ; GFX10:       ; %bb.0:
25594 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25595 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25596 ; GFX10-NEXT:    v_mul_f32_e32 v1, 0x40549a78, v0
25597 ; GFX10-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, 0xc23369f4, v0
25598 ; GFX10-NEXT:    v_rndne_f32_e32 v2, v1
25599 ; GFX10-NEXT:    v_fma_f32 v3, 0x40549a78, v0, -v1
25600 ; GFX10-NEXT:    v_sub_f32_e32 v1, v1, v2
25601 ; GFX10-NEXT:    v_fmamk_f32 v3, v0, 0x33979a37, v3
25602 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v2
25603 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
25604 ; GFX10-NEXT:    v_exp_f32_e32 v1, v1
25605 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v2
25606 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc_lo
25607 ; GFX10-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, 0x421a209b, v0
25608 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, 0x7f800000, v1, vcc_lo
25609 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25610 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25611 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25612 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25613 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25614 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25615 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25617 ; GFX11-LABEL: v_exp10_bf16:
25618 ; GFX11:       ; %bb.0:
25619 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25620 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25621 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25622 ; GFX11-NEXT:    v_mul_f32_e32 v1, 0x40549a78, v0
25623 ; GFX11-NEXT:    v_rndne_f32_e32 v2, v1
25624 ; GFX11-NEXT:    v_fma_f32 v3, 0x40549a78, v0, -v1
25625 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
25626 ; GFX11-NEXT:    v_sub_f32_e32 v1, v1, v2
25627 ; GFX11-NEXT:    v_fmamk_f32 v3, v0, 0x33979a37, v3
25628 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v2
25629 ; GFX11-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, 0xc23369f4, v0
25630 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25631 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
25632 ; GFX11-NEXT:    v_exp_f32_e32 v1, v1
25633 ; GFX11-NEXT:    s_waitcnt_depctr 0xfff
25634 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v2
25635 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
25636 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0, v1, vcc_lo
25637 ; GFX11-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, 0x421a209b, v0
25638 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x7f800000, v1, vcc_lo
25639 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
25640 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25641 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25642 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25643 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25644 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25645 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25646 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25647 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25648   %op = call bfloat @llvm.exp10.bf16(bfloat %a)
25649   ret bfloat %op
25652 declare bfloat @llvm.ceil.bf16(bfloat)
25654 define bfloat @v_ceil_bf16(bfloat %a) {
25655 ; GCN-LABEL: v_ceil_bf16:
25656 ; GCN:       ; %bb.0:
25657 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25658 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25659 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25660 ; GCN-NEXT:    v_ceil_f32_e32 v0, v0
25661 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25662 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25664 ; GFX7-LABEL: v_ceil_bf16:
25665 ; GFX7:       ; %bb.0:
25666 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25667 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25668 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25669 ; GFX7-NEXT:    v_ceil_f32_e32 v0, v0
25670 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25671 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25673 ; GFX8-LABEL: v_ceil_bf16:
25674 ; GFX8:       ; %bb.0:
25675 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25676 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25677 ; GFX8-NEXT:    v_ceil_f32_e32 v0, v0
25678 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25679 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25680 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25681 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25682 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25683 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25684 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25685 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25687 ; GFX9-LABEL: v_ceil_bf16:
25688 ; GFX9:       ; %bb.0:
25689 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25690 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25691 ; GFX9-NEXT:    v_ceil_f32_e32 v0, v0
25692 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25693 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25694 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25695 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25696 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25697 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25698 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25699 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25701 ; GFX10-LABEL: v_ceil_bf16:
25702 ; GFX10:       ; %bb.0:
25703 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25704 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25705 ; GFX10-NEXT:    v_ceil_f32_e32 v0, v0
25706 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25707 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25708 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25709 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25710 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25711 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25712 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25714 ; GFX11-LABEL: v_ceil_bf16:
25715 ; GFX11:       ; %bb.0:
25716 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25717 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25718 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25719 ; GFX11-NEXT:    v_ceil_f32_e32 v0, v0
25720 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25721 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25722 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25723 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25724 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25725 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25726 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
25727 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25728 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25729   %op = call bfloat @llvm.ceil.bf16(bfloat %a)
25730   ret bfloat %op
25733 declare bfloat @llvm.trunc.bf16(bfloat)
25735 define bfloat @v_trunc_bf16(bfloat %a) {
25736 ; GCN-LABEL: v_trunc_bf16:
25737 ; GCN:       ; %bb.0:
25738 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25739 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25740 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25741 ; GCN-NEXT:    v_trunc_f32_e32 v0, v0
25742 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25743 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25745 ; GFX7-LABEL: v_trunc_bf16:
25746 ; GFX7:       ; %bb.0:
25747 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25748 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25749 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25750 ; GFX7-NEXT:    v_trunc_f32_e32 v0, v0
25751 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25752 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25754 ; GFX8-LABEL: v_trunc_bf16:
25755 ; GFX8:       ; %bb.0:
25756 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25757 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25758 ; GFX8-NEXT:    v_trunc_f32_e32 v0, v0
25759 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25760 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25761 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25762 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25763 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25764 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25765 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25766 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25768 ; GFX9-LABEL: v_trunc_bf16:
25769 ; GFX9:       ; %bb.0:
25770 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25771 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25772 ; GFX9-NEXT:    v_trunc_f32_e32 v0, v0
25773 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25774 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25775 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25776 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25777 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25778 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25779 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25780 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25782 ; GFX10-LABEL: v_trunc_bf16:
25783 ; GFX10:       ; %bb.0:
25784 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25785 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25786 ; GFX10-NEXT:    v_trunc_f32_e32 v0, v0
25787 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25788 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25789 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25790 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25791 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25792 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25793 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25795 ; GFX11-LABEL: v_trunc_bf16:
25796 ; GFX11:       ; %bb.0:
25797 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25798 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25799 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25800 ; GFX11-NEXT:    v_trunc_f32_e32 v0, v0
25801 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25802 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25803 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25804 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25805 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25806 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25807 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
25808 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25809 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25810   %op = call bfloat @llvm.trunc.bf16(bfloat %a)
25811   ret bfloat %op
25814 declare bfloat @llvm.rint.bf16(bfloat)
25816 define bfloat @v_rint_bf16(bfloat %a) {
25817 ; GCN-LABEL: v_rint_bf16:
25818 ; GCN:       ; %bb.0:
25819 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25820 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25821 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25822 ; GCN-NEXT:    v_rndne_f32_e32 v0, v0
25823 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25824 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25826 ; GFX7-LABEL: v_rint_bf16:
25827 ; GFX7:       ; %bb.0:
25828 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25829 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25830 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25831 ; GFX7-NEXT:    v_rndne_f32_e32 v0, v0
25832 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25833 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25835 ; GFX8-LABEL: v_rint_bf16:
25836 ; GFX8:       ; %bb.0:
25837 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25838 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25839 ; GFX8-NEXT:    v_rndne_f32_e32 v0, v0
25840 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25841 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25842 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25843 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25844 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25845 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25846 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25847 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25849 ; GFX9-LABEL: v_rint_bf16:
25850 ; GFX9:       ; %bb.0:
25851 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25852 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25853 ; GFX9-NEXT:    v_rndne_f32_e32 v0, v0
25854 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25855 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25856 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25857 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25858 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25859 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25860 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25861 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25863 ; GFX10-LABEL: v_rint_bf16:
25864 ; GFX10:       ; %bb.0:
25865 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25866 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25867 ; GFX10-NEXT:    v_rndne_f32_e32 v0, v0
25868 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25869 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25870 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25871 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25872 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25873 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25874 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25876 ; GFX11-LABEL: v_rint_bf16:
25877 ; GFX11:       ; %bb.0:
25878 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25879 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25880 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25881 ; GFX11-NEXT:    v_rndne_f32_e32 v0, v0
25882 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25883 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25884 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25885 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25886 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25887 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25888 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
25889 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25890 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25891   %op = call bfloat @llvm.rint.bf16(bfloat %a)
25892   ret bfloat %op
25895 declare bfloat @llvm.nearbyint.bf16(bfloat)
25897 define bfloat @v_nearbyint_bf16(bfloat %a) {
25898 ; GCN-LABEL: v_nearbyint_bf16:
25899 ; GCN:       ; %bb.0:
25900 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25901 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25902 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25903 ; GCN-NEXT:    v_rndne_f32_e32 v0, v0
25904 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25905 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25907 ; GFX7-LABEL: v_nearbyint_bf16:
25908 ; GFX7:       ; %bb.0:
25909 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25910 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25911 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25912 ; GFX7-NEXT:    v_rndne_f32_e32 v0, v0
25913 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25914 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
25916 ; GFX8-LABEL: v_nearbyint_bf16:
25917 ; GFX8:       ; %bb.0:
25918 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25919 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25920 ; GFX8-NEXT:    v_rndne_f32_e32 v0, v0
25921 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
25922 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
25923 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
25924 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25925 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25926 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25927 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25928 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
25930 ; GFX9-LABEL: v_nearbyint_bf16:
25931 ; GFX9:       ; %bb.0:
25932 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25933 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25934 ; GFX9-NEXT:    v_rndne_f32_e32 v0, v0
25935 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
25936 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
25937 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
25938 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25939 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
25940 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
25941 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25942 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
25944 ; GFX10-LABEL: v_nearbyint_bf16:
25945 ; GFX10:       ; %bb.0:
25946 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25947 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25948 ; GFX10-NEXT:    v_rndne_f32_e32 v0, v0
25949 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
25950 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25951 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25952 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25953 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25954 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25955 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
25957 ; GFX11-LABEL: v_nearbyint_bf16:
25958 ; GFX11:       ; %bb.0:
25959 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25960 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
25961 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
25962 ; GFX11-NEXT:    v_rndne_f32_e32 v0, v0
25963 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
25964 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
25965 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
25966 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
25967 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
25968 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
25969 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
25970 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
25971 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
25972   %op = call bfloat @llvm.nearbyint.bf16(bfloat %a)
25973   ret bfloat %op
25976 declare bfloat @llvm.round.bf16(bfloat)
25978 define bfloat @v_round_bf16(bfloat %a) {
25979 ; GCN-LABEL: v_round_bf16:
25980 ; GCN:       ; %bb.0:
25981 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25982 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25983 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25984 ; GCN-NEXT:    v_trunc_f32_e32 v1, v0
25985 ; GCN-NEXT:    v_sub_f32_e32 v2, v0, v1
25986 ; GCN-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v2|, 0.5
25987 ; GCN-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s[4:5]
25988 ; GCN-NEXT:    s_brev_b32 s4, -2
25989 ; GCN-NEXT:    v_bfi_b32 v0, s4, v2, v0
25990 ; GCN-NEXT:    v_add_f32_e32 v0, v1, v0
25991 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25992 ; GCN-NEXT:    s_setpc_b64 s[30:31]
25994 ; GFX7-LABEL: v_round_bf16:
25995 ; GFX7:       ; %bb.0:
25996 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
25997 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
25998 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
25999 ; GFX7-NEXT:    v_trunc_f32_e32 v1, v0
26000 ; GFX7-NEXT:    v_sub_f32_e32 v2, v0, v1
26001 ; GFX7-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v2|, 0.5
26002 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s[4:5]
26003 ; GFX7-NEXT:    s_brev_b32 s4, -2
26004 ; GFX7-NEXT:    v_bfi_b32 v0, s4, v2, v0
26005 ; GFX7-NEXT:    v_add_f32_e32 v0, v1, v0
26006 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26007 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26009 ; GFX8-LABEL: v_round_bf16:
26010 ; GFX8:       ; %bb.0:
26011 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26012 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26013 ; GFX8-NEXT:    v_trunc_f32_e32 v1, v0
26014 ; GFX8-NEXT:    v_sub_f32_e32 v2, v0, v1
26015 ; GFX8-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v2|, 0.5
26016 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s[4:5]
26017 ; GFX8-NEXT:    s_brev_b32 s4, -2
26018 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v2, v0
26019 ; GFX8-NEXT:    v_add_f32_e32 v0, v1, v0
26020 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
26021 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
26022 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
26023 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26024 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26025 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26026 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26027 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26029 ; GFX9-LABEL: v_round_bf16:
26030 ; GFX9:       ; %bb.0:
26031 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26032 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26033 ; GFX9-NEXT:    v_trunc_f32_e32 v1, v0
26034 ; GFX9-NEXT:    v_sub_f32_e32 v2, v0, v1
26035 ; GFX9-NEXT:    v_cmp_ge_f32_e64 s[4:5], |v2|, 0.5
26036 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s[4:5]
26037 ; GFX9-NEXT:    s_brev_b32 s4, -2
26038 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v2, v0
26039 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v0
26040 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
26041 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
26042 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
26043 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26044 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26045 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26046 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26047 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26049 ; GFX10-LABEL: v_round_bf16:
26050 ; GFX10:       ; %bb.0:
26051 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26052 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26053 ; GFX10-NEXT:    v_trunc_f32_e32 v1, v0
26054 ; GFX10-NEXT:    v_sub_f32_e32 v2, v0, v1
26055 ; GFX10-NEXT:    v_cmp_ge_f32_e64 s4, |v2|, 0.5
26056 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s4
26057 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fffffff, v2, v0
26058 ; GFX10-NEXT:    v_add_f32_e32 v0, v1, v0
26059 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
26060 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26061 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26062 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26063 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26064 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26065 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26067 ; GFX11-LABEL: v_round_bf16:
26068 ; GFX11:       ; %bb.0:
26069 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26070 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26071 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26072 ; GFX11-NEXT:    v_trunc_f32_e32 v1, v0
26073 ; GFX11-NEXT:    v_sub_f32_e32 v2, v0, v1
26074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26075 ; GFX11-NEXT:    v_cmp_ge_f32_e64 s0, |v2|, 0.5
26076 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, 0, 1.0, s0
26077 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26078 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fffffff, v2, v0
26079 ; GFX11-NEXT:    v_add_f32_e32 v0, v1, v0
26080 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
26081 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
26082 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26083 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26084 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26085 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26086 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26087 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26088 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26089   %op = call bfloat @llvm.round.bf16(bfloat %a)
26090   ret bfloat %op
26093 declare bfloat @llvm.roundeven.bf16(bfloat)
26095 define bfloat @v_roundeven_bf16(bfloat %a) {
26096 ; GCN-LABEL: v_roundeven_bf16:
26097 ; GCN:       ; %bb.0:
26098 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26099 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26100 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26101 ; GCN-NEXT:    v_rndne_f32_e32 v0, v0
26102 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26103 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26105 ; GFX7-LABEL: v_roundeven_bf16:
26106 ; GFX7:       ; %bb.0:
26107 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26108 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26109 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26110 ; GFX7-NEXT:    v_rndne_f32_e32 v0, v0
26111 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26112 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26114 ; GFX8-LABEL: v_roundeven_bf16:
26115 ; GFX8:       ; %bb.0:
26116 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26117 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26118 ; GFX8-NEXT:    v_rndne_f32_e32 v0, v0
26119 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
26120 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
26121 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
26122 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26123 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26124 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26125 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26126 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26128 ; GFX9-LABEL: v_roundeven_bf16:
26129 ; GFX9:       ; %bb.0:
26130 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26131 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26132 ; GFX9-NEXT:    v_rndne_f32_e32 v0, v0
26133 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
26134 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
26135 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
26136 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26137 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26138 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26139 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26140 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26142 ; GFX10-LABEL: v_roundeven_bf16:
26143 ; GFX10:       ; %bb.0:
26144 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26145 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26146 ; GFX10-NEXT:    v_rndne_f32_e32 v0, v0
26147 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
26148 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26149 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26150 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26151 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26152 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26153 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26155 ; GFX11-LABEL: v_roundeven_bf16:
26156 ; GFX11:       ; %bb.0:
26157 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26158 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26159 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26160 ; GFX11-NEXT:    v_rndne_f32_e32 v0, v0
26161 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
26162 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26163 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26164 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
26165 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26166 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26167 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26168 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26169 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26170   %op = call bfloat @llvm.roundeven.bf16(bfloat %a)
26171   ret bfloat %op
26174 declare bfloat @llvm.floor.bf16(bfloat)
26176 define bfloat @v_floor_bf16(bfloat %a) {
26177 ; GCN-LABEL: v_floor_bf16:
26178 ; GCN:       ; %bb.0:
26179 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26180 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26181 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26182 ; GCN-NEXT:    v_floor_f32_e32 v0, v0
26183 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26184 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26186 ; GFX7-LABEL: v_floor_bf16:
26187 ; GFX7:       ; %bb.0:
26188 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26189 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26190 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26191 ; GFX7-NEXT:    v_floor_f32_e32 v0, v0
26192 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26193 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26195 ; GFX8-LABEL: v_floor_bf16:
26196 ; GFX8:       ; %bb.0:
26197 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26198 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26199 ; GFX8-NEXT:    v_floor_f32_e32 v0, v0
26200 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
26201 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
26202 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
26203 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26204 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26205 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26206 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26207 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26209 ; GFX9-LABEL: v_floor_bf16:
26210 ; GFX9:       ; %bb.0:
26211 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26212 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26213 ; GFX9-NEXT:    v_floor_f32_e32 v0, v0
26214 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
26215 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
26216 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
26217 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26218 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26219 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26220 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26221 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26223 ; GFX10-LABEL: v_floor_bf16:
26224 ; GFX10:       ; %bb.0:
26225 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26226 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26227 ; GFX10-NEXT:    v_floor_f32_e32 v0, v0
26228 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
26229 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26230 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26231 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26232 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26233 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26234 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26236 ; GFX11-LABEL: v_floor_bf16:
26237 ; GFX11:       ; %bb.0:
26238 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26239 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26240 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26241 ; GFX11-NEXT:    v_floor_f32_e32 v0, v0
26242 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
26243 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26244 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26245 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
26246 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26247 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26248 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26249 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26250 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26251   %op = call bfloat @llvm.floor.bf16(bfloat %a)
26252   ret bfloat %op
26255 declare bfloat @llvm.canonicalize.bf16(bfloat)
26257 define bfloat @v_canonicalize_bf16(bfloat %a) {
26258 ; GCN-LABEL: v_canonicalize_bf16:
26259 ; GCN:       ; %bb.0:
26260 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26261 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26262 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26263 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26264 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26266 ; GFX7-LABEL: v_canonicalize_bf16:
26267 ; GFX7:       ; %bb.0:
26268 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26269 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26270 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26271 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26272 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26274 ; GFX8-LABEL: v_canonicalize_bf16:
26275 ; GFX8:       ; %bb.0:
26276 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26277 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26278 ; GFX8-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26279 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
26280 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
26281 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
26282 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26283 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26284 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26285 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26286 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26288 ; GFX9-LABEL: v_canonicalize_bf16:
26289 ; GFX9:       ; %bb.0:
26290 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26291 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26292 ; GFX9-NEXT:    v_max_f32_e32 v0, v0, v0
26293 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
26294 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
26295 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
26296 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26297 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
26298 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
26299 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26300 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26302 ; GFX10-LABEL: v_canonicalize_bf16:
26303 ; GFX10:       ; %bb.0:
26304 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26305 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26306 ; GFX10-NEXT:    v_max_f32_e32 v0, v0, v0
26307 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
26308 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26309 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26310 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26311 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26312 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26313 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26315 ; GFX11-LABEL: v_canonicalize_bf16:
26316 ; GFX11:       ; %bb.0:
26317 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26318 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26319 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
26320 ; GFX11-NEXT:    v_max_f32_e32 v0, v0, v0
26321 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
26322 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
26323 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
26324 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
26325 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
26326 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
26327 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26328 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
26329 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26330   %op = call bfloat @llvm.canonicalize.bf16(bfloat %a)
26331   ret bfloat %op
26334 declare bfloat @llvm.arithmetic.fence.bf16(bfloat)
26336 ; FIXME: Promotion broken
26337 ; define bfloat @v_arithmetic_fence_bf16(bfloat %a) {
26338 ;   %op = call bfloat @llvm.arithmetic.fence.bf16(bfloat %a)
26339 ;   ret bfloat %op
26340 ; }
26342 define i1 @v_fcmp_false_bf16(bfloat %a, bfloat %b) {
26343 ; GCN-LABEL: v_fcmp_false_bf16:
26344 ; GCN:       ; %bb.0:
26345 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26346 ; GCN-NEXT:    v_mov_b32_e32 v0, 0
26347 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26349 ; GFX7-LABEL: v_fcmp_false_bf16:
26350 ; GFX7:       ; %bb.0:
26351 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26352 ; GFX7-NEXT:    v_mov_b32_e32 v0, 0
26353 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26355 ; GFX8-LABEL: v_fcmp_false_bf16:
26356 ; GFX8:       ; %bb.0:
26357 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26358 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
26359 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26361 ; GFX9-LABEL: v_fcmp_false_bf16:
26362 ; GFX9:       ; %bb.0:
26363 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26364 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
26365 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26367 ; GFX10-LABEL: v_fcmp_false_bf16:
26368 ; GFX10:       ; %bb.0:
26369 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26370 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
26371 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26373 ; GFX11-LABEL: v_fcmp_false_bf16:
26374 ; GFX11:       ; %bb.0:
26375 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26376 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
26377 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26378   %op = fcmp false bfloat %a, %b
26379   ret i1 %op
26382 define i1 @v_fcmp_oeq_bf16(bfloat %a, bfloat %b) {
26383 ; GCN-LABEL: v_fcmp_oeq_bf16:
26384 ; GCN:       ; %bb.0:
26385 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26386 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26387 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26388 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26389 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26390 ; GCN-NEXT:    v_cmp_eq_f32_e32 vcc, v0, v1
26391 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26392 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26394 ; GFX7-LABEL: v_fcmp_oeq_bf16:
26395 ; GFX7:       ; %bb.0:
26396 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26397 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26398 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26399 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26400 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26401 ; GFX7-NEXT:    v_cmp_eq_f32_e32 vcc, v0, v1
26402 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26403 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26405 ; GFX8-LABEL: v_fcmp_oeq_bf16:
26406 ; GFX8:       ; %bb.0:
26407 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26408 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26409 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26410 ; GFX8-NEXT:    v_cmp_eq_f32_e32 vcc, v0, v1
26411 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26412 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26414 ; GFX9-LABEL: v_fcmp_oeq_bf16:
26415 ; GFX9:       ; %bb.0:
26416 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26417 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26418 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26419 ; GFX9-NEXT:    v_cmp_eq_f32_e32 vcc, v0, v1
26420 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26421 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26423 ; GFX10-LABEL: v_fcmp_oeq_bf16:
26424 ; GFX10:       ; %bb.0:
26425 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26426 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26427 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26428 ; GFX10-NEXT:    v_cmp_eq_f32_e32 vcc_lo, v0, v1
26429 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26430 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26432 ; GFX11-LABEL: v_fcmp_oeq_bf16:
26433 ; GFX11:       ; %bb.0:
26434 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26435 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26436 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26437 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26438 ; GFX11-NEXT:    v_cmp_eq_f32_e32 vcc_lo, v0, v1
26439 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26440 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26441   %op = fcmp oeq bfloat %a, %b
26442   ret i1 %op
26445 define i1 @v_fcmp_ogt_bf16(bfloat %a, bfloat %b) {
26446 ; GCN-LABEL: v_fcmp_ogt_bf16:
26447 ; GCN:       ; %bb.0:
26448 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26449 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26450 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26451 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26452 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26453 ; GCN-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1
26454 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26455 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26457 ; GFX7-LABEL: v_fcmp_ogt_bf16:
26458 ; GFX7:       ; %bb.0:
26459 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26460 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26461 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26462 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26463 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26464 ; GFX7-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1
26465 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26466 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26468 ; GFX8-LABEL: v_fcmp_ogt_bf16:
26469 ; GFX8:       ; %bb.0:
26470 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26471 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26472 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26473 ; GFX8-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1
26474 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26475 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26477 ; GFX9-LABEL: v_fcmp_ogt_bf16:
26478 ; GFX9:       ; %bb.0:
26479 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26480 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26481 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26482 ; GFX9-NEXT:    v_cmp_gt_f32_e32 vcc, v0, v1
26483 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26484 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26486 ; GFX10-LABEL: v_fcmp_ogt_bf16:
26487 ; GFX10:       ; %bb.0:
26488 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26489 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26490 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26491 ; GFX10-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v0, v1
26492 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26493 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26495 ; GFX11-LABEL: v_fcmp_ogt_bf16:
26496 ; GFX11:       ; %bb.0:
26497 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26498 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26499 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26500 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26501 ; GFX11-NEXT:    v_cmp_gt_f32_e32 vcc_lo, v0, v1
26502 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26503 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26504   %op = fcmp ogt bfloat %a, %b
26505   ret i1 %op
26508 define i1 @v_fcmp_oge_bf16(bfloat %a, bfloat %b) {
26509 ; GCN-LABEL: v_fcmp_oge_bf16:
26510 ; GCN:       ; %bb.0:
26511 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26512 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26513 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26514 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26515 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26516 ; GCN-NEXT:    v_cmp_ge_f32_e32 vcc, v0, v1
26517 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26518 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26520 ; GFX7-LABEL: v_fcmp_oge_bf16:
26521 ; GFX7:       ; %bb.0:
26522 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26523 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26524 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26525 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26526 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26527 ; GFX7-NEXT:    v_cmp_ge_f32_e32 vcc, v0, v1
26528 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26529 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26531 ; GFX8-LABEL: v_fcmp_oge_bf16:
26532 ; GFX8:       ; %bb.0:
26533 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26534 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26535 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26536 ; GFX8-NEXT:    v_cmp_ge_f32_e32 vcc, v0, v1
26537 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26538 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26540 ; GFX9-LABEL: v_fcmp_oge_bf16:
26541 ; GFX9:       ; %bb.0:
26542 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26543 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26544 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26545 ; GFX9-NEXT:    v_cmp_ge_f32_e32 vcc, v0, v1
26546 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26547 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26549 ; GFX10-LABEL: v_fcmp_oge_bf16:
26550 ; GFX10:       ; %bb.0:
26551 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26552 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26553 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26554 ; GFX10-NEXT:    v_cmp_ge_f32_e32 vcc_lo, v0, v1
26555 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26556 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26558 ; GFX11-LABEL: v_fcmp_oge_bf16:
26559 ; GFX11:       ; %bb.0:
26560 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26561 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26562 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26563 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26564 ; GFX11-NEXT:    v_cmp_ge_f32_e32 vcc_lo, v0, v1
26565 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26566 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26567   %op = fcmp oge bfloat %a, %b
26568   ret i1 %op
26571 define i1 @v_fcmp_olt_bf16(bfloat %a, bfloat %b) {
26572 ; GCN-LABEL: v_fcmp_olt_bf16:
26573 ; GCN:       ; %bb.0:
26574 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26575 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26576 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26577 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26578 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26579 ; GCN-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
26580 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26581 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26583 ; GFX7-LABEL: v_fcmp_olt_bf16:
26584 ; GFX7:       ; %bb.0:
26585 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26586 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26587 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26588 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26589 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26590 ; GFX7-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
26591 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26592 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26594 ; GFX8-LABEL: v_fcmp_olt_bf16:
26595 ; GFX8:       ; %bb.0:
26596 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26597 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26598 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26599 ; GFX8-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
26600 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26601 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26603 ; GFX9-LABEL: v_fcmp_olt_bf16:
26604 ; GFX9:       ; %bb.0:
26605 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26606 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26607 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26608 ; GFX9-NEXT:    v_cmp_lt_f32_e32 vcc, v0, v1
26609 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26610 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26612 ; GFX10-LABEL: v_fcmp_olt_bf16:
26613 ; GFX10:       ; %bb.0:
26614 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26615 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26616 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26617 ; GFX10-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v0, v1
26618 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26619 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26621 ; GFX11-LABEL: v_fcmp_olt_bf16:
26622 ; GFX11:       ; %bb.0:
26623 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26624 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26625 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26626 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26627 ; GFX11-NEXT:    v_cmp_lt_f32_e32 vcc_lo, v0, v1
26628 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26629 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26630   %op = fcmp olt bfloat %a, %b
26631   ret i1 %op
26634 define i1 @v_fcmp_ole_bf16(bfloat %a, bfloat %b) {
26635 ; GCN-LABEL: v_fcmp_ole_bf16:
26636 ; GCN:       ; %bb.0:
26637 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26638 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26639 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26640 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26641 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26642 ; GCN-NEXT:    v_cmp_le_f32_e32 vcc, v0, v1
26643 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26644 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26646 ; GFX7-LABEL: v_fcmp_ole_bf16:
26647 ; GFX7:       ; %bb.0:
26648 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26649 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26650 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26651 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26652 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26653 ; GFX7-NEXT:    v_cmp_le_f32_e32 vcc, v0, v1
26654 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26655 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26657 ; GFX8-LABEL: v_fcmp_ole_bf16:
26658 ; GFX8:       ; %bb.0:
26659 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26660 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26661 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26662 ; GFX8-NEXT:    v_cmp_le_f32_e32 vcc, v0, v1
26663 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26664 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26666 ; GFX9-LABEL: v_fcmp_ole_bf16:
26667 ; GFX9:       ; %bb.0:
26668 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26669 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26670 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26671 ; GFX9-NEXT:    v_cmp_le_f32_e32 vcc, v0, v1
26672 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26673 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26675 ; GFX10-LABEL: v_fcmp_ole_bf16:
26676 ; GFX10:       ; %bb.0:
26677 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26678 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26679 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26680 ; GFX10-NEXT:    v_cmp_le_f32_e32 vcc_lo, v0, v1
26681 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26682 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26684 ; GFX11-LABEL: v_fcmp_ole_bf16:
26685 ; GFX11:       ; %bb.0:
26686 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26687 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26688 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26689 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26690 ; GFX11-NEXT:    v_cmp_le_f32_e32 vcc_lo, v0, v1
26691 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26692 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26693   %op = fcmp ole bfloat %a, %b
26694   ret i1 %op
26697 define i1 @v_fcmp_one_bf16(bfloat %a, bfloat %b) {
26698 ; GCN-LABEL: v_fcmp_one_bf16:
26699 ; GCN:       ; %bb.0:
26700 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26701 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26702 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26703 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26704 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26705 ; GCN-NEXT:    v_cmp_lg_f32_e32 vcc, v0, v1
26706 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26707 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26709 ; GFX7-LABEL: v_fcmp_one_bf16:
26710 ; GFX7:       ; %bb.0:
26711 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26712 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26713 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26714 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26715 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26716 ; GFX7-NEXT:    v_cmp_lg_f32_e32 vcc, v0, v1
26717 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26718 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26720 ; GFX8-LABEL: v_fcmp_one_bf16:
26721 ; GFX8:       ; %bb.0:
26722 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26723 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26724 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26725 ; GFX8-NEXT:    v_cmp_lg_f32_e32 vcc, v0, v1
26726 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26727 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26729 ; GFX9-LABEL: v_fcmp_one_bf16:
26730 ; GFX9:       ; %bb.0:
26731 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26732 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26733 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26734 ; GFX9-NEXT:    v_cmp_lg_f32_e32 vcc, v0, v1
26735 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26736 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26738 ; GFX10-LABEL: v_fcmp_one_bf16:
26739 ; GFX10:       ; %bb.0:
26740 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26741 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26742 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26743 ; GFX10-NEXT:    v_cmp_lg_f32_e32 vcc_lo, v0, v1
26744 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26745 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26747 ; GFX11-LABEL: v_fcmp_one_bf16:
26748 ; GFX11:       ; %bb.0:
26749 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26750 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26751 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26752 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26753 ; GFX11-NEXT:    v_cmp_lg_f32_e32 vcc_lo, v0, v1
26754 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26755 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26756   %op = fcmp one bfloat %a, %b
26757   ret i1 %op
26760 define i1 @v_fcmp_uno_bf16(bfloat %a, bfloat %b) {
26761 ; GCN-LABEL: v_fcmp_uno_bf16:
26762 ; GCN:       ; %bb.0:
26763 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26764 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26765 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26766 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26767 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26768 ; GCN-NEXT:    v_cmp_u_f32_e32 vcc, v0, v1
26769 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26770 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26772 ; GFX7-LABEL: v_fcmp_uno_bf16:
26773 ; GFX7:       ; %bb.0:
26774 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26775 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26776 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26777 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26778 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26779 ; GFX7-NEXT:    v_cmp_u_f32_e32 vcc, v0, v1
26780 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26781 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26783 ; GFX8-LABEL: v_fcmp_uno_bf16:
26784 ; GFX8:       ; %bb.0:
26785 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26786 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26787 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26788 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v1
26789 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26790 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26792 ; GFX9-LABEL: v_fcmp_uno_bf16:
26793 ; GFX9:       ; %bb.0:
26794 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26795 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26796 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26797 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v1
26798 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26799 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26801 ; GFX10-LABEL: v_fcmp_uno_bf16:
26802 ; GFX10:       ; %bb.0:
26803 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26804 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26805 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26806 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v1
26807 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26808 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26810 ; GFX11-LABEL: v_fcmp_uno_bf16:
26811 ; GFX11:       ; %bb.0:
26812 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26813 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26814 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26815 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26816 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v1
26817 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26818 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26819   %op = fcmp uno bfloat %a, %b
26820   ret i1 %op
26823 define i1 @v_fcmp_ueq_bf16(bfloat %a, bfloat %b) {
26824 ; GCN-LABEL: v_fcmp_ueq_bf16:
26825 ; GCN:       ; %bb.0:
26826 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26827 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26828 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26829 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26830 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26831 ; GCN-NEXT:    v_cmp_nlg_f32_e32 vcc, v0, v1
26832 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26833 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26835 ; GFX7-LABEL: v_fcmp_ueq_bf16:
26836 ; GFX7:       ; %bb.0:
26837 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26838 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26839 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26840 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26841 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26842 ; GFX7-NEXT:    v_cmp_nlg_f32_e32 vcc, v0, v1
26843 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26844 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26846 ; GFX8-LABEL: v_fcmp_ueq_bf16:
26847 ; GFX8:       ; %bb.0:
26848 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26849 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26850 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26851 ; GFX8-NEXT:    v_cmp_nlg_f32_e32 vcc, v0, v1
26852 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26853 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26855 ; GFX9-LABEL: v_fcmp_ueq_bf16:
26856 ; GFX9:       ; %bb.0:
26857 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26858 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26859 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26860 ; GFX9-NEXT:    v_cmp_nlg_f32_e32 vcc, v0, v1
26861 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26862 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26864 ; GFX10-LABEL: v_fcmp_ueq_bf16:
26865 ; GFX10:       ; %bb.0:
26866 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26867 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26868 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26869 ; GFX10-NEXT:    v_cmp_nlg_f32_e32 vcc_lo, v0, v1
26870 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26871 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26873 ; GFX11-LABEL: v_fcmp_ueq_bf16:
26874 ; GFX11:       ; %bb.0:
26875 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26876 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26877 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26878 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26879 ; GFX11-NEXT:    v_cmp_nlg_f32_e32 vcc_lo, v0, v1
26880 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26881 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26882   %op = fcmp ueq bfloat %a, %b
26883   ret i1 %op
26886 define i1 @v_fcmp_ugt_bf16(bfloat %a, bfloat %b) {
26887 ; GCN-LABEL: v_fcmp_ugt_bf16:
26888 ; GCN:       ; %bb.0:
26889 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26890 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26891 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26892 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26893 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26894 ; GCN-NEXT:    v_cmp_nle_f32_e32 vcc, v0, v1
26895 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26896 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26898 ; GFX7-LABEL: v_fcmp_ugt_bf16:
26899 ; GFX7:       ; %bb.0:
26900 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26901 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26902 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26903 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26904 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26905 ; GFX7-NEXT:    v_cmp_nle_f32_e32 vcc, v0, v1
26906 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26907 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26909 ; GFX8-LABEL: v_fcmp_ugt_bf16:
26910 ; GFX8:       ; %bb.0:
26911 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26912 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26913 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26914 ; GFX8-NEXT:    v_cmp_nle_f32_e32 vcc, v0, v1
26915 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26916 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26918 ; GFX9-LABEL: v_fcmp_ugt_bf16:
26919 ; GFX9:       ; %bb.0:
26920 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26921 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26922 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26923 ; GFX9-NEXT:    v_cmp_nle_f32_e32 vcc, v0, v1
26924 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26925 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26927 ; GFX10-LABEL: v_fcmp_ugt_bf16:
26928 ; GFX10:       ; %bb.0:
26929 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26930 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26931 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26932 ; GFX10-NEXT:    v_cmp_nle_f32_e32 vcc_lo, v0, v1
26933 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26934 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26936 ; GFX11-LABEL: v_fcmp_ugt_bf16:
26937 ; GFX11:       ; %bb.0:
26938 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26939 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26940 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26941 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
26942 ; GFX11-NEXT:    v_cmp_nle_f32_e32 vcc_lo, v0, v1
26943 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26944 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
26945   %op = fcmp ugt bfloat %a, %b
26946   ret i1 %op
26949 define i1 @v_fcmp_uge_bf16(bfloat %a, bfloat %b) {
26950 ; GCN-LABEL: v_fcmp_uge_bf16:
26951 ; GCN:       ; %bb.0:
26952 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26953 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26954 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26955 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26956 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26957 ; GCN-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v1
26958 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26959 ; GCN-NEXT:    s_setpc_b64 s[30:31]
26961 ; GFX7-LABEL: v_fcmp_uge_bf16:
26962 ; GFX7:       ; %bb.0:
26963 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26964 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
26965 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
26966 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
26967 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
26968 ; GFX7-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v1
26969 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26970 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
26972 ; GFX8-LABEL: v_fcmp_uge_bf16:
26973 ; GFX8:       ; %bb.0:
26974 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26975 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26976 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26977 ; GFX8-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v1
26978 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26979 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
26981 ; GFX9-LABEL: v_fcmp_uge_bf16:
26982 ; GFX9:       ; %bb.0:
26983 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26984 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26985 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26986 ; GFX9-NEXT:    v_cmp_nlt_f32_e32 vcc, v0, v1
26987 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
26988 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
26990 ; GFX10-LABEL: v_fcmp_uge_bf16:
26991 ; GFX10:       ; %bb.0:
26992 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
26993 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
26994 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
26995 ; GFX10-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, v0, v1
26996 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
26997 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
26999 ; GFX11-LABEL: v_fcmp_uge_bf16:
27000 ; GFX11:       ; %bb.0:
27001 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27002 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27003 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27004 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27005 ; GFX11-NEXT:    v_cmp_nlt_f32_e32 vcc_lo, v0, v1
27006 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27007 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27008   %op = fcmp uge bfloat %a, %b
27009   ret i1 %op
27012 define i1 @v_fcmp_ult_bf16(bfloat %a, bfloat %b) {
27013 ; GCN-LABEL: v_fcmp_ult_bf16:
27014 ; GCN:       ; %bb.0:
27015 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27016 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27017 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27018 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27019 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27020 ; GCN-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v1
27021 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27022 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27024 ; GFX7-LABEL: v_fcmp_ult_bf16:
27025 ; GFX7:       ; %bb.0:
27026 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27027 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27028 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27029 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27030 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27031 ; GFX7-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v1
27032 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27033 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27035 ; GFX8-LABEL: v_fcmp_ult_bf16:
27036 ; GFX8:       ; %bb.0:
27037 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27038 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27039 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27040 ; GFX8-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v1
27041 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27042 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27044 ; GFX9-LABEL: v_fcmp_ult_bf16:
27045 ; GFX9:       ; %bb.0:
27046 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27047 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27048 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27049 ; GFX9-NEXT:    v_cmp_nge_f32_e32 vcc, v0, v1
27050 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27051 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27053 ; GFX10-LABEL: v_fcmp_ult_bf16:
27054 ; GFX10:       ; %bb.0:
27055 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27056 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27057 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27058 ; GFX10-NEXT:    v_cmp_nge_f32_e32 vcc_lo, v0, v1
27059 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27060 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27062 ; GFX11-LABEL: v_fcmp_ult_bf16:
27063 ; GFX11:       ; %bb.0:
27064 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27065 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27066 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27067 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27068 ; GFX11-NEXT:    v_cmp_nge_f32_e32 vcc_lo, v0, v1
27069 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27070 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27071   %op = fcmp ult bfloat %a, %b
27072   ret i1 %op
27075 define i1 @v_fcmp_ule_bf16(bfloat %a, bfloat %b) {
27076 ; GCN-LABEL: v_fcmp_ule_bf16:
27077 ; GCN:       ; %bb.0:
27078 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27079 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27080 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27081 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27082 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27083 ; GCN-NEXT:    v_cmp_ngt_f32_e32 vcc, v0, v1
27084 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27085 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27087 ; GFX7-LABEL: v_fcmp_ule_bf16:
27088 ; GFX7:       ; %bb.0:
27089 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27090 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27091 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27092 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27093 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27094 ; GFX7-NEXT:    v_cmp_ngt_f32_e32 vcc, v0, v1
27095 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27096 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27098 ; GFX8-LABEL: v_fcmp_ule_bf16:
27099 ; GFX8:       ; %bb.0:
27100 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27101 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27102 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27103 ; GFX8-NEXT:    v_cmp_ngt_f32_e32 vcc, v0, v1
27104 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27105 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27107 ; GFX9-LABEL: v_fcmp_ule_bf16:
27108 ; GFX9:       ; %bb.0:
27109 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27110 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27111 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27112 ; GFX9-NEXT:    v_cmp_ngt_f32_e32 vcc, v0, v1
27113 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27114 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27116 ; GFX10-LABEL: v_fcmp_ule_bf16:
27117 ; GFX10:       ; %bb.0:
27118 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27119 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27120 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27121 ; GFX10-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, v0, v1
27122 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27123 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27125 ; GFX11-LABEL: v_fcmp_ule_bf16:
27126 ; GFX11:       ; %bb.0:
27127 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27128 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27129 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27130 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27131 ; GFX11-NEXT:    v_cmp_ngt_f32_e32 vcc_lo, v0, v1
27132 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27133 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27134   %op = fcmp ule bfloat %a, %b
27135   ret i1 %op
27138 define i1 @v_fcmp_une_bf16(bfloat %a, bfloat %b) {
27139 ; GCN-LABEL: v_fcmp_une_bf16:
27140 ; GCN:       ; %bb.0:
27141 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27142 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27143 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27144 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27145 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27146 ; GCN-NEXT:    v_cmp_neq_f32_e32 vcc, v0, v1
27147 ; GCN-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27148 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27150 ; GFX7-LABEL: v_fcmp_une_bf16:
27151 ; GFX7:       ; %bb.0:
27152 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27153 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27154 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27155 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
27156 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
27157 ; GFX7-NEXT:    v_cmp_neq_f32_e32 vcc, v0, v1
27158 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27159 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27161 ; GFX8-LABEL: v_fcmp_une_bf16:
27162 ; GFX8:       ; %bb.0:
27163 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27164 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27165 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27166 ; GFX8-NEXT:    v_cmp_neq_f32_e32 vcc, v0, v1
27167 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27168 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27170 ; GFX9-LABEL: v_fcmp_une_bf16:
27171 ; GFX9:       ; %bb.0:
27172 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27173 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27174 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27175 ; GFX9-NEXT:    v_cmp_neq_f32_e32 vcc, v0, v1
27176 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc
27177 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27179 ; GFX10-LABEL: v_fcmp_une_bf16:
27180 ; GFX10:       ; %bb.0:
27181 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27182 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27183 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27184 ; GFX10-NEXT:    v_cmp_neq_f32_e32 vcc_lo, v0, v1
27185 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27186 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27188 ; GFX11-LABEL: v_fcmp_une_bf16:
27189 ; GFX11:       ; %bb.0:
27190 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27191 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27192 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27193 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27194 ; GFX11-NEXT:    v_cmp_neq_f32_e32 vcc_lo, v0, v1
27195 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, 0, 1, vcc_lo
27196 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27197   %op = fcmp une bfloat %a, %b
27198   ret i1 %op
27201 define i1 @v_fcmp_true_bf16(bfloat %a, bfloat %b) {
27202 ; GCN-LABEL: v_fcmp_true_bf16:
27203 ; GCN:       ; %bb.0:
27204 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27205 ; GCN-NEXT:    v_mov_b32_e32 v0, 1
27206 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27208 ; GFX7-LABEL: v_fcmp_true_bf16:
27209 ; GFX7:       ; %bb.0:
27210 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27211 ; GFX7-NEXT:    v_mov_b32_e32 v0, 1
27212 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27214 ; GFX8-LABEL: v_fcmp_true_bf16:
27215 ; GFX8:       ; %bb.0:
27216 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27217 ; GFX8-NEXT:    v_mov_b32_e32 v0, 1
27218 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27220 ; GFX9-LABEL: v_fcmp_true_bf16:
27221 ; GFX9:       ; %bb.0:
27222 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27223 ; GFX9-NEXT:    v_mov_b32_e32 v0, 1
27224 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27226 ; GFX10-LABEL: v_fcmp_true_bf16:
27227 ; GFX10:       ; %bb.0:
27228 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27229 ; GFX10-NEXT:    v_mov_b32_e32 v0, 1
27230 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27232 ; GFX11-LABEL: v_fcmp_true_bf16:
27233 ; GFX11:       ; %bb.0:
27234 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27235 ; GFX11-NEXT:    v_mov_b32_e32 v0, 1
27236 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27237   %op = fcmp true bfloat %a, %b
27238   ret i1 %op
27241 declare bfloat @llvm.copysign.bf16(bfloat, bfloat)
27243 define bfloat @v_copysign_bf16_bf16(bfloat %mag, bfloat %sign) {
27244 ; GCN-LABEL: v_copysign_bf16_bf16:
27245 ; GCN:       ; %bb.0:
27246 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27247 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27248 ; GCN-NEXT:    v_and_b32_e32 v1, 0x80000000, v1
27249 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27250 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27251 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
27252 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27253 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27255 ; GFX7-LABEL: v_copysign_bf16_bf16:
27256 ; GFX7:       ; %bb.0:
27257 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27258 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27259 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x80000000, v1
27260 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27261 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27262 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
27263 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27264 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27266 ; GFX8-LABEL: v_copysign_bf16_bf16:
27267 ; GFX8:       ; %bb.0:
27268 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27269 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27270 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27271 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27273 ; GFX9-LABEL: v_copysign_bf16_bf16:
27274 ; GFX9:       ; %bb.0:
27275 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27276 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27277 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27278 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27280 ; GFX10-LABEL: v_copysign_bf16_bf16:
27281 ; GFX10:       ; %bb.0:
27282 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27283 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27284 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27286 ; GFX11-LABEL: v_copysign_bf16_bf16:
27287 ; GFX11:       ; %bb.0:
27288 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27289 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27290 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27291   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27292   ret bfloat %op
27295 define bfloat @v_copysign_bf16_s_bf16(bfloat %mag, bfloat inreg %sign) {
27296 ; GCN-LABEL: v_copysign_bf16_s_bf16:
27297 ; GCN:       ; %bb.0:
27298 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27299 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27300 ; GCN-NEXT:    s_and_b32 s4, s6, 0x80000000
27301 ; GCN-NEXT:    s_lshr_b32 s4, s4, 16
27302 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27303 ; GCN-NEXT:    v_or_b32_e32 v0, s4, v0
27304 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27305 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27307 ; GFX7-LABEL: v_copysign_bf16_s_bf16:
27308 ; GFX7:       ; %bb.0:
27309 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27310 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27311 ; GFX7-NEXT:    s_and_b32 s4, s6, 0x80000000
27312 ; GFX7-NEXT:    s_lshr_b32 s4, s4, 16
27313 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27314 ; GFX7-NEXT:    v_or_b32_e32 v0, s4, v0
27315 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27316 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27318 ; GFX8-LABEL: v_copysign_bf16_s_bf16:
27319 ; GFX8:       ; %bb.0:
27320 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27321 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27322 ; GFX8-NEXT:    v_mov_b32_e32 v1, s6
27323 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27324 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27326 ; GFX9-LABEL: v_copysign_bf16_s_bf16:
27327 ; GFX9:       ; %bb.0:
27328 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27329 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27330 ; GFX9-NEXT:    v_mov_b32_e32 v1, s6
27331 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27332 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27334 ; GFX10-LABEL: v_copysign_bf16_s_bf16:
27335 ; GFX10:       ; %bb.0:
27336 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27337 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, s6
27338 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27340 ; GFX11-LABEL: v_copysign_bf16_s_bf16:
27341 ; GFX11:       ; %bb.0:
27342 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27343 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, s0
27344 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27345   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27346   ret bfloat %op
27349 define bfloat @v_copysign_s_bf16_bf16(bfloat inreg %mag, bfloat %sign) {
27350 ; GCN-LABEL: v_copysign_s_bf16_bf16:
27351 ; GCN:       ; %bb.0:
27352 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27353 ; GCN-NEXT:    v_mul_f32_e64 v1, 1.0, s6
27354 ; GCN-NEXT:    v_and_b32_e32 v0, 0x80000000, v0
27355 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
27356 ; GCN-NEXT:    v_bfe_u32 v1, v1, 16, 15
27357 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
27358 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27359 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27361 ; GFX7-LABEL: v_copysign_s_bf16_bf16:
27362 ; GFX7:       ; %bb.0:
27363 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27364 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s6
27365 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x80000000, v0
27366 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
27367 ; GFX7-NEXT:    v_bfe_u32 v1, v1, 16, 15
27368 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
27369 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27370 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27372 ; GFX8-LABEL: v_copysign_s_bf16_bf16:
27373 ; GFX8:       ; %bb.0:
27374 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27375 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27376 ; GFX8-NEXT:    v_mov_b32_e32 v1, s6
27377 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v1, v0
27378 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27380 ; GFX9-LABEL: v_copysign_s_bf16_bf16:
27381 ; GFX9:       ; %bb.0:
27382 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27383 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27384 ; GFX9-NEXT:    v_mov_b32_e32 v1, s6
27385 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v1, v0
27386 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27388 ; GFX10-LABEL: v_copysign_s_bf16_bf16:
27389 ; GFX10:       ; %bb.0:
27390 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27391 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s6, v0
27392 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27394 ; GFX11-LABEL: v_copysign_s_bf16_bf16:
27395 ; GFX11:       ; %bb.0:
27396 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27397 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27398 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27399   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27400   ret bfloat %op
27403 define bfloat @v_copysign_bf16_f32(bfloat %mag, float %sign.f32) {
27404 ; GCN-LABEL: v_copysign_bf16_f32:
27405 ; GCN:       ; %bb.0:
27406 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27407 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27408 ; GCN-NEXT:    v_and_b32_e32 v1, 0x80000000, v1
27409 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27410 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27411 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
27412 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27413 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27415 ; GFX7-LABEL: v_copysign_bf16_f32:
27416 ; GFX7:       ; %bb.0:
27417 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27418 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27419 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x80000000, v1
27420 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27421 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27422 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
27423 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27424 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27426 ; GFX8-LABEL: v_copysign_bf16_f32:
27427 ; GFX8:       ; %bb.0:
27428 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27429 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27430 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27431 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27432 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27434 ; GFX9-LABEL: v_copysign_bf16_f32:
27435 ; GFX9:       ; %bb.0:
27436 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27437 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27438 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27439 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27440 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27442 ; GFX10-LABEL: v_copysign_bf16_f32:
27443 ; GFX10:       ; %bb.0:
27444 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27445 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27446 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27447 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27449 ; GFX11-LABEL: v_copysign_bf16_f32:
27450 ; GFX11:       ; %bb.0:
27451 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27452 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27453 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27454 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27455 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27456   %sign = fptrunc float %sign.f32 to bfloat
27457   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27458   ret bfloat %op
27461 define bfloat @v_copysign_bf16_f64(bfloat %mag, double %sign.f64) {
27462 ; GCN-LABEL: v_copysign_bf16_f64:
27463 ; GCN:       ; %bb.0:
27464 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27465 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27466 ; GCN-NEXT:    v_and_b32_e32 v1, 0x80000000, v2
27467 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27468 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27469 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
27470 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27471 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27473 ; GFX7-LABEL: v_copysign_bf16_f64:
27474 ; GFX7:       ; %bb.0:
27475 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27476 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27477 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x80000000, v2
27478 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27479 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27480 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
27481 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27482 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27484 ; GFX8-LABEL: v_copysign_bf16_f64:
27485 ; GFX8:       ; %bb.0:
27486 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27487 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
27488 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27489 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27490 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27492 ; GFX9-LABEL: v_copysign_bf16_f64:
27493 ; GFX9:       ; %bb.0:
27494 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27495 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
27496 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27497 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27498 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27500 ; GFX10-LABEL: v_copysign_bf16_f64:
27501 ; GFX10:       ; %bb.0:
27502 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27503 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
27504 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27505 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27507 ; GFX11-LABEL: v_copysign_bf16_f64:
27508 ; GFX11:       ; %bb.0:
27509 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27510 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
27511 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27512 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27513 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27514   %sign = fptrunc double %sign.f64 to bfloat
27515   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27516   ret bfloat %op
27519 define bfloat @v_copysign_bf16_f16(bfloat %mag, half %sign.f16) {
27520 ; GCN-LABEL: v_copysign_bf16_f16:
27521 ; GCN:       ; %bb.0:
27522 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27523 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27524 ; GCN-NEXT:    v_cvt_f16_f32_e32 v1, v1
27525 ; GCN-NEXT:    v_and_b32_e32 v1, 0x8000, v1
27526 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27527 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
27528 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27529 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27531 ; GFX7-LABEL: v_copysign_bf16_f16:
27532 ; GFX7:       ; %bb.0:
27533 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27534 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
27535 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
27536 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27537 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x8000, v1
27538 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
27539 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
27540 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27542 ; GFX8-LABEL: v_copysign_bf16_f16:
27543 ; GFX8:       ; %bb.0:
27544 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27545 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27546 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27547 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27549 ; GFX9-LABEL: v_copysign_bf16_f16:
27550 ; GFX9:       ; %bb.0:
27551 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27552 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27553 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27554 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27556 ; GFX10-LABEL: v_copysign_bf16_f16:
27557 ; GFX10:       ; %bb.0:
27558 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27559 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27560 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27562 ; GFX11-LABEL: v_copysign_bf16_f16:
27563 ; GFX11:       ; %bb.0:
27564 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27565 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27566 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27567   %sign = bitcast half %sign.f16 to bfloat
27568   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27569   ret bfloat %op
27572 define amdgpu_ps i32 @s_copysign_bf16_bf16(bfloat inreg %mag, bfloat inreg %sign) {
27573 ; GCN-LABEL: s_copysign_bf16_bf16:
27574 ; GCN:       ; %bb.0:
27575 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27576 ; GCN-NEXT:    s_and_b32 s0, s1, 0x80000000
27577 ; GCN-NEXT:    s_lshr_b32 s0, s0, 16
27578 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27579 ; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
27580 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
27581 ; GCN-NEXT:    ; return to shader part epilog
27583 ; GFX7-LABEL: s_copysign_bf16_bf16:
27584 ; GFX7:       ; %bb.0:
27585 ; GFX7-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27586 ; GFX7-NEXT:    s_and_b32 s0, s1, 0x80000000
27587 ; GFX7-NEXT:    s_lshr_b32 s0, s0, 16
27588 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27589 ; GFX7-NEXT:    v_or_b32_e32 v0, s0, v0
27590 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
27591 ; GFX7-NEXT:    ; return to shader part epilog
27593 ; GFX8-LABEL: s_copysign_bf16_bf16:
27594 ; GFX8:       ; %bb.0:
27595 ; GFX8-NEXT:    s_movk_i32 s2, 0x7fff
27596 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
27597 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
27598 ; GFX8-NEXT:    v_bfi_b32 v0, s2, v0, v1
27599 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27600 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
27601 ; GFX8-NEXT:    ; return to shader part epilog
27603 ; GFX9-LABEL: s_copysign_bf16_bf16:
27604 ; GFX9:       ; %bb.0:
27605 ; GFX9-NEXT:    s_movk_i32 s2, 0x7fff
27606 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
27607 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
27608 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v0, v1
27609 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27610 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
27611 ; GFX9-NEXT:    ; return to shader part epilog
27613 ; GFX10-LABEL: s_copysign_bf16_bf16:
27614 ; GFX10:       ; %bb.0:
27615 ; GFX10-NEXT:    v_mov_b32_e32 v0, s1
27616 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27617 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27618 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
27619 ; GFX10-NEXT:    ; return to shader part epilog
27621 ; GFX11-LABEL: s_copysign_bf16_bf16:
27622 ; GFX11:       ; %bb.0:
27623 ; GFX11-NEXT:    v_mov_b32_e32 v0, s1
27624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
27625 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27626 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27627 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27628 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
27629 ; GFX11-NEXT:    ; return to shader part epilog
27630   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27631   %cast = bitcast bfloat %op to i16
27632   %zext = zext i16 %cast to i32
27633   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
27634   ret i32 %readlane
27637 define amdgpu_ps i32 @s_copysign_bf16_f32(bfloat inreg %mag, float inreg %sign.f32) {
27638 ; GCN-LABEL: s_copysign_bf16_f32:
27639 ; GCN:       ; %bb.0:
27640 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27641 ; GCN-NEXT:    s_and_b32 s0, s1, 0x80000000
27642 ; GCN-NEXT:    s_lshr_b32 s0, s0, 16
27643 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27644 ; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
27645 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
27646 ; GCN-NEXT:    ; return to shader part epilog
27648 ; GFX7-LABEL: s_copysign_bf16_f32:
27649 ; GFX7:       ; %bb.0:
27650 ; GFX7-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27651 ; GFX7-NEXT:    s_and_b32 s0, s1, 0x80000000
27652 ; GFX7-NEXT:    s_lshr_b32 s0, s0, 16
27653 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27654 ; GFX7-NEXT:    v_or_b32_e32 v0, s0, v0
27655 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
27656 ; GFX7-NEXT:    ; return to shader part epilog
27658 ; GFX8-LABEL: s_copysign_bf16_f32:
27659 ; GFX8:       ; %bb.0:
27660 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 16, s1
27661 ; GFX8-NEXT:    s_movk_i32 s1, 0x7fff
27662 ; GFX8-NEXT:    v_mov_b32_e32 v1, s0
27663 ; GFX8-NEXT:    v_bfi_b32 v0, s1, v1, v0
27664 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27665 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
27666 ; GFX8-NEXT:    ; return to shader part epilog
27668 ; GFX9-LABEL: s_copysign_bf16_f32:
27669 ; GFX9:       ; %bb.0:
27670 ; GFX9-NEXT:    v_lshrrev_b32_e64 v0, 16, s1
27671 ; GFX9-NEXT:    s_movk_i32 s1, 0x7fff
27672 ; GFX9-NEXT:    v_mov_b32_e32 v1, s0
27673 ; GFX9-NEXT:    v_bfi_b32 v0, s1, v1, v0
27674 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27675 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
27676 ; GFX9-NEXT:    ; return to shader part epilog
27678 ; GFX10-LABEL: s_copysign_bf16_f32:
27679 ; GFX10:       ; %bb.0:
27680 ; GFX10-NEXT:    v_lshrrev_b32_e64 v0, 16, s1
27681 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27682 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27683 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
27684 ; GFX10-NEXT:    ; return to shader part epilog
27686 ; GFX11-LABEL: s_copysign_bf16_f32:
27687 ; GFX11:       ; %bb.0:
27688 ; GFX11-NEXT:    v_lshrrev_b32_e64 v0, 16, s1
27689 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
27690 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27691 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27692 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27693 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
27694 ; GFX11-NEXT:    ; return to shader part epilog
27695   %sign = fptrunc float %sign.f32 to bfloat
27696   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27697   %cast = bitcast bfloat %op to i16
27698   %zext = zext i16 %cast to i32
27699   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
27700   ret i32 %readlane
27703 define amdgpu_ps i32 @s_copysign_bf16_f64(bfloat inreg %mag, double inreg %sign.f64) {
27704 ; GCN-LABEL: s_copysign_bf16_f64:
27705 ; GCN:       ; %bb.0:
27706 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27707 ; GCN-NEXT:    s_and_b32 s0, s2, 0x80000000
27708 ; GCN-NEXT:    s_lshr_b32 s0, s0, 16
27709 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27710 ; GCN-NEXT:    v_or_b32_e32 v0, s0, v0
27711 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
27712 ; GCN-NEXT:    ; return to shader part epilog
27714 ; GFX7-LABEL: s_copysign_bf16_f64:
27715 ; GFX7:       ; %bb.0:
27716 ; GFX7-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27717 ; GFX7-NEXT:    s_and_b32 s0, s2, 0x80000000
27718 ; GFX7-NEXT:    s_lshr_b32 s0, s0, 16
27719 ; GFX7-NEXT:    v_bfe_u32 v0, v0, 16, 15
27720 ; GFX7-NEXT:    v_or_b32_e32 v0, s0, v0
27721 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
27722 ; GFX7-NEXT:    ; return to shader part epilog
27724 ; GFX8-LABEL: s_copysign_bf16_f64:
27725 ; GFX8:       ; %bb.0:
27726 ; GFX8-NEXT:    v_lshrrev_b32_e64 v0, 16, s2
27727 ; GFX8-NEXT:    s_movk_i32 s1, 0x7fff
27728 ; GFX8-NEXT:    v_mov_b32_e32 v1, s0
27729 ; GFX8-NEXT:    v_bfi_b32 v0, s1, v1, v0
27730 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27731 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
27732 ; GFX8-NEXT:    ; return to shader part epilog
27734 ; GFX9-LABEL: s_copysign_bf16_f64:
27735 ; GFX9:       ; %bb.0:
27736 ; GFX9-NEXT:    v_lshrrev_b32_e64 v0, 16, s2
27737 ; GFX9-NEXT:    s_movk_i32 s1, 0x7fff
27738 ; GFX9-NEXT:    v_mov_b32_e32 v1, s0
27739 ; GFX9-NEXT:    v_bfi_b32 v0, s1, v1, v0
27740 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27741 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
27742 ; GFX9-NEXT:    ; return to shader part epilog
27744 ; GFX10-LABEL: s_copysign_bf16_f64:
27745 ; GFX10:       ; %bb.0:
27746 ; GFX10-NEXT:    v_lshrrev_b32_e64 v0, 16, s2
27747 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27748 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27749 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
27750 ; GFX10-NEXT:    ; return to shader part epilog
27752 ; GFX11-LABEL: s_copysign_bf16_f64:
27753 ; GFX11:       ; %bb.0:
27754 ; GFX11-NEXT:    v_lshrrev_b32_e64 v0, 16, s2
27755 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
27756 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27757 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27758 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27759 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
27760 ; GFX11-NEXT:    ; return to shader part epilog
27761   %sign = fptrunc double %sign.f64 to bfloat
27762   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27763   %cast = bitcast bfloat %op to i16
27764   %zext = zext i16 %cast to i32
27765   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
27766   ret i32 %readlane
27769 define amdgpu_ps i32 @s_copysign_bf16_f16(bfloat inreg %mag, half inreg %sign.f16) {
27770 ; GCN-LABEL: s_copysign_bf16_f16:
27771 ; GCN:       ; %bb.0:
27772 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s0
27773 ; GCN-NEXT:    v_cvt_f16_f32_e32 v1, s1
27774 ; GCN-NEXT:    v_and_b32_e32 v1, 0x8000, v1
27775 ; GCN-NEXT:    v_bfe_u32 v0, v0, 16, 15
27776 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
27777 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
27778 ; GCN-NEXT:    ; return to shader part epilog
27780 ; GFX7-LABEL: s_copysign_bf16_f16:
27781 ; GFX7:       ; %bb.0:
27782 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, s1
27783 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s0
27784 ; GFX7-NEXT:    v_bfe_u32 v1, v1, 16, 15
27785 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x8000, v0
27786 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
27787 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
27788 ; GFX7-NEXT:    ; return to shader part epilog
27790 ; GFX8-LABEL: s_copysign_bf16_f16:
27791 ; GFX8:       ; %bb.0:
27792 ; GFX8-NEXT:    s_movk_i32 s2, 0x7fff
27793 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
27794 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
27795 ; GFX8-NEXT:    v_bfi_b32 v0, s2, v0, v1
27796 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27797 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
27798 ; GFX8-NEXT:    ; return to shader part epilog
27800 ; GFX9-LABEL: s_copysign_bf16_f16:
27801 ; GFX9:       ; %bb.0:
27802 ; GFX9-NEXT:    s_movk_i32 s2, 0x7fff
27803 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
27804 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
27805 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v0, v1
27806 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27807 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
27808 ; GFX9-NEXT:    ; return to shader part epilog
27810 ; GFX10-LABEL: s_copysign_bf16_f16:
27811 ; GFX10:       ; %bb.0:
27812 ; GFX10-NEXT:    v_mov_b32_e32 v0, s1
27813 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27814 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27815 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
27816 ; GFX10-NEXT:    ; return to shader part epilog
27818 ; GFX11-LABEL: s_copysign_bf16_f16:
27819 ; GFX11:       ; %bb.0:
27820 ; GFX11-NEXT:    v_mov_b32_e32 v0, s1
27821 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
27822 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
27823 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
27824 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27825 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
27826 ; GFX11-NEXT:    ; return to shader part epilog
27827   %sign = bitcast half %sign.f16 to bfloat
27828   %op = call bfloat @llvm.copysign.bf16(bfloat %mag, bfloat %sign)
27829   %cast = bitcast bfloat %op to i16
27830   %zext = zext i16 %cast to i32
27831   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
27832   ret i32 %readlane
27835 declare float @llvm.copysign.f32(float, float)
27837 define float @v_copysign_f32_bf16(float %mag, bfloat %sign.bf16) {
27838 ; GCN-LABEL: v_copysign_f32_bf16:
27839 ; GCN:       ; %bb.0:
27840 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27841 ; GCN-NEXT:    s_brev_b32 s4, -2
27842 ; GCN-NEXT:    v_bfi_b32 v0, s4, v0, v1
27843 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27845 ; GFX7-LABEL: v_copysign_f32_bf16:
27846 ; GFX7:       ; %bb.0:
27847 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27848 ; GFX7-NEXT:    s_brev_b32 s4, -2
27849 ; GFX7-NEXT:    v_bfi_b32 v0, s4, v0, v1
27850 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27852 ; GFX8-LABEL: v_copysign_f32_bf16:
27853 ; GFX8:       ; %bb.0:
27854 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27855 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27856 ; GFX8-NEXT:    s_brev_b32 s4, -2
27857 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27858 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27860 ; GFX9-LABEL: v_copysign_f32_bf16:
27861 ; GFX9:       ; %bb.0:
27862 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27863 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27864 ; GFX9-NEXT:    s_brev_b32 s4, -2
27865 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27866 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27868 ; GFX10-LABEL: v_copysign_f32_bf16:
27869 ; GFX10:       ; %bb.0:
27870 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27871 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27872 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fffffff, v0, v1
27873 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27875 ; GFX11-LABEL: v_copysign_f32_bf16:
27876 ; GFX11:       ; %bb.0:
27877 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27878 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
27879 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
27880 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fffffff, v0, v1
27881 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27882   %sign = fpext bfloat %sign.bf16 to float
27883   %op = call float @llvm.copysign.f32(float %mag, float %sign)
27884   ret float %op
27887 define amdgpu_ps i32 @s_copysign_f32_bf16(float inreg %mag, bfloat inreg %sign.bf16) {
27888 ; GCN-LABEL: s_copysign_f32_bf16:
27889 ; GCN:       ; %bb.0:
27890 ; GCN-NEXT:    s_brev_b32 s2, -2
27891 ; GCN-NEXT:    v_mov_b32_e32 v0, s0
27892 ; GCN-NEXT:    v_mov_b32_e32 v1, s1
27893 ; GCN-NEXT:    v_bfi_b32 v0, s2, v0, v1
27894 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
27895 ; GCN-NEXT:    ; return to shader part epilog
27897 ; GFX7-LABEL: s_copysign_f32_bf16:
27898 ; GFX7:       ; %bb.0:
27899 ; GFX7-NEXT:    s_brev_b32 s2, -2
27900 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
27901 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
27902 ; GFX7-NEXT:    v_bfi_b32 v0, s2, v0, v1
27903 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
27904 ; GFX7-NEXT:    ; return to shader part epilog
27906 ; GFX8-LABEL: s_copysign_f32_bf16:
27907 ; GFX8:       ; %bb.0:
27908 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, 16, s1
27909 ; GFX8-NEXT:    s_brev_b32 s1, -2
27910 ; GFX8-NEXT:    v_mov_b32_e32 v1, s0
27911 ; GFX8-NEXT:    v_bfi_b32 v0, s1, v1, v0
27912 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
27913 ; GFX8-NEXT:    ; return to shader part epilog
27915 ; GFX9-LABEL: s_copysign_f32_bf16:
27916 ; GFX9:       ; %bb.0:
27917 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, 16, s1
27918 ; GFX9-NEXT:    s_brev_b32 s1, -2
27919 ; GFX9-NEXT:    v_mov_b32_e32 v1, s0
27920 ; GFX9-NEXT:    v_bfi_b32 v0, s1, v1, v0
27921 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
27922 ; GFX9-NEXT:    ; return to shader part epilog
27924 ; GFX10-LABEL: s_copysign_f32_bf16:
27925 ; GFX10:       ; %bb.0:
27926 ; GFX10-NEXT:    v_lshlrev_b32_e64 v0, 16, s1
27927 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fffffff, s0, v0
27928 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
27929 ; GFX10-NEXT:    ; return to shader part epilog
27931 ; GFX11-LABEL: s_copysign_f32_bf16:
27932 ; GFX11:       ; %bb.0:
27933 ; GFX11-NEXT:    v_lshlrev_b32_e64 v0, 16, s1
27934 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
27935 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fffffff, s0, v0
27936 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
27937 ; GFX11-NEXT:    ; return to shader part epilog
27938   %sign = fpext bfloat %sign.bf16 to float
27939   %op = call float @llvm.copysign.f32(float %mag, float %sign)
27940   %cast = bitcast float %op to i32
27941   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
27942   ret i32 %readlane
27945 declare half @llvm.copysign.f16(half, half)
27947 define half @v_copysign_f16_bf16(half %mag, bfloat %sign.bf16) {
27948 ; GCN-LABEL: v_copysign_f16_bf16:
27949 ; GCN:       ; %bb.0:
27950 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27951 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27952 ; GCN-NEXT:    v_cvt_f16_f32_e32 v0, v0
27953 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27954 ; GCN-NEXT:    v_cvt_f32_f16_e32 v0, v0
27955 ; GCN-NEXT:    v_cvt_f32_f16_e32 v1, v1
27956 ; GCN-NEXT:    s_brev_b32 s4, -2
27957 ; GCN-NEXT:    v_bfi_b32 v0, s4, v0, v1
27958 ; GCN-NEXT:    s_setpc_b64 s[30:31]
27960 ; GFX7-LABEL: v_copysign_f16_bf16:
27961 ; GFX7:       ; %bb.0:
27962 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27963 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
27964 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
27965 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
27966 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
27967 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
27968 ; GFX7-NEXT:    s_brev_b32 s4, -2
27969 ; GFX7-NEXT:    v_bfi_b32 v0, s4, v0, v1
27970 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
27972 ; GFX8-LABEL: v_copysign_f16_bf16:
27973 ; GFX8:       ; %bb.0:
27974 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27975 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
27976 ; GFX8-NEXT:    v_bfi_b32 v0, s4, v0, v1
27977 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
27979 ; GFX9-LABEL: v_copysign_f16_bf16:
27980 ; GFX9:       ; %bb.0:
27981 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27982 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
27983 ; GFX9-NEXT:    v_bfi_b32 v0, s4, v0, v1
27984 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
27986 ; GFX10-LABEL: v_copysign_f16_bf16:
27987 ; GFX10:       ; %bb.0:
27988 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27989 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27990 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
27992 ; GFX11-LABEL: v_copysign_f16_bf16:
27993 ; GFX11:       ; %bb.0:
27994 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27995 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, v0, v1
27996 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
27997   %sign = bitcast bfloat %sign.bf16 to half
27998   %op = call half @llvm.copysign.f16(half %mag, half %sign)
27999   ret half %op
28002 define amdgpu_ps i32 @s_copysign_f16_bf16(half inreg %mag, bfloat inreg %sign.bf16) {
28003 ; GCN-LABEL: s_copysign_f16_bf16:
28004 ; GCN:       ; %bb.0:
28005 ; GCN-NEXT:    v_mul_f32_e64 v0, 1.0, s1
28006 ; GCN-NEXT:    v_cvt_f16_f32_e32 v1, s0
28007 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
28008 ; GCN-NEXT:    v_cvt_f32_f16_e32 v1, v1
28009 ; GCN-NEXT:    v_cvt_f32_f16_e32 v0, v0
28010 ; GCN-NEXT:    s_brev_b32 s0, -2
28011 ; GCN-NEXT:    v_bfi_b32 v0, s0, v1, v0
28012 ; GCN-NEXT:    v_cvt_f16_f32_e32 v0, v0
28013 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
28014 ; GCN-NEXT:    ; return to shader part epilog
28016 ; GFX7-LABEL: s_copysign_f16_bf16:
28017 ; GFX7:       ; %bb.0:
28018 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, s0
28019 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s1
28020 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
28021 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
28022 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
28023 ; GFX7-NEXT:    s_brev_b32 s0, -2
28024 ; GFX7-NEXT:    v_bfi_b32 v0, s0, v0, v1
28025 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
28026 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
28027 ; GFX7-NEXT:    ; return to shader part epilog
28029 ; GFX8-LABEL: s_copysign_f16_bf16:
28030 ; GFX8:       ; %bb.0:
28031 ; GFX8-NEXT:    s_movk_i32 s2, 0x7fff
28032 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
28033 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
28034 ; GFX8-NEXT:    v_bfi_b32 v0, s2, v0, v1
28035 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28036 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
28037 ; GFX8-NEXT:    ; return to shader part epilog
28039 ; GFX9-LABEL: s_copysign_f16_bf16:
28040 ; GFX9:       ; %bb.0:
28041 ; GFX9-NEXT:    s_movk_i32 s2, 0x7fff
28042 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
28043 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
28044 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v0, v1
28045 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28046 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
28047 ; GFX9-NEXT:    ; return to shader part epilog
28049 ; GFX10-LABEL: s_copysign_f16_bf16:
28050 ; GFX10:       ; %bb.0:
28051 ; GFX10-NEXT:    v_mov_b32_e32 v0, s1
28052 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
28053 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28054 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
28055 ; GFX10-NEXT:    ; return to shader part epilog
28057 ; GFX11-LABEL: s_copysign_f16_bf16:
28058 ; GFX11:       ; %bb.0:
28059 ; GFX11-NEXT:    v_mov_b32_e32 v0, s1
28060 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
28061 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fff, s0, v0
28062 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28063 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
28064 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
28065 ; GFX11-NEXT:    ; return to shader part epilog
28066   %sign = bitcast bfloat %sign.bf16 to half
28067   %op = call half @llvm.copysign.f16(half %mag, half %sign)
28068   %cast = bitcast half %op to i16
28069   %zext = zext i16 %cast to i32
28070   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
28071   ret i32 %readlane
28074 declare double @llvm.copysign.f64(double, double)
28076 define double @v_copysign_f64_bf16(double %mag, bfloat %sign.bf16) {
28077 ; GCN-LABEL: v_copysign_f64_bf16:
28078 ; GCN:       ; %bb.0:
28079 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28080 ; GCN-NEXT:    s_brev_b32 s4, -2
28081 ; GCN-NEXT:    v_bfi_b32 v1, s4, v1, v2
28082 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28084 ; GFX7-LABEL: v_copysign_f64_bf16:
28085 ; GFX7:       ; %bb.0:
28086 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28087 ; GFX7-NEXT:    s_brev_b32 s4, -2
28088 ; GFX7-NEXT:    v_bfi_b32 v1, s4, v1, v2
28089 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28091 ; GFX8-LABEL: v_copysign_f64_bf16:
28092 ; GFX8:       ; %bb.0:
28093 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28094 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
28095 ; GFX8-NEXT:    s_brev_b32 s4, -2
28096 ; GFX8-NEXT:    v_bfi_b32 v1, s4, v1, v2
28097 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28099 ; GFX9-LABEL: v_copysign_f64_bf16:
28100 ; GFX9:       ; %bb.0:
28101 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28102 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
28103 ; GFX9-NEXT:    s_brev_b32 s4, -2
28104 ; GFX9-NEXT:    v_bfi_b32 v1, s4, v1, v2
28105 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28107 ; GFX10-LABEL: v_copysign_f64_bf16:
28108 ; GFX10:       ; %bb.0:
28109 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28110 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
28111 ; GFX10-NEXT:    v_bfi_b32 v1, 0x7fffffff, v1, v2
28112 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28114 ; GFX11-LABEL: v_copysign_f64_bf16:
28115 ; GFX11:       ; %bb.0:
28116 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28117 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
28118 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
28119 ; GFX11-NEXT:    v_bfi_b32 v1, 0x7fffffff, v1, v2
28120 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28121   %sign = fpext bfloat %sign.bf16 to double
28122   %op = call double @llvm.copysign.f64(double %mag, double %sign)
28123   ret double %op
28126 define amdgpu_ps <2 x i32> @s_copysign_f64_bf16(double inreg %mag, bfloat inreg %sign.bf16) {
28127 ; GCN-LABEL: s_copysign_f64_bf16:
28128 ; GCN:       ; %bb.0:
28129 ; GCN-NEXT:    s_brev_b32 s3, -2
28130 ; GCN-NEXT:    v_mov_b32_e32 v0, s1
28131 ; GCN-NEXT:    v_mov_b32_e32 v1, s2
28132 ; GCN-NEXT:    v_bfi_b32 v0, s3, v0, v1
28133 ; GCN-NEXT:    v_readfirstlane_b32 s1, v0
28134 ; GCN-NEXT:    ; return to shader part epilog
28136 ; GFX7-LABEL: s_copysign_f64_bf16:
28137 ; GFX7:       ; %bb.0:
28138 ; GFX7-NEXT:    s_brev_b32 s3, -2
28139 ; GFX7-NEXT:    v_mov_b32_e32 v0, s1
28140 ; GFX7-NEXT:    v_mov_b32_e32 v1, s2
28141 ; GFX7-NEXT:    v_bfi_b32 v0, s3, v0, v1
28142 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
28143 ; GFX7-NEXT:    ; return to shader part epilog
28145 ; GFX8-LABEL: s_copysign_f64_bf16:
28146 ; GFX8:       ; %bb.0:
28147 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, 16, s2
28148 ; GFX8-NEXT:    s_brev_b32 s2, -2
28149 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
28150 ; GFX8-NEXT:    v_bfi_b32 v0, s2, v1, v0
28151 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
28152 ; GFX8-NEXT:    ; return to shader part epilog
28154 ; GFX9-LABEL: s_copysign_f64_bf16:
28155 ; GFX9:       ; %bb.0:
28156 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, 16, s2
28157 ; GFX9-NEXT:    s_brev_b32 s2, -2
28158 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
28159 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v1, v0
28160 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v0
28161 ; GFX9-NEXT:    ; return to shader part epilog
28163 ; GFX10-LABEL: s_copysign_f64_bf16:
28164 ; GFX10:       ; %bb.0:
28165 ; GFX10-NEXT:    v_lshlrev_b32_e64 v0, 16, s2
28166 ; GFX10-NEXT:    v_bfi_b32 v0, 0x7fffffff, s1, v0
28167 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v0
28168 ; GFX10-NEXT:    ; return to shader part epilog
28170 ; GFX11-LABEL: s_copysign_f64_bf16:
28171 ; GFX11:       ; %bb.0:
28172 ; GFX11-NEXT:    v_lshlrev_b32_e64 v0, 16, s2
28173 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
28174 ; GFX11-NEXT:    v_bfi_b32 v0, 0x7fffffff, s1, v0
28175 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v0
28176 ; GFX11-NEXT:    ; return to shader part epilog
28177   %sign = fpext bfloat %sign.bf16 to double
28178   %op = call double @llvm.copysign.f64(double %mag, double %sign)
28179   %cast = bitcast double %op to <2 x i32>
28180   %cast.0 = extractelement <2 x i32> %cast, i32 0
28181   %cast.1 = extractelement <2 x i32> %cast, i32 1
28182   %readlane0 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.0)
28183   %readlane1 = call i32 @llvm.amdgcn.readfirstlane(i32 %cast.1)
28184   %ins.0 = insertelement <2 x i32> poison, i32 %readlane0, i32 0
28185   %ins.1 = insertelement <2 x i32> %ins.0, i32 %readlane1, i32 1
28186   ret <2 x i32> %ins.1
28189 define i16 @v_fptosi_bf16_to_i16(bfloat %x) {
28190 ; GCN-LABEL: v_fptosi_bf16_to_i16:
28191 ; GCN:       ; %bb.0:
28192 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28193 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28194 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28195 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28196 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28198 ; GFX7-LABEL: v_fptosi_bf16_to_i16:
28199 ; GFX7:       ; %bb.0:
28200 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28201 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28202 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28203 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28204 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28206 ; GFX8-LABEL: v_fptosi_bf16_to_i16:
28207 ; GFX8:       ; %bb.0:
28208 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28209 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28210 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v0, v0
28211 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28213 ; GFX9-LABEL: v_fptosi_bf16_to_i16:
28214 ; GFX9:       ; %bb.0:
28215 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28216 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28217 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v0, v0
28218 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28220 ; GFX10-LABEL: v_fptosi_bf16_to_i16:
28221 ; GFX10:       ; %bb.0:
28222 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28223 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28224 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v0
28225 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28227 ; GFX11-LABEL: v_fptosi_bf16_to_i16:
28228 ; GFX11:       ; %bb.0:
28229 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28230 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28231 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
28232 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v0
28233 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28234   %op = fptosi bfloat %x to i16
28235   ret i16 %op
28238 define <2 x i16> @v_fptosi_v2bf16_to_v2i16(<2 x bfloat> %x) {
28239 ; GCN-LABEL: v_fptosi_v2bf16_to_v2i16:
28240 ; GCN:       ; %bb.0:
28241 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28242 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28243 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28244 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28245 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28246 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28247 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28248 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28249 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28250 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v2
28251 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff, v1
28252 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28254 ; GFX7-LABEL: v_fptosi_v2bf16_to_v2i16:
28255 ; GFX7:       ; %bb.0:
28256 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28257 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28258 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28259 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28260 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28261 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28262 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28263 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28264 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28265 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v2
28266 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v1
28267 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28269 ; GFX8-LABEL: v_fptosi_v2bf16_to_v2i16:
28270 ; GFX8:       ; %bb.0:
28271 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28272 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v0
28273 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28274 ; GFX8-NEXT:    v_cvt_i32_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
28275 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v0, v0
28276 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
28277 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28279 ; GFX9-LABEL: v_fptosi_v2bf16_to_v2i16:
28280 ; GFX9:       ; %bb.0:
28281 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28282 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28283 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28284 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v1, v1
28285 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v0, v0
28286 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
28287 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
28288 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28290 ; GFX10-LABEL: v_fptosi_v2bf16_to_v2i16:
28291 ; GFX10:       ; %bb.0:
28292 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28293 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28294 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28295 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v1
28296 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v0
28297 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100
28298 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28300 ; GFX11-LABEL: v_fptosi_v2bf16_to_v2i16:
28301 ; GFX11:       ; %bb.0:
28302 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28303 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28304 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28305 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
28306 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v1
28307 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v0
28308 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
28309 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100
28310 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28311   %op = fptosi <2 x bfloat> %x to <2 x i16>
28312   ret <2 x i16> %op
28315 define <3 x i16> @v_fptosi_v3bf16_to_v3i16(<3 x bfloat> %x) {
28316 ; GCN-LABEL: v_fptosi_v3bf16_to_v3i16:
28317 ; GCN:       ; %bb.0:
28318 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28319 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28320 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28321 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28322 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28323 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28324 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28325 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28326 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28327 ; GCN-NEXT:    v_cvt_i32_f32_e32 v3, v2
28328 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28329 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28330 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff, v3
28331 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
28332 ; GCN-NEXT:    v_alignbit_b32 v1, v3, v1, 16
28333 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28335 ; GFX7-LABEL: v_fptosi_v3bf16_to_v3i16:
28336 ; GFX7:       ; %bb.0:
28337 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28338 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28339 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28340 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28341 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28342 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28343 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28344 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28345 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28346 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v3, v2
28347 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28348 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28349 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
28350 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v3
28351 ; GFX7-NEXT:    v_alignbit_b32 v1, v3, v1, 16
28352 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28354 ; GFX8-LABEL: v_fptosi_v3bf16_to_v3i16:
28355 ; GFX8:       ; %bb.0:
28356 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28357 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28358 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28359 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v2
28360 ; GFX8-NEXT:    v_cvt_i32_f32_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
28361 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28362 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v1, v1
28363 ; GFX8-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
28364 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28366 ; GFX9-LABEL: v_fptosi_v3bf16_to_v3i16:
28367 ; GFX9:       ; %bb.0:
28368 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28369 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28370 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28371 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v2
28372 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v0, v0
28373 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28374 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v1, v1
28375 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
28376 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
28377 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28379 ; GFX10-LABEL: v_fptosi_v3bf16_to_v3i16:
28380 ; GFX10:       ; %bb.0:
28381 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28382 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28383 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28384 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28385 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v2
28386 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v0
28387 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v1
28388 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x5040100
28389 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28391 ; GFX11-LABEL: v_fptosi_v3bf16_to_v3i16:
28392 ; GFX11:       ; %bb.0:
28393 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28394 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28395 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28396 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28397 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
28398 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v2
28399 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v0
28400 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
28401 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v1
28402 ; GFX11-NEXT:    v_perm_b32 v0, v0, v2, 0x5040100
28403 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28404   %op = fptosi <3 x bfloat> %x to <3 x i16>
28405   ret <3 x i16> %op
28408 define <4 x i16> @v_fptosi_v4bf16_to_v4i16(<4 x bfloat> %x) {
28409 ; GCN-LABEL: v_fptosi_v4bf16_to_v4i16:
28410 ; GCN:       ; %bb.0:
28411 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28412 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28413 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
28414 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28415 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28416 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28417 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28418 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
28419 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28420 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28421 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28422 ; GCN-NEXT:    v_cvt_i32_f32_e32 v3, v3
28423 ; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2
28424 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28425 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28426 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
28427 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff, v2
28428 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
28429 ; GCN-NEXT:    v_or_b32_e32 v2, v2, v4
28430 ; GCN-NEXT:    v_alignbit_b32 v1, v2, v1, 16
28431 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff, v3
28432 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28434 ; GFX7-LABEL: v_fptosi_v4bf16_to_v4i16:
28435 ; GFX7:       ; %bb.0:
28436 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28437 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28438 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
28439 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28440 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28441 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
28442 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28443 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28444 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28445 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v3, v3
28446 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v2, v2
28447 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28448 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28449 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v3
28450 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
28451 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
28452 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
28453 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v4
28454 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
28455 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
28456 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff, v3
28457 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28459 ; GFX8-LABEL: v_fptosi_v4bf16_to_v4i16:
28460 ; GFX8:       ; %bb.0:
28461 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28462 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28463 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28464 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
28465 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28466 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v2
28467 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v3, v3
28468 ; GFX8-NEXT:    v_cvt_i32_f32_sdwa v0, v0 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
28469 ; GFX8-NEXT:    v_cvt_i32_f32_sdwa v1, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD
28470 ; GFX8-NEXT:    v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
28471 ; GFX8-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
28472 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28474 ; GFX9-LABEL: v_fptosi_v4bf16_to_v4i16:
28475 ; GFX9:       ; %bb.0:
28476 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28477 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28478 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28479 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
28480 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28481 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v2
28482 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v3, v3
28483 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v0, v0
28484 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v1, v1
28485 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
28486 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
28487 ; GFX9-NEXT:    v_perm_b32 v1, v1, v2, s4
28488 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28490 ; GFX10-LABEL: v_fptosi_v4bf16_to_v4i16:
28491 ; GFX10:       ; %bb.0:
28492 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28493 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28494 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
28495 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28496 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28497 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v2
28498 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v3, v3
28499 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v0
28500 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v1
28501 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x5040100
28502 ; GFX10-NEXT:    v_perm_b32 v1, v1, v2, 0x5040100
28503 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28505 ; GFX11-LABEL: v_fptosi_v4bf16_to_v4i16:
28506 ; GFX11:       ; %bb.0:
28507 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28508 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
28509 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
28510 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28511 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28512 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
28513 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v2
28514 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v3, v3
28515 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
28516 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v0
28517 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v1
28518 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
28519 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x5040100
28520 ; GFX11-NEXT:    v_perm_b32 v1, v1, v2, 0x5040100
28521 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28522   %op = fptosi <4 x bfloat> %x to <4 x i16>
28523   ret <4 x i16> %op
28526 define i32 @v_fptosi_bf16_to_i32(bfloat %x) {
28527 ; GCN-LABEL: v_fptosi_bf16_to_i32:
28528 ; GCN:       ; %bb.0:
28529 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28530 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28531 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28532 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28533 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28535 ; GFX7-LABEL: v_fptosi_bf16_to_i32:
28536 ; GFX7:       ; %bb.0:
28537 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28538 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28539 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28540 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28541 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28543 ; GFX8-LABEL: v_fptosi_bf16_to_i32:
28544 ; GFX8:       ; %bb.0:
28545 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28546 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28547 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v0, v0
28548 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28550 ; GFX9-LABEL: v_fptosi_bf16_to_i32:
28551 ; GFX9:       ; %bb.0:
28552 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28553 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28554 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v0, v0
28555 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28557 ; GFX10-LABEL: v_fptosi_bf16_to_i32:
28558 ; GFX10:       ; %bb.0:
28559 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28560 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28561 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v0
28562 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28564 ; GFX11-LABEL: v_fptosi_bf16_to_i32:
28565 ; GFX11:       ; %bb.0:
28566 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28567 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28568 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
28569 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v0
28570 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28571   %op = fptosi bfloat %x to i32
28572   ret i32 %op
28575 define <2 x i32> @v_fptosi_v2bf16_to_v2i32(<2 x bfloat> %x) {
28576 ; GCN-LABEL: v_fptosi_v2bf16_to_v2i32:
28577 ; GCN:       ; %bb.0:
28578 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28579 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28580 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28581 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28582 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28583 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28584 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28585 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28587 ; GFX7-LABEL: v_fptosi_v2bf16_to_v2i32:
28588 ; GFX7:       ; %bb.0:
28589 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28590 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28591 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28592 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28593 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28594 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28595 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28596 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28598 ; GFX8-LABEL: v_fptosi_v2bf16_to_v2i32:
28599 ; GFX8:       ; %bb.0:
28600 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28601 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28602 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v1
28603 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28604 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v1, v0
28605 ; GFX8-NEXT:    v_mov_b32_e32 v0, v2
28606 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28608 ; GFX9-LABEL: v_fptosi_v2bf16_to_v2i32:
28609 ; GFX9:       ; %bb.0:
28610 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28611 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28612 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v1
28613 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28614 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v1, v0
28615 ; GFX9-NEXT:    v_mov_b32_e32 v0, v2
28616 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28618 ; GFX10-LABEL: v_fptosi_v2bf16_to_v2i32:
28619 ; GFX10:       ; %bb.0:
28620 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28621 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28622 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
28623 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v1
28624 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v2
28625 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28627 ; GFX11-LABEL: v_fptosi_v2bf16_to_v2i32:
28628 ; GFX11:       ; %bb.0:
28629 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28630 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
28631 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
28632 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
28633 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v1
28634 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v2
28635 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28636   %op = fptosi <2 x bfloat> %x to <2 x i32>
28637   ret <2 x i32> %op
28640 define <3 x i32> @v_fptosi_v3bf16_to_v3i32(<3 x bfloat> %x) {
28641 ; GCN-LABEL: v_fptosi_v3bf16_to_v3i32:
28642 ; GCN:       ; %bb.0:
28643 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28644 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28645 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28646 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28647 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28648 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28649 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28650 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28651 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28652 ; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2
28653 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28655 ; GFX7-LABEL: v_fptosi_v3bf16_to_v3i32:
28656 ; GFX7:       ; %bb.0:
28657 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28658 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28659 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28660 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28661 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28662 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28663 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28664 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28665 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28666 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v2, v2
28667 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28669 ; GFX8-LABEL: v_fptosi_v3bf16_to_v3i32:
28670 ; GFX8:       ; %bb.0:
28671 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28672 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28673 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28674 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v4, v2
28675 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v3, v0
28676 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
28677 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v0
28678 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
28679 ; GFX8-NEXT:    v_mov_b32_e32 v1, v3
28680 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28682 ; GFX9-LABEL: v_fptosi_v3bf16_to_v3i32:
28683 ; GFX9:       ; %bb.0:
28684 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28685 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28686 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28687 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v4, v2
28688 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v3, v0
28689 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
28690 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v0
28691 ; GFX9-NEXT:    v_mov_b32_e32 v0, v4
28692 ; GFX9-NEXT:    v_mov_b32_e32 v1, v3
28693 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28695 ; GFX10-LABEL: v_fptosi_v3bf16_to_v3i32:
28696 ; GFX10:       ; %bb.0:
28697 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28698 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28699 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
28700 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
28701 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v2
28702 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v3
28703 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v4
28704 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28706 ; GFX11-LABEL: v_fptosi_v3bf16_to_v3i32:
28707 ; GFX11:       ; %bb.0:
28708 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28709 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28710 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
28711 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
28712 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
28713 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v2
28714 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v3
28715 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
28716 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v4
28717 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28718   %op = fptosi <3 x bfloat> %x to <3 x i32>
28719   ret <3 x i32> %op
28722 define <4 x i32> @v_fptosi_v4bf16_to_v4i32(<4 x bfloat> %x) {
28723 ; GCN-LABEL: v_fptosi_v4bf16_to_v4i32:
28724 ; GCN:       ; %bb.0:
28725 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28726 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
28727 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28728 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28729 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28730 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28731 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28732 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28733 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
28734 ; GCN-NEXT:    v_cvt_i32_f32_e32 v0, v0
28735 ; GCN-NEXT:    v_cvt_i32_f32_e32 v1, v1
28736 ; GCN-NEXT:    v_cvt_i32_f32_e32 v2, v2
28737 ; GCN-NEXT:    v_cvt_i32_f32_e32 v3, v3
28738 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28740 ; GFX7-LABEL: v_fptosi_v4bf16_to_v4i32:
28741 ; GFX7:       ; %bb.0:
28742 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28743 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
28744 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
28745 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28746 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28747 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28748 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28749 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
28750 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
28751 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v0, v0
28752 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v1, v1
28753 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v2, v2
28754 ; GFX7-NEXT:    v_cvt_i32_f32_e32 v3, v3
28755 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28757 ; GFX8-LABEL: v_fptosi_v4bf16_to_v4i32:
28758 ; GFX8:       ; %bb.0:
28759 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28760 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28761 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28762 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v5, v0
28763 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
28764 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v4, v2
28765 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v2, v0
28766 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v1
28767 ; GFX8-NEXT:    v_cvt_i32_f32_e32 v3, v0
28768 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
28769 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
28770 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28772 ; GFX9-LABEL: v_fptosi_v4bf16_to_v4i32:
28773 ; GFX9:       ; %bb.0:
28774 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28775 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28776 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28777 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v5, v0
28778 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
28779 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v4, v2
28780 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v2, v0
28781 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v1
28782 ; GFX9-NEXT:    v_cvt_i32_f32_e32 v3, v0
28783 ; GFX9-NEXT:    v_mov_b32_e32 v0, v4
28784 ; GFX9-NEXT:    v_mov_b32_e32 v1, v5
28785 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28787 ; GFX10-LABEL: v_fptosi_v4bf16_to_v4i32:
28788 ; GFX10:       ; %bb.0:
28789 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28790 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28791 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
28792 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
28793 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
28794 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v0, v2
28795 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v1, v3
28796 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v2, v4
28797 ; GFX10-NEXT:    v_cvt_i32_f32_e32 v3, v5
28798 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28800 ; GFX11-LABEL: v_fptosi_v4bf16_to_v4i32:
28801 ; GFX11:       ; %bb.0:
28802 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28803 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
28804 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
28805 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
28806 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
28807 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
28808 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v0, v2
28809 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v1, v3
28810 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
28811 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v2, v4
28812 ; GFX11-NEXT:    v_cvt_i32_f32_e32 v3, v5
28813 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28814   %op = fptosi <4 x bfloat> %x to <4 x i32>
28815   ret <4 x i32> %op
28818 define i64 @v_fptosi_bf16_to_i64(bfloat %x) {
28819 ; GCN-LABEL: v_fptosi_bf16_to_i64:
28820 ; GCN:       ; %bb.0:
28821 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28822 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28823 ; GCN-NEXT:    s_mov_b32 s4, 0x2f800000
28824 ; GCN-NEXT:    s_mov_b32 s5, 0xcf800000
28825 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28826 ; GCN-NEXT:    v_trunc_f32_e32 v0, v0
28827 ; GCN-NEXT:    v_mul_f32_e64 v1, |v0|, s4
28828 ; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v0
28829 ; GCN-NEXT:    v_floor_f32_e32 v1, v1
28830 ; GCN-NEXT:    v_fma_f32 v0, v1, s5, |v0|
28831 ; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v1
28832 ; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0
28833 ; GCN-NEXT:    v_xor_b32_e32 v1, v1, v2
28834 ; GCN-NEXT:    v_xor_b32_e32 v0, v0, v2
28835 ; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v2
28836 ; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v1, v2, vcc
28837 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28839 ; GFX7-LABEL: v_fptosi_bf16_to_i64:
28840 ; GFX7:       ; %bb.0:
28841 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28842 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28843 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28844 ; GFX7-NEXT:    v_trunc_f32_e32 v0, v0
28845 ; GFX7-NEXT:    s_mov_b32 s4, 0x2f800000
28846 ; GFX7-NEXT:    v_mul_f32_e64 v1, |v0|, s4
28847 ; GFX7-NEXT:    v_floor_f32_e32 v1, v1
28848 ; GFX7-NEXT:    s_mov_b32 s4, 0xcf800000
28849 ; GFX7-NEXT:    v_fma_f32 v2, v1, s4, |v0|
28850 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v2, v2
28851 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v1, v1
28852 ; GFX7-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28853 ; GFX7-NEXT:    v_xor_b32_e32 v0, v2, v3
28854 ; GFX7-NEXT:    v_xor_b32_e32 v1, v1, v3
28855 ; GFX7-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
28856 ; GFX7-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
28857 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
28859 ; GFX8-LABEL: v_fptosi_bf16_to_i64:
28860 ; GFX8:       ; %bb.0:
28861 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28862 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28863 ; GFX8-NEXT:    v_trunc_f32_e32 v0, v0
28864 ; GFX8-NEXT:    s_mov_b32 s4, 0x2f800000
28865 ; GFX8-NEXT:    v_mul_f32_e64 v1, |v0|, s4
28866 ; GFX8-NEXT:    v_floor_f32_e32 v1, v1
28867 ; GFX8-NEXT:    s_mov_b32 s4, 0xcf800000
28868 ; GFX8-NEXT:    v_fma_f32 v2, v1, s4, |v0|
28869 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v2, v2
28870 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v1, v1
28871 ; GFX8-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28872 ; GFX8-NEXT:    v_xor_b32_e32 v0, v2, v3
28873 ; GFX8-NEXT:    v_xor_b32_e32 v1, v1, v3
28874 ; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v0, v3
28875 ; GFX8-NEXT:    v_subb_u32_e32 v1, vcc, v1, v3, vcc
28876 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
28878 ; GFX9-LABEL: v_fptosi_bf16_to_i64:
28879 ; GFX9:       ; %bb.0:
28880 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28881 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28882 ; GFX9-NEXT:    v_trunc_f32_e32 v0, v0
28883 ; GFX9-NEXT:    s_mov_b32 s4, 0x2f800000
28884 ; GFX9-NEXT:    v_mul_f32_e64 v1, |v0|, s4
28885 ; GFX9-NEXT:    v_floor_f32_e32 v1, v1
28886 ; GFX9-NEXT:    s_mov_b32 s4, 0xcf800000
28887 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v2, v1
28888 ; GFX9-NEXT:    v_fma_f32 v1, v1, s4, |v0|
28889 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v1, v1
28890 ; GFX9-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28891 ; GFX9-NEXT:    v_xor_b32_e32 v2, v2, v3
28892 ; GFX9-NEXT:    v_xor_b32_e32 v0, v1, v3
28893 ; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v0, v3
28894 ; GFX9-NEXT:    v_subb_co_u32_e32 v1, vcc, v2, v3, vcc
28895 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
28897 ; GFX10-LABEL: v_fptosi_bf16_to_i64:
28898 ; GFX10:       ; %bb.0:
28899 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28900 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28901 ; GFX10-NEXT:    v_trunc_f32_e32 v0, v0
28902 ; GFX10-NEXT:    v_mul_f32_e64 v1, 0x2f800000, |v0|
28903 ; GFX10-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28904 ; GFX10-NEXT:    v_floor_f32_e32 v1, v1
28905 ; GFX10-NEXT:    v_fma_f32 v2, 0xcf800000, v1, |v0|
28906 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v1, v1
28907 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v0, v2
28908 ; GFX10-NEXT:    v_xor_b32_e32 v1, v1, v3
28909 ; GFX10-NEXT:    v_xor_b32_e32 v0, v0, v3
28910 ; GFX10-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v3
28911 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
28912 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
28914 ; GFX11-LABEL: v_fptosi_bf16_to_i64:
28915 ; GFX11:       ; %bb.0:
28916 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28917 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
28918 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
28919 ; GFX11-NEXT:    v_trunc_f32_e32 v0, v0
28920 ; GFX11-NEXT:    v_mul_f32_e64 v1, 0x2f800000, |v0|
28921 ; GFX11-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28922 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
28923 ; GFX11-NEXT:    v_floor_f32_e32 v1, v1
28924 ; GFX11-NEXT:    v_fma_f32 v2, 0xcf800000, v1, |v0|
28925 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v1, v1
28926 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
28927 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v0, v2
28928 ; GFX11-NEXT:    v_xor_b32_e32 v1, v1, v3
28929 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
28930 ; GFX11-NEXT:    v_xor_b32_e32 v0, v0, v3
28931 ; GFX11-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v3
28932 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
28933 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo
28934 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
28935   %op = fptosi bfloat %x to i64
28936   ret i64 %op
28939 define <2 x i64> @v_fptosi_v2bf16_to_v2i64(<2 x bfloat> %x) {
28940 ; GCN-LABEL: v_fptosi_v2bf16_to_v2i64:
28941 ; GCN:       ; %bb.0:
28942 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28943 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28944 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28945 ; GCN-NEXT:    s_mov_b32 s4, 0x2f800000
28946 ; GCN-NEXT:    s_mov_b32 s5, 0xcf800000
28947 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28948 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28949 ; GCN-NEXT:    v_trunc_f32_e32 v0, v0
28950 ; GCN-NEXT:    v_trunc_f32_e32 v1, v1
28951 ; GCN-NEXT:    v_mul_f32_e64 v2, |v0|, s4
28952 ; GCN-NEXT:    v_ashrrev_i32_e32 v3, 31, v0
28953 ; GCN-NEXT:    v_mul_f32_e64 v4, |v1|, s4
28954 ; GCN-NEXT:    v_ashrrev_i32_e32 v5, 31, v1
28955 ; GCN-NEXT:    v_floor_f32_e32 v2, v2
28956 ; GCN-NEXT:    v_floor_f32_e32 v4, v4
28957 ; GCN-NEXT:    v_fma_f32 v0, v2, s5, |v0|
28958 ; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v2
28959 ; GCN-NEXT:    v_fma_f32 v1, v4, s5, |v1|
28960 ; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v4
28961 ; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0
28962 ; GCN-NEXT:    v_xor_b32_e32 v2, v2, v3
28963 ; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v1
28964 ; GCN-NEXT:    v_xor_b32_e32 v4, v4, v5
28965 ; GCN-NEXT:    v_xor_b32_e32 v0, v0, v3
28966 ; GCN-NEXT:    v_xor_b32_e32 v6, v1, v5
28967 ; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v3
28968 ; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v2, v3, vcc
28969 ; GCN-NEXT:    v_sub_i32_e32 v2, vcc, v6, v5
28970 ; GCN-NEXT:    v_subb_u32_e32 v3, vcc, v4, v5, vcc
28971 ; GCN-NEXT:    s_setpc_b64 s[30:31]
28973 ; GFX7-LABEL: v_fptosi_v2bf16_to_v2i64:
28974 ; GFX7:       ; %bb.0:
28975 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
28976 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
28977 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
28978 ; GFX7-NEXT:    v_trunc_f32_e32 v0, v0
28979 ; GFX7-NEXT:    s_mov_b32 s4, 0x2f800000
28980 ; GFX7-NEXT:    v_mul_f32_e64 v2, |v0|, s4
28981 ; GFX7-NEXT:    v_floor_f32_e32 v2, v2
28982 ; GFX7-NEXT:    s_mov_b32 s5, 0xcf800000
28983 ; GFX7-NEXT:    v_fma_f32 v3, v2, s5, |v0|
28984 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v3, v3
28985 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
28986 ; GFX7-NEXT:    v_ashrrev_i32_e32 v4, 31, v0
28987 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
28988 ; GFX7-NEXT:    v_xor_b32_e32 v0, v3, v4
28989 ; GFX7-NEXT:    v_trunc_f32_e32 v3, v1
28990 ; GFX7-NEXT:    v_mul_f32_e64 v1, |v3|, s4
28991 ; GFX7-NEXT:    v_floor_f32_e32 v1, v1
28992 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v2, v2
28993 ; GFX7-NEXT:    v_fma_f32 v5, v1, s5, |v3|
28994 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v5, v5
28995 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v6, v1
28996 ; GFX7-NEXT:    v_xor_b32_e32 v2, v2, v4
28997 ; GFX7-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4
28998 ; GFX7-NEXT:    v_ashrrev_i32_e32 v3, 31, v3
28999 ; GFX7-NEXT:    v_subb_u32_e32 v1, vcc, v2, v4, vcc
29000 ; GFX7-NEXT:    v_xor_b32_e32 v2, v5, v3
29001 ; GFX7-NEXT:    v_xor_b32_e32 v4, v6, v3
29002 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, v2, v3
29003 ; GFX7-NEXT:    v_subb_u32_e32 v3, vcc, v4, v3, vcc
29004 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29006 ; GFX8-LABEL: v_fptosi_v2bf16_to_v2i64:
29007 ; GFX8:       ; %bb.0:
29008 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29009 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
29010 ; GFX8-NEXT:    v_trunc_f32_e32 v1, v1
29011 ; GFX8-NEXT:    s_mov_b32 s4, 0x2f800000
29012 ; GFX8-NEXT:    v_mul_f32_e64 v2, |v1|, s4
29013 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29014 ; GFX8-NEXT:    v_floor_f32_e32 v2, v2
29015 ; GFX8-NEXT:    s_mov_b32 s5, 0xcf800000
29016 ; GFX8-NEXT:    v_trunc_f32_e32 v4, v0
29017 ; GFX8-NEXT:    v_fma_f32 v3, v2, s5, |v1|
29018 ; GFX8-NEXT:    v_mul_f32_e64 v0, |v4|, s4
29019 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v3, v3
29020 ; GFX8-NEXT:    v_floor_f32_e32 v0, v0
29021 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v2, v2
29022 ; GFX8-NEXT:    v_fma_f32 v5, v0, s5, |v4|
29023 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v5, v5
29024 ; GFX8-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29025 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v6, v0
29026 ; GFX8-NEXT:    v_xor_b32_e32 v3, v3, v1
29027 ; GFX8-NEXT:    v_xor_b32_e32 v2, v2, v1
29028 ; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v3, v1
29029 ; GFX8-NEXT:    v_ashrrev_i32_e32 v3, 31, v4
29030 ; GFX8-NEXT:    v_subb_u32_e32 v1, vcc, v2, v1, vcc
29031 ; GFX8-NEXT:    v_xor_b32_e32 v2, v5, v3
29032 ; GFX8-NEXT:    v_xor_b32_e32 v4, v6, v3
29033 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v3
29034 ; GFX8-NEXT:    v_subb_u32_e32 v3, vcc, v4, v3, vcc
29035 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29037 ; GFX9-LABEL: v_fptosi_v2bf16_to_v2i64:
29038 ; GFX9:       ; %bb.0:
29039 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29040 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
29041 ; GFX9-NEXT:    v_trunc_f32_e32 v1, v1
29042 ; GFX9-NEXT:    s_mov_b32 s4, 0x2f800000
29043 ; GFX9-NEXT:    v_mul_f32_e64 v2, |v1|, s4
29044 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29045 ; GFX9-NEXT:    v_floor_f32_e32 v2, v2
29046 ; GFX9-NEXT:    s_mov_b32 s5, 0xcf800000
29047 ; GFX9-NEXT:    v_trunc_f32_e32 v4, v0
29048 ; GFX9-NEXT:    v_fma_f32 v3, v2, s5, |v1|
29049 ; GFX9-NEXT:    v_mul_f32_e64 v0, |v4|, s4
29050 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v3, v3
29051 ; GFX9-NEXT:    v_floor_f32_e32 v0, v0
29052 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v2, v2
29053 ; GFX9-NEXT:    v_fma_f32 v5, v0, s5, |v4|
29054 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v5, v5
29055 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29056 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v6, v0
29057 ; GFX9-NEXT:    v_xor_b32_e32 v3, v3, v1
29058 ; GFX9-NEXT:    v_xor_b32_e32 v2, v2, v1
29059 ; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v3, v1
29060 ; GFX9-NEXT:    v_ashrrev_i32_e32 v3, 31, v4
29061 ; GFX9-NEXT:    v_subb_co_u32_e32 v1, vcc, v2, v1, vcc
29062 ; GFX9-NEXT:    v_xor_b32_e32 v2, v5, v3
29063 ; GFX9-NEXT:    v_xor_b32_e32 v4, v6, v3
29064 ; GFX9-NEXT:    v_sub_co_u32_e32 v2, vcc, v2, v3
29065 ; GFX9-NEXT:    v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
29066 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29068 ; GFX10-LABEL: v_fptosi_v2bf16_to_v2i64:
29069 ; GFX10:       ; %bb.0:
29070 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29071 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
29072 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29073 ; GFX10-NEXT:    v_trunc_f32_e32 v1, v1
29074 ; GFX10-NEXT:    v_trunc_f32_e32 v0, v0
29075 ; GFX10-NEXT:    v_mul_f32_e64 v2, 0x2f800000, |v1|
29076 ; GFX10-NEXT:    v_mul_f32_e64 v3, 0x2f800000, |v0|
29077 ; GFX10-NEXT:    v_ashrrev_i32_e32 v6, 31, v0
29078 ; GFX10-NEXT:    v_floor_f32_e32 v2, v2
29079 ; GFX10-NEXT:    v_floor_f32_e32 v3, v3
29080 ; GFX10-NEXT:    v_fma_f32 v4, 0xcf800000, v2, |v1|
29081 ; GFX10-NEXT:    v_fma_f32 v5, 0xcf800000, v3, |v0|
29082 ; GFX10-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29083 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v2, v2
29084 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v3, v3
29085 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v0, v4
29086 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v4, v5
29087 ; GFX10-NEXT:    v_xor_b32_e32 v2, v2, v1
29088 ; GFX10-NEXT:    v_xor_b32_e32 v3, v3, v6
29089 ; GFX10-NEXT:    v_xor_b32_e32 v0, v0, v1
29090 ; GFX10-NEXT:    v_xor_b32_e32 v4, v4, v6
29091 ; GFX10-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v1
29092 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v2, v1, vcc_lo
29093 ; GFX10-NEXT:    v_sub_co_u32 v2, vcc_lo, v4, v6
29094 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v3, v6, vcc_lo
29095 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29097 ; GFX11-LABEL: v_fptosi_v2bf16_to_v2i64:
29098 ; GFX11:       ; %bb.0:
29099 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29100 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v0
29101 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29102 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
29103 ; GFX11-NEXT:    v_trunc_f32_e32 v1, v1
29104 ; GFX11-NEXT:    v_trunc_f32_e32 v0, v0
29105 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
29106 ; GFX11-NEXT:    v_mul_f32_e64 v2, 0x2f800000, |v1|
29107 ; GFX11-NEXT:    v_mul_f32_e64 v3, 0x2f800000, |v0|
29108 ; GFX11-NEXT:    v_ashrrev_i32_e32 v6, 31, v0
29109 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
29110 ; GFX11-NEXT:    v_floor_f32_e32 v2, v2
29111 ; GFX11-NEXT:    v_floor_f32_e32 v3, v3
29112 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
29113 ; GFX11-NEXT:    v_fma_f32 v4, 0xcf800000, v2, |v1|
29114 ; GFX11-NEXT:    v_fma_f32 v5, 0xcf800000, v3, |v0|
29115 ; GFX11-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29116 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v2, v2
29117 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v3, v3
29118 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v0, v4
29119 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v4, v5
29120 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29121 ; GFX11-NEXT:    v_xor_b32_e32 v2, v2, v1
29122 ; GFX11-NEXT:    v_xor_b32_e32 v3, v3, v6
29123 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29124 ; GFX11-NEXT:    v_xor_b32_e32 v0, v0, v1
29125 ; GFX11-NEXT:    v_xor_b32_e32 v4, v4, v6
29126 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
29127 ; GFX11-NEXT:    v_sub_co_u32 v0, vcc_lo, v0, v1
29128 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v2, v1, vcc_lo
29129 ; GFX11-NEXT:    v_sub_co_u32 v2, vcc_lo, v4, v6
29130 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v3, v6, vcc_lo
29131 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
29132   %op = fptosi <2 x bfloat> %x to <2 x i64>
29133   ret <2 x i64> %op
29136 define <3 x i64> @v_fptosi_v3bf16_to_v3i64(<3 x bfloat> %x) {
29137 ; GCN-LABEL: v_fptosi_v3bf16_to_v3i64:
29138 ; GCN:       ; %bb.0:
29139 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29140 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
29141 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
29142 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
29143 ; GCN-NEXT:    s_mov_b32 s4, 0x2f800000
29144 ; GCN-NEXT:    s_mov_b32 s5, 0xcf800000
29145 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29146 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29147 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29148 ; GCN-NEXT:    v_trunc_f32_e32 v0, v0
29149 ; GCN-NEXT:    v_trunc_f32_e32 v1, v1
29150 ; GCN-NEXT:    v_trunc_f32_e32 v2, v2
29151 ; GCN-NEXT:    v_mul_f32_e64 v3, |v0|, s4
29152 ; GCN-NEXT:    v_ashrrev_i32_e32 v4, 31, v0
29153 ; GCN-NEXT:    v_mul_f32_e64 v5, |v1|, s4
29154 ; GCN-NEXT:    v_ashrrev_i32_e32 v6, 31, v1
29155 ; GCN-NEXT:    v_mul_f32_e64 v7, |v2|, s4
29156 ; GCN-NEXT:    v_ashrrev_i32_e32 v8, 31, v2
29157 ; GCN-NEXT:    v_floor_f32_e32 v3, v3
29158 ; GCN-NEXT:    v_floor_f32_e32 v5, v5
29159 ; GCN-NEXT:    v_floor_f32_e32 v7, v7
29160 ; GCN-NEXT:    v_fma_f32 v0, v3, s5, |v0|
29161 ; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v3
29162 ; GCN-NEXT:    v_fma_f32 v1, v5, s5, |v1|
29163 ; GCN-NEXT:    v_cvt_u32_f32_e32 v5, v5
29164 ; GCN-NEXT:    v_fma_f32 v2, v7, s5, |v2|
29165 ; GCN-NEXT:    v_cvt_u32_f32_e32 v7, v7
29166 ; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0
29167 ; GCN-NEXT:    v_xor_b32_e32 v3, v3, v4
29168 ; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v1
29169 ; GCN-NEXT:    v_xor_b32_e32 v5, v5, v6
29170 ; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v2
29171 ; GCN-NEXT:    v_xor_b32_e32 v7, v7, v8
29172 ; GCN-NEXT:    v_xor_b32_e32 v0, v0, v4
29173 ; GCN-NEXT:    v_xor_b32_e32 v9, v1, v6
29174 ; GCN-NEXT:    v_xor_b32_e32 v10, v2, v8
29175 ; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v4
29176 ; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v3, v4, vcc
29177 ; GCN-NEXT:    v_sub_i32_e32 v2, vcc, v9, v6
29178 ; GCN-NEXT:    v_subb_u32_e32 v3, vcc, v5, v6, vcc
29179 ; GCN-NEXT:    v_sub_i32_e32 v4, vcc, v10, v8
29180 ; GCN-NEXT:    v_subb_u32_e32 v5, vcc, v7, v8, vcc
29181 ; GCN-NEXT:    s_setpc_b64 s[30:31]
29183 ; GFX7-LABEL: v_fptosi_v3bf16_to_v3i64:
29184 ; GFX7:       ; %bb.0:
29185 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29186 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
29187 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29188 ; GFX7-NEXT:    v_trunc_f32_e32 v0, v0
29189 ; GFX7-NEXT:    s_mov_b32 s4, 0x2f800000
29190 ; GFX7-NEXT:    v_mul_f32_e64 v3, |v0|, s4
29191 ; GFX7-NEXT:    v_floor_f32_e32 v3, v3
29192 ; GFX7-NEXT:    s_mov_b32 s5, 0xcf800000
29193 ; GFX7-NEXT:    v_fma_f32 v4, v3, s5, |v0|
29194 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v4, v4
29195 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
29196 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v0
29197 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29198 ; GFX7-NEXT:    v_xor_b32_e32 v0, v4, v5
29199 ; GFX7-NEXT:    v_trunc_f32_e32 v4, v1
29200 ; GFX7-NEXT:    v_mul_f32_e64 v1, |v4|, s4
29201 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v3, v3
29202 ; GFX7-NEXT:    v_floor_f32_e32 v1, v1
29203 ; GFX7-NEXT:    v_fma_f32 v6, v1, s5, |v4|
29204 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v6, v6
29205 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
29206 ; GFX7-NEXT:    v_xor_b32_e32 v3, v3, v5
29207 ; GFX7-NEXT:    v_sub_i32_e32 v0, vcc, v0, v5
29208 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v7, v1
29209 ; GFX7-NEXT:    v_subb_u32_e32 v1, vcc, v3, v5, vcc
29210 ; GFX7-NEXT:    v_ashrrev_i32_e32 v3, 31, v4
29211 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29212 ; GFX7-NEXT:    v_xor_b32_e32 v5, v6, v3
29213 ; GFX7-NEXT:    v_trunc_f32_e32 v6, v2
29214 ; GFX7-NEXT:    v_mul_f32_e64 v2, |v6|, s4
29215 ; GFX7-NEXT:    v_floor_f32_e32 v2, v2
29216 ; GFX7-NEXT:    v_xor_b32_e32 v4, v7, v3
29217 ; GFX7-NEXT:    v_fma_f32 v7, v2, s5, |v6|
29218 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v7, v7
29219 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v8, v2
29220 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, v5, v3
29221 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v6
29222 ; GFX7-NEXT:    v_subb_u32_e32 v3, vcc, v4, v3, vcc
29223 ; GFX7-NEXT:    v_xor_b32_e32 v4, v7, v5
29224 ; GFX7-NEXT:    v_xor_b32_e32 v6, v8, v5
29225 ; GFX7-NEXT:    v_sub_i32_e32 v4, vcc, v4, v5
29226 ; GFX7-NEXT:    v_subb_u32_e32 v5, vcc, v6, v5, vcc
29227 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29229 ; GFX8-LABEL: v_fptosi_v3bf16_to_v3i64:
29230 ; GFX8:       ; %bb.0:
29231 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29232 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29233 ; GFX8-NEXT:    v_trunc_f32_e32 v2, v2
29234 ; GFX8-NEXT:    s_mov_b32 s4, 0x2f800000
29235 ; GFX8-NEXT:    v_mul_f32_e64 v3, |v2|, s4
29236 ; GFX8-NEXT:    v_floor_f32_e32 v3, v3
29237 ; GFX8-NEXT:    s_mov_b32 s5, 0xcf800000
29238 ; GFX8-NEXT:    v_fma_f32 v4, v3, s5, |v2|
29239 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29240 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v4, v4
29241 ; GFX8-NEXT:    v_trunc_f32_e32 v5, v0
29242 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v3, v3
29243 ; GFX8-NEXT:    v_mul_f32_e64 v0, |v5|, s4
29244 ; GFX8-NEXT:    v_floor_f32_e32 v0, v0
29245 ; GFX8-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
29246 ; GFX8-NEXT:    v_fma_f32 v6, v0, s5, |v5|
29247 ; GFX8-NEXT:    v_xor_b32_e32 v4, v4, v2
29248 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v7, v6
29249 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
29250 ; GFX8-NEXT:    v_xor_b32_e32 v3, v3, v2
29251 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v8, v0
29252 ; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v4, v2
29253 ; GFX8-NEXT:    v_trunc_f32_e32 v1, v1
29254 ; GFX8-NEXT:    v_subb_u32_e32 v6, vcc, v3, v2, vcc
29255 ; GFX8-NEXT:    v_ashrrev_i32_e32 v3, 31, v5
29256 ; GFX8-NEXT:    v_mul_f32_e64 v5, |v1|, s4
29257 ; GFX8-NEXT:    v_floor_f32_e32 v5, v5
29258 ; GFX8-NEXT:    v_xor_b32_e32 v2, v7, v3
29259 ; GFX8-NEXT:    v_fma_f32 v7, v5, s5, |v1|
29260 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v7, v7
29261 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v5, v5
29262 ; GFX8-NEXT:    v_xor_b32_e32 v4, v8, v3
29263 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v3
29264 ; GFX8-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29265 ; GFX8-NEXT:    v_subb_u32_e32 v3, vcc, v4, v3, vcc
29266 ; GFX8-NEXT:    v_xor_b32_e32 v4, v7, v1
29267 ; GFX8-NEXT:    v_xor_b32_e32 v5, v5, v1
29268 ; GFX8-NEXT:    v_sub_u32_e32 v4, vcc, v4, v1
29269 ; GFX8-NEXT:    v_subb_u32_e32 v5, vcc, v5, v1, vcc
29270 ; GFX8-NEXT:    v_mov_b32_e32 v1, v6
29271 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29273 ; GFX9-LABEL: v_fptosi_v3bf16_to_v3i64:
29274 ; GFX9:       ; %bb.0:
29275 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29276 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29277 ; GFX9-NEXT:    v_trunc_f32_e32 v2, v2
29278 ; GFX9-NEXT:    s_mov_b32 s4, 0x2f800000
29279 ; GFX9-NEXT:    v_mul_f32_e64 v3, |v2|, s4
29280 ; GFX9-NEXT:    v_floor_f32_e32 v3, v3
29281 ; GFX9-NEXT:    s_mov_b32 s5, 0xcf800000
29282 ; GFX9-NEXT:    v_fma_f32 v4, v3, s5, |v2|
29283 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29284 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v4, v4
29285 ; GFX9-NEXT:    v_trunc_f32_e32 v5, v0
29286 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v3, v3
29287 ; GFX9-NEXT:    v_mul_f32_e64 v0, |v5|, s4
29288 ; GFX9-NEXT:    v_floor_f32_e32 v0, v0
29289 ; GFX9-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
29290 ; GFX9-NEXT:    v_fma_f32 v6, v0, s5, |v5|
29291 ; GFX9-NEXT:    v_xor_b32_e32 v4, v4, v2
29292 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v7, v6
29293 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
29294 ; GFX9-NEXT:    v_xor_b32_e32 v3, v3, v2
29295 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v8, v0
29296 ; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v4, v2
29297 ; GFX9-NEXT:    v_trunc_f32_e32 v1, v1
29298 ; GFX9-NEXT:    v_subb_co_u32_e32 v6, vcc, v3, v2, vcc
29299 ; GFX9-NEXT:    v_ashrrev_i32_e32 v3, 31, v5
29300 ; GFX9-NEXT:    v_mul_f32_e64 v5, |v1|, s4
29301 ; GFX9-NEXT:    v_floor_f32_e32 v5, v5
29302 ; GFX9-NEXT:    v_xor_b32_e32 v2, v7, v3
29303 ; GFX9-NEXT:    v_fma_f32 v7, v5, s5, |v1|
29304 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v7, v7
29305 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v5, v5
29306 ; GFX9-NEXT:    v_xor_b32_e32 v4, v8, v3
29307 ; GFX9-NEXT:    v_sub_co_u32_e32 v2, vcc, v2, v3
29308 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29309 ; GFX9-NEXT:    v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
29310 ; GFX9-NEXT:    v_xor_b32_e32 v4, v7, v1
29311 ; GFX9-NEXT:    v_xor_b32_e32 v5, v5, v1
29312 ; GFX9-NEXT:    v_sub_co_u32_e32 v4, vcc, v4, v1
29313 ; GFX9-NEXT:    v_subb_co_u32_e32 v5, vcc, v5, v1, vcc
29314 ; GFX9-NEXT:    v_mov_b32_e32 v1, v6
29315 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29317 ; GFX10-LABEL: v_fptosi_v3bf16_to_v3i64:
29318 ; GFX10:       ; %bb.0:
29319 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29320 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29321 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29322 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
29323 ; GFX10-NEXT:    v_trunc_f32_e32 v2, v2
29324 ; GFX10-NEXT:    v_trunc_f32_e32 v0, v0
29325 ; GFX10-NEXT:    v_trunc_f32_e32 v1, v1
29326 ; GFX10-NEXT:    v_mul_f32_e64 v3, 0x2f800000, |v2|
29327 ; GFX10-NEXT:    v_mul_f32_e64 v4, 0x2f800000, |v0|
29328 ; GFX10-NEXT:    v_mul_f32_e64 v6, 0x2f800000, |v1|
29329 ; GFX10-NEXT:    v_ashrrev_i32_e32 v5, 31, v2
29330 ; GFX10-NEXT:    v_ashrrev_i32_e32 v7, 31, v0
29331 ; GFX10-NEXT:    v_floor_f32_e32 v3, v3
29332 ; GFX10-NEXT:    v_floor_f32_e32 v4, v4
29333 ; GFX10-NEXT:    v_floor_f32_e32 v6, v6
29334 ; GFX10-NEXT:    v_ashrrev_i32_e32 v8, 31, v1
29335 ; GFX10-NEXT:    v_fma_f32 v2, 0xcf800000, v3, |v2|
29336 ; GFX10-NEXT:    v_fma_f32 v0, 0xcf800000, v4, |v0|
29337 ; GFX10-NEXT:    v_fma_f32 v1, 0xcf800000, v6, |v1|
29338 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v3, v3
29339 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v4, v4
29340 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v2, v2
29341 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v0, v0
29342 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v1, v1
29343 ; GFX10-NEXT:    v_xor_b32_e32 v3, v3, v5
29344 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v6, v6
29345 ; GFX10-NEXT:    v_xor_b32_e32 v2, v2, v5
29346 ; GFX10-NEXT:    v_xor_b32_e32 v9, v0, v7
29347 ; GFX10-NEXT:    v_xor_b32_e32 v4, v4, v7
29348 ; GFX10-NEXT:    v_xor_b32_e32 v10, v1, v8
29349 ; GFX10-NEXT:    v_xor_b32_e32 v6, v6, v8
29350 ; GFX10-NEXT:    v_sub_co_u32 v0, vcc_lo, v2, v5
29351 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v3, v5, vcc_lo
29352 ; GFX10-NEXT:    v_sub_co_u32 v2, vcc_lo, v9, v7
29353 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v4, v7, vcc_lo
29354 ; GFX10-NEXT:    v_sub_co_u32 v4, vcc_lo, v10, v8
29355 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v5, vcc_lo, v6, v8, vcc_lo
29356 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29358 ; GFX11-LABEL: v_fptosi_v3bf16_to_v3i64:
29359 ; GFX11:       ; %bb.0:
29360 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29361 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29362 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29363 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
29364 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
29365 ; GFX11-NEXT:    v_trunc_f32_e32 v2, v2
29366 ; GFX11-NEXT:    v_trunc_f32_e32 v0, v0
29367 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
29368 ; GFX11-NEXT:    v_trunc_f32_e32 v1, v1
29369 ; GFX11-NEXT:    v_mul_f32_e64 v3, 0x2f800000, |v2|
29370 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
29371 ; GFX11-NEXT:    v_mul_f32_e64 v4, 0x2f800000, |v0|
29372 ; GFX11-NEXT:    v_mul_f32_e64 v6, 0x2f800000, |v1|
29373 ; GFX11-NEXT:    v_ashrrev_i32_e32 v5, 31, v2
29374 ; GFX11-NEXT:    v_ashrrev_i32_e32 v7, 31, v0
29375 ; GFX11-NEXT:    v_floor_f32_e32 v3, v3
29376 ; GFX11-NEXT:    v_floor_f32_e32 v4, v4
29377 ; GFX11-NEXT:    v_floor_f32_e32 v6, v6
29378 ; GFX11-NEXT:    v_ashrrev_i32_e32 v8, 31, v1
29379 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29380 ; GFX11-NEXT:    v_fma_f32 v2, 0xcf800000, v3, |v2|
29381 ; GFX11-NEXT:    v_fma_f32 v0, 0xcf800000, v4, |v0|
29382 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
29383 ; GFX11-NEXT:    v_fma_f32 v1, 0xcf800000, v6, |v1|
29384 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v3, v3
29385 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v4, v4
29386 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v2, v2
29387 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v0, v0
29388 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v1, v1
29389 ; GFX11-NEXT:    v_xor_b32_e32 v3, v3, v5
29390 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v6, v6
29391 ; GFX11-NEXT:    v_xor_b32_e32 v2, v2, v5
29392 ; GFX11-NEXT:    v_xor_b32_e32 v9, v0, v7
29393 ; GFX11-NEXT:    v_xor_b32_e32 v4, v4, v7
29394 ; GFX11-NEXT:    v_xor_b32_e32 v10, v1, v8
29395 ; GFX11-NEXT:    v_xor_b32_e32 v6, v6, v8
29396 ; GFX11-NEXT:    v_sub_co_u32 v0, vcc_lo, v2, v5
29397 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v3, v5, vcc_lo
29398 ; GFX11-NEXT:    v_sub_co_u32 v2, vcc_lo, v9, v7
29399 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v4, v7, vcc_lo
29400 ; GFX11-NEXT:    v_sub_co_u32 v4, vcc_lo, v10, v8
29401 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v5, vcc_lo, v6, v8, vcc_lo
29402 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
29403   %op = fptosi <3 x bfloat> %x to <3 x i64>
29404   ret <3 x i64> %op
29407 define <4 x i64> @v_fptosi_v4bf16_to_v4i64(<4 x bfloat> %x) {
29408 ; GCN-LABEL: v_fptosi_v4bf16_to_v4i64:
29409 ; GCN:       ; %bb.0:
29410 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29411 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
29412 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
29413 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
29414 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
29415 ; GCN-NEXT:    s_mov_b32 s4, 0x2f800000
29416 ; GCN-NEXT:    s_mov_b32 s5, 0xcf800000
29417 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29418 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29419 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29420 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
29421 ; GCN-NEXT:    v_trunc_f32_e32 v0, v0
29422 ; GCN-NEXT:    v_trunc_f32_e32 v1, v1
29423 ; GCN-NEXT:    v_trunc_f32_e32 v2, v2
29424 ; GCN-NEXT:    v_trunc_f32_e32 v3, v3
29425 ; GCN-NEXT:    v_mul_f32_e64 v4, |v0|, s4
29426 ; GCN-NEXT:    v_ashrrev_i32_e32 v5, 31, v0
29427 ; GCN-NEXT:    v_mul_f32_e64 v6, |v1|, s4
29428 ; GCN-NEXT:    v_ashrrev_i32_e32 v7, 31, v1
29429 ; GCN-NEXT:    v_mul_f32_e64 v8, |v2|, s4
29430 ; GCN-NEXT:    v_ashrrev_i32_e32 v9, 31, v2
29431 ; GCN-NEXT:    v_mul_f32_e64 v10, |v3|, s4
29432 ; GCN-NEXT:    v_ashrrev_i32_e32 v11, 31, v3
29433 ; GCN-NEXT:    v_floor_f32_e32 v4, v4
29434 ; GCN-NEXT:    v_floor_f32_e32 v6, v6
29435 ; GCN-NEXT:    v_floor_f32_e32 v8, v8
29436 ; GCN-NEXT:    v_floor_f32_e32 v10, v10
29437 ; GCN-NEXT:    v_fma_f32 v0, v4, s5, |v0|
29438 ; GCN-NEXT:    v_cvt_u32_f32_e32 v4, v4
29439 ; GCN-NEXT:    v_fma_f32 v1, v6, s5, |v1|
29440 ; GCN-NEXT:    v_cvt_u32_f32_e32 v6, v6
29441 ; GCN-NEXT:    v_fma_f32 v2, v8, s5, |v2|
29442 ; GCN-NEXT:    v_cvt_u32_f32_e32 v8, v8
29443 ; GCN-NEXT:    v_fma_f32 v3, v10, s5, |v3|
29444 ; GCN-NEXT:    v_cvt_u32_f32_e32 v10, v10
29445 ; GCN-NEXT:    v_cvt_u32_f32_e32 v0, v0
29446 ; GCN-NEXT:    v_xor_b32_e32 v4, v4, v5
29447 ; GCN-NEXT:    v_cvt_u32_f32_e32 v1, v1
29448 ; GCN-NEXT:    v_xor_b32_e32 v6, v6, v7
29449 ; GCN-NEXT:    v_cvt_u32_f32_e32 v2, v2
29450 ; GCN-NEXT:    v_xor_b32_e32 v8, v8, v9
29451 ; GCN-NEXT:    v_cvt_u32_f32_e32 v3, v3
29452 ; GCN-NEXT:    v_xor_b32_e32 v10, v10, v11
29453 ; GCN-NEXT:    v_xor_b32_e32 v0, v0, v5
29454 ; GCN-NEXT:    v_xor_b32_e32 v12, v1, v7
29455 ; GCN-NEXT:    v_xor_b32_e32 v13, v2, v9
29456 ; GCN-NEXT:    v_xor_b32_e32 v14, v3, v11
29457 ; GCN-NEXT:    v_sub_i32_e32 v0, vcc, v0, v5
29458 ; GCN-NEXT:    v_subb_u32_e32 v1, vcc, v4, v5, vcc
29459 ; GCN-NEXT:    v_sub_i32_e32 v2, vcc, v12, v7
29460 ; GCN-NEXT:    v_subb_u32_e32 v3, vcc, v6, v7, vcc
29461 ; GCN-NEXT:    v_sub_i32_e32 v4, vcc, v13, v9
29462 ; GCN-NEXT:    v_subb_u32_e32 v5, vcc, v8, v9, vcc
29463 ; GCN-NEXT:    v_sub_i32_e32 v6, vcc, v14, v11
29464 ; GCN-NEXT:    v_subb_u32_e32 v7, vcc, v10, v11, vcc
29465 ; GCN-NEXT:    s_setpc_b64 s[30:31]
29467 ; GFX7-LABEL: v_fptosi_v4bf16_to_v4i64:
29468 ; GFX7:       ; %bb.0:
29469 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29470 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
29471 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29472 ; GFX7-NEXT:    v_trunc_f32_e32 v0, v0
29473 ; GFX7-NEXT:    s_mov_b32 s4, 0x2f800000
29474 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v3
29475 ; GFX7-NEXT:    v_mul_f32_e64 v3, |v0|, s4
29476 ; GFX7-NEXT:    v_floor_f32_e32 v3, v3
29477 ; GFX7-NEXT:    s_mov_b32 s5, 0xcf800000
29478 ; GFX7-NEXT:    v_fma_f32 v5, v3, s5, |v0|
29479 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v5, v5
29480 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
29481 ; GFX7-NEXT:    v_ashrrev_i32_e32 v6, 31, v0
29482 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29483 ; GFX7-NEXT:    v_xor_b32_e32 v0, v5, v6
29484 ; GFX7-NEXT:    v_trunc_f32_e32 v5, v1
29485 ; GFX7-NEXT:    v_mul_f32_e64 v1, |v5|, s4
29486 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v3, v3
29487 ; GFX7-NEXT:    v_floor_f32_e32 v1, v1
29488 ; GFX7-NEXT:    v_fma_f32 v7, v1, s5, |v5|
29489 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v7, v7
29490 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
29491 ; GFX7-NEXT:    v_xor_b32_e32 v3, v3, v6
29492 ; GFX7-NEXT:    v_sub_i32_e32 v0, vcc, v0, v6
29493 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v8, v1
29494 ; GFX7-NEXT:    v_subb_u32_e32 v1, vcc, v3, v6, vcc
29495 ; GFX7-NEXT:    v_ashrrev_i32_e32 v3, 31, v5
29496 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29497 ; GFX7-NEXT:    v_xor_b32_e32 v6, v7, v3
29498 ; GFX7-NEXT:    v_trunc_f32_e32 v7, v2
29499 ; GFX7-NEXT:    v_mul_f32_e64 v2, |v7|, s4
29500 ; GFX7-NEXT:    v_floor_f32_e32 v2, v2
29501 ; GFX7-NEXT:    v_xor_b32_e32 v5, v8, v3
29502 ; GFX7-NEXT:    v_fma_f32 v8, v2, s5, |v7|
29503 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v8, v8
29504 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v9, v2
29505 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, v6, v3
29506 ; GFX7-NEXT:    v_subb_u32_e32 v3, vcc, v5, v3, vcc
29507 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v7
29508 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
29509 ; GFX7-NEXT:    v_xor_b32_e32 v7, v8, v5
29510 ; GFX7-NEXT:    v_trunc_f32_e32 v8, v4
29511 ; GFX7-NEXT:    v_mul_f32_e64 v4, |v8|, s4
29512 ; GFX7-NEXT:    v_floor_f32_e32 v4, v4
29513 ; GFX7-NEXT:    v_xor_b32_e32 v6, v9, v5
29514 ; GFX7-NEXT:    v_fma_f32 v9, v4, s5, |v8|
29515 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v9, v9
29516 ; GFX7-NEXT:    v_cvt_u32_f32_e32 v10, v4
29517 ; GFX7-NEXT:    v_sub_i32_e32 v4, vcc, v7, v5
29518 ; GFX7-NEXT:    v_ashrrev_i32_e32 v7, 31, v8
29519 ; GFX7-NEXT:    v_subb_u32_e32 v5, vcc, v6, v5, vcc
29520 ; GFX7-NEXT:    v_xor_b32_e32 v6, v9, v7
29521 ; GFX7-NEXT:    v_xor_b32_e32 v8, v10, v7
29522 ; GFX7-NEXT:    v_sub_i32_e32 v6, vcc, v6, v7
29523 ; GFX7-NEXT:    v_subb_u32_e32 v7, vcc, v8, v7, vcc
29524 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29526 ; GFX8-LABEL: v_fptosi_v4bf16_to_v4i64:
29527 ; GFX8:       ; %bb.0:
29528 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29529 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29530 ; GFX8-NEXT:    v_trunc_f32_e32 v2, v2
29531 ; GFX8-NEXT:    s_mov_b32 s4, 0x2f800000
29532 ; GFX8-NEXT:    v_mul_f32_e64 v3, |v2|, s4
29533 ; GFX8-NEXT:    v_floor_f32_e32 v3, v3
29534 ; GFX8-NEXT:    s_mov_b32 s5, 0xcf800000
29535 ; GFX8-NEXT:    v_fma_f32 v4, v3, s5, |v2|
29536 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29537 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v4, v4
29538 ; GFX8-NEXT:    v_trunc_f32_e32 v5, v0
29539 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v3, v3
29540 ; GFX8-NEXT:    v_mul_f32_e64 v0, |v5|, s4
29541 ; GFX8-NEXT:    v_floor_f32_e32 v0, v0
29542 ; GFX8-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
29543 ; GFX8-NEXT:    v_fma_f32 v6, v0, s5, |v5|
29544 ; GFX8-NEXT:    v_xor_b32_e32 v4, v4, v2
29545 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v6, v6
29546 ; GFX8-NEXT:    v_xor_b32_e32 v3, v3, v2
29547 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v7, v0
29548 ; GFX8-NEXT:    v_sub_u32_e32 v0, vcc, v4, v2
29549 ; GFX8-NEXT:    v_subb_u32_e32 v8, vcc, v3, v2, vcc
29550 ; GFX8-NEXT:    v_ashrrev_i32_e32 v3, 31, v5
29551 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
29552 ; GFX8-NEXT:    v_trunc_f32_e32 v5, v5
29553 ; GFX8-NEXT:    v_xor_b32_e32 v2, v6, v3
29554 ; GFX8-NEXT:    v_mul_f32_e64 v6, |v5|, s4
29555 ; GFX8-NEXT:    v_floor_f32_e32 v6, v6
29556 ; GFX8-NEXT:    v_xor_b32_e32 v4, v7, v3
29557 ; GFX8-NEXT:    v_fma_f32 v7, v6, s5, |v5|
29558 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v7, v7
29559 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29560 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, v2, v3
29561 ; GFX8-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
29562 ; GFX8-NEXT:    v_trunc_f32_e32 v1, v1
29563 ; GFX8-NEXT:    v_subb_u32_e32 v3, vcc, v4, v3, vcc
29564 ; GFX8-NEXT:    v_xor_b32_e32 v4, v7, v5
29565 ; GFX8-NEXT:    v_mul_f32_e64 v7, |v1|, s4
29566 ; GFX8-NEXT:    v_floor_f32_e32 v7, v7
29567 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v6, v6
29568 ; GFX8-NEXT:    v_fma_f32 v9, v7, s5, |v1|
29569 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v9, v9
29570 ; GFX8-NEXT:    v_cvt_u32_f32_e32 v7, v7
29571 ; GFX8-NEXT:    v_xor_b32_e32 v6, v6, v5
29572 ; GFX8-NEXT:    v_sub_u32_e32 v4, vcc, v4, v5
29573 ; GFX8-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29574 ; GFX8-NEXT:    v_subb_u32_e32 v5, vcc, v6, v5, vcc
29575 ; GFX8-NEXT:    v_xor_b32_e32 v6, v9, v1
29576 ; GFX8-NEXT:    v_xor_b32_e32 v7, v7, v1
29577 ; GFX8-NEXT:    v_sub_u32_e32 v6, vcc, v6, v1
29578 ; GFX8-NEXT:    v_subb_u32_e32 v7, vcc, v7, v1, vcc
29579 ; GFX8-NEXT:    v_mov_b32_e32 v1, v8
29580 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29582 ; GFX9-LABEL: v_fptosi_v4bf16_to_v4i64:
29583 ; GFX9:       ; %bb.0:
29584 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29585 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29586 ; GFX9-NEXT:    v_trunc_f32_e32 v2, v2
29587 ; GFX9-NEXT:    s_mov_b32 s4, 0x2f800000
29588 ; GFX9-NEXT:    v_mul_f32_e64 v3, |v2|, s4
29589 ; GFX9-NEXT:    v_floor_f32_e32 v3, v3
29590 ; GFX9-NEXT:    s_mov_b32 s5, 0xcf800000
29591 ; GFX9-NEXT:    v_fma_f32 v4, v3, s5, |v2|
29592 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29593 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v4, v4
29594 ; GFX9-NEXT:    v_trunc_f32_e32 v5, v0
29595 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v3, v3
29596 ; GFX9-NEXT:    v_mul_f32_e64 v0, |v5|, s4
29597 ; GFX9-NEXT:    v_floor_f32_e32 v0, v0
29598 ; GFX9-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
29599 ; GFX9-NEXT:    v_fma_f32 v6, v0, s5, |v5|
29600 ; GFX9-NEXT:    v_xor_b32_e32 v4, v4, v2
29601 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v6, v6
29602 ; GFX9-NEXT:    v_xor_b32_e32 v3, v3, v2
29603 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v7, v0
29604 ; GFX9-NEXT:    v_sub_co_u32_e32 v0, vcc, v4, v2
29605 ; GFX9-NEXT:    v_subb_co_u32_e32 v8, vcc, v3, v2, vcc
29606 ; GFX9-NEXT:    v_ashrrev_i32_e32 v3, 31, v5
29607 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v1
29608 ; GFX9-NEXT:    v_trunc_f32_e32 v5, v5
29609 ; GFX9-NEXT:    v_xor_b32_e32 v2, v6, v3
29610 ; GFX9-NEXT:    v_mul_f32_e64 v6, |v5|, s4
29611 ; GFX9-NEXT:    v_floor_f32_e32 v6, v6
29612 ; GFX9-NEXT:    v_xor_b32_e32 v4, v7, v3
29613 ; GFX9-NEXT:    v_fma_f32 v7, v6, s5, |v5|
29614 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v7, v7
29615 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29616 ; GFX9-NEXT:    v_sub_co_u32_e32 v2, vcc, v2, v3
29617 ; GFX9-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
29618 ; GFX9-NEXT:    v_trunc_f32_e32 v1, v1
29619 ; GFX9-NEXT:    v_subb_co_u32_e32 v3, vcc, v4, v3, vcc
29620 ; GFX9-NEXT:    v_xor_b32_e32 v4, v7, v5
29621 ; GFX9-NEXT:    v_mul_f32_e64 v7, |v1|, s4
29622 ; GFX9-NEXT:    v_floor_f32_e32 v7, v7
29623 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v6, v6
29624 ; GFX9-NEXT:    v_fma_f32 v9, v7, s5, |v1|
29625 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v9, v9
29626 ; GFX9-NEXT:    v_cvt_u32_f32_e32 v7, v7
29627 ; GFX9-NEXT:    v_xor_b32_e32 v6, v6, v5
29628 ; GFX9-NEXT:    v_sub_co_u32_e32 v4, vcc, v4, v5
29629 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
29630 ; GFX9-NEXT:    v_subb_co_u32_e32 v5, vcc, v6, v5, vcc
29631 ; GFX9-NEXT:    v_xor_b32_e32 v6, v9, v1
29632 ; GFX9-NEXT:    v_xor_b32_e32 v7, v7, v1
29633 ; GFX9-NEXT:    v_sub_co_u32_e32 v6, vcc, v6, v1
29634 ; GFX9-NEXT:    v_subb_co_u32_e32 v7, vcc, v7, v1, vcc
29635 ; GFX9-NEXT:    v_mov_b32_e32 v1, v8
29636 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29638 ; GFX10-LABEL: v_fptosi_v4bf16_to_v4i64:
29639 ; GFX10:       ; %bb.0:
29640 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29641 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29642 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29643 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
29644 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29645 ; GFX10-NEXT:    v_trunc_f32_e32 v2, v2
29646 ; GFX10-NEXT:    v_trunc_f32_e32 v0, v0
29647 ; GFX10-NEXT:    v_trunc_f32_e32 v3, v3
29648 ; GFX10-NEXT:    v_trunc_f32_e32 v4, v1
29649 ; GFX10-NEXT:    v_mul_f32_e64 v1, 0x2f800000, |v2|
29650 ; GFX10-NEXT:    v_mul_f32_e64 v6, 0x2f800000, |v0|
29651 ; GFX10-NEXT:    v_mul_f32_e64 v8, 0x2f800000, |v3|
29652 ; GFX10-NEXT:    v_ashrrev_i32_e32 v5, 31, v2
29653 ; GFX10-NEXT:    v_mul_f32_e64 v9, 0x2f800000, |v4|
29654 ; GFX10-NEXT:    v_floor_f32_e32 v1, v1
29655 ; GFX10-NEXT:    v_floor_f32_e32 v6, v6
29656 ; GFX10-NEXT:    v_floor_f32_e32 v8, v8
29657 ; GFX10-NEXT:    v_ashrrev_i32_e32 v7, 31, v0
29658 ; GFX10-NEXT:    v_floor_f32_e32 v9, v9
29659 ; GFX10-NEXT:    v_fma_f32 v2, 0xcf800000, v1, |v2|
29660 ; GFX10-NEXT:    v_fma_f32 v0, 0xcf800000, v6, |v0|
29661 ; GFX10-NEXT:    v_ashrrev_i32_e32 v10, 31, v3
29662 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v1, v1
29663 ; GFX10-NEXT:    v_fma_f32 v3, 0xcf800000, v8, |v3|
29664 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v2, v2
29665 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v0, v0
29666 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v6, v6
29667 ; GFX10-NEXT:    v_fma_f32 v11, 0xcf800000, v9, |v4|
29668 ; GFX10-NEXT:    v_xor_b32_e32 v1, v1, v5
29669 ; GFX10-NEXT:    v_xor_b32_e32 v2, v2, v5
29670 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v12, v3
29671 ; GFX10-NEXT:    v_xor_b32_e32 v3, v0, v7
29672 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v8, v8
29673 ; GFX10-NEXT:    v_xor_b32_e32 v6, v6, v7
29674 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v11, v11
29675 ; GFX10-NEXT:    v_sub_co_u32 v0, vcc_lo, v2, v5
29676 ; GFX10-NEXT:    v_ashrrev_i32_e32 v13, 31, v4
29677 ; GFX10-NEXT:    v_cvt_u32_f32_e32 v9, v9
29678 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v1, v5, vcc_lo
29679 ; GFX10-NEXT:    v_xor_b32_e32 v4, v12, v10
29680 ; GFX10-NEXT:    v_sub_co_u32 v2, vcc_lo, v3, v7
29681 ; GFX10-NEXT:    v_xor_b32_e32 v5, v8, v10
29682 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v6, v7, vcc_lo
29683 ; GFX10-NEXT:    v_xor_b32_e32 v6, v11, v13
29684 ; GFX10-NEXT:    v_xor_b32_e32 v7, v9, v13
29685 ; GFX10-NEXT:    v_sub_co_u32 v4, vcc_lo, v4, v10
29686 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v5, vcc_lo, v5, v10, vcc_lo
29687 ; GFX10-NEXT:    v_sub_co_u32 v6, vcc_lo, v6, v13
29688 ; GFX10-NEXT:    v_sub_co_ci_u32_e32 v7, vcc_lo, v7, v13, vcc_lo
29689 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29691 ; GFX11-LABEL: v_fptosi_v4bf16_to_v4i64:
29692 ; GFX11:       ; %bb.0:
29693 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29694 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
29695 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29696 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
29697 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29698 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29699 ; GFX11-NEXT:    v_trunc_f32_e32 v2, v2
29700 ; GFX11-NEXT:    v_trunc_f32_e32 v0, v0
29701 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29702 ; GFX11-NEXT:    v_trunc_f32_e32 v3, v3
29703 ; GFX11-NEXT:    v_trunc_f32_e32 v4, v1
29704 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29705 ; GFX11-NEXT:    v_mul_f32_e64 v1, 0x2f800000, |v2|
29706 ; GFX11-NEXT:    v_mul_f32_e64 v6, 0x2f800000, |v0|
29707 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
29708 ; GFX11-NEXT:    v_mul_f32_e64 v8, 0x2f800000, |v3|
29709 ; GFX11-NEXT:    v_ashrrev_i32_e32 v5, 31, v2
29710 ; GFX11-NEXT:    v_mul_f32_e64 v9, 0x2f800000, |v4|
29711 ; GFX11-NEXT:    v_floor_f32_e32 v1, v1
29712 ; GFX11-NEXT:    v_floor_f32_e32 v6, v6
29713 ; GFX11-NEXT:    v_floor_f32_e32 v8, v8
29714 ; GFX11-NEXT:    v_ashrrev_i32_e32 v7, 31, v0
29715 ; GFX11-NEXT:    v_floor_f32_e32 v9, v9
29716 ; GFX11-NEXT:    v_fma_f32 v2, 0xcf800000, v1, |v2|
29717 ; GFX11-NEXT:    v_fma_f32 v0, 0xcf800000, v6, |v0|
29718 ; GFX11-NEXT:    v_ashrrev_i32_e32 v10, 31, v3
29719 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v1, v1
29720 ; GFX11-NEXT:    v_fma_f32 v3, 0xcf800000, v8, |v3|
29721 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v2, v2
29722 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v0, v0
29723 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v6, v6
29724 ; GFX11-NEXT:    v_fma_f32 v11, 0xcf800000, v9, |v4|
29725 ; GFX11-NEXT:    v_xor_b32_e32 v1, v1, v5
29726 ; GFX11-NEXT:    v_xor_b32_e32 v2, v2, v5
29727 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v12, v3
29728 ; GFX11-NEXT:    v_xor_b32_e32 v3, v0, v7
29729 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v8, v8
29730 ; GFX11-NEXT:    v_xor_b32_e32 v6, v6, v7
29731 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v11, v11
29732 ; GFX11-NEXT:    v_sub_co_u32 v0, vcc_lo, v2, v5
29733 ; GFX11-NEXT:    v_ashrrev_i32_e32 v13, 31, v4
29734 ; GFX11-NEXT:    v_cvt_u32_f32_e32 v9, v9
29735 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v1, vcc_lo, v1, v5, vcc_lo
29736 ; GFX11-NEXT:    v_xor_b32_e32 v4, v12, v10
29737 ; GFX11-NEXT:    v_sub_co_u32 v2, vcc_lo, v3, v7
29738 ; GFX11-NEXT:    v_xor_b32_e32 v5, v8, v10
29739 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v3, vcc_lo, v6, v7, vcc_lo
29740 ; GFX11-NEXT:    v_xor_b32_e32 v6, v11, v13
29741 ; GFX11-NEXT:    v_xor_b32_e32 v7, v9, v13
29742 ; GFX11-NEXT:    v_sub_co_u32 v4, vcc_lo, v4, v10
29743 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v5, vcc_lo, v5, v10, vcc_lo
29744 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
29745 ; GFX11-NEXT:    v_sub_co_u32 v6, vcc_lo, v6, v13
29746 ; GFX11-NEXT:    v_sub_co_ci_u32_e32 v7, vcc_lo, v7, v13, vcc_lo
29747 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
29748   %op = fptosi <4 x bfloat> %x to <4 x i64>
29749   ret <4 x i64> %op
29752 define bfloat @v_sitofp_i16_to_bf16(i16 %x) {
29753 ; GCN-LABEL: v_sitofp_i16_to_bf16:
29754 ; GCN:       ; %bb.0:
29755 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29756 ; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 16
29757 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
29758 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29759 ; GCN-NEXT:    s_setpc_b64 s[30:31]
29761 ; GFX7-LABEL: v_sitofp_i16_to_bf16:
29762 ; GFX7:       ; %bb.0:
29763 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29764 ; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16
29765 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
29766 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29767 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29769 ; GFX8-LABEL: v_sitofp_i16_to_bf16:
29770 ; GFX8:       ; %bb.0:
29771 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29772 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29773 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
29774 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
29775 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
29776 ; GFX8-NEXT:    v_or_b32_e32 v1, 0x400000, v0
29777 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
29778 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
29779 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29780 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29782 ; GFX9-LABEL: v_sitofp_i16_to_bf16:
29783 ; GFX9:       ; %bb.0:
29784 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29785 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29786 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
29787 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
29788 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
29789 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
29790 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
29791 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
29792 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29793 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29795 ; GFX10-LABEL: v_sitofp_i16_to_bf16:
29796 ; GFX10:       ; %bb.0:
29797 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29798 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29799 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
29800 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
29801 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
29802 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
29803 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
29804 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29805 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29807 ; GFX11-LABEL: v_sitofp_i16_to_bf16:
29808 ; GFX11:       ; %bb.0:
29809 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29810 ; GFX11-NEXT:    v_bfe_i32 v0, v0, 0, 16
29811 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
29812 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
29813 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
29814 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
29815 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
29816 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
29817 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
29818 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
29819 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
29820 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29821 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
29822   %op = sitofp i16 %x to bfloat
29823   ret bfloat %op
29826 define <2 x bfloat> @v_sitofp_v2i16_to_v2bf16(<2 x i16> %x) {
29827 ; GCN-LABEL: v_sitofp_v2i16_to_v2bf16:
29828 ; GCN:       ; %bb.0:
29829 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29830 ; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 16
29831 ; GCN-NEXT:    v_bfe_i32 v1, v1, 0, 16
29832 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
29833 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
29834 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29835 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29836 ; GCN-NEXT:    s_setpc_b64 s[30:31]
29838 ; GFX7-LABEL: v_sitofp_v2i16_to_v2bf16:
29839 ; GFX7:       ; %bb.0:
29840 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29841 ; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16
29842 ; GFX7-NEXT:    v_bfe_i32 v1, v1, 0, 16
29843 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
29844 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
29845 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29846 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29847 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29849 ; GFX8-LABEL: v_sitofp_v2i16_to_v2bf16:
29850 ; GFX8:       ; %bb.0:
29851 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29852 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29853 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
29854 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
29855 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
29856 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
29857 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v1
29858 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
29859 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
29860 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
29861 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
29862 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
29863 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
29864 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
29865 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
29866 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29867 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
29868 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29870 ; GFX9-LABEL: v_sitofp_v2i16_to_v2bf16:
29871 ; GFX9:       ; %bb.0:
29872 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29873 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29874 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
29875 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
29876 ; GFX9-NEXT:    v_bfe_u32 v2, v1, 16, 1
29877 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v1
29878 ; GFX9-NEXT:    v_add3_u32 v2, v2, v1, s4
29879 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
29880 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
29881 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
29882 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
29883 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
29884 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
29885 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
29886 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
29887 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
29888 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
29890 ; GFX10-LABEL: v_sitofp_v2i16_to_v2bf16:
29891 ; GFX10:       ; %bb.0:
29892 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29893 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29894 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
29895 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
29896 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
29897 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v1
29898 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
29899 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
29900 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
29901 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
29902 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
29903 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
29904 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
29905 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
29906 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
29908 ; GFX11-LABEL: v_sitofp_v2i16_to_v2bf16:
29909 ; GFX11:       ; %bb.0:
29910 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29911 ; GFX11-NEXT:    v_bfe_i32 v1, v0, 0, 16
29912 ; GFX11-NEXT:    v_ashrrev_i32_e32 v0, 16, v0
29913 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
29914 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
29915 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
29916 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
29917 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
29918 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
29919 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v1
29920 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
29921 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
29922 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
29923 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
29924 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
29925 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
29926 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
29927 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
29928 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
29929 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
29930 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
29931   %op = sitofp <2 x i16> %x to <2 x bfloat>
29932   ret <2 x bfloat> %op
29935 define <3 x bfloat> @v_sitofp_v3i16_to_v3bf16(<3 x i16> %x) {
29936 ; GCN-LABEL: v_sitofp_v3i16_to_v3bf16:
29937 ; GCN:       ; %bb.0:
29938 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29939 ; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 16
29940 ; GCN-NEXT:    v_bfe_i32 v1, v1, 0, 16
29941 ; GCN-NEXT:    v_bfe_i32 v2, v2, 0, 16
29942 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
29943 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
29944 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
29945 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29946 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29947 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29948 ; GCN-NEXT:    s_setpc_b64 s[30:31]
29950 ; GFX7-LABEL: v_sitofp_v3i16_to_v3bf16:
29951 ; GFX7:       ; %bb.0:
29952 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29953 ; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16
29954 ; GFX7-NEXT:    v_bfe_i32 v1, v1, 0, 16
29955 ; GFX7-NEXT:    v_bfe_i32 v2, v2, 0, 16
29956 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
29957 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
29958 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
29959 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
29960 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
29961 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
29962 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
29964 ; GFX8-LABEL: v_sitofp_v3i16_to_v3bf16:
29965 ; GFX8:       ; %bb.0:
29966 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29967 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29968 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v4, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29969 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
29970 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
29971 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
29972 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
29973 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v1
29974 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
29975 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
29976 ; GFX8-NEXT:    v_bfe_u32 v3, v4, 16, 1
29977 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v4
29978 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
29979 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v4
29980 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
29981 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v2, vcc
29982 ; GFX8-NEXT:    v_bfe_u32 v3, v0, 16, 1
29983 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v0
29984 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
29985 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
29986 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
29987 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
29988 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
29989 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
29990 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
29991 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
29993 ; GFX9-LABEL: v_sitofp_v3i16_to_v3bf16:
29994 ; GFX9:       ; %bb.0:
29995 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
29996 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29997 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
29998 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
29999 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30000 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
30001 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
30002 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
30003 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30004 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
30005 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
30006 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
30007 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
30008 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30009 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
30010 ; GFX9-NEXT:    v_bfe_u32 v3, v0, 16, 1
30011 ; GFX9-NEXT:    v_add3_u32 v3, v3, v0, s4
30012 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30013 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30014 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
30015 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30016 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
30017 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
30018 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30020 ; GFX10-LABEL: v_sitofp_v3i16_to_v3bf16:
30021 ; GFX10:       ; %bb.0:
30022 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30023 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30024 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30025 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30026 ; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
30027 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
30028 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v2
30029 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30030 ; GFX10-NEXT:    v_bfe_u32 v4, v1, 16, 1
30031 ; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
30032 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
30033 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
30034 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
30035 ; GFX10-NEXT:    v_add3_u32 v4, v4, v1, 0x7fff
30036 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v7, vcc_lo
30037 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30038 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
30039 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30040 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
30041 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc_lo
30042 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
30043 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30044   %op = sitofp <3 x i16> %x to <3 x bfloat>
30045   ret <3 x bfloat> %op
30048 define <4 x bfloat> @v_sitofp_v4i16_to_v4bf16(<4 x i16> %x) {
30049 ; GCN-LABEL: v_sitofp_v4i16_to_v4bf16:
30050 ; GCN:       ; %bb.0:
30051 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30052 ; GCN-NEXT:    v_bfe_i32 v0, v0, 0, 16
30053 ; GCN-NEXT:    v_bfe_i32 v1, v1, 0, 16
30054 ; GCN-NEXT:    v_bfe_i32 v2, v2, 0, 16
30055 ; GCN-NEXT:    v_bfe_i32 v3, v3, 0, 16
30056 ; GCN-NEXT:    v_cvt_f32_i32_e32 v3, v3
30057 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
30058 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
30059 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30060 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30061 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30062 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30063 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
30064 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30066 ; GFX7-LABEL: v_sitofp_v4i16_to_v4bf16:
30067 ; GFX7:       ; %bb.0:
30068 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30069 ; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16
30070 ; GFX7-NEXT:    v_bfe_i32 v1, v1, 0, 16
30071 ; GFX7-NEXT:    v_bfe_i32 v2, v2, 0, 16
30072 ; GFX7-NEXT:    v_bfe_i32 v3, v3, 0, 16
30073 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30074 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
30075 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
30076 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v3, v3
30077 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30078 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30079 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30080 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
30081 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30083 ; GFX8-LABEL: v_sitofp_v4i16_to_v4bf16:
30084 ; GFX8:       ; %bb.0:
30085 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30086 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30087 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30088 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v5, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30089 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
30090 ; GFX8-NEXT:    v_bfe_u32 v4, v2, 16, 1
30091 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v2
30092 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
30093 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v2
30094 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30095 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v4, v3, vcc
30096 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
30097 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
30098 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
30099 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
30100 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30101 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
30102 ; GFX8-NEXT:    v_bfe_u32 v4, v5, 16, 1
30103 ; GFX8-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30104 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v5
30105 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
30106 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v5
30107 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
30108 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
30109 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
30110 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
30111 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
30112 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
30113 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30114 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
30115 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
30116 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30117 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
30118 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v2, 16
30119 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30121 ; GFX9-LABEL: v_sitofp_v4i16_to_v4bf16:
30122 ; GFX9:       ; %bb.0:
30123 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30124 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30125 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30126 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30127 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
30128 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
30129 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
30130 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30131 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
30132 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v4, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30133 ; GFX9-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30134 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
30135 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
30136 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
30137 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30138 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
30139 ; GFX9-NEXT:    v_bfe_u32 v3, v4, 16, 1
30140 ; GFX9-NEXT:    v_add3_u32 v3, v3, v4, s4
30141 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v4
30142 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
30143 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
30144 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
30145 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
30146 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
30147 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30148 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
30149 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30150 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
30151 ; GFX9-NEXT:    v_perm_b32 v1, v1, v2, s4
30152 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30154 ; GFX10-LABEL: v_sitofp_v4i16_to_v4bf16:
30155 ; GFX10:       ; %bb.0:
30156 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30157 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v2, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30158 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v3, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
30159 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v0, sext(v0) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30160 ; GFX10-NEXT:    v_cvt_f32_i32_sdwa v1, sext(v1) dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
30161 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
30162 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
30163 ; GFX10-NEXT:    v_bfe_u32 v8, v3, 16, 1
30164 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30165 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v3
30166 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
30167 ; GFX10-NEXT:    v_bfe_u32 v10, v0, 16, 1
30168 ; GFX10-NEXT:    v_add3_u32 v8, v8, v3, 0x7fff
30169 ; GFX10-NEXT:    v_bfe_u32 v6, v1, 16, 1
30170 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v0
30171 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
30172 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
30173 ; GFX10-NEXT:    v_add3_u32 v10, v10, v0, 0x7fff
30174 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v1
30175 ; GFX10-NEXT:    v_add3_u32 v6, v6, v1, 0x7fff
30176 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc_lo
30177 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30178 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v10, v11, vcc_lo
30179 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30180 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
30181 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc_lo
30182 ; GFX10-NEXT:    v_perm_b32 v1, v1, v2, 0x7060302
30183 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30185 ; GFX11-LABEL: v_sitofp_v4i16_to_v4bf16:
30186 ; GFX11:       ; %bb.0:
30187 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30188 ; GFX11-NEXT:    v_bfe_i32 v2, v1, 0, 16
30189 ; GFX11-NEXT:    v_ashrrev_i32_e32 v1, 16, v1
30190 ; GFX11-NEXT:    v_bfe_i32 v3, v0, 0, 16
30191 ; GFX11-NEXT:    v_ashrrev_i32_e32 v0, 16, v0
30192 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
30193 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v2, v2
30194 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
30195 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
30196 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v3, v3
30197 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
30198 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
30199 ; GFX11-NEXT:    v_bfe_u32 v4, v2, 16, 1
30200 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
30201 ; GFX11-NEXT:    v_bfe_u32 v6, v1, 16, 1
30202 ; GFX11-NEXT:    v_bfe_u32 v8, v3, 16, 1
30203 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30204 ; GFX11-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
30205 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v1
30206 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v3
30207 ; GFX11-NEXT:    v_bfe_u32 v10, v0, 16, 1
30208 ; GFX11-NEXT:    v_add3_u32 v6, v6, v1, 0x7fff
30209 ; GFX11-NEXT:    v_add3_u32 v8, v8, v3, 0x7fff
30210 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
30211 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
30212 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v0
30213 ; GFX11-NEXT:    v_add3_u32 v10, v10, v0, 0x7fff
30214 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc_lo
30215 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30216 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
30217 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v10, v11, vcc_lo
30218 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30219 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
30220 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc_lo
30221 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
30222 ; GFX11-NEXT:    v_perm_b32 v1, v1, v2, 0x7060302
30223 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
30224   %op = sitofp <4 x i16> %x to <4 x bfloat>
30225   ret <4 x bfloat> %op
30228 define bfloat @v_sitofp_i32_to_bf16(i32 %x) {
30229 ; GCN-LABEL: v_sitofp_i32_to_bf16:
30230 ; GCN:       ; %bb.0:
30231 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30232 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30233 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30234 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30236 ; GFX7-LABEL: v_sitofp_i32_to_bf16:
30237 ; GFX7:       ; %bb.0:
30238 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30239 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30240 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30241 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30243 ; GFX8-LABEL: v_sitofp_i32_to_bf16:
30244 ; GFX8:       ; %bb.0:
30245 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30246 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30247 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
30248 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
30249 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
30250 ; GFX8-NEXT:    v_or_b32_e32 v1, 0x400000, v0
30251 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30252 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
30253 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30254 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30256 ; GFX9-LABEL: v_sitofp_i32_to_bf16:
30257 ; GFX9:       ; %bb.0:
30258 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30259 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30260 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30261 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
30262 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30263 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
30264 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30265 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
30266 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30267 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30269 ; GFX10-LABEL: v_sitofp_i32_to_bf16:
30270 ; GFX10:       ; %bb.0:
30271 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30272 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30273 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
30274 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30275 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30276 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
30277 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
30278 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30279 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30281 ; GFX11-LABEL: v_sitofp_i32_to_bf16:
30282 ; GFX11:       ; %bb.0:
30283 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30284 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
30285 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
30286 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
30287 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30288 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30289 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
30290 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
30291 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
30292 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30293 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
30294   %op = sitofp i32 %x to bfloat
30295   ret bfloat %op
30298 define <2 x bfloat> @v_sitofp_v2i32_to_v2bf16(<2 x i32> %x) {
30299 ; GCN-LABEL: v_sitofp_v2i32_to_v2bf16:
30300 ; GCN:       ; %bb.0:
30301 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30302 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
30303 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30304 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30305 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30306 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30308 ; GFX7-LABEL: v_sitofp_v2i32_to_v2bf16:
30309 ; GFX7:       ; %bb.0:
30310 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30311 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30312 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
30313 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30314 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30315 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30317 ; GFX8-LABEL: v_sitofp_v2i32_to_v2bf16:
30318 ; GFX8:       ; %bb.0:
30319 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30320 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30321 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v1, v1
30322 ; GFX8-NEXT:    v_bfe_u32 v3, v0, 16, 1
30323 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v0
30324 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
30325 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30326 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30327 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
30328 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
30329 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
30330 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
30331 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v1
30332 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30333 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
30334 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
30335 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
30336 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30338 ; GFX9-LABEL: v_sitofp_v2i32_to_v2bf16:
30339 ; GFX9:       ; %bb.0:
30340 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30341 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30342 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v1, v1
30343 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30344 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
30345 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
30346 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
30347 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30348 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
30349 ; GFX9-NEXT:    v_bfe_u32 v2, v1, 16, 1
30350 ; GFX9-NEXT:    v_add3_u32 v2, v2, v1, s4
30351 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v1
30352 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30353 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
30354 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30355 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
30356 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30358 ; GFX10-LABEL: v_sitofp_v2i32_to_v2bf16:
30359 ; GFX10:       ; %bb.0:
30360 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30361 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30362 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
30363 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
30364 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
30365 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30366 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30367 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v1
30368 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
30369 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
30370 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
30371 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30372 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
30373 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
30374 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30376 ; GFX11-LABEL: v_sitofp_v2i32_to_v2bf16:
30377 ; GFX11:       ; %bb.0:
30378 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30379 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
30380 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
30381 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
30382 ; GFX11-NEXT:    v_bfe_u32 v2, v0, 16, 1
30383 ; GFX11-NEXT:    v_bfe_u32 v3, v1, 16, 1
30384 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30385 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30386 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v1
30387 ; GFX11-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
30388 ; GFX11-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
30389 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
30390 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
30391 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30392 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
30393 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
30394 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
30395 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
30396   %op = sitofp <2 x i32> %x to <2 x bfloat>
30397   ret <2 x bfloat> %op
30400 define <3 x bfloat> @v_sitofp_v3i32_to_v3bf16(<3 x i32> %x) {
30401 ; GCN-LABEL: v_sitofp_v3i32_to_v3bf16:
30402 ; GCN:       ; %bb.0:
30403 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30404 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
30405 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
30406 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30407 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30408 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30409 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30410 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30412 ; GFX7-LABEL: v_sitofp_v3i32_to_v3bf16:
30413 ; GFX7:       ; %bb.0:
30414 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30415 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30416 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
30417 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
30418 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30419 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30420 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30421 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30423 ; GFX8-LABEL: v_sitofp_v3i32_to_v3bf16:
30424 ; GFX8:       ; %bb.0:
30425 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30426 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v2, v2
30427 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30428 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v1, v1
30429 ; GFX8-NEXT:    v_bfe_u32 v4, v2, 16, 1
30430 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v2
30431 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
30432 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v2
30433 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30434 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v4, v3, vcc
30435 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
30436 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
30437 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
30438 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
30439 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30440 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
30441 ; GFX8-NEXT:    v_bfe_u32 v4, v1, 16, 1
30442 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v1
30443 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
30444 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v1
30445 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30446 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v3, vcc
30447 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
30448 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
30449 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
30450 ; GFX8-NEXT:    v_mov_b32_e32 v1, v2
30451 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30453 ; GFX9-LABEL: v_sitofp_v3i32_to_v3bf16:
30454 ; GFX9:       ; %bb.0:
30455 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30456 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v2, v2
30457 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30458 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30459 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v1, v1
30460 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
30461 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
30462 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
30463 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30464 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
30465 ; GFX9-NEXT:    v_bfe_u32 v3, v0, 16, 1
30466 ; GFX9-NEXT:    v_add3_u32 v3, v3, v0, s4
30467 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30468 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30469 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
30470 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
30471 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
30472 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
30473 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30474 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
30475 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30476 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
30477 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v2, 16
30478 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30480 ; GFX10-LABEL: v_sitofp_v3i32_to_v3bf16:
30481 ; GFX10:       ; %bb.0:
30482 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30483 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30484 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
30485 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v2, v2
30486 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
30487 ; GFX10-NEXT:    v_bfe_u32 v5, v1, 16, 1
30488 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v0
30489 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30490 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
30491 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
30492 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v1
30493 ; GFX10-NEXT:    v_add3_u32 v5, v5, v1, 0x7fff
30494 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v2
30495 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
30496 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v7, vcc_lo
30497 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30498 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v8, vcc_lo
30499 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30500 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
30501 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v6, vcc_lo
30502 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v2, 16
30503 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30504   %op = sitofp <3 x i32> %x to <3 x bfloat>
30505   ret <3 x bfloat> %op
30508 define <4 x bfloat> @v_sitofp_v4i32_to_v4bf16(<4 x i32> %x) {
30509 ; GCN-LABEL: v_sitofp_v4i32_to_v4bf16:
30510 ; GCN:       ; %bb.0:
30511 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30512 ; GCN-NEXT:    v_cvt_f32_i32_e32 v3, v3
30513 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
30514 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v1
30515 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30516 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30517 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30518 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30519 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
30520 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30522 ; GFX7-LABEL: v_sitofp_v4i32_to_v4bf16:
30523 ; GFX7:       ; %bb.0:
30524 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30525 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30526 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v1, v1
30527 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
30528 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v3, v3
30529 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30530 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30531 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
30532 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
30533 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30535 ; GFX8-LABEL: v_sitofp_v4i32_to_v4bf16:
30536 ; GFX8:       ; %bb.0:
30537 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30538 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v2, v2
30539 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v3, v3
30540 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30541 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
30542 ; GFX8-NEXT:    v_bfe_u32 v5, v2, 16, 1
30543 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v2
30544 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
30545 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
30546 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30547 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v5, v4, vcc
30548 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
30549 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
30550 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
30551 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v3
30552 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
30553 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v4, vcc
30554 ; GFX8-NEXT:    v_bfe_u32 v5, v0, 16, 1
30555 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v1, v1
30556 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v0
30557 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
30558 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30559 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30560 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v5, v4, vcc
30561 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
30562 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
30563 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
30564 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
30565 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30566 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
30567 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
30568 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
30569 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
30570 ; GFX8-NEXT:    v_alignbit_b32 v1, v3, v2, 16
30571 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30573 ; GFX9-LABEL: v_sitofp_v4i32_to_v4bf16:
30574 ; GFX9:       ; %bb.0:
30575 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30576 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v2, v2
30577 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v3, v3
30578 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30579 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30580 ; GFX9-NEXT:    v_bfe_u32 v4, v2, 16, 1
30581 ; GFX9-NEXT:    v_add3_u32 v4, v4, v2, s4
30582 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v2
30583 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
30584 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc
30585 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
30586 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v1, v1
30587 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
30588 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
30589 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
30590 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
30591 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
30592 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
30593 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
30594 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30595 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
30596 ; GFX9-NEXT:    v_bfe_u32 v4, v1, 16, 1
30597 ; GFX9-NEXT:    v_add3_u32 v4, v4, v1, s4
30598 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
30599 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
30600 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v5, vcc
30601 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30602 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
30603 ; GFX9-NEXT:    v_perm_b32 v1, v3, v2, s4
30604 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30606 ; GFX10-LABEL: v_sitofp_v4i32_to_v4bf16:
30607 ; GFX10:       ; %bb.0:
30608 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30609 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v2, v2
30610 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30611 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
30612 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v3, v3
30613 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
30614 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
30615 ; GFX10-NEXT:    v_bfe_u32 v7, v0, 16, 1
30616 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30617 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
30618 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
30619 ; GFX10-NEXT:    v_bfe_u32 v9, v1, 16, 1
30620 ; GFX10-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
30621 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
30622 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v1
30623 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
30624 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30625 ; GFX10-NEXT:    v_add3_u32 v9, v9, v1, 0x7fff
30626 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
30627 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v3
30628 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
30629 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30630 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v9, v10, vcc_lo
30631 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
30632 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
30633 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v4, vcc_lo
30634 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
30635 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30637 ; GFX11-LABEL: v_sitofp_v4i32_to_v4bf16:
30638 ; GFX11:       ; %bb.0:
30639 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30640 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v2, v2
30641 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
30642 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
30643 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v3, v3
30644 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
30645 ; GFX11-NEXT:    v_bfe_u32 v4, v2, 16, 1
30646 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
30647 ; GFX11-NEXT:    v_bfe_u32 v7, v0, 16, 1
30648 ; GFX11-NEXT:    v_bfe_u32 v9, v1, 16, 1
30649 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
30650 ; GFX11-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
30651 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
30652 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v1
30653 ; GFX11-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
30654 ; GFX11-NEXT:    v_add3_u32 v9, v9, v1, 0x7fff
30655 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
30656 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30657 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
30658 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v3
30659 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
30660 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
30661 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_2)
30662 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
30663 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v9, v10, vcc_lo
30664 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
30665 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
30666 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
30667 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v4, vcc_lo
30668 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
30669 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
30670   %op = sitofp <4 x i32> %x to <4 x bfloat>
30671   ret <4 x bfloat> %op
30674 define bfloat @v_sitofp_i64_to_bf16(i64 %x) {
30675 ; GCN-LABEL: v_sitofp_i64_to_bf16:
30676 ; GCN:       ; %bb.0:
30677 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30678 ; GCN-NEXT:    v_xor_b32_e32 v2, v0, v1
30679 ; GCN-NEXT:    v_ffbh_i32_e32 v3, v1
30680 ; GCN-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30681 ; GCN-NEXT:    v_add_i32_e32 v3, vcc, -1, v3
30682 ; GCN-NEXT:    v_add_i32_e32 v2, vcc, 32, v2
30683 ; GCN-NEXT:    v_min_u32_e32 v2, v3, v2
30684 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v2
30685 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
30686 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
30687 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30688 ; GCN-NEXT:    v_sub_i32_e32 v1, vcc, 32, v2
30689 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v1
30690 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30691 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30693 ; GFX7-LABEL: v_sitofp_i64_to_bf16:
30694 ; GFX7:       ; %bb.0:
30695 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30696 ; GFX7-NEXT:    v_xor_b32_e32 v2, v0, v1
30697 ; GFX7-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30698 ; GFX7-NEXT:    v_ffbh_i32_e32 v3, v1
30699 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, 32, v2
30700 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, -1, v3
30701 ; GFX7-NEXT:    v_min_u32_e32 v2, v3, v2
30702 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v2
30703 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
30704 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
30705 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30706 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, 32, v2
30707 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
30708 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30709 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30711 ; GFX8-LABEL: v_sitofp_i64_to_bf16:
30712 ; GFX8:       ; %bb.0:
30713 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30714 ; GFX8-NEXT:    v_xor_b32_e32 v2, v0, v1
30715 ; GFX8-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30716 ; GFX8-NEXT:    v_ffbh_i32_e32 v3, v1
30717 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 32, v2
30718 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, -1, v3
30719 ; GFX8-NEXT:    v_min_u32_e32 v2, v3, v2
30720 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
30721 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
30722 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
30723 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30724 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v2
30725 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
30726 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
30727 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
30728 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
30729 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30730 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30731 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
30732 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30733 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30735 ; GFX9-LABEL: v_sitofp_i64_to_bf16:
30736 ; GFX9:       ; %bb.0:
30737 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30738 ; GFX9-NEXT:    v_xor_b32_e32 v2, v0, v1
30739 ; GFX9-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30740 ; GFX9-NEXT:    v_ffbh_i32_e32 v3, v1
30741 ; GFX9-NEXT:    v_add_u32_e32 v2, 32, v2
30742 ; GFX9-NEXT:    v_add_u32_e32 v3, -1, v3
30743 ; GFX9-NEXT:    v_min_u32_e32 v2, v3, v2
30744 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
30745 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30746 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
30747 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
30748 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30749 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v2
30750 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v1
30751 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
30752 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
30753 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30754 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30755 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
30756 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30757 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30759 ; GFX10-LABEL: v_sitofp_i64_to_bf16:
30760 ; GFX10:       ; %bb.0:
30761 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30762 ; GFX10-NEXT:    v_xor_b32_e32 v2, v0, v1
30763 ; GFX10-NEXT:    v_ffbh_i32_e32 v3, v1
30764 ; GFX10-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30765 ; GFX10-NEXT:    v_add_nc_u32_e32 v3, -1, v3
30766 ; GFX10-NEXT:    v_add_nc_u32_e32 v2, 32, v2
30767 ; GFX10-NEXT:    v_min_u32_e32 v2, v3, v2
30768 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
30769 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
30770 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
30771 ; GFX10-NEXT:    v_sub_nc_u32_e32 v1, 32, v2
30772 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30773 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v1
30774 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
30775 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30776 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30777 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
30778 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
30779 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30780 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
30782 ; GFX11-LABEL: v_sitofp_i64_to_bf16:
30783 ; GFX11:       ; %bb.0:
30784 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30785 ; GFX11-NEXT:    v_xor_b32_e32 v2, v0, v1
30786 ; GFX11-NEXT:    v_cls_i32_e32 v3, v1
30787 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
30788 ; GFX11-NEXT:    v_ashrrev_i32_e32 v2, 31, v2
30789 ; GFX11-NEXT:    v_add_nc_u32_e32 v3, -1, v3
30790 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
30791 ; GFX11-NEXT:    v_add_nc_u32_e32 v2, 32, v2
30792 ; GFX11-NEXT:    v_min_u32_e32 v2, v3, v2
30793 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
30794 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
30795 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
30796 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
30797 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
30798 ; GFX11-NEXT:    v_sub_nc_u32_e32 v1, 32, v2
30799 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
30800 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
30801 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v1
30802 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
30803 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
30804 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30805 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
30806 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
30807 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
30808 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
30809 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30810 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
30811   %op = sitofp i64 %x to bfloat
30812   ret bfloat %op
30815 define <2 x bfloat> @v_sitofp_v2i64_to_v2bf16(<2 x i64> %x) {
30816 ; GCN-LABEL: v_sitofp_v2i64_to_v2bf16:
30817 ; GCN:       ; %bb.0:
30818 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30819 ; GCN-NEXT:    v_ffbh_i32_e32 v4, v3
30820 ; GCN-NEXT:    v_xor_b32_e32 v5, v2, v3
30821 ; GCN-NEXT:    v_ffbh_i32_e32 v6, v1
30822 ; GCN-NEXT:    v_xor_b32_e32 v7, v0, v1
30823 ; GCN-NEXT:    v_add_i32_e32 v4, vcc, -1, v4
30824 ; GCN-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30825 ; GCN-NEXT:    v_add_i32_e32 v6, vcc, -1, v6
30826 ; GCN-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
30827 ; GCN-NEXT:    v_add_i32_e32 v5, vcc, 32, v5
30828 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 32, v7
30829 ; GCN-NEXT:    v_min_u32_e32 v4, v4, v5
30830 ; GCN-NEXT:    v_min_u32_e32 v5, v6, v7
30831 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v4
30832 ; GCN-NEXT:    v_sub_i32_e32 v4, vcc, 32, v4
30833 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v5
30834 ; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 32, v5
30835 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
30836 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
30837 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
30838 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
30839 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v2
30840 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
30841 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v1, v4
30842 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v5
30843 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30844 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30845 ; GCN-NEXT:    s_setpc_b64 s[30:31]
30847 ; GFX7-LABEL: v_sitofp_v2i64_to_v2bf16:
30848 ; GFX7:       ; %bb.0:
30849 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30850 ; GFX7-NEXT:    v_xor_b32_e32 v5, v2, v3
30851 ; GFX7-NEXT:    v_ffbh_i32_e32 v4, v3
30852 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30853 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, -1, v4
30854 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 32, v5
30855 ; GFX7-NEXT:    v_min_u32_e32 v4, v4, v5
30856 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v4
30857 ; GFX7-NEXT:    v_xor_b32_e32 v5, v0, v1
30858 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
30859 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
30860 ; GFX7-NEXT:    v_ffbh_i32_e32 v3, v1
30861 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30862 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, -1, v3
30863 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 32, v5
30864 ; GFX7-NEXT:    v_min_u32_e32 v3, v3, v5
30865 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
30866 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
30867 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
30868 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
30869 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
30870 ; GFX7-NEXT:    v_sub_i32_e32 v4, vcc, 32, v4
30871 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v4
30872 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
30873 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
30874 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
30875 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
30876 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
30878 ; GFX8-LABEL: v_sitofp_v2i64_to_v2bf16:
30879 ; GFX8:       ; %bb.0:
30880 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30881 ; GFX8-NEXT:    v_xor_b32_e32 v5, v0, v1
30882 ; GFX8-NEXT:    v_ffbh_i32_e32 v4, v1
30883 ; GFX8-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30884 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, -1, v4
30885 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 32, v5
30886 ; GFX8-NEXT:    v_min_u32_e32 v4, v4, v5
30887 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
30888 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
30889 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
30890 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
30891 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30892 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v4
30893 ; GFX8-NEXT:    v_ldexp_f32 v4, v0, v1
30894 ; GFX8-NEXT:    v_bfe_u32 v0, v4, 16, 1
30895 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v0, v4
30896 ; GFX8-NEXT:    v_xor_b32_e32 v1, v2, v3
30897 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v0
30898 ; GFX8-NEXT:    v_ffbh_i32_e32 v0, v3
30899 ; GFX8-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
30900 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, -1, v0
30901 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 32, v1
30902 ; GFX8-NEXT:    v_min_u32_e32 v6, v0, v1
30903 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v6, v[2:3]
30904 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v4
30905 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
30906 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
30907 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
30908 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
30909 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
30910 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, 32, v6
30911 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v2
30912 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
30913 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
30914 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
30915 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
30916 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30917 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
30918 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
30919 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
30920 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30922 ; GFX9-LABEL: v_sitofp_v2i64_to_v2bf16:
30923 ; GFX9:       ; %bb.0:
30924 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30925 ; GFX9-NEXT:    v_xor_b32_e32 v5, v0, v1
30926 ; GFX9-NEXT:    v_ffbh_i32_e32 v4, v1
30927 ; GFX9-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30928 ; GFX9-NEXT:    v_add_u32_e32 v4, -1, v4
30929 ; GFX9-NEXT:    v_add_u32_e32 v5, 32, v5
30930 ; GFX9-NEXT:    v_min_u32_e32 v4, v4, v5
30931 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
30932 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
30933 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
30934 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
30935 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30936 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v4
30937 ; GFX9-NEXT:    v_ldexp_f32 v4, v0, v1
30938 ; GFX9-NEXT:    v_bfe_u32 v0, v4, 16, 1
30939 ; GFX9-NEXT:    v_xor_b32_e32 v1, v2, v3
30940 ; GFX9-NEXT:    v_add3_u32 v5, v0, v4, s4
30941 ; GFX9-NEXT:    v_ffbh_i32_e32 v0, v3
30942 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
30943 ; GFX9-NEXT:    v_add_u32_e32 v0, -1, v0
30944 ; GFX9-NEXT:    v_add_u32_e32 v1, 32, v1
30945 ; GFX9-NEXT:    v_min_u32_e32 v6, v0, v1
30946 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v6, v[2:3]
30947 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v4
30948 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
30949 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
30950 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
30951 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
30952 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
30953 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v6
30954 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
30955 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
30956 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
30957 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
30958 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
30959 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
30960 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
30961 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
30962 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
30964 ; GFX10-LABEL: v_sitofp_v2i64_to_v2bf16:
30965 ; GFX10:       ; %bb.0:
30966 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
30967 ; GFX10-NEXT:    v_xor_b32_e32 v4, v0, v1
30968 ; GFX10-NEXT:    v_xor_b32_e32 v5, v2, v3
30969 ; GFX10-NEXT:    v_ffbh_i32_e32 v6, v1
30970 ; GFX10-NEXT:    v_ffbh_i32_e32 v7, v3
30971 ; GFX10-NEXT:    v_ashrrev_i32_e32 v4, 31, v4
30972 ; GFX10-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
30973 ; GFX10-NEXT:    v_add_nc_u32_e32 v6, -1, v6
30974 ; GFX10-NEXT:    v_add_nc_u32_e32 v7, -1, v7
30975 ; GFX10-NEXT:    v_add_nc_u32_e32 v4, 32, v4
30976 ; GFX10-NEXT:    v_add_nc_u32_e32 v5, 32, v5
30977 ; GFX10-NEXT:    v_min_u32_e32 v4, v6, v4
30978 ; GFX10-NEXT:    v_min_u32_e32 v5, v7, v5
30979 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
30980 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
30981 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
30982 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
30983 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
30984 ; GFX10-NEXT:    v_or_b32_e32 v1, v3, v2
30985 ; GFX10-NEXT:    v_sub_nc_u32_e32 v2, 32, v4
30986 ; GFX10-NEXT:    v_sub_nc_u32_e32 v3, 32, v5
30987 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
30988 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
30989 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v2
30990 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v3
30991 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
30992 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
30993 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v0
30994 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
30995 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v1
30996 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
30997 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
30998 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
30999 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31000 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
31001 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
31002 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
31004 ; GFX11-LABEL: v_sitofp_v2i64_to_v2bf16:
31005 ; GFX11:       ; %bb.0:
31006 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31007 ; GFX11-NEXT:    v_xor_b32_e32 v4, v0, v1
31008 ; GFX11-NEXT:    v_xor_b32_e32 v5, v2, v3
31009 ; GFX11-NEXT:    v_cls_i32_e32 v6, v1
31010 ; GFX11-NEXT:    v_cls_i32_e32 v7, v3
31011 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31012 ; GFX11-NEXT:    v_ashrrev_i32_e32 v4, 31, v4
31013 ; GFX11-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
31014 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31015 ; GFX11-NEXT:    v_add_nc_u32_e32 v6, -1, v6
31016 ; GFX11-NEXT:    v_add_nc_u32_e32 v7, -1, v7
31017 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31018 ; GFX11-NEXT:    v_add_nc_u32_e32 v4, 32, v4
31019 ; GFX11-NEXT:    v_add_nc_u32_e32 v5, 32, v5
31020 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31021 ; GFX11-NEXT:    v_min_u32_e32 v4, v6, v4
31022 ; GFX11-NEXT:    v_min_u32_e32 v5, v7, v5
31023 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31024 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
31025 ; GFX11-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
31026 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31027 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
31028 ; GFX11-NEXT:    v_min_u32_e32 v2, 1, v2
31029 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31030 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
31031 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
31032 ; GFX11-NEXT:    v_sub_nc_u32_e32 v2, 32, v4
31033 ; GFX11-NEXT:    v_sub_nc_u32_e32 v3, 32, v5
31034 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31035 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
31036 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
31037 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31038 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v2
31039 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v3
31040 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31041 ; GFX11-NEXT:    v_bfe_u32 v2, v0, 16, 1
31042 ; GFX11-NEXT:    v_bfe_u32 v3, v1, 16, 1
31043 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v0
31044 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31045 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v1
31046 ; GFX11-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
31047 ; GFX11-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
31048 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
31049 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
31050 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31051 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
31052 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
31053 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
31054 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
31055   %op = sitofp <2 x i64> %x to <2 x bfloat>
31056   ret <2 x bfloat> %op
31059 define <3 x bfloat> @v_sitofp_v3i64_to_v3bf16(<3 x i64> %x) {
31060 ; GCN-LABEL: v_sitofp_v3i64_to_v3bf16:
31061 ; GCN:       ; %bb.0:
31062 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31063 ; GCN-NEXT:    v_ffbh_i32_e32 v6, v5
31064 ; GCN-NEXT:    v_xor_b32_e32 v7, v4, v5
31065 ; GCN-NEXT:    v_ffbh_i32_e32 v8, v3
31066 ; GCN-NEXT:    v_xor_b32_e32 v9, v2, v3
31067 ; GCN-NEXT:    v_ffbh_i32_e32 v10, v1
31068 ; GCN-NEXT:    v_xor_b32_e32 v11, v0, v1
31069 ; GCN-NEXT:    v_add_i32_e32 v6, vcc, -1, v6
31070 ; GCN-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31071 ; GCN-NEXT:    v_add_i32_e32 v8, vcc, -1, v8
31072 ; GCN-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31073 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, -1, v10
31074 ; GCN-NEXT:    v_ashrrev_i32_e32 v11, 31, v11
31075 ; GCN-NEXT:    v_add_i32_e32 v7, vcc, 32, v7
31076 ; GCN-NEXT:    v_add_i32_e32 v9, vcc, 32, v9
31077 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 32, v11
31078 ; GCN-NEXT:    v_min_u32_e32 v6, v6, v7
31079 ; GCN-NEXT:    v_min_u32_e32 v7, v8, v9
31080 ; GCN-NEXT:    v_min_u32_e32 v8, v10, v11
31081 ; GCN-NEXT:    v_lshl_b64 v[4:5], v[4:5], v6
31082 ; GCN-NEXT:    v_sub_i32_e32 v6, vcc, 32, v6
31083 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v7
31084 ; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 32, v7
31085 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v8
31086 ; GCN-NEXT:    v_sub_i32_e32 v8, vcc, 32, v8
31087 ; GCN-NEXT:    v_min_u32_e32 v4, 1, v4
31088 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
31089 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
31090 ; GCN-NEXT:    v_or_b32_e32 v4, v5, v4
31091 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
31092 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
31093 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v4
31094 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
31095 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
31096 ; GCN-NEXT:    v_ldexp_f32_e32 v3, v1, v6
31097 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v2, v7
31098 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v8
31099 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
31100 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
31101 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
31102 ; GCN-NEXT:    s_setpc_b64 s[30:31]
31104 ; GFX7-LABEL: v_sitofp_v3i64_to_v3bf16:
31105 ; GFX7:       ; %bb.0:
31106 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31107 ; GFX7-NEXT:    v_xor_b32_e32 v7, v4, v5
31108 ; GFX7-NEXT:    v_ffbh_i32_e32 v6, v5
31109 ; GFX7-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31110 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, -1, v6
31111 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 32, v7
31112 ; GFX7-NEXT:    v_min_u32_e32 v6, v6, v7
31113 ; GFX7-NEXT:    v_lshl_b64 v[4:5], v[4:5], v6
31114 ; GFX7-NEXT:    v_xor_b32_e32 v7, v2, v3
31115 ; GFX7-NEXT:    v_min_u32_e32 v4, 1, v4
31116 ; GFX7-NEXT:    v_or_b32_e32 v4, v5, v4
31117 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v6
31118 ; GFX7-NEXT:    v_ffbh_i32_e32 v6, v3
31119 ; GFX7-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31120 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v4, v4
31121 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, -1, v6
31122 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, 32, v7
31123 ; GFX7-NEXT:    v_min_u32_e32 v6, v6, v7
31124 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v6
31125 ; GFX7-NEXT:    v_ldexp_f32_e32 v4, v4, v5
31126 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
31127 ; GFX7-NEXT:    v_xor_b32_e32 v5, v0, v1
31128 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
31129 ; GFX7-NEXT:    v_ffbh_i32_e32 v3, v1
31130 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
31131 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, -1, v3
31132 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 32, v5
31133 ; GFX7-NEXT:    v_min_u32_e32 v3, v3, v5
31134 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
31135 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
31136 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
31137 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
31138 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
31139 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v6
31140 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v5
31141 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
31142 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
31143 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
31144 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
31145 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
31146 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
31148 ; GFX8-LABEL: v_sitofp_v3i64_to_v3bf16:
31149 ; GFX8:       ; %bb.0:
31150 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31151 ; GFX8-NEXT:    v_xor_b32_e32 v7, v4, v5
31152 ; GFX8-NEXT:    v_ffbh_i32_e32 v6, v5
31153 ; GFX8-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31154 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, -1, v6
31155 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 32, v7
31156 ; GFX8-NEXT:    v_min_u32_e32 v6, v6, v7
31157 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v6, v[4:5]
31158 ; GFX8-NEXT:    v_xor_b32_e32 v8, v0, v1
31159 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
31160 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
31161 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v4, v4
31162 ; GFX8-NEXT:    v_sub_u32_e32 v5, vcc, 32, v6
31163 ; GFX8-NEXT:    v_ffbh_i32_e32 v7, v1
31164 ; GFX8-NEXT:    v_ldexp_f32 v4, v4, v5
31165 ; GFX8-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31166 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
31167 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, -1, v7
31168 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 32, v8
31169 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
31170 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
31171 ; GFX8-NEXT:    v_min_u32_e32 v7, v7, v8
31172 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
31173 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v7, v[0:1]
31174 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
31175 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
31176 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
31177 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
31178 ; GFX8-NEXT:    v_xor_b32_e32 v6, v2, v3
31179 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
31180 ; GFX8-NEXT:    v_ffbh_i32_e32 v5, v3
31181 ; GFX8-NEXT:    v_ashrrev_i32_e32 v6, 31, v6
31182 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
31183 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, -1, v5
31184 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 32, v6
31185 ; GFX8-NEXT:    v_min_u32_e32 v5, v5, v6
31186 ; GFX8-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
31187 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v4
31188 ; GFX8-NEXT:    v_sub_u32_e32 v4, vcc, 32, v7
31189 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v4
31190 ; GFX8-NEXT:    v_min_u32_e32 v2, 1, v2
31191 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
31192 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
31193 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
31194 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v2, v2
31195 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
31196 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v0
31197 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31198 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v6, vcc
31199 ; GFX8-NEXT:    v_sub_u32_e32 v3, vcc, 32, v5
31200 ; GFX8-NEXT:    v_ldexp_f32 v2, v2, v3
31201 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
31202 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
31203 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
31204 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
31205 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
31206 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
31207 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
31208 ; GFX8-NEXT:    v_alignbit_b32 v0, v2, v0, 16
31209 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
31211 ; GFX9-LABEL: v_sitofp_v3i64_to_v3bf16:
31212 ; GFX9:       ; %bb.0:
31213 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31214 ; GFX9-NEXT:    v_xor_b32_e32 v7, v4, v5
31215 ; GFX9-NEXT:    v_ffbh_i32_e32 v6, v5
31216 ; GFX9-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31217 ; GFX9-NEXT:    v_add_u32_e32 v6, -1, v6
31218 ; GFX9-NEXT:    v_add_u32_e32 v7, 32, v7
31219 ; GFX9-NEXT:    v_min_u32_e32 v6, v6, v7
31220 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v6, v[4:5]
31221 ; GFX9-NEXT:    v_xor_b32_e32 v7, v0, v1
31222 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
31223 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
31224 ; GFX9-NEXT:    v_sub_u32_e32 v5, 32, v6
31225 ; GFX9-NEXT:    v_ffbh_i32_e32 v6, v1
31226 ; GFX9-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31227 ; GFX9-NEXT:    v_add_u32_e32 v6, -1, v6
31228 ; GFX9-NEXT:    v_add_u32_e32 v7, 32, v7
31229 ; GFX9-NEXT:    v_min_u32_e32 v6, v6, v7
31230 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v6, v[0:1]
31231 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v4, v4
31232 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
31233 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
31234 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
31235 ; GFX9-NEXT:    v_ldexp_f32 v4, v4, v5
31236 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
31237 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
31238 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
31239 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v4
31240 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
31241 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v6
31242 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc
31243 ; GFX9-NEXT:    v_ldexp_f32 v5, v0, v1
31244 ; GFX9-NEXT:    v_bfe_u32 v0, v5, 16, 1
31245 ; GFX9-NEXT:    v_xor_b32_e32 v1, v2, v3
31246 ; GFX9-NEXT:    v_add3_u32 v6, v0, v5, s4
31247 ; GFX9-NEXT:    v_ffbh_i32_e32 v0, v3
31248 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
31249 ; GFX9-NEXT:    v_add_u32_e32 v0, -1, v0
31250 ; GFX9-NEXT:    v_add_u32_e32 v1, 32, v1
31251 ; GFX9-NEXT:    v_min_u32_e32 v7, v0, v1
31252 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v7, v[2:3]
31253 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v5
31254 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
31255 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
31256 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
31257 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
31258 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v6, v2, vcc
31259 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v7
31260 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
31261 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
31262 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
31263 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
31264 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31265 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
31266 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
31267 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
31268 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v4, 16
31269 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
31271 ; GFX10-LABEL: v_sitofp_v3i64_to_v3bf16:
31272 ; GFX10:       ; %bb.0:
31273 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31274 ; GFX10-NEXT:    v_xor_b32_e32 v8, v0, v1
31275 ; GFX10-NEXT:    v_xor_b32_e32 v7, v4, v5
31276 ; GFX10-NEXT:    v_xor_b32_e32 v9, v2, v3
31277 ; GFX10-NEXT:    v_ffbh_i32_e32 v10, v1
31278 ; GFX10-NEXT:    v_ffbh_i32_e32 v6, v5
31279 ; GFX10-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31280 ; GFX10-NEXT:    v_ashrrev_i32_e32 v7, 31, v7
31281 ; GFX10-NEXT:    v_ffbh_i32_e32 v11, v3
31282 ; GFX10-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31283 ; GFX10-NEXT:    v_add_nc_u32_e32 v10, -1, v10
31284 ; GFX10-NEXT:    v_add_nc_u32_e32 v8, 32, v8
31285 ; GFX10-NEXT:    v_add_nc_u32_e32 v6, -1, v6
31286 ; GFX10-NEXT:    v_add_nc_u32_e32 v7, 32, v7
31287 ; GFX10-NEXT:    v_add_nc_u32_e32 v11, -1, v11
31288 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, 32, v9
31289 ; GFX10-NEXT:    v_min_u32_e32 v8, v10, v8
31290 ; GFX10-NEXT:    v_min_u32_e32 v6, v6, v7
31291 ; GFX10-NEXT:    v_min_u32_e32 v7, v11, v9
31292 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v8, v[0:1]
31293 ; GFX10-NEXT:    v_lshlrev_b64 v[4:5], v6, v[4:5]
31294 ; GFX10-NEXT:    v_sub_nc_u32_e32 v6, 32, v6
31295 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v7, v[2:3]
31296 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
31297 ; GFX10-NEXT:    v_min_u32_e32 v4, 1, v4
31298 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
31299 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
31300 ; GFX10-NEXT:    v_or_b32_e32 v1, v5, v4
31301 ; GFX10-NEXT:    v_sub_nc_u32_e32 v4, 32, v7
31302 ; GFX10-NEXT:    v_or_b32_e32 v2, v3, v2
31303 ; GFX10-NEXT:    v_sub_nc_u32_e32 v3, 32, v8
31304 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
31305 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
31306 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v2, v2
31307 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v3
31308 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v6
31309 ; GFX10-NEXT:    v_ldexp_f32 v2, v2, v4
31310 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
31311 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v0
31312 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31313 ; GFX10-NEXT:    v_bfe_u32 v5, v2, 16, 1
31314 ; GFX10-NEXT:    v_bfe_u32 v4, v1, 16, 1
31315 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
31316 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v2
31317 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
31318 ; GFX10-NEXT:    v_add3_u32 v5, v5, v2, 0x7fff
31319 ; GFX10-NEXT:    v_add3_u32 v4, v4, v1, 0x7fff
31320 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v7, vcc_lo
31321 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
31322 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v5, v8, vcc_lo
31323 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31324 ; GFX10-NEXT:    v_perm_b32 v0, v2, v0, 0x7060302
31325 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc_lo
31326 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
31327 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
31328   %op = sitofp <3 x i64> %x to <3 x bfloat>
31329   ret <3 x bfloat> %op
31332 define <4 x bfloat> @v_sitofp_v4i64_to_v4bf16(<4 x i64> %x) {
31333 ; GCN-LABEL: v_sitofp_v4i64_to_v4bf16:
31334 ; GCN:       ; %bb.0:
31335 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31336 ; GCN-NEXT:    v_ffbh_i32_e32 v8, v7
31337 ; GCN-NEXT:    v_xor_b32_e32 v9, v6, v7
31338 ; GCN-NEXT:    v_ffbh_i32_e32 v10, v5
31339 ; GCN-NEXT:    v_xor_b32_e32 v11, v4, v5
31340 ; GCN-NEXT:    v_ffbh_i32_e32 v12, v3
31341 ; GCN-NEXT:    v_xor_b32_e32 v13, v2, v3
31342 ; GCN-NEXT:    v_ffbh_i32_e32 v14, v1
31343 ; GCN-NEXT:    v_xor_b32_e32 v15, v0, v1
31344 ; GCN-NEXT:    v_add_i32_e32 v8, vcc, -1, v8
31345 ; GCN-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31346 ; GCN-NEXT:    v_add_i32_e32 v10, vcc, -1, v10
31347 ; GCN-NEXT:    v_ashrrev_i32_e32 v11, 31, v11
31348 ; GCN-NEXT:    v_add_i32_e32 v12, vcc, -1, v12
31349 ; GCN-NEXT:    v_ashrrev_i32_e32 v13, 31, v13
31350 ; GCN-NEXT:    v_add_i32_e32 v14, vcc, -1, v14
31351 ; GCN-NEXT:    v_ashrrev_i32_e32 v15, 31, v15
31352 ; GCN-NEXT:    v_add_i32_e32 v9, vcc, 32, v9
31353 ; GCN-NEXT:    v_add_i32_e32 v11, vcc, 32, v11
31354 ; GCN-NEXT:    v_add_i32_e32 v13, vcc, 32, v13
31355 ; GCN-NEXT:    v_add_i32_e32 v15, vcc, 32, v15
31356 ; GCN-NEXT:    v_min_u32_e32 v8, v8, v9
31357 ; GCN-NEXT:    v_min_u32_e32 v9, v10, v11
31358 ; GCN-NEXT:    v_min_u32_e32 v10, v12, v13
31359 ; GCN-NEXT:    v_min_u32_e32 v11, v14, v15
31360 ; GCN-NEXT:    v_lshl_b64 v[6:7], v[6:7], v8
31361 ; GCN-NEXT:    v_sub_i32_e32 v8, vcc, 32, v8
31362 ; GCN-NEXT:    v_lshl_b64 v[4:5], v[4:5], v9
31363 ; GCN-NEXT:    v_sub_i32_e32 v9, vcc, 32, v9
31364 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v10
31365 ; GCN-NEXT:    v_sub_i32_e32 v10, vcc, 32, v10
31366 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v11
31367 ; GCN-NEXT:    v_sub_i32_e32 v11, vcc, 32, v11
31368 ; GCN-NEXT:    v_min_u32_e32 v6, 1, v6
31369 ; GCN-NEXT:    v_min_u32_e32 v4, 1, v4
31370 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
31371 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
31372 ; GCN-NEXT:    v_or_b32_e32 v6, v7, v6
31373 ; GCN-NEXT:    v_or_b32_e32 v4, v5, v4
31374 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
31375 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
31376 ; GCN-NEXT:    v_cvt_f32_i32_e32 v1, v6
31377 ; GCN-NEXT:    v_cvt_f32_i32_e32 v3, v4
31378 ; GCN-NEXT:    v_cvt_f32_i32_e32 v2, v2
31379 ; GCN-NEXT:    v_cvt_f32_i32_e32 v0, v0
31380 ; GCN-NEXT:    v_ldexp_f32_e32 v4, v1, v8
31381 ; GCN-NEXT:    v_ldexp_f32_e32 v3, v3, v9
31382 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v2, v10
31383 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v11
31384 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
31385 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
31386 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
31387 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
31388 ; GCN-NEXT:    s_setpc_b64 s[30:31]
31390 ; GFX7-LABEL: v_sitofp_v4i64_to_v4bf16:
31391 ; GFX7:       ; %bb.0:
31392 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31393 ; GFX7-NEXT:    v_xor_b32_e32 v9, v6, v7
31394 ; GFX7-NEXT:    v_ffbh_i32_e32 v8, v7
31395 ; GFX7-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31396 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, -1, v8
31397 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 32, v9
31398 ; GFX7-NEXT:    v_min_u32_e32 v8, v8, v9
31399 ; GFX7-NEXT:    v_lshl_b64 v[6:7], v[6:7], v8
31400 ; GFX7-NEXT:    v_xor_b32_e32 v9, v4, v5
31401 ; GFX7-NEXT:    v_min_u32_e32 v6, 1, v6
31402 ; GFX7-NEXT:    v_or_b32_e32 v6, v7, v6
31403 ; GFX7-NEXT:    v_sub_i32_e32 v7, vcc, 32, v8
31404 ; GFX7-NEXT:    v_ffbh_i32_e32 v8, v5
31405 ; GFX7-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31406 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, -1, v8
31407 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 32, v9
31408 ; GFX7-NEXT:    v_min_u32_e32 v8, v8, v9
31409 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v6, v6
31410 ; GFX7-NEXT:    v_lshl_b64 v[4:5], v[4:5], v8
31411 ; GFX7-NEXT:    v_min_u32_e32 v4, 1, v4
31412 ; GFX7-NEXT:    v_or_b32_e32 v4, v5, v4
31413 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v8
31414 ; GFX7-NEXT:    v_xor_b32_e32 v8, v2, v3
31415 ; GFX7-NEXT:    v_ldexp_f32_e32 v6, v6, v7
31416 ; GFX7-NEXT:    v_ffbh_i32_e32 v7, v3
31417 ; GFX7-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31418 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v4, v4
31419 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, -1, v7
31420 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 32, v8
31421 ; GFX7-NEXT:    v_min_u32_e32 v7, v7, v8
31422 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v7
31423 ; GFX7-NEXT:    v_ldexp_f32_e32 v4, v4, v5
31424 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
31425 ; GFX7-NEXT:    v_xor_b32_e32 v5, v0, v1
31426 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
31427 ; GFX7-NEXT:    v_ffbh_i32_e32 v3, v1
31428 ; GFX7-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
31429 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, -1, v3
31430 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, 32, v5
31431 ; GFX7-NEXT:    v_min_u32_e32 v3, v3, v5
31432 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
31433 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v2, v2
31434 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
31435 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
31436 ; GFX7-NEXT:    v_cvt_f32_i32_e32 v0, v0
31437 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v7
31438 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v5
31439 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
31440 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
31441 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
31442 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
31443 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
31444 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v6
31445 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
31447 ; GFX8-LABEL: v_sitofp_v4i64_to_v4bf16:
31448 ; GFX8:       ; %bb.0:
31449 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31450 ; GFX8-NEXT:    v_xor_b32_e32 v9, v4, v5
31451 ; GFX8-NEXT:    v_ffbh_i32_e32 v8, v5
31452 ; GFX8-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31453 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, -1, v8
31454 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 32, v9
31455 ; GFX8-NEXT:    v_min_u32_e32 v8, v8, v9
31456 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
31457 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
31458 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
31459 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
31460 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v4, v4
31461 ; GFX8-NEXT:    v_sub_u32_e32 v5, vcc, 32, v8
31462 ; GFX8-NEXT:    v_ldexp_f32 v8, v4, v5
31463 ; GFX8-NEXT:    v_bfe_u32 v4, v8, 16, 1
31464 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v8
31465 ; GFX8-NEXT:    v_xor_b32_e32 v5, v6, v7
31466 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v4
31467 ; GFX8-NEXT:    v_ffbh_i32_e32 v4, v7
31468 ; GFX8-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
31469 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, -1, v4
31470 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 32, v5
31471 ; GFX8-NEXT:    v_min_u32_e32 v10, v4, v5
31472 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v10, v[6:7]
31473 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v8
31474 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
31475 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
31476 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
31477 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v6, vcc
31478 ; GFX8-NEXT:    v_xor_b32_e32 v9, v0, v1
31479 ; GFX8-NEXT:    v_ffbh_i32_e32 v8, v1
31480 ; GFX8-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31481 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v4, v4
31482 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, -1, v8
31483 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 32, v9
31484 ; GFX8-NEXT:    v_min_u32_e32 v8, v8, v9
31485 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v8, v[0:1]
31486 ; GFX8-NEXT:    v_sub_u32_e32 v6, vcc, 32, v10
31487 ; GFX8-NEXT:    v_ldexp_f32 v4, v4, v6
31488 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
31489 ; GFX8-NEXT:    v_bfe_u32 v6, v4, 16, 1
31490 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
31491 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v4
31492 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
31493 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
31494 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v4
31495 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
31496 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v6, v7, vcc
31497 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v8
31498 ; GFX8-NEXT:    v_ldexp_f32 v6, v0, v1
31499 ; GFX8-NEXT:    v_bfe_u32 v0, v6, 16, 1
31500 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v0, v6
31501 ; GFX8-NEXT:    v_xor_b32_e32 v1, v2, v3
31502 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v0
31503 ; GFX8-NEXT:    v_ffbh_i32_e32 v0, v3
31504 ; GFX8-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
31505 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, -1, v0
31506 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 32, v1
31507 ; GFX8-NEXT:    v_min_u32_e32 v8, v0, v1
31508 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v8, v[2:3]
31509 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v6
31510 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
31511 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
31512 ; GFX8-NEXT:    v_cvt_f32_i32_e32 v0, v0
31513 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
31514 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v2, vcc
31515 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, 32, v8
31516 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v2
31517 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
31518 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
31519 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
31520 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
31521 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31522 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
31523 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
31524 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31525 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
31526 ; GFX8-NEXT:    v_alignbit_b32 v1, v4, v5, 16
31527 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
31529 ; GFX9-LABEL: v_sitofp_v4i64_to_v4bf16:
31530 ; GFX9:       ; %bb.0:
31531 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31532 ; GFX9-NEXT:    v_xor_b32_e32 v9, v4, v5
31533 ; GFX9-NEXT:    v_ffbh_i32_e32 v8, v5
31534 ; GFX9-NEXT:    v_ashrrev_i32_e32 v9, 31, v9
31535 ; GFX9-NEXT:    v_add_u32_e32 v8, -1, v8
31536 ; GFX9-NEXT:    v_add_u32_e32 v9, 32, v9
31537 ; GFX9-NEXT:    v_min_u32_e32 v8, v8, v9
31538 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
31539 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
31540 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
31541 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
31542 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v4, v4
31543 ; GFX9-NEXT:    v_sub_u32_e32 v5, 32, v8
31544 ; GFX9-NEXT:    v_ldexp_f32 v8, v4, v5
31545 ; GFX9-NEXT:    v_bfe_u32 v4, v8, 16, 1
31546 ; GFX9-NEXT:    v_xor_b32_e32 v5, v6, v7
31547 ; GFX9-NEXT:    v_add3_u32 v9, v4, v8, s4
31548 ; GFX9-NEXT:    v_ffbh_i32_e32 v4, v7
31549 ; GFX9-NEXT:    v_ashrrev_i32_e32 v5, 31, v5
31550 ; GFX9-NEXT:    v_add_u32_e32 v4, -1, v4
31551 ; GFX9-NEXT:    v_add_u32_e32 v5, 32, v5
31552 ; GFX9-NEXT:    v_min_u32_e32 v10, v4, v5
31553 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v10, v[6:7]
31554 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v8
31555 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
31556 ; GFX9-NEXT:    v_xor_b32_e32 v8, v0, v1
31557 ; GFX9-NEXT:    v_ffbh_i32_e32 v7, v1
31558 ; GFX9-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31559 ; GFX9-NEXT:    v_add_u32_e32 v7, -1, v7
31560 ; GFX9-NEXT:    v_add_u32_e32 v8, 32, v8
31561 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
31562 ; GFX9-NEXT:    v_min_u32_e32 v7, v7, v8
31563 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
31564 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v7, v[0:1]
31565 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v4, v4
31566 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
31567 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
31568 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v6, vcc
31569 ; GFX9-NEXT:    v_sub_u32_e32 v6, 32, v10
31570 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
31571 ; GFX9-NEXT:    v_ldexp_f32 v4, v4, v6
31572 ; GFX9-NEXT:    v_bfe_u32 v6, v4, 16, 1
31573 ; GFX9-NEXT:    v_add3_u32 v6, v6, v4, s4
31574 ; GFX9-NEXT:    v_or_b32_e32 v8, 0x400000, v4
31575 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
31576 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v7
31577 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v6, v8, vcc
31578 ; GFX9-NEXT:    v_ldexp_f32 v6, v0, v1
31579 ; GFX9-NEXT:    v_bfe_u32 v0, v6, 16, 1
31580 ; GFX9-NEXT:    v_xor_b32_e32 v1, v2, v3
31581 ; GFX9-NEXT:    v_add3_u32 v7, v0, v6, s4
31582 ; GFX9-NEXT:    v_ffbh_i32_e32 v0, v3
31583 ; GFX9-NEXT:    v_ashrrev_i32_e32 v1, 31, v1
31584 ; GFX9-NEXT:    v_add_u32_e32 v0, -1, v0
31585 ; GFX9-NEXT:    v_add_u32_e32 v1, 32, v1
31586 ; GFX9-NEXT:    v_min_u32_e32 v8, v0, v1
31587 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v8, v[2:3]
31588 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v6
31589 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
31590 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
31591 ; GFX9-NEXT:    v_cvt_f32_i32_e32 v0, v0
31592 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
31593 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v7, v2, vcc
31594 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v8
31595 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
31596 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
31597 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
31598 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
31599 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31600 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
31601 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
31602 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
31603 ; GFX9-NEXT:    v_perm_b32 v1, v4, v5, s4
31604 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
31606 ; GFX10-LABEL: v_sitofp_v4i64_to_v4bf16:
31607 ; GFX10:       ; %bb.0:
31608 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31609 ; GFX10-NEXT:    v_xor_b32_e32 v8, v4, v5
31610 ; GFX10-NEXT:    v_ffbh_i32_e32 v9, v5
31611 ; GFX10-NEXT:    v_xor_b32_e32 v11, v6, v7
31612 ; GFX10-NEXT:    v_xor_b32_e32 v13, v0, v1
31613 ; GFX10-NEXT:    v_ffbh_i32_e32 v10, v7
31614 ; GFX10-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31615 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, -1, v9
31616 ; GFX10-NEXT:    v_ffbh_i32_e32 v12, v1
31617 ; GFX10-NEXT:    v_xor_b32_e32 v14, v2, v3
31618 ; GFX10-NEXT:    v_ashrrev_i32_e32 v11, 31, v11
31619 ; GFX10-NEXT:    v_add_nc_u32_e32 v8, 32, v8
31620 ; GFX10-NEXT:    v_add_nc_u32_e32 v10, -1, v10
31621 ; GFX10-NEXT:    v_add_nc_u32_e32 v12, -1, v12
31622 ; GFX10-NEXT:    v_ashrrev_i32_e32 v14, 31, v14
31623 ; GFX10-NEXT:    v_add_nc_u32_e32 v11, 32, v11
31624 ; GFX10-NEXT:    v_min_u32_e32 v8, v9, v8
31625 ; GFX10-NEXT:    v_ashrrev_i32_e32 v9, 31, v13
31626 ; GFX10-NEXT:    v_ffbh_i32_e32 v13, v3
31627 ; GFX10-NEXT:    v_add_nc_u32_e32 v14, 32, v14
31628 ; GFX10-NEXT:    v_min_u32_e32 v10, v10, v11
31629 ; GFX10-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
31630 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, 32, v9
31631 ; GFX10-NEXT:    v_add_nc_u32_e32 v13, -1, v13
31632 ; GFX10-NEXT:    v_lshlrev_b64 v[6:7], v10, v[6:7]
31633 ; GFX10-NEXT:    v_min_u32_e32 v9, v12, v9
31634 ; GFX10-NEXT:    v_min_u32_e32 v11, v13, v14
31635 ; GFX10-NEXT:    v_min_u32_e32 v4, 1, v4
31636 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v9, v[0:1]
31637 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v11, v[2:3]
31638 ; GFX10-NEXT:    v_or_b32_e32 v4, v5, v4
31639 ; GFX10-NEXT:    v_min_u32_e32 v5, 1, v6
31640 ; GFX10-NEXT:    v_sub_nc_u32_e32 v6, 32, v8
31641 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
31642 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
31643 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v4, v4
31644 ; GFX10-NEXT:    v_or_b32_e32 v5, v7, v5
31645 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
31646 ; GFX10-NEXT:    v_or_b32_e32 v1, v3, v2
31647 ; GFX10-NEXT:    v_ldexp_f32 v2, v4, v6
31648 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v3, v5
31649 ; GFX10-NEXT:    v_sub_nc_u32_e32 v4, 32, v10
31650 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v0, v0
31651 ; GFX10-NEXT:    v_sub_nc_u32_e32 v5, 32, v9
31652 ; GFX10-NEXT:    v_cvt_f32_i32_e32 v1, v1
31653 ; GFX10-NEXT:    v_sub_nc_u32_e32 v6, 32, v11
31654 ; GFX10-NEXT:    v_bfe_u32 v7, v2, 16, 1
31655 ; GFX10-NEXT:    v_ldexp_f32 v3, v3, v4
31656 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v5
31657 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
31658 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v6
31659 ; GFX10-NEXT:    v_add3_u32 v4, v7, v2, 0x7fff
31660 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
31661 ; GFX10-NEXT:    v_bfe_u32 v7, v0, 16, 1
31662 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
31663 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
31664 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v3
31665 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
31666 ; GFX10-NEXT:    v_add3_u32 v4, v6, v3, 0x7fff
31667 ; GFX10-NEXT:    v_add3_u32 v5, v7, v0, 0x7fff
31668 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v0
31669 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31670 ; GFX10-NEXT:    v_add3_u32 v7, v8, v1, 0x7fff
31671 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v1
31672 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v6, vcc_lo
31673 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31674 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v7, v8, vcc_lo
31675 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
31676 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
31677 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v4, v9, vcc_lo
31678 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
31679 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
31681 ; GFX11-LABEL: v_sitofp_v4i64_to_v4bf16:
31682 ; GFX11:       ; %bb.0:
31683 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31684 ; GFX11-NEXT:    v_xor_b32_e32 v8, v4, v5
31685 ; GFX11-NEXT:    v_cls_i32_e32 v9, v5
31686 ; GFX11-NEXT:    v_xor_b32_e32 v11, v6, v7
31687 ; GFX11-NEXT:    v_xor_b32_e32 v13, v0, v1
31688 ; GFX11-NEXT:    v_cls_i32_e32 v10, v7
31689 ; GFX11-NEXT:    v_ashrrev_i32_e32 v8, 31, v8
31690 ; GFX11-NEXT:    v_add_nc_u32_e32 v9, -1, v9
31691 ; GFX11-NEXT:    v_cls_i32_e32 v12, v1
31692 ; GFX11-NEXT:    v_xor_b32_e32 v14, v2, v3
31693 ; GFX11-NEXT:    v_ashrrev_i32_e32 v11, 31, v11
31694 ; GFX11-NEXT:    v_add_nc_u32_e32 v8, 32, v8
31695 ; GFX11-NEXT:    v_add_nc_u32_e32 v10, -1, v10
31696 ; GFX11-NEXT:    v_add_nc_u32_e32 v12, -1, v12
31697 ; GFX11-NEXT:    v_ashrrev_i32_e32 v14, 31, v14
31698 ; GFX11-NEXT:    v_add_nc_u32_e32 v11, 32, v11
31699 ; GFX11-NEXT:    v_min_u32_e32 v8, v9, v8
31700 ; GFX11-NEXT:    v_ashrrev_i32_e32 v9, 31, v13
31701 ; GFX11-NEXT:    v_cls_i32_e32 v13, v3
31702 ; GFX11-NEXT:    v_add_nc_u32_e32 v14, 32, v14
31703 ; GFX11-NEXT:    v_min_u32_e32 v10, v10, v11
31704 ; GFX11-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
31705 ; GFX11-NEXT:    v_add_nc_u32_e32 v9, 32, v9
31706 ; GFX11-NEXT:    v_add_nc_u32_e32 v13, -1, v13
31707 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
31708 ; GFX11-NEXT:    v_lshlrev_b64 v[6:7], v10, v[6:7]
31709 ; GFX11-NEXT:    v_min_u32_e32 v9, v12, v9
31710 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
31711 ; GFX11-NEXT:    v_min_u32_e32 v11, v13, v14
31712 ; GFX11-NEXT:    v_min_u32_e32 v4, 1, v4
31713 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v9, v[0:1]
31714 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
31715 ; GFX11-NEXT:    v_lshlrev_b64 v[2:3], v11, v[2:3]
31716 ; GFX11-NEXT:    v_or_b32_e32 v4, v5, v4
31717 ; GFX11-NEXT:    v_min_u32_e32 v5, 1, v6
31718 ; GFX11-NEXT:    v_sub_nc_u32_e32 v6, 32, v8
31719 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
31720 ; GFX11-NEXT:    v_min_u32_e32 v2, 1, v2
31721 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v4, v4
31722 ; GFX11-NEXT:    v_or_b32_e32 v5, v7, v5
31723 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31724 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
31725 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
31726 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
31727 ; GFX11-NEXT:    v_ldexp_f32 v2, v4, v6
31728 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v3, v5
31729 ; GFX11-NEXT:    v_sub_nc_u32_e32 v4, 32, v10
31730 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v0, v0
31731 ; GFX11-NEXT:    v_sub_nc_u32_e32 v5, 32, v9
31732 ; GFX11-NEXT:    v_cvt_f32_i32_e32 v1, v1
31733 ; GFX11-NEXT:    v_sub_nc_u32_e32 v6, 32, v11
31734 ; GFX11-NEXT:    v_bfe_u32 v7, v2, 16, 1
31735 ; GFX11-NEXT:    v_ldexp_f32 v3, v3, v4
31736 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v5
31737 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
31738 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v6
31739 ; GFX11-NEXT:    v_add3_u32 v4, v7, v2, 0x7fff
31740 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
31741 ; GFX11-NEXT:    v_bfe_u32 v7, v0, 16, 1
31742 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
31743 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
31744 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v3
31745 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
31746 ; GFX11-NEXT:    v_add3_u32 v4, v6, v3, 0x7fff
31747 ; GFX11-NEXT:    v_add3_u32 v5, v7, v0, 0x7fff
31748 ; GFX11-NEXT:    v_or_b32_e32 v6, 0x400000, v0
31749 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31750 ; GFX11-NEXT:    v_add3_u32 v7, v8, v1, 0x7fff
31751 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v1
31752 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
31753 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v5, v6, vcc_lo
31754 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31755 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v7, v8, vcc_lo
31756 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
31757 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
31758 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
31759 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v4, v9, vcc_lo
31760 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
31761 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
31762   %op = sitofp <4 x i64> %x to <4 x bfloat>
31763   ret <4 x bfloat> %op
31766 define bfloat @v_uitofp_i16_to_bf16(i16 %x) {
31767 ; GCN-LABEL: v_uitofp_i16_to_bf16:
31768 ; GCN:       ; %bb.0:
31769 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31770 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31771 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
31772 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31773 ; GCN-NEXT:    s_setpc_b64 s[30:31]
31775 ; GFX7-LABEL: v_uitofp_i16_to_bf16:
31776 ; GFX7:       ; %bb.0:
31777 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31778 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31779 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
31780 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31781 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
31783 ; GFX8-LABEL: v_uitofp_i16_to_bf16:
31784 ; GFX8:       ; %bb.0:
31785 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31786 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31787 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
31788 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
31789 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
31790 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
31791 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31792 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
31793 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31794 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
31796 ; GFX9-LABEL: v_uitofp_i16_to_bf16:
31797 ; GFX9:       ; %bb.0:
31798 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31799 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31800 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
31801 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
31802 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
31803 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
31804 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31805 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
31806 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31807 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
31809 ; GFX10-LABEL: v_uitofp_i16_to_bf16:
31810 ; GFX10:       ; %bb.0:
31811 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31812 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31813 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
31814 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
31815 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31816 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
31817 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
31818 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31819 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
31821 ; GFX11-LABEL: v_uitofp_i16_to_bf16:
31822 ; GFX11:       ; %bb.0:
31823 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31824 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31825 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
31826 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
31827 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
31828 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
31829 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31830 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
31831 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
31832 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
31833 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
31834 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31835 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
31836   %op = uitofp i16 %x to bfloat
31837   ret bfloat %op
31840 define <2 x bfloat> @v_uitofp_v2i16_to_v2bf16(<2 x i16> %x) {
31841 ; GCN-LABEL: v_uitofp_v2i16_to_v2bf16:
31842 ; GCN:       ; %bb.0:
31843 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31844 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31845 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff, v1
31846 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
31847 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
31848 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31849 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
31850 ; GCN-NEXT:    s_setpc_b64 s[30:31]
31852 ; GFX7-LABEL: v_uitofp_v2i16_to_v2bf16:
31853 ; GFX7:       ; %bb.0:
31854 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31855 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31856 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v1
31857 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
31858 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
31859 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31860 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
31861 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
31863 ; GFX8-LABEL: v_uitofp_v2i16_to_v2bf16:
31864 ; GFX8:       ; %bb.0:
31865 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31866 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31867 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
31868 ; GFX8-NEXT:    v_bfe_u32 v2, v1, 16, 1
31869 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v1
31870 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
31871 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v1
31872 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
31873 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
31874 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
31875 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
31876 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
31877 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
31878 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31879 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
31880 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31881 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
31882 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
31884 ; GFX9-LABEL: v_uitofp_v2i16_to_v2bf16:
31885 ; GFX9:       ; %bb.0:
31886 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31887 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31888 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
31889 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
31890 ; GFX9-NEXT:    v_bfe_u32 v2, v1, 16, 1
31891 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v1
31892 ; GFX9-NEXT:    v_add3_u32 v2, v2, v1, s4
31893 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
31894 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
31895 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
31896 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
31897 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
31898 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
31899 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
31900 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
31901 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
31902 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
31904 ; GFX10-LABEL: v_uitofp_v2i16_to_v2bf16:
31905 ; GFX10:       ; %bb.0:
31906 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31907 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31908 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
31909 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
31910 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
31911 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v1
31912 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31913 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
31914 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
31915 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
31916 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
31917 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31918 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
31919 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
31920 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
31922 ; GFX11-LABEL: v_uitofp_v2i16_to_v2bf16:
31923 ; GFX11:       ; %bb.0:
31924 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31925 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v0
31926 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
31927 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31928 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
31929 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
31930 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
31931 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
31932 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
31933 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v1
31934 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
31935 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
31936 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
31937 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
31938 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
31939 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
31940 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
31941 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
31942 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
31943 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
31944 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
31945   %op = uitofp <2 x i16> %x to <2 x bfloat>
31946   ret <2 x bfloat> %op
31949 define <3 x bfloat> @v_uitofp_v3i16_to_v3bf16(<3 x i16> %x) {
31950 ; GCN-LABEL: v_uitofp_v3i16_to_v3bf16:
31951 ; GCN:       ; %bb.0:
31952 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31953 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31954 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff, v1
31955 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff, v2
31956 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
31957 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
31958 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
31959 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31960 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
31961 ; GCN-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
31962 ; GCN-NEXT:    s_setpc_b64 s[30:31]
31964 ; GFX7-LABEL: v_uitofp_v3i16_to_v3bf16:
31965 ; GFX7:       ; %bb.0:
31966 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31967 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
31968 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v1
31969 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
31970 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
31971 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
31972 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
31973 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
31974 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
31975 ; GFX7-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
31976 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
31978 ; GFX8-LABEL: v_uitofp_v3i16_to_v3bf16:
31979 ; GFX8:       ; %bb.0:
31980 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
31981 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31982 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
31983 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
31984 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
31985 ; GFX8-NEXT:    v_bfe_u32 v2, v1, 16, 1
31986 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v1
31987 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
31988 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v1
31989 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
31990 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
31991 ; GFX8-NEXT:    v_bfe_u32 v2, v4, 16, 1
31992 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v4
31993 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v2
31994 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v4
31995 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
31996 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
31997 ; GFX8-NEXT:    v_bfe_u32 v3, v0, 16, 1
31998 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v0
31999 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
32000 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32001 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32002 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
32003 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32004 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32005 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v2, 16
32006 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32008 ; GFX9-LABEL: v_uitofp_v3i16_to_v3bf16:
32009 ; GFX9:       ; %bb.0:
32010 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32011 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32012 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32013 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32014 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32015 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
32016 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
32017 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
32018 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32019 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
32020 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
32021 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
32022 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
32023 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32024 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
32025 ; GFX9-NEXT:    v_bfe_u32 v3, v0, 16, 1
32026 ; GFX9-NEXT:    v_add3_u32 v3, v3, v0, s4
32027 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32028 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32029 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
32030 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32031 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
32032 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
32033 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32035 ; GFX10-LABEL: v_uitofp_v3i16_to_v3bf16:
32036 ; GFX10:       ; %bb.0:
32037 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32038 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32039 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32040 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32041 ; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
32042 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
32043 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v2
32044 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32045 ; GFX10-NEXT:    v_bfe_u32 v4, v1, 16, 1
32046 ; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
32047 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
32048 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
32049 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
32050 ; GFX10-NEXT:    v_add3_u32 v4, v4, v1, 0x7fff
32051 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v7, vcc_lo
32052 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32053 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
32054 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32055 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
32056 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc_lo
32057 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
32058 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32059   %op = uitofp <3 x i16> %x to <3 x bfloat>
32060   ret <3 x bfloat> %op
32063 define <4 x bfloat> @v_uitofp_v4i16_to_v4bf16(<4 x i16> %x) {
32064 ; GCN-LABEL: v_uitofp_v4i16_to_v4bf16:
32065 ; GCN:       ; %bb.0:
32066 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32067 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff, v0
32068 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff, v1
32069 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff, v2
32070 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff, v3
32071 ; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v3
32072 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
32073 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
32074 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32075 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32076 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32077 ; GCN-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32078 ; GCN-NEXT:    v_and_b32_e32 v3, 0x7fff0000, v3
32079 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32081 ; GFX7-LABEL: v_uitofp_v4i16_to_v4bf16:
32082 ; GFX7:       ; %bb.0:
32083 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32084 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
32085 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v1
32086 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
32087 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff, v3
32088 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32089 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
32090 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
32091 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v3, v3
32092 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32093 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32094 ; GFX7-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32095 ; GFX7-NEXT:    v_and_b32_e32 v3, 0x7fff0000, v3
32096 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32098 ; GFX8-LABEL: v_uitofp_v4i16_to_v4bf16:
32099 ; GFX8:       ; %bb.0:
32100 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32101 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32102 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32103 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32104 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
32105 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
32106 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
32107 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
32108 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
32109 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32110 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
32111 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
32112 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
32113 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
32114 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
32115 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32116 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
32117 ; GFX8-NEXT:    v_bfe_u32 v3, v5, 16, 1
32118 ; GFX8-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32119 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v5
32120 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
32121 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v5
32122 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
32123 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
32124 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
32125 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
32126 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
32127 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
32128 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32129 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
32130 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32131 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32132 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
32133 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v2, 16
32134 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32136 ; GFX9-LABEL: v_uitofp_v4i16_to_v4bf16:
32137 ; GFX9:       ; %bb.0:
32138 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32139 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32140 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32141 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32142 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
32143 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
32144 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
32145 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32146 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
32147 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32148 ; GFX9-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32149 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
32150 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
32151 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32152 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32153 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
32154 ; GFX9-NEXT:    v_bfe_u32 v3, v4, 16, 1
32155 ; GFX9-NEXT:    v_add3_u32 v3, v3, v4, s4
32156 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v4
32157 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
32158 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
32159 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
32160 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
32161 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
32162 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32163 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
32164 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32165 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
32166 ; GFX9-NEXT:    v_perm_b32 v1, v1, v2, s4
32167 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32169 ; GFX10-LABEL: v_uitofp_v4i16_to_v4bf16:
32170 ; GFX10:       ; %bb.0:
32171 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32172 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32173 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0
32174 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32175 ; GFX10-NEXT:    v_cvt_f32_u32_sdwa v1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1
32176 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
32177 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
32178 ; GFX10-NEXT:    v_bfe_u32 v8, v3, 16, 1
32179 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32180 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v3
32181 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
32182 ; GFX10-NEXT:    v_bfe_u32 v10, v0, 16, 1
32183 ; GFX10-NEXT:    v_add3_u32 v8, v8, v3, 0x7fff
32184 ; GFX10-NEXT:    v_bfe_u32 v6, v1, 16, 1
32185 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v0
32186 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
32187 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
32188 ; GFX10-NEXT:    v_add3_u32 v10, v10, v0, 0x7fff
32189 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v1
32190 ; GFX10-NEXT:    v_add3_u32 v6, v6, v1, 0x7fff
32191 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc_lo
32192 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32193 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v10, v11, vcc_lo
32194 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32195 ; GFX10-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
32196 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc_lo
32197 ; GFX10-NEXT:    v_perm_b32 v1, v1, v2, 0x7060302
32198 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32200 ; GFX11-LABEL: v_uitofp_v4i16_to_v4bf16:
32201 ; GFX11:       ; %bb.0:
32202 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32203 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v1
32204 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32205 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32206 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v2, v2
32207 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
32208 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
32209 ; GFX11-NEXT:    v_bfe_u32 v4, v2, 16, 1
32210 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
32211 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32212 ; GFX11-NEXT:    v_bfe_u32 v6, v1, 16, 1
32213 ; GFX11-NEXT:    v_or_b32_e32 v7, 0x400000, v1
32214 ; GFX11-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
32215 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff, v0
32216 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32217 ; GFX11-NEXT:    v_add3_u32 v6, v6, v1, 0x7fff
32218 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
32219 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
32220 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v3, v3
32221 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
32222 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32223 ; GFX11-NEXT:    v_bfe_u32 v8, v3, 16, 1
32224 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v3
32225 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_3) | instid1(VALU_DEP_4)
32226 ; GFX11-NEXT:    v_bfe_u32 v10, v0, 16, 1
32227 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
32228 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v0
32229 ; GFX11-NEXT:    v_add3_u32 v8, v8, v3, 0x7fff
32230 ; GFX11-NEXT:    v_add3_u32 v10, v10, v0, 0x7fff
32231 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
32232 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc_lo
32233 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32234 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v10, v11, vcc_lo
32235 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32236 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
32237 ; GFX11-NEXT:    v_perm_b32 v0, v0, v3, 0x7060302
32238 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc_lo
32239 ; GFX11-NEXT:    v_perm_b32 v1, v1, v2, 0x7060302
32240 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32241   %op = uitofp <4 x i16> %x to <4 x bfloat>
32242   ret <4 x bfloat> %op
32245 define bfloat @v_uitofp_i32_to_bf16(i32 %x) {
32246 ; GCN-LABEL: v_uitofp_i32_to_bf16:
32247 ; GCN:       ; %bb.0:
32248 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32249 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32250 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32251 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32253 ; GFX7-LABEL: v_uitofp_i32_to_bf16:
32254 ; GFX7:       ; %bb.0:
32255 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32256 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32257 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32258 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32260 ; GFX8-LABEL: v_uitofp_i32_to_bf16:
32261 ; GFX8:       ; %bb.0:
32262 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32263 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32264 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
32265 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
32266 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
32267 ; GFX8-NEXT:    v_or_b32_e32 v1, 0x400000, v0
32268 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32269 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
32270 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32271 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32273 ; GFX9-LABEL: v_uitofp_i32_to_bf16:
32274 ; GFX9:       ; %bb.0:
32275 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32276 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32277 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32278 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
32279 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32280 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
32281 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32282 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
32283 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32284 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32286 ; GFX10-LABEL: v_uitofp_i32_to_bf16:
32287 ; GFX10:       ; %bb.0:
32288 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32289 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32290 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
32291 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32292 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32293 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
32294 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
32295 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32296 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32298 ; GFX11-LABEL: v_uitofp_i32_to_bf16:
32299 ; GFX11:       ; %bb.0:
32300 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32301 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32302 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
32303 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
32304 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32305 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32306 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
32307 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
32308 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
32309 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32310 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32311   %op = uitofp i32 %x to bfloat
32312   ret bfloat %op
32315 define <2 x bfloat> @v_uitofp_v2i32_to_v2bf16(<2 x i32> %x) {
32316 ; GCN-LABEL: v_uitofp_v2i32_to_v2bf16:
32317 ; GCN:       ; %bb.0:
32318 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32319 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
32320 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32321 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32322 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32323 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32325 ; GFX7-LABEL: v_uitofp_v2i32_to_v2bf16:
32326 ; GFX7:       ; %bb.0:
32327 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32328 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32329 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
32330 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32331 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32332 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32334 ; GFX8-LABEL: v_uitofp_v2i32_to_v2bf16:
32335 ; GFX8:       ; %bb.0:
32336 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32337 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32338 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v1, v1
32339 ; GFX8-NEXT:    v_bfe_u32 v3, v0, 16, 1
32340 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v0
32341 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
32342 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32343 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32344 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
32345 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
32346 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
32347 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
32348 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v1
32349 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32350 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
32351 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32352 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
32353 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32355 ; GFX9-LABEL: v_uitofp_v2i32_to_v2bf16:
32356 ; GFX9:       ; %bb.0:
32357 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32358 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32359 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v1, v1
32360 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32361 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
32362 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
32363 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
32364 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32365 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
32366 ; GFX9-NEXT:    v_bfe_u32 v2, v1, 16, 1
32367 ; GFX9-NEXT:    v_add3_u32 v2, v2, v1, s4
32368 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v1
32369 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32370 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
32371 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32372 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
32373 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32375 ; GFX10-LABEL: v_uitofp_v2i32_to_v2bf16:
32376 ; GFX10:       ; %bb.0:
32377 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32378 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32379 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
32380 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
32381 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
32382 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32383 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32384 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32385 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
32386 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
32387 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
32388 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32389 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
32390 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32391 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32393 ; GFX11-LABEL: v_uitofp_v2i32_to_v2bf16:
32394 ; GFX11:       ; %bb.0:
32395 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32396 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32397 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
32398 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32399 ; GFX11-NEXT:    v_bfe_u32 v2, v0, 16, 1
32400 ; GFX11-NEXT:    v_bfe_u32 v3, v1, 16, 1
32401 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32402 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32403 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32404 ; GFX11-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
32405 ; GFX11-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
32406 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
32407 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
32408 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32409 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
32410 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
32411 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32412 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32413   %op = uitofp <2 x i32> %x to <2 x bfloat>
32414   ret <2 x bfloat> %op
32417 define <3 x bfloat> @v_uitofp_v3i32_to_v3bf16(<3 x i32> %x) {
32418 ; GCN-LABEL: v_uitofp_v3i32_to_v3bf16:
32419 ; GCN:       ; %bb.0:
32420 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32421 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
32422 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
32423 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32424 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32425 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32426 ; GCN-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32427 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32429 ; GFX7-LABEL: v_uitofp_v3i32_to_v3bf16:
32430 ; GFX7:       ; %bb.0:
32431 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32432 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32433 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
32434 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
32435 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32436 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32437 ; GFX7-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32438 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32440 ; GFX8-LABEL: v_uitofp_v3i32_to_v3bf16:
32441 ; GFX8:       ; %bb.0:
32442 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32443 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v2, v2
32444 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32445 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v1, v1
32446 ; GFX8-NEXT:    v_bfe_u32 v4, v2, 16, 1
32447 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v2
32448 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
32449 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v2
32450 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32451 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v4, v3, vcc
32452 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
32453 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
32454 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
32455 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
32456 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32457 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
32458 ; GFX8-NEXT:    v_bfe_u32 v4, v1, 16, 1
32459 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v1
32460 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
32461 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v1
32462 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32463 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v3, vcc
32464 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
32465 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32466 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
32467 ; GFX8-NEXT:    v_mov_b32_e32 v1, v2
32468 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32470 ; GFX9-LABEL: v_uitofp_v3i32_to_v3bf16:
32471 ; GFX9:       ; %bb.0:
32472 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32473 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v2, v2
32474 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32475 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32476 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v1, v1
32477 ; GFX9-NEXT:    v_bfe_u32 v3, v2, 16, 1
32478 ; GFX9-NEXT:    v_add3_u32 v3, v3, v2, s4
32479 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v2
32480 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32481 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
32482 ; GFX9-NEXT:    v_bfe_u32 v3, v0, 16, 1
32483 ; GFX9-NEXT:    v_add3_u32 v3, v3, v0, s4
32484 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32485 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32486 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
32487 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
32488 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
32489 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v1
32490 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32491 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
32492 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32493 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
32494 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v2, 16
32495 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32497 ; GFX10-LABEL: v_uitofp_v3i32_to_v3bf16:
32498 ; GFX10:       ; %bb.0:
32499 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32500 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32501 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
32502 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v2, v2
32503 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
32504 ; GFX10-NEXT:    v_bfe_u32 v5, v1, 16, 1
32505 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v0
32506 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32507 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
32508 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
32509 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v1
32510 ; GFX10-NEXT:    v_add3_u32 v5, v5, v1, 0x7fff
32511 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v2
32512 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
32513 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v7, vcc_lo
32514 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32515 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v8, vcc_lo
32516 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32517 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32518 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v6, vcc_lo
32519 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v2, 16
32520 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32521   %op = uitofp <3 x i32> %x to <3 x bfloat>
32522   ret <3 x bfloat> %op
32525 define <4 x bfloat> @v_uitofp_v4i32_to_v4bf16(<4 x i32> %x) {
32526 ; GCN-LABEL: v_uitofp_v4i32_to_v4bf16:
32527 ; GCN:       ; %bb.0:
32528 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32529 ; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v3
32530 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
32531 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v1
32532 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32533 ; GCN-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32534 ; GCN-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32535 ; GCN-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32536 ; GCN-NEXT:    v_and_b32_e32 v3, 0x7fff0000, v3
32537 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32539 ; GFX7-LABEL: v_uitofp_v4i32_to_v4bf16:
32540 ; GFX7:       ; %bb.0:
32541 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32542 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32543 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v1, v1
32544 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
32545 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v3, v3
32546 ; GFX7-NEXT:    v_and_b32_e32 v0, 0x7fff0000, v0
32547 ; GFX7-NEXT:    v_and_b32_e32 v1, 0x7fff0000, v1
32548 ; GFX7-NEXT:    v_and_b32_e32 v2, 0x7fff0000, v2
32549 ; GFX7-NEXT:    v_and_b32_e32 v3, 0x7fff0000, v3
32550 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32552 ; GFX8-LABEL: v_uitofp_v4i32_to_v4bf16:
32553 ; GFX8:       ; %bb.0:
32554 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32555 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v2, v2
32556 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v3, v3
32557 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32558 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
32559 ; GFX8-NEXT:    v_bfe_u32 v5, v2, 16, 1
32560 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v2
32561 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
32562 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
32563 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32564 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v5, v4, vcc
32565 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
32566 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
32567 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
32568 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v3
32569 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
32570 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v4, vcc
32571 ; GFX8-NEXT:    v_bfe_u32 v5, v0, 16, 1
32572 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v1, v1
32573 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v0
32574 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
32575 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32576 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32577 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v5, v4, vcc
32578 ; GFX8-NEXT:    v_bfe_u32 v5, v1, 16, 1
32579 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v1
32580 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
32581 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v1
32582 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32583 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
32584 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
32585 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
32586 ; GFX8-NEXT:    v_alignbit_b32 v0, v1, v0, 16
32587 ; GFX8-NEXT:    v_alignbit_b32 v1, v3, v2, 16
32588 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32590 ; GFX9-LABEL: v_uitofp_v4i32_to_v4bf16:
32591 ; GFX9:       ; %bb.0:
32592 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32593 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v2, v2
32594 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v3, v3
32595 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32596 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32597 ; GFX9-NEXT:    v_bfe_u32 v4, v2, 16, 1
32598 ; GFX9-NEXT:    v_add3_u32 v4, v4, v2, s4
32599 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v2
32600 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
32601 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc
32602 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
32603 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v1, v1
32604 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
32605 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
32606 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
32607 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
32608 ; GFX9-NEXT:    v_bfe_u32 v4, v0, 16, 1
32609 ; GFX9-NEXT:    v_add3_u32 v4, v4, v0, s4
32610 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
32611 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32612 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
32613 ; GFX9-NEXT:    v_bfe_u32 v4, v1, 16, 1
32614 ; GFX9-NEXT:    v_add3_u32 v4, v4, v1, s4
32615 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32616 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
32617 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v5, vcc
32618 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32619 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
32620 ; GFX9-NEXT:    v_perm_b32 v1, v3, v2, s4
32621 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32623 ; GFX10-LABEL: v_uitofp_v4i32_to_v4bf16:
32624 ; GFX10:       ; %bb.0:
32625 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32626 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v2, v2
32627 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32628 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
32629 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v3, v3
32630 ; GFX10-NEXT:    v_bfe_u32 v4, v2, 16, 1
32631 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
32632 ; GFX10-NEXT:    v_bfe_u32 v7, v0, 16, 1
32633 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32634 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
32635 ; GFX10-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
32636 ; GFX10-NEXT:    v_bfe_u32 v9, v1, 16, 1
32637 ; GFX10-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
32638 ; GFX10-NEXT:    v_bfe_u32 v6, v3, 16, 1
32639 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v1
32640 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
32641 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32642 ; GFX10-NEXT:    v_add3_u32 v9, v9, v1, 0x7fff
32643 ; GFX10-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
32644 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v3
32645 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
32646 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32647 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v9, v10, vcc_lo
32648 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
32649 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32650 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v4, vcc_lo
32651 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
32652 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32654 ; GFX11-LABEL: v_uitofp_v4i32_to_v4bf16:
32655 ; GFX11:       ; %bb.0:
32656 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32657 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v2, v2
32658 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32659 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
32660 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v3, v3
32661 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
32662 ; GFX11-NEXT:    v_bfe_u32 v4, v2, 16, 1
32663 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
32664 ; GFX11-NEXT:    v_bfe_u32 v7, v0, 16, 1
32665 ; GFX11-NEXT:    v_bfe_u32 v9, v1, 16, 1
32666 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
32667 ; GFX11-NEXT:    v_add3_u32 v4, v4, v2, 0x7fff
32668 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
32669 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v1
32670 ; GFX11-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
32671 ; GFX11-NEXT:    v_add3_u32 v9, v9, v1, 0x7fff
32672 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc_lo
32673 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32674 ; GFX11-NEXT:    v_bfe_u32 v6, v3, 16, 1
32675 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v3
32676 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
32677 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32678 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_2)
32679 ; GFX11-NEXT:    v_add3_u32 v6, v6, v3, 0x7fff
32680 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v9, v10, vcc_lo
32681 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
32682 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32683 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
32684 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v4, vcc_lo
32685 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
32686 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32687   %op = uitofp <4 x i32> %x to <4 x bfloat>
32688   ret <4 x bfloat> %op
32691 define bfloat @v_uitofp_i64_to_bf16(i64 %x) {
32692 ; GCN-LABEL: v_uitofp_i64_to_bf16:
32693 ; GCN:       ; %bb.0:
32694 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32695 ; GCN-NEXT:    v_ffbh_u32_e32 v2, v1
32696 ; GCN-NEXT:    v_min_u32_e32 v2, 32, v2
32697 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v2
32698 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
32699 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
32700 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32701 ; GCN-NEXT:    v_sub_i32_e32 v1, vcc, 32, v2
32702 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v1
32703 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
32704 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32706 ; GFX7-LABEL: v_uitofp_i64_to_bf16:
32707 ; GFX7:       ; %bb.0:
32708 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32709 ; GFX7-NEXT:    v_ffbh_u32_e32 v2, v1
32710 ; GFX7-NEXT:    v_min_u32_e32 v2, 32, v2
32711 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v2
32712 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
32713 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
32714 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32715 ; GFX7-NEXT:    v_sub_i32_e32 v1, vcc, 32, v2
32716 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v1
32717 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
32718 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32720 ; GFX8-LABEL: v_uitofp_i64_to_bf16:
32721 ; GFX8:       ; %bb.0:
32722 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32723 ; GFX8-NEXT:    v_ffbh_u32_e32 v2, v1
32724 ; GFX8-NEXT:    v_min_u32_e32 v2, 32, v2
32725 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
32726 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
32727 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
32728 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32729 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v2
32730 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v1
32731 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
32732 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
32733 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
32734 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32735 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32736 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
32737 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32738 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32740 ; GFX9-LABEL: v_uitofp_i64_to_bf16:
32741 ; GFX9:       ; %bb.0:
32742 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32743 ; GFX9-NEXT:    v_ffbh_u32_e32 v2, v1
32744 ; GFX9-NEXT:    v_min_u32_e32 v2, 32, v2
32745 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
32746 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32747 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
32748 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
32749 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32750 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v2
32751 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v1
32752 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
32753 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32754 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
32755 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32756 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
32757 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32758 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32760 ; GFX10-LABEL: v_uitofp_i64_to_bf16:
32761 ; GFX10:       ; %bb.0:
32762 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32763 ; GFX10-NEXT:    v_ffbh_u32_e32 v2, v1
32764 ; GFX10-NEXT:    v_min_u32_e32 v2, 32, v2
32765 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
32766 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
32767 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
32768 ; GFX10-NEXT:    v_sub_nc_u32_e32 v1, 32, v2
32769 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32770 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v1
32771 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
32772 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32773 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32774 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
32775 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
32776 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32777 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32779 ; GFX11-LABEL: v_uitofp_i64_to_bf16:
32780 ; GFX11:       ; %bb.0:
32781 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32782 ; GFX11-NEXT:    v_clz_i32_u32_e32 v2, v1
32783 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
32784 ; GFX11-NEXT:    v_min_u32_e32 v2, 32, v2
32785 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v2, v[0:1]
32786 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
32787 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
32788 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
32789 ; GFX11-NEXT:    v_sub_nc_u32_e32 v1, 32, v2
32790 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
32791 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32792 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v1
32793 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
32794 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
32795 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
32796 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32797 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
32798 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
32799 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
32800 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32801 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32802   %op = uitofp i64 %x to bfloat
32803   ret bfloat %op
32806 define <2 x bfloat> @v_uitofp_v2i64_to_v2bf16(<2 x i64> %x) {
32807 ; GCN-LABEL: v_uitofp_v2i64_to_v2bf16:
32808 ; GCN:       ; %bb.0:
32809 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32810 ; GCN-NEXT:    v_ffbh_u32_e32 v4, v3
32811 ; GCN-NEXT:    v_ffbh_u32_e32 v5, v1
32812 ; GCN-NEXT:    v_min_u32_e32 v4, 32, v4
32813 ; GCN-NEXT:    v_min_u32_e32 v5, 32, v5
32814 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v4
32815 ; GCN-NEXT:    v_sub_i32_e32 v4, vcc, 32, v4
32816 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v5
32817 ; GCN-NEXT:    v_sub_i32_e32 v5, vcc, 32, v5
32818 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
32819 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
32820 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
32821 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
32822 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v2
32823 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
32824 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v1, v4
32825 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v5
32826 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
32827 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
32828 ; GCN-NEXT:    s_setpc_b64 s[30:31]
32830 ; GFX7-LABEL: v_uitofp_v2i64_to_v2bf16:
32831 ; GFX7:       ; %bb.0:
32832 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32833 ; GFX7-NEXT:    v_ffbh_u32_e32 v4, v3
32834 ; GFX7-NEXT:    v_min_u32_e32 v4, 32, v4
32835 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v4
32836 ; GFX7-NEXT:    v_sub_i32_e32 v4, vcc, 32, v4
32837 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
32838 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
32839 ; GFX7-NEXT:    v_ffbh_u32_e32 v3, v1
32840 ; GFX7-NEXT:    v_min_u32_e32 v3, 32, v3
32841 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
32842 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
32843 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
32844 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
32845 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
32846 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v4
32847 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
32848 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
32849 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
32850 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
32851 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
32853 ; GFX8-LABEL: v_uitofp_v2i64_to_v2bf16:
32854 ; GFX8:       ; %bb.0:
32855 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32856 ; GFX8-NEXT:    v_ffbh_u32_e32 v4, v1
32857 ; GFX8-NEXT:    v_min_u32_e32 v4, 32, v4
32858 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
32859 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
32860 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
32861 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32862 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v4
32863 ; GFX8-NEXT:    v_ldexp_f32 v4, v0, v1
32864 ; GFX8-NEXT:    v_bfe_u32 v0, v4, 16, 1
32865 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v0, v4
32866 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v0
32867 ; GFX8-NEXT:    v_ffbh_u32_e32 v0, v3
32868 ; GFX8-NEXT:    v_min_u32_e32 v6, 32, v0
32869 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v6, v[2:3]
32870 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v4
32871 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
32872 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
32873 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
32874 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
32875 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
32876 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, 32, v6
32877 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v2
32878 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
32879 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
32880 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
32881 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
32882 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32883 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
32884 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
32885 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
32886 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
32888 ; GFX9-LABEL: v_uitofp_v2i64_to_v2bf16:
32889 ; GFX9:       ; %bb.0:
32890 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32891 ; GFX9-NEXT:    v_ffbh_u32_e32 v4, v1
32892 ; GFX9-NEXT:    v_min_u32_e32 v4, 32, v4
32893 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
32894 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
32895 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
32896 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
32897 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32898 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v4
32899 ; GFX9-NEXT:    v_ldexp_f32 v4, v0, v1
32900 ; GFX9-NEXT:    v_bfe_u32 v0, v4, 16, 1
32901 ; GFX9-NEXT:    v_add3_u32 v5, v0, v4, s4
32902 ; GFX9-NEXT:    v_ffbh_u32_e32 v0, v3
32903 ; GFX9-NEXT:    v_min_u32_e32 v6, 32, v0
32904 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v6, v[2:3]
32905 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v4
32906 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
32907 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
32908 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
32909 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
32910 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
32911 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v6
32912 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
32913 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
32914 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
32915 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
32916 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
32917 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
32918 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
32919 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
32920 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
32922 ; GFX10-LABEL: v_uitofp_v2i64_to_v2bf16:
32923 ; GFX10:       ; %bb.0:
32924 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32925 ; GFX10-NEXT:    v_ffbh_u32_e32 v4, v1
32926 ; GFX10-NEXT:    v_ffbh_u32_e32 v5, v3
32927 ; GFX10-NEXT:    v_min_u32_e32 v4, 32, v4
32928 ; GFX10-NEXT:    v_min_u32_e32 v5, 32, v5
32929 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
32930 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
32931 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
32932 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
32933 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
32934 ; GFX10-NEXT:    v_or_b32_e32 v1, v3, v2
32935 ; GFX10-NEXT:    v_sub_nc_u32_e32 v2, 32, v4
32936 ; GFX10-NEXT:    v_sub_nc_u32_e32 v3, 32, v5
32937 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
32938 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
32939 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v2
32940 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v3
32941 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
32942 ; GFX10-NEXT:    v_bfe_u32 v3, v1, 16, 1
32943 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32944 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32945 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32946 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
32947 ; GFX10-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
32948 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
32949 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32950 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
32951 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32952 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
32954 ; GFX11-LABEL: v_uitofp_v2i64_to_v2bf16:
32955 ; GFX11:       ; %bb.0:
32956 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32957 ; GFX11-NEXT:    v_clz_i32_u32_e32 v4, v1
32958 ; GFX11-NEXT:    v_clz_i32_u32_e32 v5, v3
32959 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32960 ; GFX11-NEXT:    v_min_u32_e32 v4, 32, v4
32961 ; GFX11-NEXT:    v_min_u32_e32 v5, 32, v5
32962 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32963 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v4, v[0:1]
32964 ; GFX11-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
32965 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32966 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
32967 ; GFX11-NEXT:    v_min_u32_e32 v2, 1, v2
32968 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32969 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
32970 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
32971 ; GFX11-NEXT:    v_sub_nc_u32_e32 v2, 32, v4
32972 ; GFX11-NEXT:    v_sub_nc_u32_e32 v3, 32, v5
32973 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
32974 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
32975 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
32976 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32977 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v2
32978 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v3
32979 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
32980 ; GFX11-NEXT:    v_bfe_u32 v2, v0, 16, 1
32981 ; GFX11-NEXT:    v_bfe_u32 v3, v1, 16, 1
32982 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v0
32983 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
32984 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v1
32985 ; GFX11-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
32986 ; GFX11-NEXT:    v_add3_u32 v3, v3, v1, 0x7fff
32987 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
32988 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc_lo
32989 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
32990 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc_lo
32991 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
32992 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
32993 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
32994   %op = uitofp <2 x i64> %x to <2 x bfloat>
32995   ret <2 x bfloat> %op
32998 define <3 x bfloat> @v_uitofp_v3i64_to_v3bf16(<3 x i64> %x) {
32999 ; GCN-LABEL: v_uitofp_v3i64_to_v3bf16:
33000 ; GCN:       ; %bb.0:
33001 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33002 ; GCN-NEXT:    v_ffbh_u32_e32 v6, v5
33003 ; GCN-NEXT:    v_ffbh_u32_e32 v7, v3
33004 ; GCN-NEXT:    v_ffbh_u32_e32 v8, v1
33005 ; GCN-NEXT:    v_min_u32_e32 v6, 32, v6
33006 ; GCN-NEXT:    v_min_u32_e32 v7, 32, v7
33007 ; GCN-NEXT:    v_min_u32_e32 v8, 32, v8
33008 ; GCN-NEXT:    v_lshl_b64 v[4:5], v[4:5], v6
33009 ; GCN-NEXT:    v_sub_i32_e32 v6, vcc, 32, v6
33010 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v7
33011 ; GCN-NEXT:    v_sub_i32_e32 v7, vcc, 32, v7
33012 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v8
33013 ; GCN-NEXT:    v_sub_i32_e32 v8, vcc, 32, v8
33014 ; GCN-NEXT:    v_min_u32_e32 v4, 1, v4
33015 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
33016 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
33017 ; GCN-NEXT:    v_or_b32_e32 v4, v5, v4
33018 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
33019 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
33020 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v4
33021 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
33022 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
33023 ; GCN-NEXT:    v_ldexp_f32_e32 v3, v1, v6
33024 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v2, v7
33025 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v8
33026 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33027 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33028 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
33029 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33031 ; GFX7-LABEL: v_uitofp_v3i64_to_v3bf16:
33032 ; GFX7:       ; %bb.0:
33033 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33034 ; GFX7-NEXT:    v_ffbh_u32_e32 v6, v5
33035 ; GFX7-NEXT:    v_min_u32_e32 v6, 32, v6
33036 ; GFX7-NEXT:    v_lshl_b64 v[4:5], v[4:5], v6
33037 ; GFX7-NEXT:    v_min_u32_e32 v4, 1, v4
33038 ; GFX7-NEXT:    v_or_b32_e32 v4, v5, v4
33039 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v6
33040 ; GFX7-NEXT:    v_ffbh_u32_e32 v6, v3
33041 ; GFX7-NEXT:    v_min_u32_e32 v6, 32, v6
33042 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v6
33043 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v4, v4
33044 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
33045 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
33046 ; GFX7-NEXT:    v_ffbh_u32_e32 v3, v1
33047 ; GFX7-NEXT:    v_min_u32_e32 v3, 32, v3
33048 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
33049 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
33050 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
33051 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
33052 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
33053 ; GFX7-NEXT:    v_ldexp_f32_e32 v4, v4, v5
33054 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v6
33055 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v5
33056 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
33057 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
33058 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33059 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33060 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
33061 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33063 ; GFX8-LABEL: v_uitofp_v3i64_to_v3bf16:
33064 ; GFX8:       ; %bb.0:
33065 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33066 ; GFX8-NEXT:    v_ffbh_u32_e32 v6, v5
33067 ; GFX8-NEXT:    v_min_u32_e32 v6, 32, v6
33068 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v6, v[4:5]
33069 ; GFX8-NEXT:    v_ffbh_u32_e32 v7, v1
33070 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
33071 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
33072 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v4, v4
33073 ; GFX8-NEXT:    v_sub_u32_e32 v5, vcc, 32, v6
33074 ; GFX8-NEXT:    v_min_u32_e32 v7, 32, v7
33075 ; GFX8-NEXT:    v_ldexp_f32 v4, v4, v5
33076 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
33077 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v7, v[0:1]
33078 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
33079 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
33080 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
33081 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
33082 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v4
33083 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
33084 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
33085 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
33086 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
33087 ; GFX8-NEXT:    v_ffbh_u32_e32 v5, v3
33088 ; GFX8-NEXT:    v_min_u32_e32 v5, 32, v5
33089 ; GFX8-NEXT:    v_lshlrev_b64 v[2:3], v5, v[2:3]
33090 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v4
33091 ; GFX8-NEXT:    v_sub_u32_e32 v4, vcc, 32, v7
33092 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v4
33093 ; GFX8-NEXT:    v_min_u32_e32 v2, 1, v2
33094 ; GFX8-NEXT:    v_bfe_u32 v4, v0, 16, 1
33095 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
33096 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v0
33097 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v2, v2
33098 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
33099 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v0
33100 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
33101 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v6, vcc
33102 ; GFX8-NEXT:    v_sub_u32_e32 v3, vcc, 32, v5
33103 ; GFX8-NEXT:    v_ldexp_f32 v2, v2, v3
33104 ; GFX8-NEXT:    v_bfe_u32 v3, v2, 16, 1
33105 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v2
33106 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
33107 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v2
33108 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v2, v2
33109 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
33110 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33111 ; GFX8-NEXT:    v_alignbit_b32 v0, v2, v0, 16
33112 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33114 ; GFX9-LABEL: v_uitofp_v3i64_to_v3bf16:
33115 ; GFX9:       ; %bb.0:
33116 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33117 ; GFX9-NEXT:    v_ffbh_u32_e32 v6, v5
33118 ; GFX9-NEXT:    v_min_u32_e32 v6, 32, v6
33119 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v6, v[4:5]
33120 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
33121 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
33122 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
33123 ; GFX9-NEXT:    v_sub_u32_e32 v5, 32, v6
33124 ; GFX9-NEXT:    v_ffbh_u32_e32 v6, v1
33125 ; GFX9-NEXT:    v_min_u32_e32 v6, 32, v6
33126 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v6, v[0:1]
33127 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v4, v4
33128 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
33129 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
33130 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
33131 ; GFX9-NEXT:    v_ldexp_f32 v4, v4, v5
33132 ; GFX9-NEXT:    v_bfe_u32 v5, v4, 16, 1
33133 ; GFX9-NEXT:    v_add3_u32 v5, v5, v4, s4
33134 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v4
33135 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
33136 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v6
33137 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v5, v7, vcc
33138 ; GFX9-NEXT:    v_ldexp_f32 v5, v0, v1
33139 ; GFX9-NEXT:    v_bfe_u32 v0, v5, 16, 1
33140 ; GFX9-NEXT:    v_add3_u32 v6, v0, v5, s4
33141 ; GFX9-NEXT:    v_ffbh_u32_e32 v0, v3
33142 ; GFX9-NEXT:    v_min_u32_e32 v7, 32, v0
33143 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v7, v[2:3]
33144 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v5
33145 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
33146 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
33147 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
33148 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
33149 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v6, v2, vcc
33150 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v7
33151 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
33152 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
33153 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
33154 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
33155 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
33156 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
33157 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
33158 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
33159 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v4, 16
33160 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33162 ; GFX10-LABEL: v_uitofp_v3i64_to_v3bf16:
33163 ; GFX10:       ; %bb.0:
33164 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33165 ; GFX10-NEXT:    v_ffbh_u32_e32 v6, v1
33166 ; GFX10-NEXT:    v_ffbh_u32_e32 v8, v3
33167 ; GFX10-NEXT:    v_ffbh_u32_e32 v7, v5
33168 ; GFX10-NEXT:    v_min_u32_e32 v6, 32, v6
33169 ; GFX10-NEXT:    v_min_u32_e32 v8, 32, v8
33170 ; GFX10-NEXT:    v_min_u32_e32 v7, 32, v7
33171 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v6, v[0:1]
33172 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v8, v[2:3]
33173 ; GFX10-NEXT:    v_lshlrev_b64 v[4:5], v7, v[4:5]
33174 ; GFX10-NEXT:    v_sub_nc_u32_e32 v7, 32, v7
33175 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
33176 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
33177 ; GFX10-NEXT:    v_min_u32_e32 v4, 1, v4
33178 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
33179 ; GFX10-NEXT:    v_or_b32_e32 v2, v3, v2
33180 ; GFX10-NEXT:    v_sub_nc_u32_e32 v3, 32, v6
33181 ; GFX10-NEXT:    v_or_b32_e32 v1, v5, v4
33182 ; GFX10-NEXT:    v_sub_nc_u32_e32 v4, 32, v8
33183 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
33184 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v2, v2
33185 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
33186 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v3
33187 ; GFX10-NEXT:    v_ldexp_f32 v2, v2, v4
33188 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v7
33189 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
33190 ; GFX10-NEXT:    v_bfe_u32 v5, v2, 16, 1
33191 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v0
33192 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
33193 ; GFX10-NEXT:    v_bfe_u32 v4, v1, 16, 1
33194 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
33195 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v2
33196 ; GFX10-NEXT:    v_add3_u32 v5, v5, v2, 0x7fff
33197 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
33198 ; GFX10-NEXT:    v_add3_u32 v4, v4, v1, 0x7fff
33199 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v7, vcc_lo
33200 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
33201 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v5, v8, vcc_lo
33202 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
33203 ; GFX10-NEXT:    v_perm_b32 v0, v2, v0, 0x7060302
33204 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc_lo
33205 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
33206 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33207   %op = uitofp <3 x i64> %x to <3 x bfloat>
33208   ret <3 x bfloat> %op
33211 define <4 x bfloat> @v_uitofp_v4i64_to_v4bf16(<4 x i64> %x) {
33212 ; GCN-LABEL: v_uitofp_v4i64_to_v4bf16:
33213 ; GCN:       ; %bb.0:
33214 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33215 ; GCN-NEXT:    v_ffbh_u32_e32 v8, v7
33216 ; GCN-NEXT:    v_ffbh_u32_e32 v9, v5
33217 ; GCN-NEXT:    v_ffbh_u32_e32 v10, v3
33218 ; GCN-NEXT:    v_ffbh_u32_e32 v11, v1
33219 ; GCN-NEXT:    v_min_u32_e32 v8, 32, v8
33220 ; GCN-NEXT:    v_min_u32_e32 v9, 32, v9
33221 ; GCN-NEXT:    v_min_u32_e32 v10, 32, v10
33222 ; GCN-NEXT:    v_min_u32_e32 v11, 32, v11
33223 ; GCN-NEXT:    v_lshl_b64 v[6:7], v[6:7], v8
33224 ; GCN-NEXT:    v_sub_i32_e32 v8, vcc, 32, v8
33225 ; GCN-NEXT:    v_lshl_b64 v[4:5], v[4:5], v9
33226 ; GCN-NEXT:    v_sub_i32_e32 v9, vcc, 32, v9
33227 ; GCN-NEXT:    v_lshl_b64 v[2:3], v[2:3], v10
33228 ; GCN-NEXT:    v_sub_i32_e32 v10, vcc, 32, v10
33229 ; GCN-NEXT:    v_lshl_b64 v[0:1], v[0:1], v11
33230 ; GCN-NEXT:    v_sub_i32_e32 v11, vcc, 32, v11
33231 ; GCN-NEXT:    v_min_u32_e32 v6, 1, v6
33232 ; GCN-NEXT:    v_min_u32_e32 v4, 1, v4
33233 ; GCN-NEXT:    v_min_u32_e32 v2, 1, v2
33234 ; GCN-NEXT:    v_min_u32_e32 v0, 1, v0
33235 ; GCN-NEXT:    v_or_b32_e32 v6, v7, v6
33236 ; GCN-NEXT:    v_or_b32_e32 v4, v5, v4
33237 ; GCN-NEXT:    v_or_b32_e32 v2, v3, v2
33238 ; GCN-NEXT:    v_or_b32_e32 v0, v1, v0
33239 ; GCN-NEXT:    v_cvt_f32_u32_e32 v1, v6
33240 ; GCN-NEXT:    v_cvt_f32_u32_e32 v3, v4
33241 ; GCN-NEXT:    v_cvt_f32_u32_e32 v2, v2
33242 ; GCN-NEXT:    v_cvt_f32_u32_e32 v0, v0
33243 ; GCN-NEXT:    v_ldexp_f32_e32 v4, v1, v8
33244 ; GCN-NEXT:    v_ldexp_f32_e32 v3, v3, v9
33245 ; GCN-NEXT:    v_ldexp_f32_e32 v1, v2, v10
33246 ; GCN-NEXT:    v_ldexp_f32_e32 v0, v0, v11
33247 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33248 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33249 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
33250 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
33251 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33253 ; GFX7-LABEL: v_uitofp_v4i64_to_v4bf16:
33254 ; GFX7:       ; %bb.0:
33255 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33256 ; GFX7-NEXT:    v_ffbh_u32_e32 v8, v7
33257 ; GFX7-NEXT:    v_min_u32_e32 v8, 32, v8
33258 ; GFX7-NEXT:    v_lshl_b64 v[6:7], v[6:7], v8
33259 ; GFX7-NEXT:    v_min_u32_e32 v6, 1, v6
33260 ; GFX7-NEXT:    v_or_b32_e32 v6, v7, v6
33261 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v6, v6
33262 ; GFX7-NEXT:    v_sub_i32_e32 v7, vcc, 32, v8
33263 ; GFX7-NEXT:    v_ffbh_u32_e32 v8, v5
33264 ; GFX7-NEXT:    v_ldexp_f32_e32 v6, v6, v7
33265 ; GFX7-NEXT:    v_ffbh_u32_e32 v7, v3
33266 ; GFX7-NEXT:    v_min_u32_e32 v7, 32, v7
33267 ; GFX7-NEXT:    v_lshl_b64 v[2:3], v[2:3], v7
33268 ; GFX7-NEXT:    v_min_u32_e32 v8, 32, v8
33269 ; GFX7-NEXT:    v_min_u32_e32 v2, 1, v2
33270 ; GFX7-NEXT:    v_lshl_b64 v[4:5], v[4:5], v8
33271 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
33272 ; GFX7-NEXT:    v_ffbh_u32_e32 v3, v1
33273 ; GFX7-NEXT:    v_min_u32_e32 v3, 32, v3
33274 ; GFX7-NEXT:    v_min_u32_e32 v4, 1, v4
33275 ; GFX7-NEXT:    v_lshl_b64 v[0:1], v[0:1], v3
33276 ; GFX7-NEXT:    v_or_b32_e32 v4, v5, v4
33277 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v4, v4
33278 ; GFX7-NEXT:    v_min_u32_e32 v0, 1, v0
33279 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v2, v2
33280 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
33281 ; GFX7-NEXT:    v_cvt_f32_u32_e32 v0, v0
33282 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v8
33283 ; GFX7-NEXT:    v_ldexp_f32_e32 v4, v4, v5
33284 ; GFX7-NEXT:    v_sub_i32_e32 v5, vcc, 32, v7
33285 ; GFX7-NEXT:    v_ldexp_f32_e32 v1, v2, v5
33286 ; GFX7-NEXT:    v_sub_i32_e32 v2, vcc, 32, v3
33287 ; GFX7-NEXT:    v_ldexp_f32_e32 v0, v0, v2
33288 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33289 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33290 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
33291 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v6
33292 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33294 ; GFX8-LABEL: v_uitofp_v4i64_to_v4bf16:
33295 ; GFX8:       ; %bb.0:
33296 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33297 ; GFX8-NEXT:    v_ffbh_u32_e32 v8, v5
33298 ; GFX8-NEXT:    v_min_u32_e32 v8, 32, v8
33299 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
33300 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
33301 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
33302 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
33303 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v4, v4
33304 ; GFX8-NEXT:    v_sub_u32_e32 v5, vcc, 32, v8
33305 ; GFX8-NEXT:    v_ldexp_f32 v8, v4, v5
33306 ; GFX8-NEXT:    v_bfe_u32 v4, v8, 16, 1
33307 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v8
33308 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, s4, v4
33309 ; GFX8-NEXT:    v_ffbh_u32_e32 v4, v7
33310 ; GFX8-NEXT:    v_min_u32_e32 v10, 32, v4
33311 ; GFX8-NEXT:    v_lshlrev_b64 v[4:5], v10, v[6:7]
33312 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v8
33313 ; GFX8-NEXT:    v_min_u32_e32 v4, 1, v4
33314 ; GFX8-NEXT:    v_or_b32_e32 v4, v5, v4
33315 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v4, v4
33316 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
33317 ; GFX8-NEXT:    v_ffbh_u32_e32 v8, v1
33318 ; GFX8-NEXT:    v_min_u32_e32 v8, 32, v8
33319 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v8, v[0:1]
33320 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v6, vcc
33321 ; GFX8-NEXT:    v_sub_u32_e32 v6, vcc, 32, v10
33322 ; GFX8-NEXT:    v_ldexp_f32 v4, v4, v6
33323 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
33324 ; GFX8-NEXT:    v_bfe_u32 v6, v4, 16, 1
33325 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
33326 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v4
33327 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
33328 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, s4, v6
33329 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v4
33330 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
33331 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v6, v7, vcc
33332 ; GFX8-NEXT:    v_sub_u32_e32 v1, vcc, 32, v8
33333 ; GFX8-NEXT:    v_ldexp_f32 v6, v0, v1
33334 ; GFX8-NEXT:    v_bfe_u32 v0, v6, 16, 1
33335 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v0, v6
33336 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v0
33337 ; GFX8-NEXT:    v_ffbh_u32_e32 v0, v3
33338 ; GFX8-NEXT:    v_min_u32_e32 v8, 32, v0
33339 ; GFX8-NEXT:    v_lshlrev_b64 v[0:1], v8, v[2:3]
33340 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v6
33341 ; GFX8-NEXT:    v_min_u32_e32 v0, 1, v0
33342 ; GFX8-NEXT:    v_or_b32_e32 v0, v1, v0
33343 ; GFX8-NEXT:    v_cvt_f32_u32_e32 v0, v0
33344 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
33345 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v2, vcc
33346 ; GFX8-NEXT:    v_sub_u32_e32 v2, vcc, 32, v8
33347 ; GFX8-NEXT:    v_ldexp_f32 v0, v0, v2
33348 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
33349 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
33350 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
33351 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
33352 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
33353 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
33354 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
33355 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
33356 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v1, 16
33357 ; GFX8-NEXT:    v_alignbit_b32 v1, v4, v5, 16
33358 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33360 ; GFX9-LABEL: v_uitofp_v4i64_to_v4bf16:
33361 ; GFX9:       ; %bb.0:
33362 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33363 ; GFX9-NEXT:    v_ffbh_u32_e32 v8, v5
33364 ; GFX9-NEXT:    v_min_u32_e32 v8, 32, v8
33365 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
33366 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
33367 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
33368 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
33369 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v4, v4
33370 ; GFX9-NEXT:    v_sub_u32_e32 v5, 32, v8
33371 ; GFX9-NEXT:    v_ldexp_f32 v8, v4, v5
33372 ; GFX9-NEXT:    v_bfe_u32 v4, v8, 16, 1
33373 ; GFX9-NEXT:    v_add3_u32 v9, v4, v8, s4
33374 ; GFX9-NEXT:    v_ffbh_u32_e32 v4, v7
33375 ; GFX9-NEXT:    v_min_u32_e32 v10, 32, v4
33376 ; GFX9-NEXT:    v_lshlrev_b64 v[4:5], v10, v[6:7]
33377 ; GFX9-NEXT:    v_ffbh_u32_e32 v7, v1
33378 ; GFX9-NEXT:    v_min_u32_e32 v4, 1, v4
33379 ; GFX9-NEXT:    v_min_u32_e32 v7, 32, v7
33380 ; GFX9-NEXT:    v_or_b32_e32 v4, v5, v4
33381 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v7, v[0:1]
33382 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v4, v4
33383 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
33384 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v8
33385 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v8, v8
33386 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
33387 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v6, vcc
33388 ; GFX9-NEXT:    v_sub_u32_e32 v6, 32, v10
33389 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
33390 ; GFX9-NEXT:    v_ldexp_f32 v4, v4, v6
33391 ; GFX9-NEXT:    v_bfe_u32 v6, v4, 16, 1
33392 ; GFX9-NEXT:    v_add3_u32 v6, v6, v4, s4
33393 ; GFX9-NEXT:    v_or_b32_e32 v8, 0x400000, v4
33394 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
33395 ; GFX9-NEXT:    v_sub_u32_e32 v1, 32, v7
33396 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v6, v8, vcc
33397 ; GFX9-NEXT:    v_ldexp_f32 v6, v0, v1
33398 ; GFX9-NEXT:    v_bfe_u32 v0, v6, 16, 1
33399 ; GFX9-NEXT:    v_add3_u32 v7, v0, v6, s4
33400 ; GFX9-NEXT:    v_ffbh_u32_e32 v0, v3
33401 ; GFX9-NEXT:    v_min_u32_e32 v8, 32, v0
33402 ; GFX9-NEXT:    v_lshlrev_b64 v[0:1], v8, v[2:3]
33403 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v6
33404 ; GFX9-NEXT:    v_min_u32_e32 v0, 1, v0
33405 ; GFX9-NEXT:    v_or_b32_e32 v0, v1, v0
33406 ; GFX9-NEXT:    v_cvt_f32_u32_e32 v0, v0
33407 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
33408 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v7, v2, vcc
33409 ; GFX9-NEXT:    v_sub_u32_e32 v2, 32, v8
33410 ; GFX9-NEXT:    v_ldexp_f32 v0, v0, v2
33411 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
33412 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
33413 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
33414 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
33415 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
33416 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
33417 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s4
33418 ; GFX9-NEXT:    v_perm_b32 v1, v4, v5, s4
33419 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33421 ; GFX10-LABEL: v_uitofp_v4i64_to_v4bf16:
33422 ; GFX10:       ; %bb.0:
33423 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33424 ; GFX10-NEXT:    v_ffbh_u32_e32 v8, v5
33425 ; GFX10-NEXT:    v_ffbh_u32_e32 v10, v1
33426 ; GFX10-NEXT:    v_ffbh_u32_e32 v11, v3
33427 ; GFX10-NEXT:    v_ffbh_u32_e32 v9, v7
33428 ; GFX10-NEXT:    v_min_u32_e32 v8, 32, v8
33429 ; GFX10-NEXT:    v_min_u32_e32 v10, 32, v10
33430 ; GFX10-NEXT:    v_min_u32_e32 v11, 32, v11
33431 ; GFX10-NEXT:    v_min_u32_e32 v9, 32, v9
33432 ; GFX10-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
33433 ; GFX10-NEXT:    v_lshlrev_b64 v[0:1], v10, v[0:1]
33434 ; GFX10-NEXT:    v_lshlrev_b64 v[2:3], v11, v[2:3]
33435 ; GFX10-NEXT:    v_lshlrev_b64 v[6:7], v9, v[6:7]
33436 ; GFX10-NEXT:    v_sub_nc_u32_e32 v8, 32, v8
33437 ; GFX10-NEXT:    v_sub_nc_u32_e32 v9, 32, v9
33438 ; GFX10-NEXT:    v_min_u32_e32 v4, 1, v4
33439 ; GFX10-NEXT:    v_min_u32_e32 v0, 1, v0
33440 ; GFX10-NEXT:    v_min_u32_e32 v2, 1, v2
33441 ; GFX10-NEXT:    v_min_u32_e32 v6, 1, v6
33442 ; GFX10-NEXT:    v_or_b32_e32 v4, v5, v4
33443 ; GFX10-NEXT:    v_or_b32_e32 v0, v1, v0
33444 ; GFX10-NEXT:    v_or_b32_e32 v1, v3, v2
33445 ; GFX10-NEXT:    v_sub_nc_u32_e32 v5, 32, v10
33446 ; GFX10-NEXT:    v_sub_nc_u32_e32 v3, 32, v11
33447 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v2, v4
33448 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v0, v0
33449 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v1, v1
33450 ; GFX10-NEXT:    v_or_b32_e32 v6, v7, v6
33451 ; GFX10-NEXT:    v_ldexp_f32 v2, v2, v8
33452 ; GFX10-NEXT:    v_ldexp_f32 v0, v0, v5
33453 ; GFX10-NEXT:    v_ldexp_f32 v1, v1, v3
33454 ; GFX10-NEXT:    v_cvt_f32_u32_e32 v4, v6
33455 ; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
33456 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
33457 ; GFX10-NEXT:    v_bfe_u32 v7, v0, 16, 1
33458 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
33459 ; GFX10-NEXT:    v_ldexp_f32 v4, v4, v9
33460 ; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
33461 ; GFX10-NEXT:    v_bfe_u32 v8, v1, 16, 1
33462 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v0
33463 ; GFX10-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
33464 ; GFX10-NEXT:    v_bfe_u32 v6, v4, 16, 1
33465 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v5, vcc_lo
33466 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
33467 ; GFX10-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
33468 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v1
33469 ; GFX10-NEXT:    v_add3_u32 v6, v6, v4, 0x7fff
33470 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v4
33471 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v9, vcc_lo
33472 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
33473 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v8, v3, vcc_lo
33474 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
33475 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
33476 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
33477 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
33478 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33480 ; GFX11-LABEL: v_uitofp_v4i64_to_v4bf16:
33481 ; GFX11:       ; %bb.0:
33482 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33483 ; GFX11-NEXT:    v_clz_i32_u32_e32 v8, v5
33484 ; GFX11-NEXT:    v_clz_i32_u32_e32 v10, v1
33485 ; GFX11-NEXT:    v_clz_i32_u32_e32 v11, v3
33486 ; GFX11-NEXT:    v_clz_i32_u32_e32 v9, v7
33487 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33488 ; GFX11-NEXT:    v_min_u32_e32 v8, 32, v8
33489 ; GFX11-NEXT:    v_min_u32_e32 v10, 32, v10
33490 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33491 ; GFX11-NEXT:    v_min_u32_e32 v11, 32, v11
33492 ; GFX11-NEXT:    v_min_u32_e32 v9, 32, v9
33493 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33494 ; GFX11-NEXT:    v_lshlrev_b64 v[4:5], v8, v[4:5]
33495 ; GFX11-NEXT:    v_lshlrev_b64 v[0:1], v10, v[0:1]
33496 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33497 ; GFX11-NEXT:    v_lshlrev_b64 v[2:3], v11, v[2:3]
33498 ; GFX11-NEXT:    v_lshlrev_b64 v[6:7], v9, v[6:7]
33499 ; GFX11-NEXT:    v_sub_nc_u32_e32 v8, 32, v8
33500 ; GFX11-NEXT:    v_sub_nc_u32_e32 v9, 32, v9
33501 ; GFX11-NEXT:    v_min_u32_e32 v4, 1, v4
33502 ; GFX11-NEXT:    v_min_u32_e32 v0, 1, v0
33503 ; GFX11-NEXT:    v_min_u32_e32 v2, 1, v2
33504 ; GFX11-NEXT:    v_min_u32_e32 v6, 1, v6
33505 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33506 ; GFX11-NEXT:    v_or_b32_e32 v4, v5, v4
33507 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
33508 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
33509 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
33510 ; GFX11-NEXT:    v_sub_nc_u32_e32 v5, 32, v10
33511 ; GFX11-NEXT:    v_sub_nc_u32_e32 v3, 32, v11
33512 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v2, v4
33513 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v0, v0
33514 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v1, v1
33515 ; GFX11-NEXT:    v_or_b32_e32 v6, v7, v6
33516 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33517 ; GFX11-NEXT:    v_ldexp_f32 v2, v2, v8
33518 ; GFX11-NEXT:    v_ldexp_f32 v0, v0, v5
33519 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
33520 ; GFX11-NEXT:    v_ldexp_f32 v1, v1, v3
33521 ; GFX11-NEXT:    v_cvt_f32_u32_e32 v4, v6
33522 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
33523 ; GFX11-NEXT:    v_bfe_u32 v3, v2, 16, 1
33524 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
33525 ; GFX11-NEXT:    v_bfe_u32 v7, v0, 16, 1
33526 ; GFX11-NEXT:    v_bfe_u32 v8, v1, 16, 1
33527 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
33528 ; GFX11-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
33529 ; GFX11-NEXT:    v_ldexp_f32 v4, v4, v9
33530 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v0
33531 ; GFX11-NEXT:    v_add3_u32 v7, v7, v0, 0x7fff
33532 ; GFX11-NEXT:    v_add3_u32 v8, v8, v1, 0x7fff
33533 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v3, v5, vcc_lo
33534 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
33535 ; GFX11-NEXT:    v_bfe_u32 v6, v4, 16, 1
33536 ; GFX11-NEXT:    v_or_b32_e32 v3, 0x400000, v1
33537 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v4
33538 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v9, vcc_lo
33539 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
33540 ; GFX11-NEXT:    v_add3_u32 v6, v6, v4, 0x7fff
33541 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v8, v3, vcc_lo
33542 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
33543 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_4)
33544 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
33545 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v5, vcc_lo
33546 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
33547 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x7060302
33548 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33549   %op = uitofp <4 x i64> %x to <4 x bfloat>
33550   ret <4 x bfloat> %op
33553 define bfloat @v_select_bf16(i1 %cond, bfloat %a, bfloat %b) {
33554 ; GCN-LABEL: v_select_bf16:
33555 ; GCN:       ; %bb.0:
33556 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33557 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33558 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33559 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
33560 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33561 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33562 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33563 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33565 ; GFX7-LABEL: v_select_bf16:
33566 ; GFX7:       ; %bb.0:
33567 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33568 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
33569 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33570 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33571 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33572 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33573 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33574 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33576 ; GFX8-LABEL: v_select_bf16:
33577 ; GFX8:       ; %bb.0:
33578 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33579 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
33580 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33581 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33582 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33584 ; GFX9-LABEL: v_select_bf16:
33585 ; GFX9:       ; %bb.0:
33586 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33587 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
33588 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33589 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33590 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33592 ; GFX10-LABEL: v_select_bf16:
33593 ; GFX10:       ; %bb.0:
33594 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33595 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
33596 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33597 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33598 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33600 ; GFX11-LABEL: v_select_bf16:
33601 ; GFX11:       ; %bb.0:
33602 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33603 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
33604 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
33605 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33606 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33607 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33608   %op = select i1 %cond, bfloat %a, bfloat %b
33609   ret bfloat %op
33612 define bfloat @v_select_fneg_lhs_bf16(i1 %cond, bfloat %a, bfloat %b) {
33613 ; GCN-LABEL: v_select_fneg_lhs_bf16:
33614 ; GCN:       ; %bb.0:
33615 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33616 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33617 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
33618 ; GCN-NEXT:    v_mul_f32_e32 v1, -1.0, v1
33619 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33620 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33621 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33622 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33624 ; GFX7-LABEL: v_select_fneg_lhs_bf16:
33625 ; GFX7:       ; %bb.0:
33626 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33627 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
33628 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33629 ; GFX7-NEXT:    v_mul_f32_e32 v1, -1.0, v1
33630 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33631 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33632 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33633 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33635 ; GFX8-LABEL: v_select_fneg_lhs_bf16:
33636 ; GFX8:       ; %bb.0:
33637 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33638 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
33639 ; GFX8-NEXT:    v_xor_b32_e32 v1, 0x8000, v1
33640 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33641 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33642 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33644 ; GFX9-LABEL: v_select_fneg_lhs_bf16:
33645 ; GFX9:       ; %bb.0:
33646 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33647 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
33648 ; GFX9-NEXT:    v_xor_b32_e32 v1, 0x8000, v1
33649 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33650 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33651 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33653 ; GFX10-LABEL: v_select_fneg_lhs_bf16:
33654 ; GFX10:       ; %bb.0:
33655 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33656 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
33657 ; GFX10-NEXT:    v_xor_b32_e32 v1, 0x8000, v1
33658 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33659 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33660 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33662 ; GFX11-LABEL: v_select_fneg_lhs_bf16:
33663 ; GFX11:       ; %bb.0:
33664 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33665 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
33666 ; GFX11-NEXT:    v_xor_b32_e32 v1, 0x8000, v1
33667 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
33668 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33669 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33670 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33671   %neg.a = fneg bfloat %a
33672   %op = select i1 %cond, bfloat %neg.a, bfloat %b
33673   ret bfloat %op
33676 define bfloat @v_select_fneg_rhs_bf16(i1 %cond, bfloat %a, bfloat %b) {
33677 ; GCN-LABEL: v_select_fneg_rhs_bf16:
33678 ; GCN:       ; %bb.0:
33679 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33680 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33681 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
33682 ; GCN-NEXT:    v_mul_f32_e32 v2, -1.0, v2
33683 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33684 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33685 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33686 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33688 ; GFX7-LABEL: v_select_fneg_rhs_bf16:
33689 ; GFX7:       ; %bb.0:
33690 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33691 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
33692 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33693 ; GFX7-NEXT:    v_mul_f32_e32 v2, -1.0, v2
33694 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33695 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33696 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33697 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33699 ; GFX8-LABEL: v_select_fneg_rhs_bf16:
33700 ; GFX8:       ; %bb.0:
33701 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33702 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
33703 ; GFX8-NEXT:    v_xor_b32_e32 v2, 0x8000, v2
33704 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33705 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33706 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33708 ; GFX9-LABEL: v_select_fneg_rhs_bf16:
33709 ; GFX9:       ; %bb.0:
33710 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33711 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
33712 ; GFX9-NEXT:    v_xor_b32_e32 v2, 0x8000, v2
33713 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33714 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33715 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33717 ; GFX10-LABEL: v_select_fneg_rhs_bf16:
33718 ; GFX10:       ; %bb.0:
33719 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33720 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
33721 ; GFX10-NEXT:    v_xor_b32_e32 v2, 0x8000, v2
33722 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33723 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33724 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33726 ; GFX11-LABEL: v_select_fneg_rhs_bf16:
33727 ; GFX11:       ; %bb.0:
33728 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33729 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
33730 ; GFX11-NEXT:    v_xor_b32_e32 v2, 0x8000, v2
33731 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
33732 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33733 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33734 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33735   %neg.b = fneg bfloat %b
33736   %op = select i1 %cond, bfloat %a, bfloat %neg.b
33737   ret bfloat %op
33740 define <2 x bfloat> @v_select_v2bf16(i1 %cond, <2 x bfloat> %a, <2 x bfloat> %b) {
33741 ; GCN-LABEL: v_select_v2bf16:
33742 ; GCN:       ; %bb.0:
33743 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33744 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33745 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
33746 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33747 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
33748 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
33749 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
33750 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
33751 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33752 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
33753 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33754 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
33755 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
33756 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
33757 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
33758 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33760 ; GFX7-LABEL: v_select_v2bf16:
33761 ; GFX7:       ; %bb.0:
33762 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33763 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
33764 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
33765 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33766 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
33767 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
33768 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
33769 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
33770 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33771 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
33772 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33773 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v4, v2, vcc
33774 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
33775 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
33776 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
33777 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33779 ; GFX8-LABEL: v_select_v2bf16:
33780 ; GFX8:       ; %bb.0:
33781 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33782 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
33783 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33784 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33785 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
33786 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33787 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
33788 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
33789 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
33790 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33792 ; GFX9-LABEL: v_select_v2bf16:
33793 ; GFX9:       ; %bb.0:
33794 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33795 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
33796 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33797 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33798 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
33799 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33800 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
33801 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
33802 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
33803 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33805 ; GFX10-LABEL: v_select_v2bf16:
33806 ; GFX10:       ; %bb.0:
33807 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33808 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
33809 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
33810 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
33811 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33812 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc_lo
33813 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v3, vcc_lo
33814 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
33815 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33817 ; GFX11-LABEL: v_select_v2bf16:
33818 ; GFX11:       ; %bb.0:
33819 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33820 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
33821 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
33822 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
33823 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
33824 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33825 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v2, v1 :: v_dual_cndmask_b32 v1, v4, v3
33826 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
33827 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
33828 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33829   %op = select i1 %cond, <2 x bfloat> %a, <2 x bfloat> %b
33830   ret <2 x bfloat> %op
33833 define <2 x bfloat> @v_vselect_v2bf16(<2 x i1> %cond, <2 x bfloat> %a, <2 x bfloat> %b) {
33834 ; GCN-LABEL: v_vselect_v2bf16:
33835 ; GCN:       ; %bb.0:
33836 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33837 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33838 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
33839 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
33840 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
33841 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
33842 ; GCN-NEXT:    v_and_b32_e32 v1, 1, v1
33843 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
33844 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc
33845 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33846 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v4, v2, vcc
33847 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33848 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33849 ; GCN-NEXT:    s_setpc_b64 s[30:31]
33851 ; GFX7-LABEL: v_vselect_v2bf16:
33852 ; GFX7:       ; %bb.0:
33853 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33854 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
33855 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
33856 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
33857 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
33858 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
33859 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
33860 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
33861 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc
33862 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33863 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v4, v2, vcc
33864 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
33865 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
33866 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
33868 ; GFX8-LABEL: v_vselect_v2bf16:
33869 ; GFX8:       ; %bb.0:
33870 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33871 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
33872 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
33873 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33874 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
33875 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33876 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
33877 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
33878 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
33879 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
33880 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
33881 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
33883 ; GFX9-LABEL: v_vselect_v2bf16:
33884 ; GFX9:       ; %bb.0:
33885 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33886 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
33887 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
33888 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
33889 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
33890 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
33891 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
33892 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
33893 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v2, vcc
33894 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
33895 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
33896 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
33898 ; GFX10-LABEL: v_vselect_v2bf16:
33899 ; GFX10:       ; %bb.0:
33900 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33901 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
33902 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
33903 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
33904 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 16, v3
33905 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33906 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc_lo
33907 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
33908 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc_lo
33909 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
33910 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
33912 ; GFX11-LABEL: v_vselect_v2bf16:
33913 ; GFX11:       ; %bb.0:
33914 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33915 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
33916 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v2
33917 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v3
33918 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_1)
33919 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
33920 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v3, v2 :: v_dual_and_b32 v1, 1, v1
33921 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
33922 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_1)
33923 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc_lo
33924 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
33925 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
33926   %op = select <2 x i1> %cond, <2 x bfloat> %a, <2 x bfloat> %b
33927   ret <2 x bfloat> %op
33930 define amdgpu_ps i32 @s_select_bf16(bfloat inreg %a, bfloat inreg %b, i32 %c) {
33931 ; GCN-LABEL: s_select_bf16:
33932 ; GCN:       ; %bb.0:
33933 ; GCN-NEXT:    v_mul_f32_e64 v1, 1.0, s0
33934 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s1
33935 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
33936 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33937 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
33938 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
33939 ; GCN-NEXT:    ; return to shader part epilog
33941 ; GFX7-LABEL: s_select_bf16:
33942 ; GFX7:       ; %bb.0:
33943 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s0
33944 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s1
33945 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
33946 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v2, v1, vcc
33947 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
33948 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
33949 ; GFX7-NEXT:    ; return to shader part epilog
33951 ; GFX8-LABEL: s_select_bf16:
33952 ; GFX8:       ; %bb.0:
33953 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
33954 ; GFX8-NEXT:    v_mov_b32_e32 v2, s0
33955 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
33956 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
33957 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff, v0
33958 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
33959 ; GFX8-NEXT:    ; return to shader part epilog
33961 ; GFX9-LABEL: s_select_bf16:
33962 ; GFX9:       ; %bb.0:
33963 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
33964 ; GFX9-NEXT:    v_mov_b32_e32 v2, s0
33965 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
33966 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
33967 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
33968 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
33969 ; GFX9-NEXT:    ; return to shader part epilog
33971 ; GFX10-LABEL: s_select_bf16:
33972 ; GFX10:       ; %bb.0:
33973 ; GFX10-NEXT:    v_mov_b32_e32 v1, s0
33974 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
33975 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s1, v1, vcc_lo
33976 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff, v0
33977 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
33978 ; GFX10-NEXT:    ; return to shader part epilog
33980 ; GFX11-LABEL: s_select_bf16:
33981 ; GFX11:       ; %bb.0:
33982 ; GFX11-NEXT:    v_mov_b32_e32 v1, s0
33983 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
33984 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
33985 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s1, v1, vcc_lo
33986 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
33987 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
33988 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
33989 ; GFX11-NEXT:    ; return to shader part epilog
33990   %cond = icmp eq i32 %c, 0
33991   %op = select i1 %cond, bfloat %a, bfloat %b
33992   %cast = bitcast bfloat %op to i16
33993   %zext = zext i16 %cast to i32
33994   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %zext)
33995   ret i32 %readlane
33998 define amdgpu_ps i32 @s_select_v2bf16(<2 x bfloat> inreg %a, <2 x bfloat> inreg %b, i32 %c) {
33999 ; GCN-LABEL: s_select_v2bf16:
34000 ; GCN:       ; %bb.0:
34001 ; GCN-NEXT:    v_mul_f32_e64 v1, 1.0, s1
34002 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s3
34003 ; GCN-NEXT:    v_mul_f32_e64 v3, 1.0, s0
34004 ; GCN-NEXT:    v_mul_f32_e64 v4, 1.0, s2
34005 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
34006 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34007 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34008 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34009 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34010 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
34011 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34012 ; GCN-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
34013 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
34014 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
34015 ; GCN-NEXT:    ; return to shader part epilog
34017 ; GFX7-LABEL: s_select_v2bf16:
34018 ; GFX7:       ; %bb.0:
34019 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s1
34020 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s3
34021 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
34022 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34023 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s0
34024 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s2
34025 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34026 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34027 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34028 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34029 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
34030 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
34031 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
34032 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
34033 ; GFX7-NEXT:    ; return to shader part epilog
34035 ; GFX8-LABEL: s_select_v2bf16:
34036 ; GFX8:       ; %bb.0:
34037 ; GFX8-NEXT:    s_lshr_b32 s2, s0, 16
34038 ; GFX8-NEXT:    s_lshr_b32 s3, s1, 16
34039 ; GFX8-NEXT:    v_mov_b32_e32 v1, s3
34040 ; GFX8-NEXT:    v_mov_b32_e32 v2, s2
34041 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34042 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
34043 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
34044 ; GFX8-NEXT:    v_mov_b32_e32 v2, s0
34045 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
34046 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
34047 ; GFX8-NEXT:    v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
34048 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
34049 ; GFX8-NEXT:    ; return to shader part epilog
34051 ; GFX9-LABEL: s_select_v2bf16:
34052 ; GFX9:       ; %bb.0:
34053 ; GFX9-NEXT:    s_lshr_b32 s2, s0, 16
34054 ; GFX9-NEXT:    s_lshr_b32 s3, s1, 16
34055 ; GFX9-NEXT:    v_mov_b32_e32 v1, s3
34056 ; GFX9-NEXT:    v_mov_b32_e32 v2, s2
34057 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34058 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
34059 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
34060 ; GFX9-NEXT:    v_mov_b32_e32 v2, s0
34061 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
34062 ; GFX9-NEXT:    s_mov_b32 s0, 0x5040100
34063 ; GFX9-NEXT:    v_perm_b32 v0, v0, v1, s0
34064 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
34065 ; GFX9-NEXT:    ; return to shader part epilog
34067 ; GFX10-LABEL: s_select_v2bf16:
34068 ; GFX10:       ; %bb.0:
34069 ; GFX10-NEXT:    s_lshr_b32 s2, s0, 16
34070 ; GFX10-NEXT:    v_mov_b32_e32 v2, s0
34071 ; GFX10-NEXT:    v_mov_b32_e32 v1, s2
34072 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
34073 ; GFX10-NEXT:    s_lshr_b32 s3, s1, 16
34074 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s3, v1, vcc_lo
34075 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s1, v2, vcc_lo
34076 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100
34077 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
34078 ; GFX10-NEXT:    ; return to shader part epilog
34080 ; GFX11-LABEL: s_select_v2bf16:
34081 ; GFX11:       ; %bb.0:
34082 ; GFX11-NEXT:    s_lshr_b32 s2, s0, 16
34083 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
34084 ; GFX11-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_mov_b32 v2, s0
34085 ; GFX11-NEXT:    s_lshr_b32 s3, s1, 16
34086 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
34087 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s3, v1, vcc_lo
34088 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
34089 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s1, v2, vcc_lo
34090 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x5040100
34091 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34092 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
34093 ; GFX11-NEXT:    ; return to shader part epilog
34094   %cond = icmp eq i32 %c, 0
34095   %op = select i1 %cond, <2 x bfloat> %a, <2 x bfloat> %b
34096   %cast = bitcast <2 x bfloat> %op to i32
34097   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
34098   ret i32 %readlane
34101 define amdgpu_ps i32 @s_vselect_v2bf16(<2 x bfloat> inreg %a, <2 x bfloat> inreg %b, <2 x i32> %c) {
34102 ; GCN-LABEL: s_vselect_v2bf16:
34103 ; GCN:       ; %bb.0:
34104 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s0
34105 ; GCN-NEXT:    v_mul_f32_e64 v3, 1.0, s2
34106 ; GCN-NEXT:    v_mul_f32_e64 v4, 1.0, s1
34107 ; GCN-NEXT:    v_mul_f32_e64 v5, 1.0, s3
34108 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
34109 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
34110 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34111 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
34112 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34113 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
34114 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
34115 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
34116 ; GCN-NEXT:    ; return to shader part epilog
34118 ; GFX7-LABEL: s_vselect_v2bf16:
34119 ; GFX7:       ; %bb.0:
34120 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s1
34121 ; GFX7-NEXT:    v_mul_f32_e64 v5, 1.0, s3
34122 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
34123 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s0
34124 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s2
34125 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
34126 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34127 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v3, v2, vcc
34128 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34129 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
34130 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
34131 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
34132 ; GFX7-NEXT:    ; return to shader part epilog
34134 ; GFX8-LABEL: s_vselect_v2bf16:
34135 ; GFX8:       ; %bb.0:
34136 ; GFX8-NEXT:    s_lshr_b32 s2, s0, 16
34137 ; GFX8-NEXT:    s_lshr_b32 s3, s1, 16
34138 ; GFX8-NEXT:    v_mov_b32_e32 v2, s3
34139 ; GFX8-NEXT:    v_mov_b32_e32 v3, s2
34140 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
34141 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
34142 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
34143 ; GFX8-NEXT:    v_mov_b32_e32 v3, s0
34144 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34145 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
34146 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
34147 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
34148 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
34149 ; GFX8-NEXT:    ; return to shader part epilog
34151 ; GFX9-LABEL: s_vselect_v2bf16:
34152 ; GFX9:       ; %bb.0:
34153 ; GFX9-NEXT:    s_lshr_b32 s2, s0, 16
34154 ; GFX9-NEXT:    s_lshr_b32 s3, s1, 16
34155 ; GFX9-NEXT:    v_mov_b32_e32 v2, s3
34156 ; GFX9-NEXT:    v_mov_b32_e32 v3, s2
34157 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
34158 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
34159 ; GFX9-NEXT:    v_mov_b32_e32 v2, s1
34160 ; GFX9-NEXT:    v_mov_b32_e32 v3, s0
34161 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
34162 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
34163 ; GFX9-NEXT:    s_mov_b32 s0, 0x5040100
34164 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s0
34165 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
34166 ; GFX9-NEXT:    ; return to shader part epilog
34168 ; GFX10-LABEL: s_vselect_v2bf16:
34169 ; GFX10:       ; %bb.0:
34170 ; GFX10-NEXT:    s_lshr_b32 s2, s0, 16
34171 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v1
34172 ; GFX10-NEXT:    v_mov_b32_e32 v2, s2
34173 ; GFX10-NEXT:    v_mov_b32_e32 v3, s0
34174 ; GFX10-NEXT:    s_lshr_b32 s0, s1, 16
34175 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s0, v2, vcc_lo
34176 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
34177 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s1, v3, vcc_lo
34178 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
34179 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
34180 ; GFX10-NEXT:    ; return to shader part epilog
34182 ; GFX11-LABEL: s_vselect_v2bf16:
34183 ; GFX11:       ; %bb.0:
34184 ; GFX11-NEXT:    s_lshr_b32 s2, s0, 16
34185 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v1
34186 ; GFX11-NEXT:    v_dual_mov_b32 v2, s2 :: v_dual_mov_b32 v3, s0
34187 ; GFX11-NEXT:    s_lshr_b32 s0, s1, 16
34188 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
34189 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s0, v2, vcc_lo
34190 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
34191 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
34192 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s1, v3, vcc_lo
34193 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
34194 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34195 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
34196 ; GFX11-NEXT:    ; return to shader part epilog
34197   %cond = icmp eq <2 x i32> %c, zeroinitializer
34198   %op = select <2 x i1> %cond, <2 x bfloat> %a, <2 x bfloat> %b
34199   %cast = bitcast <2 x bfloat> %op to i32
34200   %readlane = call i32 @llvm.amdgcn.readfirstlane(i32 %cast)
34201   ret i32 %readlane
34204 define <3 x bfloat> @v_select_v3bf16(i1 %cond, <3 x bfloat> %a, <3 x bfloat> %b) {
34205 ; GCN-LABEL: v_select_v3bf16:
34206 ; GCN:       ; %bb.0:
34207 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34208 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34209 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34210 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34211 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34212 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34213 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34214 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34215 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34216 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34217 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34218 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
34219 ; GCN-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34220 ; GCN-NEXT:    v_alignbit_b32 v2, v5, v4, 16
34221 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34222 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34223 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v6, v3, vcc
34224 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
34225 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34226 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34227 ; GCN-NEXT:    s_setpc_b64 s[30:31]
34229 ; GFX7-LABEL: v_select_v3bf16:
34230 ; GFX7:       ; %bb.0:
34231 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34232 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34233 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34234 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34235 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34236 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v5
34237 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34238 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34239 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34240 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34241 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
34242 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34243 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34244 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v4, 16
34245 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34246 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34247 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v6, v3, vcc
34248 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
34249 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34250 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34251 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
34253 ; GFX8-LABEL: v_select_v3bf16:
34254 ; GFX8:       ; %bb.0:
34255 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34256 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
34257 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34258 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
34259 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc
34260 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
34262 ; GFX9-LABEL: v_select_v3bf16:
34263 ; GFX9:       ; %bb.0:
34264 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34265 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
34266 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34267 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
34268 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc
34269 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
34271 ; GFX10-LABEL: v_select_v3bf16:
34272 ; GFX10:       ; %bb.0:
34273 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34274 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
34275 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34276 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc_lo
34277 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc_lo
34278 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
34280 ; GFX11-LABEL: v_select_v3bf16:
34281 ; GFX11:       ; %bb.0:
34282 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34283 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
34284 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34285 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34286 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v3, v1 :: v_dual_cndmask_b32 v1, v4, v2
34287 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
34288   %op = select i1 %cond, <3 x bfloat> %a, <3 x bfloat> %b
34289   ret <3 x bfloat> %op
34292 define <4 x bfloat> @v_select_v4bf16(i1 %cond, <4 x bfloat> %a, <4 x bfloat> %b) {
34293 ; GCN-LABEL: v_select_v4bf16:
34294 ; GCN:       ; %bb.0:
34295 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34296 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34297 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34298 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34299 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34300 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34301 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34302 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
34303 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34304 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34305 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34306 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34307 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34308 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34309 ; GCN-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34310 ; GCN-NEXT:    v_alignbit_b32 v2, v6, v5, 16
34311 ; GCN-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34312 ; GCN-NEXT:    v_alignbit_b32 v4, v8, v7, 16
34313 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34314 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34315 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34316 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34317 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34318 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34319 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34320 ; GCN-NEXT:    s_setpc_b64 s[30:31]
34322 ; GFX7-LABEL: v_select_v4bf16:
34323 ; GFX7:       ; %bb.0:
34324 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34325 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34326 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34327 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34328 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34329 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34330 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v6
34331 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34332 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34333 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34334 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34335 ; GFX7-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34336 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v8
34337 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v5, 16
34338 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34339 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v7
34340 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
34341 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v5, 16
34342 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34343 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34344 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34345 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34346 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34347 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34348 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34349 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
34351 ; GFX8-LABEL: v_select_v4bf16:
34352 ; GFX8:       ; %bb.0:
34353 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34354 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
34355 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34356 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
34357 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc
34358 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
34360 ; GFX9-LABEL: v_select_v4bf16:
34361 ; GFX9:       ; %bb.0:
34362 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34363 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
34364 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34365 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc
34366 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc
34367 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
34369 ; GFX10-LABEL: v_select_v4bf16:
34370 ; GFX10:       ; %bb.0:
34371 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34372 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
34373 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34374 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v1, vcc_lo
34375 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v2, vcc_lo
34376 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
34378 ; GFX11-LABEL: v_select_v4bf16:
34379 ; GFX11:       ; %bb.0:
34380 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34381 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
34382 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34383 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34384 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v3, v1 :: v_dual_cndmask_b32 v1, v4, v2
34385 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
34386   %op = select i1 %cond, <4 x bfloat> %a, <4 x bfloat> %b
34387   ret <4 x bfloat> %op
34390 define <6 x bfloat> @v_select_v6bf16(i1 %cond, <6 x bfloat> %a, <6 x bfloat> %b) {
34391 ; GCN-LABEL: v_select_v6bf16:
34392 ; GCN:       ; %bb.0:
34393 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34394 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34395 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34396 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
34397 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34398 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34399 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34400 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
34401 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
34402 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34403 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34404 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
34405 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
34406 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34407 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34408 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34409 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34410 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
34411 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34412 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34413 ; GCN-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34414 ; GCN-NEXT:    v_alignbit_b32 v2, v8, v7, 16
34415 ; GCN-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34416 ; GCN-NEXT:    v_alignbit_b32 v4, v10, v9, 16
34417 ; GCN-NEXT:    v_alignbit_b32 v5, v6, v5, 16
34418 ; GCN-NEXT:    v_alignbit_b32 v6, v12, v11, 16
34419 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34420 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v6, v5, vcc
34421 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34422 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34423 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34424 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34425 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34426 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34427 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34428 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34429 ; GCN-NEXT:    s_setpc_b64 s[30:31]
34431 ; GFX7-LABEL: v_select_v6bf16:
34432 ; GFX7:       ; %bb.0:
34433 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34434 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34435 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34436 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34437 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34438 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34439 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v8
34440 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34441 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34442 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34443 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34444 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34445 ; GFX7-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34446 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v10
34447 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34448 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34449 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v7, 16
34450 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34451 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v9
34452 ; GFX7-NEXT:    v_alignbit_b32 v5, v6, v5, 16
34453 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v12
34454 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v7, 16
34455 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34456 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v11
34457 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
34458 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v7, 16
34459 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34460 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v6, v5, vcc
34461 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34462 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34463 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34464 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34465 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34466 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34467 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34468 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34469 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
34471 ; GFX8-LABEL: v_select_v6bf16:
34472 ; GFX8:       ; %bb.0:
34473 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34474 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
34475 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34476 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
34477 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
34478 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc
34479 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
34481 ; GFX9-LABEL: v_select_v6bf16:
34482 ; GFX9:       ; %bb.0:
34483 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34484 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
34485 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34486 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc
34487 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc
34488 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc
34489 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
34491 ; GFX10-LABEL: v_select_v6bf16:
34492 ; GFX10:       ; %bb.0:
34493 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34494 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
34495 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34496 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v4, v1, vcc_lo
34497 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v2, vcc_lo
34498 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc_lo
34499 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
34501 ; GFX11-LABEL: v_select_v6bf16:
34502 ; GFX11:       ; %bb.0:
34503 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34504 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
34505 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34506 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34507 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v4, v1 :: v_dual_cndmask_b32 v1, v5, v2
34508 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v6, v3, vcc_lo
34509 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
34510   %op = select i1 %cond, <6 x bfloat> %a, <6 x bfloat> %b
34511   ret <6 x bfloat> %op
34514 define <8 x bfloat> @v_select_v8bf16(i1 %cond, <8 x bfloat> %a, <8 x bfloat> %b) {
34515 ; GCN-LABEL: v_select_v8bf16:
34516 ; GCN:       ; %bb.0:
34517 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34518 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34519 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34520 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
34521 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
34522 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34523 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34524 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
34525 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
34526 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34527 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34528 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
34529 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
34530 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
34531 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34532 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
34533 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
34534 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34535 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34536 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
34537 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34538 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34539 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34540 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34541 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34542 ; GCN-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
34543 ; GCN-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34544 ; GCN-NEXT:    v_alignbit_b32 v2, v10, v9, 16
34545 ; GCN-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34546 ; GCN-NEXT:    v_alignbit_b32 v4, v12, v11, 16
34547 ; GCN-NEXT:    v_alignbit_b32 v5, v6, v5, 16
34548 ; GCN-NEXT:    v_alignbit_b32 v6, v14, v13, 16
34549 ; GCN-NEXT:    v_alignbit_b32 v7, v8, v7, 16
34550 ; GCN-NEXT:    v_alignbit_b32 v8, v16, v15, 16
34551 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34552 ; GCN-NEXT:    v_cndmask_b32_e32 v7, v8, v7, vcc
34553 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v6, v5, vcc
34554 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34555 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34556 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34557 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34558 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34559 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34560 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34561 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34562 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
34563 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
34564 ; GCN-NEXT:    s_setpc_b64 s[30:31]
34566 ; GFX7-LABEL: v_select_v8bf16:
34567 ; GFX7:       ; %bb.0:
34568 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34569 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34570 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34571 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34572 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34573 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34574 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v10
34575 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34576 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34577 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34578 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34579 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
34580 ; GFX7-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34581 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v12
34582 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34583 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34584 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
34585 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v9, 16
34586 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34587 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v11
34588 ; GFX7-NEXT:    v_alignbit_b32 v5, v6, v5, 16
34589 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v14
34590 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34591 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34592 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v9, 16
34593 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34594 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v13
34595 ; GFX7-NEXT:    v_alignbit_b32 v7, v8, v7, 16
34596 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v16
34597 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v9, 16
34598 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34599 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v15
34600 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
34601 ; GFX7-NEXT:    v_alignbit_b32 v8, v8, v9, 16
34602 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34603 ; GFX7-NEXT:    v_cndmask_b32_e32 v7, v8, v7, vcc
34604 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v6, v5, vcc
34605 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34606 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34607 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34608 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34609 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34610 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34611 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34612 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34613 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
34614 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
34615 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
34617 ; GFX8-LABEL: v_select_v8bf16:
34618 ; GFX8:       ; %bb.0:
34619 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34620 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
34621 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34622 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v5, v1, vcc
34623 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v6, v2, vcc
34624 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v7, v3, vcc
34625 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v8, v4, vcc
34626 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
34628 ; GFX9-LABEL: v_select_v8bf16:
34629 ; GFX9:       ; %bb.0:
34630 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34631 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
34632 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34633 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v5, v1, vcc
34634 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v6, v2, vcc
34635 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v7, v3, vcc
34636 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v8, v4, vcc
34637 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
34639 ; GFX10-LABEL: v_select_v8bf16:
34640 ; GFX10:       ; %bb.0:
34641 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34642 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
34643 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34644 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v1, vcc_lo
34645 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v2, vcc_lo
34646 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v7, v3, vcc_lo
34647 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v8, v4, vcc_lo
34648 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
34650 ; GFX11-LABEL: v_select_v8bf16:
34651 ; GFX11:       ; %bb.0:
34652 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34653 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
34654 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34655 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34656 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v5, v1 :: v_dual_cndmask_b32 v1, v6, v2
34657 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v7, v3 :: v_dual_cndmask_b32 v3, v8, v4
34658 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
34659   %op = select i1 %cond, <8 x bfloat> %a, <8 x bfloat> %b
34660   ret <8 x bfloat> %op
34663 define <16 x bfloat> @v_select_v16bf16(i1 %cond, <16 x bfloat> %a, <16 x bfloat> %b) {
34664 ; GCN-LABEL: v_select_v16bf16:
34665 ; GCN:       ; %bb.0:
34666 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34667 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34668 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34669 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v2
34670 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34671 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
34672 ; GCN-NEXT:    v_alignbit_b32 v0, v0, v1, 16
34673 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v18
34674 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v17
34675 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
34676 ; GCN-NEXT:    v_alignbit_b32 v1, v1, v2, 16
34677 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v4
34678 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34679 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34680 ; GCN-NEXT:    v_alignbit_b32 v2, v2, v3, 16
34681 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v20
34682 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v19
34683 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34684 ; GCN-NEXT:    v_alignbit_b32 v3, v3, v4, 16
34685 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v6
34686 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34687 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34688 ; GCN-NEXT:    v_alignbit_b32 v4, v4, v5, 16
34689 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v22
34690 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v21
34691 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
34692 ; GCN-NEXT:    v_alignbit_b32 v5, v5, v6, 16
34693 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v8
34694 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34695 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34696 ; GCN-NEXT:    v_alignbit_b32 v6, v6, v7, 16
34697 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v24
34698 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v23
34699 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
34700 ; GCN-NEXT:    v_alignbit_b32 v7, v7, v8, 16
34701 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v10
34702 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
34703 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34704 ; GCN-NEXT:    v_alignbit_b32 v8, v8, v9, 16
34705 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v26
34706 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v25
34707 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
34708 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
34709 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v28
34710 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v27
34711 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
34712 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
34713 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v30
34714 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v29
34715 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
34716 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
34717 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
34718 ; GCN-NEXT:    v_alignbit_b32 v9, v9, v10, 16
34719 ; GCN-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:4
34720 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34721 ; GCN-NEXT:    v_alignbit_b32 v11, v12, v11, 16
34722 ; GCN-NEXT:    buffer_load_dword v12, off, s[0:3], s32
34723 ; GCN-NEXT:    v_lshrrev_b32_e32 v17, 16, v17
34724 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34725 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
34726 ; GCN-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
34727 ; GCN-NEXT:    v_alignbit_b32 v17, v17, v18, 16
34728 ; GCN-NEXT:    v_alignbit_b32 v13, v14, v13, 16
34729 ; GCN-NEXT:    v_alignbit_b32 v14, v19, v20, 16
34730 ; GCN-NEXT:    v_alignbit_b32 v15, v16, v15, 16
34731 ; GCN-NEXT:    v_cndmask_b32_e32 v13, v14, v13, vcc
34732 ; GCN-NEXT:    v_cndmask_b32_e32 v11, v17, v11, vcc
34733 ; GCN-NEXT:    v_cndmask_b32_e32 v9, v9, v8, vcc
34734 ; GCN-NEXT:    v_cndmask_b32_e32 v7, v7, v6, vcc
34735 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v5, v4, vcc
34736 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v3, v2, vcc
34737 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v1, v0, vcc
34738 ; GCN-NEXT:    s_waitcnt vmcnt(1)
34739 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v10
34740 ; GCN-NEXT:    s_waitcnt vmcnt(0)
34741 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v12
34742 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34743 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34744 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34745 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34746 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34747 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34748 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
34749 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
34750 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
34751 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
34752 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
34753 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
34754 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v13
34755 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
34756 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34757 ; GCN-NEXT:    v_alignbit_b32 v14, v14, v16, 16
34758 ; GCN-NEXT:    v_cndmask_b32_e32 v15, v14, v15, vcc
34759 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
34760 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
34761 ; GCN-NEXT:    s_setpc_b64 s[30:31]
34763 ; GFX7-LABEL: v_select_v16bf16:
34764 ; GFX7:       ; %bb.0:
34765 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34766 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
34767 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34768 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34769 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
34770 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
34771 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v18
34772 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34773 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
34774 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
34775 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34776 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
34777 ; GFX7-NEXT:    v_alignbit_b32 v3, v4, v3, 16
34778 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v20
34779 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34780 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
34781 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
34782 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v17, 16
34783 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34784 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v19
34785 ; GFX7-NEXT:    v_alignbit_b32 v5, v6, v5, 16
34786 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v22
34787 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34788 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
34789 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
34790 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v17, 16
34791 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34792 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v21
34793 ; GFX7-NEXT:    v_alignbit_b32 v7, v8, v7, 16
34794 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v24
34795 ; GFX7-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
34796 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
34797 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v17, 16
34798 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34799 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v23
34800 ; GFX7-NEXT:    v_alignbit_b32 v9, v10, v9, 16
34801 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v26
34802 ; GFX7-NEXT:    v_alignbit_b32 v8, v8, v17, 16
34803 ; GFX7-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
34804 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v25
34805 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
34806 ; GFX7-NEXT:    v_alignbit_b32 v10, v10, v17, 16
34807 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34808 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
34809 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v28
34810 ; GFX7-NEXT:    v_alignbit_b32 v11, v12, v11, 16
34811 ; GFX7-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:4
34812 ; GFX7-NEXT:    v_lshrrev_b32_e32 v17, 16, v17
34813 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v27
34814 ; GFX7-NEXT:    v_alignbit_b32 v17, v17, v18, 16
34815 ; GFX7-NEXT:    buffer_load_dword v18, off, s[0:3], s32
34816 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
34817 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34818 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
34819 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
34820 ; GFX7-NEXT:    v_alignbit_b32 v13, v14, v13, 16
34821 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v30
34822 ; GFX7-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
34823 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
34824 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34825 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v29
34826 ; GFX7-NEXT:    v_alignbit_b32 v15, v16, v15, 16
34827 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
34828 ; GFX7-NEXT:    v_alignbit_b32 v14, v14, v19, 16
34829 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34830 ; GFX7-NEXT:    v_cndmask_b32_e32 v13, v14, v13, vcc
34831 ; GFX7-NEXT:    v_cndmask_b32_e32 v11, v17, v11, vcc
34832 ; GFX7-NEXT:    v_cndmask_b32_e32 v9, v10, v9, vcc
34833 ; GFX7-NEXT:    v_cndmask_b32_e32 v7, v8, v7, vcc
34834 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v6, v5, vcc
34835 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v3, vcc
34836 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
34837 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
34838 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
34839 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
34840 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
34841 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
34842 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
34843 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
34844 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
34845 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
34846 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
34847 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
34848 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
34849 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
34850 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
34851 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34852 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
34853 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v18
34854 ; GFX7-NEXT:    v_alignbit_b32 v12, v12, v16, 16
34855 ; GFX7-NEXT:    v_cndmask_b32_e32 v15, v12, v15, vcc
34856 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v13
34857 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
34858 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
34859 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
34860 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
34862 ; GFX8-LABEL: v_select_v16bf16:
34863 ; GFX8:       ; %bb.0:
34864 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34865 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
34866 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34867 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v9, v1, vcc
34868 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v10, v2, vcc
34869 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v11, v3, vcc
34870 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v12, v4, vcc
34871 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v13, v5, vcc
34872 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v14, v6, vcc
34873 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v15, v7, vcc
34874 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v16, v8, vcc
34875 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
34877 ; GFX9-LABEL: v_select_v16bf16:
34878 ; GFX9:       ; %bb.0:
34879 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34880 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
34881 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34882 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v9, v1, vcc
34883 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v10, v2, vcc
34884 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v11, v3, vcc
34885 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v12, v4, vcc
34886 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v13, v5, vcc
34887 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v14, v6, vcc
34888 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v15, v7, vcc
34889 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v16, v8, vcc
34890 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
34892 ; GFX10-LABEL: v_select_v16bf16:
34893 ; GFX10:       ; %bb.0:
34894 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34895 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
34896 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34897 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v9, v1, vcc_lo
34898 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v10, v2, vcc_lo
34899 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v11, v3, vcc_lo
34900 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v12, v4, vcc_lo
34901 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v13, v5, vcc_lo
34902 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v14, v6, vcc_lo
34903 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v15, v7, vcc_lo
34904 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v16, v8, vcc_lo
34905 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
34907 ; GFX11-LABEL: v_select_v16bf16:
34908 ; GFX11:       ; %bb.0:
34909 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34910 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
34911 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
34912 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
34913 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v9, v1 :: v_dual_cndmask_b32 v1, v10, v2
34914 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v11, v3 :: v_dual_cndmask_b32 v3, v12, v4
34915 ; GFX11-NEXT:    v_dual_cndmask_b32 v4, v13, v5 :: v_dual_cndmask_b32 v5, v14, v6
34916 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v15, v7 :: v_dual_cndmask_b32 v7, v16, v8
34917 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
34918   %op = select i1 %cond, <16 x bfloat> %a, <16 x bfloat> %b
34919   ret <16 x bfloat> %op
34922 define <32 x bfloat> @v_select_v32bf16(i1 %cond, <32 x bfloat> %a, <32 x bfloat> %b) {
34923 ; GCN-LABEL: v_select_v32bf16:
34924 ; GCN:       ; %bb.0:
34925 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34926 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
34927 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
34928 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v2
34929 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
34930 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
34931 ; GCN-NEXT:    v_alignbit_b32 v0, v0, v1, 16
34932 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v4
34933 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v3
34934 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
34935 ; GCN-NEXT:    v_alignbit_b32 v1, v1, v2, 16
34936 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v6
34937 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v5
34938 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
34939 ; GCN-NEXT:    v_alignbit_b32 v2, v2, v3, 16
34940 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v8
34941 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v7
34942 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
34943 ; GCN-NEXT:    v_alignbit_b32 v3, v3, v4, 16
34944 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v10
34945 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v9
34946 ; GCN-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
34947 ; GCN-NEXT:    v_alignbit_b32 v4, v4, v5, 16
34948 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v12
34949 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v11
34950 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
34951 ; GCN-NEXT:    v_alignbit_b32 v5, v5, v6, 16
34952 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v14
34953 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v13
34954 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
34955 ; GCN-NEXT:    v_alignbit_b32 v6, v6, v7, 16
34956 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v16
34957 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v15
34958 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
34959 ; GCN-NEXT:    v_alignbit_b32 v7, v7, v8, 16
34960 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v18
34961 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v17
34962 ; GCN-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
34963 ; GCN-NEXT:    v_alignbit_b32 v8, v8, v9, 16
34964 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v20
34965 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v19
34966 ; GCN-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
34967 ; GCN-NEXT:    v_alignbit_b32 v9, v9, v10, 16
34968 ; GCN-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:12
34969 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v22
34970 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v21
34971 ; GCN-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
34972 ; GCN-NEXT:    v_alignbit_b32 v10, v10, v11, 16
34973 ; GCN-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:8
34974 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v24
34975 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v23
34976 ; GCN-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
34977 ; GCN-NEXT:    v_alignbit_b32 v11, v11, v12, 16
34978 ; GCN-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:20
34979 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v26
34980 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v25
34981 ; GCN-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
34982 ; GCN-NEXT:    v_alignbit_b32 v12, v12, v13, 16
34983 ; GCN-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:16
34984 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v28
34985 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v27
34986 ; GCN-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
34987 ; GCN-NEXT:    v_alignbit_b32 v13, v13, v14, 16
34988 ; GCN-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:28
34989 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v30
34990 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v29
34991 ; GCN-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
34992 ; GCN-NEXT:    v_alignbit_b32 v14, v14, v20, 16
34993 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:24
34994 ; GCN-NEXT:    s_waitcnt vmcnt(5)
34995 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
34996 ; GCN-NEXT:    s_waitcnt vmcnt(4)
34997 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
34998 ; GCN-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
34999 ; GCN-NEXT:    v_alignbit_b32 v15, v15, v16, 16
35000 ; GCN-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:36
35001 ; GCN-NEXT:    s_waitcnt vmcnt(4)
35002 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v17
35003 ; GCN-NEXT:    s_waitcnt vmcnt(3)
35004 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v18
35005 ; GCN-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
35006 ; GCN-NEXT:    v_alignbit_b32 v16, v16, v17, 16
35007 ; GCN-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:32
35008 ; GCN-NEXT:    s_waitcnt vmcnt(3)
35009 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v19
35010 ; GCN-NEXT:    s_waitcnt vmcnt(2)
35011 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v20
35012 ; GCN-NEXT:    v_lshrrev_b32_e32 v17, 16, v17
35013 ; GCN-NEXT:    v_alignbit_b32 v17, v17, v19, 16
35014 ; GCN-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:44
35015 ; GCN-NEXT:    s_waitcnt vmcnt(2)
35016 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v21
35017 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35018 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
35019 ; GCN-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:40
35020 ; GCN-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
35021 ; GCN-NEXT:    v_alignbit_b32 v18, v20, v18, 16
35022 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35023 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
35024 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35025 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v21
35026 ; GCN-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:52
35027 ; GCN-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:48
35028 ; GCN-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
35029 ; GCN-NEXT:    v_alignbit_b32 v19, v19, v20, 16
35030 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35031 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v21
35032 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35033 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v22
35034 ; GCN-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:60
35035 ; GCN-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:56
35036 ; GCN-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
35037 ; GCN-NEXT:    v_alignbit_b32 v20, v20, v21, 16
35038 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35039 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v22
35040 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35041 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v23
35042 ; GCN-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:68
35043 ; GCN-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:64
35044 ; GCN-NEXT:    v_lshrrev_b32_e32 v21, 16, v21
35045 ; GCN-NEXT:    v_alignbit_b32 v21, v21, v22, 16
35046 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35047 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v23
35048 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35049 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v24
35050 ; GCN-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:76
35051 ; GCN-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:72
35052 ; GCN-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
35053 ; GCN-NEXT:    v_alignbit_b32 v22, v22, v23, 16
35054 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35055 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v24
35056 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35057 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v25
35058 ; GCN-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:84
35059 ; GCN-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:80
35060 ; GCN-NEXT:    v_lshrrev_b32_e32 v23, 16, v23
35061 ; GCN-NEXT:    v_alignbit_b32 v23, v23, v24, 16
35062 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35063 ; GCN-NEXT:    v_mul_f32_e32 v24, 1.0, v25
35064 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35065 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v26
35066 ; GCN-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:92
35067 ; GCN-NEXT:    buffer_load_dword v27, off, s[0:3], s32 offset:88
35068 ; GCN-NEXT:    v_lshrrev_b32_e32 v24, 16, v24
35069 ; GCN-NEXT:    v_alignbit_b32 v24, v24, v25, 16
35070 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35071 ; GCN-NEXT:    v_mul_f32_e32 v25, 1.0, v26
35072 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35073 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v27
35074 ; GCN-NEXT:    buffer_load_dword v27, off, s[0:3], s32 offset:100
35075 ; GCN-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:96
35076 ; GCN-NEXT:    v_lshrrev_b32_e32 v25, 16, v25
35077 ; GCN-NEXT:    v_alignbit_b32 v25, v25, v26, 16
35078 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35079 ; GCN-NEXT:    v_mul_f32_e32 v26, 1.0, v27
35080 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35081 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v28
35082 ; GCN-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:108
35083 ; GCN-NEXT:    buffer_load_dword v29, off, s[0:3], s32 offset:104
35084 ; GCN-NEXT:    v_lshrrev_b32_e32 v26, 16, v26
35085 ; GCN-NEXT:    v_alignbit_b32 v26, v26, v27, 16
35086 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35087 ; GCN-NEXT:    v_mul_f32_e32 v27, 1.0, v28
35088 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35089 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v29
35090 ; GCN-NEXT:    buffer_load_dword v29, off, s[0:3], s32 offset:116
35091 ; GCN-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:112
35092 ; GCN-NEXT:    v_lshrrev_b32_e32 v27, 16, v27
35093 ; GCN-NEXT:    v_alignbit_b32 v27, v27, v28, 16
35094 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35095 ; GCN-NEXT:    v_mul_f32_e32 v28, 1.0, v29
35096 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35097 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v30
35098 ; GCN-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:124
35099 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:120
35100 ; GCN-NEXT:    v_lshrrev_b32_e32 v28, 16, v28
35101 ; GCN-NEXT:    v_alignbit_b32 v28, v28, v29, 16
35102 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35103 ; GCN-NEXT:    v_mul_f32_e32 v29, 1.0, v30
35104 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35105 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v31
35106 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4
35107 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32
35108 ; GCN-NEXT:    v_lshrrev_b32_e32 v29, 16, v29
35109 ; GCN-NEXT:    v_alignbit_b32 v29, v29, v30, 16
35110 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35111 ; GCN-NEXT:    v_mul_f32_e32 v30, 1.0, v31
35112 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35113 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v32
35114 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:132
35115 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:128
35116 ; GCN-NEXT:    v_lshrrev_b32_e32 v30, 16, v30
35117 ; GCN-NEXT:    v_alignbit_b32 v30, v30, v31, 16
35118 ; GCN-NEXT:    s_waitcnt vmcnt(1)
35119 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v32
35120 ; GCN-NEXT:    s_waitcnt vmcnt(0)
35121 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v33
35122 ; GCN-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
35123 ; GCN-NEXT:    v_alignbit_b32 v31, v31, v32, 16
35124 ; GCN-NEXT:    v_cndmask_b32_e32 v31, v31, v30, vcc
35125 ; GCN-NEXT:    v_cndmask_b32_e32 v29, v29, v14, vcc
35126 ; GCN-NEXT:    v_cndmask_b32_e32 v28, v28, v13, vcc
35127 ; GCN-NEXT:    v_cndmask_b32_e32 v27, v27, v12, vcc
35128 ; GCN-NEXT:    v_cndmask_b32_e32 v26, v26, v11, vcc
35129 ; GCN-NEXT:    v_cndmask_b32_e32 v25, v25, v10, vcc
35130 ; GCN-NEXT:    v_cndmask_b32_e32 v24, v24, v9, vcc
35131 ; GCN-NEXT:    v_cndmask_b32_e32 v23, v23, v8, vcc
35132 ; GCN-NEXT:    v_cndmask_b32_e32 v22, v22, v7, vcc
35133 ; GCN-NEXT:    v_cndmask_b32_e32 v13, v21, v6, vcc
35134 ; GCN-NEXT:    v_cndmask_b32_e32 v11, v20, v5, vcc
35135 ; GCN-NEXT:    v_cndmask_b32_e32 v9, v19, v4, vcc
35136 ; GCN-NEXT:    v_cndmask_b32_e32 v7, v18, v3, vcc
35137 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v17, v2, vcc
35138 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v16, v1, vcc
35139 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v15, v0, vcc
35140 ; GCN-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
35141 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35142 ; GCN-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
35143 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35144 ; GCN-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
35145 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
35146 ; GCN-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
35147 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
35148 ; GCN-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
35149 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
35150 ; GCN-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
35151 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
35152 ; GCN-NEXT:    v_lshlrev_b32_e32 v12, 16, v13
35153 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
35154 ; GCN-NEXT:    v_lshlrev_b32_e32 v14, 16, v22
35155 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v22
35156 ; GCN-NEXT:    v_lshlrev_b32_e32 v16, 16, v23
35157 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v23
35158 ; GCN-NEXT:    v_lshlrev_b32_e32 v18, 16, v24
35159 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v24
35160 ; GCN-NEXT:    v_lshlrev_b32_e32 v20, 16, v25
35161 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v25
35162 ; GCN-NEXT:    v_lshlrev_b32_e32 v22, 16, v26
35163 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v26
35164 ; GCN-NEXT:    v_lshlrev_b32_e32 v24, 16, v27
35165 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v27
35166 ; GCN-NEXT:    v_lshlrev_b32_e32 v26, 16, v28
35167 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v28
35168 ; GCN-NEXT:    v_lshlrev_b32_e32 v28, 16, v29
35169 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
35170 ; GCN-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
35171 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
35172 ; GCN-NEXT:    s_setpc_b64 s[30:31]
35174 ; GFX7-LABEL: v_select_v32bf16:
35175 ; GFX7:       ; %bb.0:
35176 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35177 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
35178 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35179 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
35180 ; GFX7-NEXT:    v_alignbit_b32 v1, v2, v1, 16
35181 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v4
35182 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35183 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
35184 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v3, 16
35185 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v6
35186 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
35187 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v5
35188 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v4, 16
35189 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v8
35190 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
35191 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v7
35192 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v5, 16
35193 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v10
35194 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
35195 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v9
35196 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
35197 ; GFX7-NEXT:    v_alignbit_b32 v5, v5, v6, 16
35198 ; GFX7-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:12
35199 ; GFX7-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:16
35200 ; GFX7-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:24
35201 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:40
35202 ; GFX7-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
35203 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
35204 ; GFX7-NEXT:    v_alignbit_b32 v17, v18, v17, 16
35205 ; GFX7-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:76
35206 ; GFX7-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:8
35207 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
35208 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
35209 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
35210 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
35211 ; GFX7-NEXT:    v_lshrrev_b32_e32 v28, 16, v28
35212 ; GFX7-NEXT:    v_mul_f32_e32 v27, 1.0, v27
35213 ; GFX7-NEXT:    v_alignbit_b32 v13, v14, v13, 16
35214 ; GFX7-NEXT:    v_alignbit_b32 v27, v28, v27, 16
35215 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
35216 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
35217 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
35218 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
35219 ; GFX7-NEXT:    v_lshrrev_b32_e32 v24, 16, v24
35220 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
35221 ; GFX7-NEXT:    v_alignbit_b32 v11, v12, v11, 16
35222 ; GFX7-NEXT:    v_alignbit_b32 v23, v24, v23, 16
35223 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
35224 ; GFX7-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
35225 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
35226 ; GFX7-NEXT:    v_alignbit_b32 v15, v16, v15, 16
35227 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
35228 ; GFX7-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
35229 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
35230 ; GFX7-NEXT:    v_alignbit_b32 v19, v20, v19, 16
35231 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
35232 ; GFX7-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
35233 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
35234 ; GFX7-NEXT:    v_alignbit_b32 v21, v22, v21, 16
35235 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
35236 ; GFX7-NEXT:    v_lshrrev_b32_e32 v26, 16, v26
35237 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
35238 ; GFX7-NEXT:    v_alignbit_b32 v25, v26, v25, 16
35239 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
35240 ; GFX7-NEXT:    v_lshrrev_b32_e32 v30, 16, v30
35241 ; GFX7-NEXT:    v_mul_f32_e32 v29, 1.0, v29
35242 ; GFX7-NEXT:    v_alignbit_b32 v29, v30, v29, 16
35243 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
35244 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
35245 ; GFX7-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:32
35246 ; GFX7-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:60
35247 ; GFX7-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:116
35248 ; GFX7-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:52
35249 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:100
35250 ; GFX7-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:68
35251 ; GFX7-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:84
35252 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:92
35253 ; GFX7-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:108
35254 ; GFX7-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:124
35255 ; GFX7-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:128
35256 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32
35257 ; GFX7-NEXT:    s_waitcnt vmcnt(14)
35258 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
35259 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
35260 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
35261 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
35262 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35263 ; GFX7-NEXT:    s_waitcnt vmcnt(13)
35264 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
35265 ; GFX7-NEXT:    s_waitcnt vmcnt(12)
35266 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
35267 ; GFX7-NEXT:    v_alignbit_b32 v6, v6, v7, 16
35268 ; GFX7-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:20
35269 ; GFX7-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
35270 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v6, v1, vcc
35271 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
35272 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35273 ; GFX7-NEXT:    s_waitcnt vmcnt(12)
35274 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
35275 ; GFX7-NEXT:    s_waitcnt vmcnt(11)
35276 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
35277 ; GFX7-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
35278 ; GFX7-NEXT:    s_waitcnt vmcnt(9)
35279 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
35280 ; GFX7-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
35281 ; GFX7-NEXT:    s_waitcnt vmcnt(7)
35282 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
35283 ; GFX7-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
35284 ; GFX7-NEXT:    s_waitcnt vmcnt(6)
35285 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
35286 ; GFX7-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
35287 ; GFX7-NEXT:    s_waitcnt vmcnt(5)
35288 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
35289 ; GFX7-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
35290 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
35291 ; GFX7-NEXT:    v_lshrrev_b32_e32 v24, 16, v24
35292 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
35293 ; GFX7-NEXT:    v_mul_f32_e32 v26, 1.0, v26
35294 ; GFX7-NEXT:    v_lshrrev_b32_e32 v26, 16, v26
35295 ; GFX7-NEXT:    v_mul_f32_e32 v28, 1.0, v28
35296 ; GFX7-NEXT:    v_lshrrev_b32_e32 v28, 16, v28
35297 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
35298 ; GFX7-NEXT:    v_mul_f32_e32 v30, 1.0, v30
35299 ; GFX7-NEXT:    v_lshrrev_b32_e32 v30, 16, v30
35300 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
35301 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
35302 ; GFX7-NEXT:    v_mul_f32_e32 v33, 1.0, v33
35303 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35304 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
35305 ; GFX7-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
35306 ; GFX7-NEXT:    v_alignbit_b32 v7, v7, v8, 16
35307 ; GFX7-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:28
35308 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35309 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
35310 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
35311 ; GFX7-NEXT:    v_alignbit_b32 v8, v8, v9, 16
35312 ; GFX7-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:36
35313 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35314 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
35315 ; GFX7-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
35316 ; GFX7-NEXT:    v_alignbit_b32 v9, v9, v10, 16
35317 ; GFX7-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:44
35318 ; GFX7-NEXT:    v_cndmask_b32_e32 v9, v9, v4, vcc
35319 ; GFX7-NEXT:    v_lshlrev_b32_e32 v6, 16, v9
35320 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35321 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
35322 ; GFX7-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
35323 ; GFX7-NEXT:    v_alignbit_b32 v10, v10, v31, 16
35324 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:48
35325 ; GFX7-NEXT:    v_cndmask_b32_e32 v10, v10, v5, vcc
35326 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v8, v3, vcc
35327 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v7, v2, vcc
35328 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 16, v3
35329 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35330 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
35331 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
35332 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v9
35333 ; GFX7-NEXT:    v_lshlrev_b32_e32 v8, 16, v10
35334 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v10
35335 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35336 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35337 ; GFX7-NEXT:    v_alignbit_b32 v12, v12, v31, 16
35338 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:56
35339 ; GFX7-NEXT:    v_cndmask_b32_e32 v11, v12, v11, vcc
35340 ; GFX7-NEXT:    v_lshlrev_b32_e32 v10, 16, v11
35341 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
35342 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35343 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35344 ; GFX7-NEXT:    v_alignbit_b32 v14, v14, v31, 16
35345 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:64
35346 ; GFX7-NEXT:    v_cndmask_b32_e32 v13, v14, v13, vcc
35347 ; GFX7-NEXT:    v_lshlrev_b32_e32 v12, 16, v13
35348 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
35349 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35350 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35351 ; GFX7-NEXT:    v_alignbit_b32 v16, v16, v31, 16
35352 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:72
35353 ; GFX7-NEXT:    v_cndmask_b32_e32 v15, v16, v15, vcc
35354 ; GFX7-NEXT:    v_lshlrev_b32_e32 v14, 16, v15
35355 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
35356 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35357 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35358 ; GFX7-NEXT:    v_alignbit_b32 v18, v18, v31, 16
35359 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:80
35360 ; GFX7-NEXT:    v_cndmask_b32_e32 v17, v18, v17, vcc
35361 ; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 16, v17
35362 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
35363 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35364 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35365 ; GFX7-NEXT:    v_alignbit_b32 v20, v20, v31, 16
35366 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:88
35367 ; GFX7-NEXT:    v_cndmask_b32_e32 v19, v20, v19, vcc
35368 ; GFX7-NEXT:    v_lshlrev_b32_e32 v18, 16, v19
35369 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
35370 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35371 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35372 ; GFX7-NEXT:    v_alignbit_b32 v22, v22, v31, 16
35373 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:96
35374 ; GFX7-NEXT:    v_cndmask_b32_e32 v21, v22, v21, vcc
35375 ; GFX7-NEXT:    v_lshlrev_b32_e32 v20, 16, v21
35376 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
35377 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35378 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35379 ; GFX7-NEXT:    v_alignbit_b32 v24, v24, v31, 16
35380 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:104
35381 ; GFX7-NEXT:    v_cndmask_b32_e32 v23, v24, v23, vcc
35382 ; GFX7-NEXT:    v_lshlrev_b32_e32 v22, 16, v23
35383 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
35384 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35385 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35386 ; GFX7-NEXT:    v_alignbit_b32 v26, v26, v31, 16
35387 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:112
35388 ; GFX7-NEXT:    v_cndmask_b32_e32 v25, v26, v25, vcc
35389 ; GFX7-NEXT:    v_lshlrev_b32_e32 v24, 16, v25
35390 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
35391 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35392 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35393 ; GFX7-NEXT:    v_alignbit_b32 v28, v28, v31, 16
35394 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:120
35395 ; GFX7-NEXT:    v_cndmask_b32_e32 v27, v28, v27, vcc
35396 ; GFX7-NEXT:    v_lshlrev_b32_e32 v26, 16, v27
35397 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
35398 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35399 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35400 ; GFX7-NEXT:    v_alignbit_b32 v30, v30, v31, 16
35401 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4
35402 ; GFX7-NEXT:    v_cndmask_b32_e32 v29, v30, v29, vcc
35403 ; GFX7-NEXT:    v_lshlrev_b32_e32 v28, 16, v29
35404 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
35405 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35406 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
35407 ; GFX7-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
35408 ; GFX7-NEXT:    v_alignbit_b32 v31, v31, v32, 16
35409 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:132
35410 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
35411 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
35412 ; GFX7-NEXT:    v_lshrrev_b32_e32 v32, 16, v32
35413 ; GFX7-NEXT:    v_alignbit_b32 v32, v32, v33, 16
35414 ; GFX7-NEXT:    v_cndmask_b32_e32 v31, v32, v31, vcc
35415 ; GFX7-NEXT:    v_lshlrev_b32_e32 v30, 16, v31
35416 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
35417 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
35419 ; GFX8-LABEL: v_select_v32bf16:
35420 ; GFX8:       ; %bb.0:
35421 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35422 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
35423 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
35424 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v17, v1, vcc
35425 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v18, v2, vcc
35426 ; GFX8-NEXT:    buffer_load_dword v17, off, s[0:3], s32
35427 ; GFX8-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:4
35428 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v19, v3, vcc
35429 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v20, v4, vcc
35430 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v21, v5, vcc
35431 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v22, v6, vcc
35432 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v23, v7, vcc
35433 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v24, v8, vcc
35434 ; GFX8-NEXT:    v_cndmask_b32_e32 v8, v25, v9, vcc
35435 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v26, v10, vcc
35436 ; GFX8-NEXT:    v_cndmask_b32_e32 v10, v27, v11, vcc
35437 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v28, v12, vcc
35438 ; GFX8-NEXT:    v_cndmask_b32_e32 v12, v29, v13, vcc
35439 ; GFX8-NEXT:    v_cndmask_b32_e32 v13, v30, v14, vcc
35440 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
35441 ; GFX8-NEXT:    v_cndmask_b32_e32 v14, v17, v15, vcc
35442 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
35443 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v18, v16, vcc
35444 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
35446 ; GFX9-LABEL: v_select_v32bf16:
35447 ; GFX9:       ; %bb.0:
35448 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35449 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
35450 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
35451 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v17, v1, vcc
35452 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v18, v2, vcc
35453 ; GFX9-NEXT:    buffer_load_dword v17, off, s[0:3], s32
35454 ; GFX9-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:4
35455 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v19, v3, vcc
35456 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v20, v4, vcc
35457 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v21, v5, vcc
35458 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v22, v6, vcc
35459 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v23, v7, vcc
35460 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v24, v8, vcc
35461 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v25, v9, vcc
35462 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v26, v10, vcc
35463 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v27, v11, vcc
35464 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v28, v12, vcc
35465 ; GFX9-NEXT:    v_cndmask_b32_e32 v12, v29, v13, vcc
35466 ; GFX9-NEXT:    v_cndmask_b32_e32 v13, v30, v14, vcc
35467 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
35468 ; GFX9-NEXT:    v_cndmask_b32_e32 v14, v17, v15, vcc
35469 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
35470 ; GFX9-NEXT:    v_cndmask_b32_e32 v15, v18, v16, vcc
35471 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
35473 ; GFX10-LABEL: v_select_v32bf16:
35474 ; GFX10:       ; %bb.0:
35475 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35476 ; GFX10-NEXT:    s_clause 0x1
35477 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32
35478 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:4
35479 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
35480 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
35481 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v17, v1, vcc_lo
35482 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v18, v2, vcc_lo
35483 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v19, v3, vcc_lo
35484 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v20, v4, vcc_lo
35485 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v21, v5, vcc_lo
35486 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v22, v6, vcc_lo
35487 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v23, v7, vcc_lo
35488 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v24, v8, vcc_lo
35489 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v25, v9, vcc_lo
35490 ; GFX10-NEXT:    v_cndmask_b32_e32 v9, v26, v10, vcc_lo
35491 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v27, v11, vcc_lo
35492 ; GFX10-NEXT:    v_cndmask_b32_e32 v11, v28, v12, vcc_lo
35493 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v29, v13, vcc_lo
35494 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v30, v14, vcc_lo
35495 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
35496 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v31, v15, vcc_lo
35497 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
35498 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v32, v16, vcc_lo
35499 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
35501 ; GFX11-LABEL: v_select_v32bf16:
35502 ; GFX11:       ; %bb.0:
35503 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35504 ; GFX11-NEXT:    s_clause 0x1
35505 ; GFX11-NEXT:    scratch_load_b32 v31, off, s32
35506 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32 offset:4
35507 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
35508 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
35509 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
35510 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v17, v1 :: v_dual_cndmask_b32 v1, v18, v2
35511 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v19, v3 :: v_dual_cndmask_b32 v3, v20, v4
35512 ; GFX11-NEXT:    v_dual_cndmask_b32 v4, v21, v5 :: v_dual_cndmask_b32 v5, v22, v6
35513 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v23, v7 :: v_dual_cndmask_b32 v7, v24, v8
35514 ; GFX11-NEXT:    v_dual_cndmask_b32 v8, v25, v9 :: v_dual_cndmask_b32 v9, v26, v10
35515 ; GFX11-NEXT:    v_dual_cndmask_b32 v10, v27, v11 :: v_dual_cndmask_b32 v11, v28, v12
35516 ; GFX11-NEXT:    v_dual_cndmask_b32 v12, v29, v13 :: v_dual_cndmask_b32 v13, v30, v14
35517 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
35518 ; GFX11-NEXT:    v_dual_cndmask_b32 v14, v31, v15 :: v_dual_cndmask_b32 v15, v32, v16
35519 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
35520   %op = select i1 %cond, <32 x bfloat> %a, <32 x bfloat> %b
35521   ret <32 x bfloat> %op
35524 define amdgpu_ps <2 x i32> @s_select_v3bf16(<3 x bfloat> inreg %a, <3 x bfloat> inreg %b, i32 %c) {
35525 ; GCN-LABEL: s_select_v3bf16:
35526 ; GCN:       ; %bb.0:
35527 ; GCN-NEXT:    v_mul_f32_e64 v1, 1.0, s1
35528 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s0
35529 ; GCN-NEXT:    v_mul_f32_e64 v3, 1.0, s4
35530 ; GCN-NEXT:    v_mul_f32_e64 v4, 1.0, s3
35531 ; GCN-NEXT:    v_mul_f32_e64 v5, 1.0, s2
35532 ; GCN-NEXT:    v_mul_f32_e64 v6, 1.0, s5
35533 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
35534 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
35535 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
35536 ; GCN-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
35537 ; GCN-NEXT:    v_alignbit_b32 v1, v1, v2, 16
35538 ; GCN-NEXT:    v_alignbit_b32 v2, v3, v4, 16
35539 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35540 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v6, v5, vcc
35541 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
35542 ; GCN-NEXT:    v_readfirstlane_b32 s0, v1
35543 ; GCN-NEXT:    v_readfirstlane_b32 s1, v0
35544 ; GCN-NEXT:    ; return to shader part epilog
35546 ; GFX7-LABEL: s_select_v3bf16:
35547 ; GFX7:       ; %bb.0:
35548 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s1
35549 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
35550 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s0
35551 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v2, 16
35552 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s4
35553 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35554 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s3
35555 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v3, 16
35556 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s2
35557 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s5
35558 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
35559 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
35560 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35561 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
35562 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
35563 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v1
35564 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
35565 ; GFX7-NEXT:    ; return to shader part epilog
35567 ; GFX8-LABEL: s_select_v3bf16:
35568 ; GFX8:       ; %bb.0:
35569 ; GFX8-NEXT:    v_mov_b32_e32 v1, s2
35570 ; GFX8-NEXT:    v_mov_b32_e32 v2, s0
35571 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35572 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
35573 ; GFX8-NEXT:    v_mov_b32_e32 v1, s3
35574 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
35575 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
35576 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff, v1
35577 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
35578 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v1
35579 ; GFX8-NEXT:    ; return to shader part epilog
35581 ; GFX9-LABEL: s_select_v3bf16:
35582 ; GFX9:       ; %bb.0:
35583 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
35584 ; GFX9-NEXT:    v_mov_b32_e32 v2, s0
35585 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35586 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
35587 ; GFX9-NEXT:    v_mov_b32_e32 v1, s3
35588 ; GFX9-NEXT:    v_mov_b32_e32 v2, s1
35589 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
35590 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff, v1
35591 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
35592 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v1
35593 ; GFX9-NEXT:    ; return to shader part epilog
35595 ; GFX10-LABEL: s_select_v3bf16:
35596 ; GFX10:       ; %bb.0:
35597 ; GFX10-NEXT:    v_mov_b32_e32 v1, s0
35598 ; GFX10-NEXT:    v_mov_b32_e32 v2, s1
35599 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35600 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s2, v1, vcc_lo
35601 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s3, v2, vcc_lo
35602 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
35603 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff, v1
35604 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v1
35605 ; GFX10-NEXT:    ; return to shader part epilog
35607 ; GFX11-LABEL: s_select_v3bf16:
35608 ; GFX11:       ; %bb.0:
35609 ; GFX11-NEXT:    v_dual_mov_b32 v1, s0 :: v_dual_mov_b32 v2, s1
35610 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35611 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
35612 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s2, v1, vcc_lo
35613 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s3, v2, vcc_lo
35614 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
35615 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
35616 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v1
35617 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
35618 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v1
35619 ; GFX11-NEXT:    ; return to shader part epilog
35620   %cond = icmp eq i32 %c, 0
35621   %op = select i1 %cond, <3 x bfloat> %a, <3 x bfloat> %b
35622   %cast = bitcast <3 x bfloat> %op to i48
35623   %elt0 = trunc i48 %cast to i32
35624   %elt1.hi = lshr i48 %cast, 32
35625   %elt1 = trunc i48 %elt1.hi to i32
35626   %readlane0 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt0)
35627   %readlane1 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt1)
35628   %bv.0 = insertelement <2 x i32> poison, i32 %readlane0, i32 0
35629   %bv.1 = insertelement <2 x i32> %bv.0, i32 %readlane1, i32 1
35630   ret <2 x i32> %bv.1
35633 define amdgpu_ps <2 x i32> @s_select_v4bf16(<4 x bfloat> inreg %a, <4 x bfloat> inreg %b, i32 %c) {
35634 ; GCN-LABEL: s_select_v4bf16:
35635 ; GCN:       ; %bb.0:
35636 ; GCN-NEXT:    v_mul_f32_e64 v1, 1.0, s1
35637 ; GCN-NEXT:    v_mul_f32_e64 v2, 1.0, s0
35638 ; GCN-NEXT:    v_mul_f32_e64 v3, 1.0, s5
35639 ; GCN-NEXT:    v_mul_f32_e64 v4, 1.0, s4
35640 ; GCN-NEXT:    v_mul_f32_e64 v5, 1.0, s3
35641 ; GCN-NEXT:    v_mul_f32_e64 v6, 1.0, s2
35642 ; GCN-NEXT:    v_mul_f32_e64 v7, 1.0, s7
35643 ; GCN-NEXT:    v_mul_f32_e64 v8, 1.0, s6
35644 ; GCN-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
35645 ; GCN-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
35646 ; GCN-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
35647 ; GCN-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
35648 ; GCN-NEXT:    v_alignbit_b32 v1, v1, v2, 16
35649 ; GCN-NEXT:    v_alignbit_b32 v2, v3, v4, 16
35650 ; GCN-NEXT:    v_alignbit_b32 v3, v5, v6, 16
35651 ; GCN-NEXT:    v_alignbit_b32 v4, v7, v8, 16
35652 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35653 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
35654 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
35655 ; GCN-NEXT:    v_readfirstlane_b32 s0, v1
35656 ; GCN-NEXT:    v_readfirstlane_b32 s1, v0
35657 ; GCN-NEXT:    ; return to shader part epilog
35659 ; GFX7-LABEL: s_select_v4bf16:
35660 ; GFX7:       ; %bb.0:
35661 ; GFX7-NEXT:    v_mul_f32_e64 v1, 1.0, s1
35662 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
35663 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s0
35664 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v2, 16
35665 ; GFX7-NEXT:    v_mul_f32_e64 v2, 1.0, s5
35666 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35667 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s4
35668 ; GFX7-NEXT:    v_alignbit_b32 v2, v2, v3, 16
35669 ; GFX7-NEXT:    v_mul_f32_e64 v3, 1.0, s3
35670 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
35671 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s2
35672 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v4, 16
35673 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s7
35674 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
35675 ; GFX7-NEXT:    v_mul_f32_e64 v5, 1.0, s6
35676 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v5, 16
35677 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35678 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v4, v3, vcc
35679 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v2, v1, vcc
35680 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v1
35681 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
35682 ; GFX7-NEXT:    ; return to shader part epilog
35684 ; GFX8-LABEL: s_select_v4bf16:
35685 ; GFX8:       ; %bb.0:
35686 ; GFX8-NEXT:    v_mov_b32_e32 v1, s3
35687 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
35688 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35689 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
35690 ; GFX8-NEXT:    v_mov_b32_e32 v1, s2
35691 ; GFX8-NEXT:    v_mov_b32_e32 v2, s0
35692 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
35693 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v1
35694 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
35695 ; GFX8-NEXT:    ; return to shader part epilog
35697 ; GFX9-LABEL: s_select_v4bf16:
35698 ; GFX9:       ; %bb.0:
35699 ; GFX9-NEXT:    v_mov_b32_e32 v1, s3
35700 ; GFX9-NEXT:    v_mov_b32_e32 v2, s1
35701 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35702 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
35703 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
35704 ; GFX9-NEXT:    v_mov_b32_e32 v2, s0
35705 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
35706 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v1
35707 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v0
35708 ; GFX9-NEXT:    ; return to shader part epilog
35710 ; GFX10-LABEL: s_select_v4bf16:
35711 ; GFX10:       ; %bb.0:
35712 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
35713 ; GFX10-NEXT:    v_mov_b32_e32 v2, s0
35714 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35715 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s3, v1, vcc_lo
35716 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s2, v2, vcc_lo
35717 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v0
35718 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v1
35719 ; GFX10-NEXT:    ; return to shader part epilog
35721 ; GFX11-LABEL: s_select_v4bf16:
35722 ; GFX11:       ; %bb.0:
35723 ; GFX11-NEXT:    v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s0
35724 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35725 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
35726 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s3, v1, vcc_lo
35727 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s2, v2, vcc_lo
35728 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
35729 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v0
35730 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v1
35731 ; GFX11-NEXT:    ; return to shader part epilog
35732   %cond = icmp eq i32 %c, 0
35733   %op = select i1 %cond, <4 x bfloat> %a, <4 x bfloat> %b
35734   %cast = bitcast <4 x bfloat> %op to <2 x i32>
35735   %elt0 = extractelement <2 x i32> %cast, i32 0
35736   %elt1 = extractelement <2 x i32> %cast, i32 1
35737   %readlane0 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt0)
35738   %readlane1 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt1)
35739   %bv.0 = insertelement <2 x i32> poison, i32 %readlane0, i32 0
35740   %bv.1 = insertelement <2 x i32> %bv.0, i32 %readlane1, i32 1
35741   ret <2 x i32> %bv.1
35744 define amdgpu_ps <2 x i32> @s_vselect_v4bf16(<4 x bfloat> inreg %a, <4 x bfloat> inreg %b, <4 x i32> %c) {
35745 ; GCN-LABEL: s_vselect_v4bf16:
35746 ; GCN:       ; %bb.0:
35747 ; GCN-NEXT:    v_mul_f32_e64 v4, 1.0, s0
35748 ; GCN-NEXT:    v_mul_f32_e64 v5, 1.0, s4
35749 ; GCN-NEXT:    v_mul_f32_e64 v6, 1.0, s1
35750 ; GCN-NEXT:    v_mul_f32_e64 v7, 1.0, s5
35751 ; GCN-NEXT:    v_mul_f32_e64 v8, 1.0, s2
35752 ; GCN-NEXT:    v_mul_f32_e64 v9, 1.0, s6
35753 ; GCN-NEXT:    v_mul_f32_e64 v10, 1.0, s3
35754 ; GCN-NEXT:    v_mul_f32_e64 v11, 1.0, s7
35755 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
35756 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v11, v10, vcc
35757 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2
35758 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v9, v8, vcc
35759 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
35760 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v7, v6, vcc
35761 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35762 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v5, v4, vcc
35763 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35764 ; GCN-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35765 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35766 ; GCN-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
35767 ; GCN-NEXT:    v_or_b32_e32 v2, v2, v3
35768 ; GCN-NEXT:    v_or_b32_e32 v0, v0, v1
35769 ; GCN-NEXT:    v_readfirstlane_b32 s0, v0
35770 ; GCN-NEXT:    v_readfirstlane_b32 s1, v2
35771 ; GCN-NEXT:    ; return to shader part epilog
35773 ; GFX7-LABEL: s_vselect_v4bf16:
35774 ; GFX7:       ; %bb.0:
35775 ; GFX7-NEXT:    v_mul_f32_e64 v10, 1.0, s3
35776 ; GFX7-NEXT:    v_mul_f32_e64 v11, 1.0, s7
35777 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
35778 ; GFX7-NEXT:    v_mul_f32_e64 v8, 1.0, s2
35779 ; GFX7-NEXT:    v_mul_f32_e64 v9, 1.0, s6
35780 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v11, v10, vcc
35781 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2
35782 ; GFX7-NEXT:    v_mul_f32_e64 v6, 1.0, s1
35783 ; GFX7-NEXT:    v_mul_f32_e64 v7, 1.0, s5
35784 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v9, v8, vcc
35785 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
35786 ; GFX7-NEXT:    v_mul_f32_e64 v4, 1.0, s0
35787 ; GFX7-NEXT:    v_mul_f32_e64 v5, 1.0, s4
35788 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v7, v6, vcc
35789 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35790 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v5, v4, vcc
35791 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35792 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
35793 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35794 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
35795 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v3
35796 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
35797 ; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
35798 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v2
35799 ; GFX7-NEXT:    ; return to shader part epilog
35801 ; GFX8-LABEL: s_vselect_v4bf16:
35802 ; GFX8:       ; %bb.0:
35803 ; GFX8-NEXT:    s_lshr_b32 s4, s1, 16
35804 ; GFX8-NEXT:    s_lshr_b32 s5, s3, 16
35805 ; GFX8-NEXT:    v_mov_b32_e32 v4, s5
35806 ; GFX8-NEXT:    v_mov_b32_e32 v5, s4
35807 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
35808 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
35809 ; GFX8-NEXT:    v_mov_b32_e32 v4, s3
35810 ; GFX8-NEXT:    v_mov_b32_e32 v5, s1
35811 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2
35812 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
35813 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc
35814 ; GFX8-NEXT:    s_lshr_b32 s1, s0, 16
35815 ; GFX8-NEXT:    s_lshr_b32 s3, s2, 16
35816 ; GFX8-NEXT:    v_or_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
35817 ; GFX8-NEXT:    v_mov_b32_e32 v3, s3
35818 ; GFX8-NEXT:    v_mov_b32_e32 v4, s1
35819 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
35820 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
35821 ; GFX8-NEXT:    v_mov_b32_e32 v3, s2
35822 ; GFX8-NEXT:    v_mov_b32_e32 v4, s0
35823 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35824 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
35825 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
35826 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
35827 ; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
35828 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v2
35829 ; GFX8-NEXT:    ; return to shader part epilog
35831 ; GFX9-LABEL: s_vselect_v4bf16:
35832 ; GFX9:       ; %bb.0:
35833 ; GFX9-NEXT:    s_lshr_b32 s4, s1, 16
35834 ; GFX9-NEXT:    s_lshr_b32 s5, s3, 16
35835 ; GFX9-NEXT:    v_mov_b32_e32 v4, s5
35836 ; GFX9-NEXT:    v_mov_b32_e32 v5, s4
35837 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v3
35838 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
35839 ; GFX9-NEXT:    v_mov_b32_e32 v4, s3
35840 ; GFX9-NEXT:    v_mov_b32_e32 v5, s1
35841 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v2
35842 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc
35843 ; GFX9-NEXT:    s_mov_b32 s1, 0x5040100
35844 ; GFX9-NEXT:    s_lshr_b32 s3, s0, 16
35845 ; GFX9-NEXT:    s_lshr_b32 s4, s2, 16
35846 ; GFX9-NEXT:    v_perm_b32 v2, v3, v2, s1
35847 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
35848 ; GFX9-NEXT:    v_mov_b32_e32 v4, s3
35849 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
35850 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
35851 ; GFX9-NEXT:    v_mov_b32_e32 v3, s2
35852 ; GFX9-NEXT:    v_mov_b32_e32 v4, s0
35853 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
35854 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
35855 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s1
35856 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
35857 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v2
35858 ; GFX9-NEXT:    ; return to shader part epilog
35860 ; GFX10-LABEL: s_vselect_v4bf16:
35861 ; GFX10:       ; %bb.0:
35862 ; GFX10-NEXT:    s_lshr_b32 s4, s1, 16
35863 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v3
35864 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
35865 ; GFX10-NEXT:    s_lshr_b32 s4, s3, 16
35866 ; GFX10-NEXT:    s_lshr_b32 s5, s0, 16
35867 ; GFX10-NEXT:    v_mov_b32_e32 v6, s0
35868 ; GFX10-NEXT:    s_lshr_b32 s0, s2, 16
35869 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, s4, v4, vcc_lo
35870 ; GFX10-NEXT:    v_mov_b32_e32 v4, s5
35871 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v1
35872 ; GFX10-NEXT:    v_mov_b32_e32 v5, s1
35873 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s0, v4, vcc_lo
35874 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35875 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s2, v6, vcc_lo
35876 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v2
35877 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
35878 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, s3, v5, vcc_lo
35879 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
35880 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
35881 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v1
35882 ; GFX10-NEXT:    ; return to shader part epilog
35884 ; GFX11-LABEL: s_vselect_v4bf16:
35885 ; GFX11:       ; %bb.0:
35886 ; GFX11-NEXT:    s_lshr_b32 s4, s1, 16
35887 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v3
35888 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v5, s1
35889 ; GFX11-NEXT:    s_lshr_b32 s4, s3, 16
35890 ; GFX11-NEXT:    s_lshr_b32 s5, s0, 16
35891 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
35892 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, s4, v4, vcc_lo
35893 ; GFX11-NEXT:    v_mov_b32_e32 v4, s5
35894 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v1
35895 ; GFX11-NEXT:    v_mov_b32_e32 v6, s0
35896 ; GFX11-NEXT:    s_lshr_b32 s0, s2, 16
35897 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instid1(SALU_CYCLE_1)
35898 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s0, v4, vcc_lo
35899 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
35900 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
35901 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s2, v6, vcc_lo
35902 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v2
35903 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
35904 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, s3, v5, vcc_lo
35905 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
35906 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v0
35907 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
35908 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
35909 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v1
35910 ; GFX11-NEXT:    ; return to shader part epilog
35911   %cond = icmp eq <4 x i32> %c, zeroinitializer
35912   %op = select <4 x i1> %cond, <4 x bfloat> %a, <4 x bfloat> %b
35913   %cast = bitcast <4 x bfloat> %op to <2 x i32>
35914   %elt0 = extractelement <2 x i32> %cast, i32 0
35915   %elt1 = extractelement <2 x i32> %cast, i32 1
35916   %readlane0 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt0)
35917   %readlane1 = call i32 @llvm.amdgcn.readfirstlane(i32 %elt1)
35918   %bv.0 = insertelement <2 x i32> poison, i32 %readlane0, i32 0
35919   %bv.1 = insertelement <2 x i32> %bv.0, i32 %readlane1, i32 1
35920   ret <2 x i32> %bv.1
35923 define <4 x bfloat> @v_vselect_v4bf16(<4 x i1> %cond, <4 x bfloat> %a, <4 x bfloat> %b) {
35924 ; GCN-LABEL: v_vselect_v4bf16:
35925 ; GCN:       ; %bb.0:
35926 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35927 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
35928 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
35929 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
35930 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
35931 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
35932 ; GCN-NEXT:    v_and_b32_e32 v1, 1, v1
35933 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
35934 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
35935 ; GCN-NEXT:    v_and_b32_e32 v2, 1, v2
35936 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
35937 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
35938 ; GCN-NEXT:    v_and_b32_e32 v3, 1, v3
35939 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
35940 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v11, v7, vcc
35941 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
35942 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v10, v6, vcc
35943 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
35944 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v9, v5, vcc
35945 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
35946 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v8, v4, vcc
35947 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
35948 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35949 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
35950 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35951 ; GCN-NEXT:    s_setpc_b64 s[30:31]
35953 ; GFX7-LABEL: v_vselect_v4bf16:
35954 ; GFX7:       ; %bb.0:
35955 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35956 ; GFX7-NEXT:    v_and_b32_e32 v3, 1, v3
35957 ; GFX7-NEXT:    v_and_b32_e32 v2, 1, v2
35958 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
35959 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
35960 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
35961 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
35962 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
35963 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
35964 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v11, v7, vcc
35965 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
35966 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
35967 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
35968 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
35969 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v10, v6, vcc
35970 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
35971 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
35972 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
35973 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v9, v5, vcc
35974 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
35975 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v8, v4, vcc
35976 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
35977 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
35978 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
35979 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
35980 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
35982 ; GFX8-LABEL: v_vselect_v4bf16:
35983 ; GFX8:       ; %bb.0:
35984 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
35985 ; GFX8-NEXT:    v_and_b32_e32 v3, 1, v3
35986 ; GFX8-NEXT:    v_and_b32_e32 v2, 1, v2
35987 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 16, v5
35988 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v7
35989 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
35990 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
35991 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v9, v8, vcc
35992 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
35993 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
35994 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v7, v5, vcc
35995 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v4
35996 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v6
35997 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
35998 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v7, v5, vcc
35999 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36000 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v6, v4, vcc
36001 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
36002 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36003 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
36004 ; GFX8-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36005 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
36007 ; GFX9-LABEL: v_vselect_v4bf16:
36008 ; GFX9:       ; %bb.0:
36009 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36010 ; GFX9-NEXT:    v_and_b32_e32 v2, 1, v2
36011 ; GFX9-NEXT:    v_and_b32_e32 v3, 1, v3
36012 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36013 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
36014 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v7, v5, vcc
36015 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
36016 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
36017 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36018 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
36019 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v7, v5, vcc
36020 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36021 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v6, v4, vcc
36022 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
36023 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v6
36024 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36025 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v4, vcc
36026 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
36027 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
36028 ; GFX9-NEXT:    v_perm_b32 v1, v3, v2, s4
36029 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
36031 ; GFX10-LABEL: v_vselect_v4bf16:
36032 ; GFX10:       ; %bb.0:
36033 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36034 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v2
36035 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
36036 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
36037 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v3
36038 ; GFX10-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
36039 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36040 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 16, v6
36041 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v7, v5, vcc_lo
36042 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36043 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
36044 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
36045 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v6, v4, vcc_lo
36046 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36047 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v9, v8, vcc_lo
36048 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36049 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36050 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v7, v5, vcc_lo
36051 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36052 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
36054 ; GFX11-LABEL: v_vselect_v4bf16:
36055 ; GFX11:       ; %bb.0:
36056 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36057 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v4
36058 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 16, v6
36059 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v2
36060 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
36061 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36062 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v7, v5 :: v_dual_and_b32 v3, 1, v3
36063 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
36064 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
36065 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
36066 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36067 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v6, v4 :: v_dual_and_b32 v1, 1, v1
36068 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_2)
36069 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36070 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v9, v8, vcc_lo
36071 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36072 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36073 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v7, v5, vcc_lo
36074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
36075 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36076 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
36077   %op = select <4 x i1> %cond, <4 x bfloat> %a, <4 x bfloat> %b
36078   ret <4 x bfloat> %op
36081 define <8 x bfloat> @v_vselect_v8bf16(<8 x i1> %cond, <8 x bfloat> %a, <8 x bfloat> %b) {
36082 ; GCN-LABEL: v_vselect_v8bf16:
36083 ; GCN:       ; %bb.0:
36084 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36085 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36086 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
36087 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
36088 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
36089 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
36090 ; GCN-NEXT:    v_and_b32_e32 v1, 1, v1
36091 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
36092 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
36093 ; GCN-NEXT:    v_and_b32_e32 v2, 1, v2
36094 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
36095 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v19
36096 ; GCN-NEXT:    v_and_b32_e32 v3, 1, v3
36097 ; GCN-NEXT:    v_mul_f32_e32 v12, 1.0, v12
36098 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
36099 ; GCN-NEXT:    v_and_b32_e32 v4, 1, v4
36100 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
36101 ; GCN-NEXT:    v_mul_f32_e32 v21, 1.0, v21
36102 ; GCN-NEXT:    v_and_b32_e32 v5, 1, v5
36103 ; GCN-NEXT:    v_mul_f32_e32 v14, 1.0, v14
36104 ; GCN-NEXT:    v_mul_f32_e32 v22, 1.0, v22
36105 ; GCN-NEXT:    v_and_b32_e32 v6, 1, v6
36106 ; GCN-NEXT:    v_mul_f32_e32 v15, 1.0, v15
36107 ; GCN-NEXT:    v_mul_f32_e32 v23, 1.0, v23
36108 ; GCN-NEXT:    v_and_b32_e32 v7, 1, v7
36109 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
36110 ; GCN-NEXT:    v_cndmask_b32_e32 v7, v23, v15, vcc
36111 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
36112 ; GCN-NEXT:    v_cndmask_b32_e32 v6, v22, v14, vcc
36113 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
36114 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v21, v13, vcc
36115 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
36116 ; GCN-NEXT:    v_cndmask_b32_e32 v4, v20, v12, vcc
36117 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36118 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v19, v11, vcc
36119 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36120 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v18, v10, vcc
36121 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36122 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v17, v9, vcc
36123 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36124 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v16, v8, vcc
36125 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
36126 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
36127 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
36128 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
36129 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
36130 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
36131 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
36132 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
36133 ; GCN-NEXT:    s_setpc_b64 s[30:31]
36135 ; GFX7-LABEL: v_vselect_v8bf16:
36136 ; GFX7:       ; %bb.0:
36137 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36138 ; GFX7-NEXT:    v_and_b32_e32 v7, 1, v7
36139 ; GFX7-NEXT:    v_and_b32_e32 v6, 1, v6
36140 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
36141 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
36142 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
36143 ; GFX7-NEXT:    v_and_b32_e32 v5, 1, v5
36144 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
36145 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
36146 ; GFX7-NEXT:    v_cndmask_b32_e32 v7, v23, v15, vcc
36147 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
36148 ; GFX7-NEXT:    v_and_b32_e32 v4, 1, v4
36149 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
36150 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
36151 ; GFX7-NEXT:    v_cndmask_b32_e32 v6, v22, v14, vcc
36152 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
36153 ; GFX7-NEXT:    v_and_b32_e32 v3, 1, v3
36154 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
36155 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
36156 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v21, v13, vcc
36157 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
36158 ; GFX7-NEXT:    v_and_b32_e32 v2, 1, v2
36159 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
36160 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
36161 ; GFX7-NEXT:    v_cndmask_b32_e32 v4, v20, v12, vcc
36162 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36163 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
36164 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
36165 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
36166 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v19, v11, vcc
36167 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36168 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
36169 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
36170 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
36171 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v18, v10, vcc
36172 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36173 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36174 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
36175 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v17, v9, vcc
36176 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36177 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v16, v8, vcc
36178 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
36179 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
36180 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
36181 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
36182 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
36183 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
36184 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
36185 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
36186 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
36188 ; GFX8-LABEL: v_vselect_v8bf16:
36189 ; GFX8:       ; %bb.0:
36190 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36191 ; GFX8-NEXT:    v_and_b32_e32 v7, 1, v7
36192 ; GFX8-NEXT:    v_and_b32_e32 v6, 1, v6
36193 ; GFX8-NEXT:    v_lshrrev_b32_e32 v16, 16, v11
36194 ; GFX8-NEXT:    v_lshrrev_b32_e32 v17, 16, v15
36195 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
36196 ; GFX8-NEXT:    v_and_b32_e32 v5, 1, v5
36197 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v17, v16, vcc
36198 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
36199 ; GFX8-NEXT:    v_and_b32_e32 v4, 1, v4
36200 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v15, v11, vcc
36201 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v10
36202 ; GFX8-NEXT:    v_lshrrev_b32_e32 v15, 16, v14
36203 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
36204 ; GFX8-NEXT:    v_and_b32_e32 v3, 1, v3
36205 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v15, v11, vcc
36206 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
36207 ; GFX8-NEXT:    v_and_b32_e32 v2, 1, v2
36208 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v14, v10, vcc
36209 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v9
36210 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v13
36211 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36212 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
36213 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v11, v10, vcc
36214 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36215 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
36216 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v13, v9, vcc
36217 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v8
36218 ; GFX8-NEXT:    v_lshrrev_b32_e32 v10, 16, v12
36219 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36220 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v10, v9, vcc
36221 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36222 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v12, v8, vcc
36223 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
36224 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36225 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
36226 ; GFX8-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36227 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
36228 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
36229 ; GFX8-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36230 ; GFX8-NEXT:    v_or_b32_sdwa v3, v6, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36231 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
36233 ; GFX9-LABEL: v_vselect_v8bf16:
36234 ; GFX9:       ; %bb.0:
36235 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36236 ; GFX9-NEXT:    v_and_b32_e32 v6, 1, v6
36237 ; GFX9-NEXT:    v_and_b32_e32 v7, 1, v7
36238 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
36239 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v4
36240 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v15, v11, vcc
36241 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
36242 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
36243 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
36244 ; GFX9-NEXT:    v_and_b32_e32 v5, 1, v5
36245 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v15, v11, vcc
36246 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
36247 ; GFX9-NEXT:    v_and_b32_e32 v2, 1, v2
36248 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v14, v10, vcc
36249 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
36250 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v14
36251 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
36252 ; GFX9-NEXT:    v_and_b32_e32 v3, 1, v3
36253 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v11, v10, vcc
36254 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36255 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
36256 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v13, v9, vcc
36257 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
36258 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v13
36259 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36260 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
36261 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v10, v9, vcc
36262 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36263 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v12, v8, vcc
36264 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
36265 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v12
36266 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36267 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v9, v8, vcc
36268 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
36269 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
36270 ; GFX9-NEXT:    v_perm_b32 v1, v3, v2, s4
36271 ; GFX9-NEXT:    v_perm_b32 v2, v5, v4, s4
36272 ; GFX9-NEXT:    v_perm_b32 v3, v7, v6, s4
36273 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
36275 ; GFX10-LABEL: v_vselect_v8bf16:
36276 ; GFX10:       ; %bb.0:
36277 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36278 ; GFX10-NEXT:    v_and_b32_e32 v6, 1, v6
36279 ; GFX10-NEXT:    v_and_b32_e32 v4, 1, v4
36280 ; GFX10-NEXT:    v_and_b32_e32 v5, 1, v5
36281 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v2
36282 ; GFX10-NEXT:    v_lshrrev_b32_e32 v16, 16, v10
36283 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
36284 ; GFX10-NEXT:    v_lshrrev_b32_e32 v17, 16, v14
36285 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
36286 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
36287 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v3
36288 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v15, v11, vcc_lo
36289 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
36290 ; GFX10-NEXT:    v_and_b32_e32 v7, 1, v7
36291 ; GFX10-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
36292 ; GFX10-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
36293 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v14, v10, vcc_lo
36294 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
36295 ; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v8
36296 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v12
36297 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v17, v16, vcc_lo
36298 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36299 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v13, v9, vcc_lo
36300 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36301 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
36302 ; GFX10-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
36303 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v12, v8, vcc_lo
36304 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36305 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v14, v10, vcc_lo
36306 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36307 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36308 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v13, v9, vcc_lo
36309 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
36310 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36311 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v15, v11, vcc_lo
36312 ; GFX10-NEXT:    v_perm_b32 v2, v5, v4, 0x5040100
36313 ; GFX10-NEXT:    v_perm_b32 v3, v7, v6, 0x5040100
36314 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
36316 ; GFX11-LABEL: v_vselect_v8bf16:
36317 ; GFX11:       ; %bb.0:
36318 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36319 ; GFX11-NEXT:    v_lshrrev_b32_e32 v16, 16, v10
36320 ; GFX11-NEXT:    v_lshrrev_b32_e32 v17, 16, v14
36321 ; GFX11-NEXT:    v_and_b32_e32 v6, 1, v6
36322 ; GFX11-NEXT:    v_and_b32_e32 v5, 1, v5
36323 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v2
36324 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_4) | instid1(VALU_DEP_1)
36325 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
36326 ; GFX11-NEXT:    v_dual_cndmask_b32 v6, v15, v11 :: v_dual_and_b32 v1, 1, v1
36327 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
36328 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
36329 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v4
36330 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
36331 ; GFX11-NEXT:    v_dual_cndmask_b32 v4, v14, v10 :: v_dual_and_b32 v3, 1, v3
36332 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
36333 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v8
36334 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v12
36335 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
36336 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v17, v16, vcc_lo
36337 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36338 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v13, v9 :: v_dual_and_b32 v7, 1, v7
36339 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
36340 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36341 ; GFX11-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
36342 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
36343 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v12, v8, vcc_lo
36344 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36345 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v14, v10, vcc_lo
36346 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36347 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
36348 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36349 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v13, v9, vcc_lo
36350 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
36351 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36352 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v15, v11, vcc_lo
36353 ; GFX11-NEXT:    v_perm_b32 v2, v5, v4, 0x5040100
36354 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
36355 ; GFX11-NEXT:    v_perm_b32 v3, v7, v6, 0x5040100
36356 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
36357   %op = select <8 x i1> %cond, <8 x bfloat> %a, <8 x bfloat> %b
36358   ret <8 x bfloat> %op
36361 define <16 x bfloat> @v_vselect_v16bf16(<16 x i1> %cond, <16 x bfloat> %a, <16 x bfloat> %b) {
36362 ; GCN-LABEL: v_vselect_v16bf16:
36363 ; GCN:       ; %bb.0:
36364 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36365 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36366 ; GCN-NEXT:    buffer_store_dword v31, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill
36367 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
36368 ; GCN-NEXT:    s_waitcnt expcnt(0)
36369 ; GCN-NEXT:    v_writelane_b32 v31, s30, 0
36370 ; GCN-NEXT:    v_writelane_b32 v31, s31, 1
36371 ; GCN-NEXT:    v_writelane_b32 v31, s34, 2
36372 ; GCN-NEXT:    v_writelane_b32 v31, s35, 3
36373 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
36374 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36375 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v1
36376 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v0
36377 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v2
36378 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v0
36379 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v3
36380 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v0
36381 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v4
36382 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v0
36383 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v5
36384 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v0
36385 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v6
36386 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v0
36387 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v7
36388 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v0
36389 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v8
36390 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v0
36391 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v9
36392 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v0
36393 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v16
36394 ; GCN-NEXT:    v_and_b32_e32 v1, 1, v10
36395 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v1
36396 ; GCN-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:4
36397 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v17
36398 ; GCN-NEXT:    v_and_b32_e32 v3, 1, v11
36399 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v3
36400 ; GCN-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:8
36401 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v18
36402 ; GCN-NEXT:    v_and_b32_e32 v5, 1, v12
36403 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[26:27], 1, v5
36404 ; GCN-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:12
36405 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v19
36406 ; GCN-NEXT:    v_and_b32_e32 v7, 1, v13
36407 ; GCN-NEXT:    v_and_b32_e32 v8, 1, v14
36408 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[28:29], 1, v7
36409 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32
36410 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[30:31], 1, v8
36411 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:64
36412 ; GCN-NEXT:    v_and_b32_e32 v9, 1, v15
36413 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[34:35], 1, v9
36414 ; GCN-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:60
36415 ; GCN-NEXT:    s_waitcnt vmcnt(2)
36416 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
36417 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36418 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36419 ; GCN-NEXT:    v_cndmask_b32_e64 v15, v8, v7, s[34:35]
36420 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:56
36421 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v30
36422 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36423 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
36424 ; GCN-NEXT:    v_cndmask_b32_e64 v14, v9, v8, s[30:31]
36425 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:52
36426 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v29
36427 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36428 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
36429 ; GCN-NEXT:    v_cndmask_b32_e64 v13, v7, v9, s[28:29]
36430 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:48
36431 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v28
36432 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36433 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36434 ; GCN-NEXT:    v_cndmask_b32_e64 v12, v8, v9, s[26:27]
36435 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:44
36436 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v27
36437 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36438 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
36439 ; GCN-NEXT:    v_cndmask_b32_e64 v11, v7, v9, s[24:25]
36440 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:40
36441 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v26
36442 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36443 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36444 ; GCN-NEXT:    v_cndmask_b32_e64 v10, v8, v9, s[22:23]
36445 ; GCN-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:36
36446 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v25
36447 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36448 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
36449 ; GCN-NEXT:    v_cndmask_b32_e64 v9, v7, v9, s[20:21]
36450 ; GCN-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:32
36451 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v24
36452 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36453 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
36454 ; GCN-NEXT:    v_cndmask_b32_e64 v8, v8, v16, s[18:19]
36455 ; GCN-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:28
36456 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v23
36457 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36458 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
36459 ; GCN-NEXT:    v_cndmask_b32_e64 v7, v7, v17, s[16:17]
36460 ; GCN-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:24
36461 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v22
36462 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36463 ; GCN-NEXT:    v_mul_f32_e32 v16, 1.0, v16
36464 ; GCN-NEXT:    v_cndmask_b32_e64 v16, v16, v18, s[14:15]
36465 ; GCN-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:16
36466 ; GCN-NEXT:    v_mul_f32_e32 v19, 1.0, v20
36467 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v21
36468 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36469 ; GCN-NEXT:    v_mul_f32_e32 v17, 1.0, v17
36470 ; GCN-NEXT:    v_cndmask_b32_e64 v17, v17, v20, s[12:13]
36471 ; GCN-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:20
36472 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
36473 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
36474 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
36475 ; GCN-NEXT:    s_waitcnt vmcnt(1)
36476 ; GCN-NEXT:    v_mul_f32_e32 v18, 1.0, v18
36477 ; GCN-NEXT:    s_waitcnt vmcnt(0)
36478 ; GCN-NEXT:    v_mul_f32_e32 v20, 1.0, v20
36479 ; GCN-NEXT:    v_cndmask_b32_e64 v19, v20, v19, s[10:11]
36480 ; GCN-NEXT:    v_cndmask_b32_e64 v5, v18, v5, s[8:9]
36481 ; GCN-NEXT:    v_cndmask_b32_e64 v3, v6, v3, s[6:7]
36482 ; GCN-NEXT:    v_cndmask_b32_e64 v1, v4, v1, s[4:5]
36483 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v2, v0, vcc
36484 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
36485 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
36486 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
36487 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
36488 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v19
36489 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v17
36490 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v16
36491 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
36492 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
36493 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
36494 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
36495 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
36496 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
36497 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
36498 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
36499 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
36500 ; GCN-NEXT:    v_readlane_b32 s35, v31, 3
36501 ; GCN-NEXT:    v_readlane_b32 s34, v31, 2
36502 ; GCN-NEXT:    v_readlane_b32 s31, v31, 1
36503 ; GCN-NEXT:    v_readlane_b32 s30, v31, 0
36504 ; GCN-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36505 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload
36506 ; GCN-NEXT:    s_mov_b64 exec, s[4:5]
36507 ; GCN-NEXT:    s_waitcnt vmcnt(0)
36508 ; GCN-NEXT:    s_setpc_b64 s[30:31]
36510 ; GFX7-LABEL: v_vselect_v16bf16:
36511 ; GFX7:       ; %bb.0:
36512 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36513 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36514 ; GFX7-NEXT:    buffer_store_dword v31, off, s[0:3], s32 offset:68 ; 4-byte Folded Spill
36515 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
36516 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
36517 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36518 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v1
36519 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v0
36520 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v2
36521 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v0
36522 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v3
36523 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v0
36524 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v4
36525 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v0
36526 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v5
36527 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v0
36528 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v6
36529 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v0
36530 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v7
36531 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v0
36532 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v8
36533 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v0
36534 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v9
36535 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v0
36536 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v10
36537 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v0
36538 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v11
36539 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v0
36540 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32
36541 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:64
36542 ; GFX7-NEXT:    v_and_b32_e32 v2, 1, v12
36543 ; GFX7-NEXT:    v_writelane_b32 v31, s30, 0
36544 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[26:27], 1, v2
36545 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:60
36546 ; GFX7-NEXT:    v_and_b32_e32 v3, 1, v13
36547 ; GFX7-NEXT:    v_writelane_b32 v31, s31, 1
36548 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[28:29], 1, v3
36549 ; GFX7-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:56
36550 ; GFX7-NEXT:    v_and_b32_e32 v4, 1, v14
36551 ; GFX7-NEXT:    v_writelane_b32 v31, s34, 2
36552 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[30:31], 1, v4
36553 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:52
36554 ; GFX7-NEXT:    v_and_b32_e32 v5, 1, v15
36555 ; GFX7-NEXT:    v_writelane_b32 v31, s35, 3
36556 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[34:35], 1, v5
36557 ; GFX7-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:48
36558 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
36559 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
36560 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
36561 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
36562 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
36563 ; GFX7-NEXT:    s_waitcnt vmcnt(5)
36564 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
36565 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36566 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
36567 ; GFX7-NEXT:    v_cndmask_b32_e64 v15, v1, v0, s[34:35]
36568 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:44
36569 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v30
36570 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36571 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
36572 ; GFX7-NEXT:    v_cndmask_b32_e64 v14, v2, v1, s[30:31]
36573 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:40
36574 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v29
36575 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36576 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
36577 ; GFX7-NEXT:    v_cndmask_b32_e64 v13, v3, v2, s[28:29]
36578 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:36
36579 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v28
36580 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36581 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
36582 ; GFX7-NEXT:    v_cndmask_b32_e64 v12, v4, v3, s[26:27]
36583 ; GFX7-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:32
36584 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v27
36585 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36586 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
36587 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v5, v4, s[24:25]
36588 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:28
36589 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v26
36590 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
36591 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
36592 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
36593 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
36594 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
36595 ; GFX7-NEXT:    v_readlane_b32 s35, v31, 3
36596 ; GFX7-NEXT:    v_readlane_b32 s34, v31, 2
36597 ; GFX7-NEXT:    v_readlane_b32 s31, v31, 1
36598 ; GFX7-NEXT:    v_readlane_b32 s30, v31, 0
36599 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36600 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
36601 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, v0, v5, s[22:23]
36602 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:24
36603 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v25
36604 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36605 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
36606 ; GFX7-NEXT:    v_cndmask_b32_e64 v9, v1, v5, s[20:21]
36607 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v24
36608 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4
36609 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36610 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
36611 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, v2, v5, s[18:19]
36612 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:8
36613 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v23
36614 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36615 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
36616 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v3, v5, s[16:17]
36617 ; GFX7-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:12
36618 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v22
36619 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36620 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
36621 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, v4, v5, s[14:15]
36622 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:16
36623 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v21
36624 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
36625 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
36626 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
36627 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
36628 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
36629 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36630 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
36631 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, v0, v5, s[12:13]
36632 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:20
36633 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
36634 ; GFX7-NEXT:    s_waitcnt vmcnt(4)
36635 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
36636 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
36637 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
36638 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v17, s[4:5]
36639 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
36640 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
36641 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v18, s[6:7]
36642 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
36643 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
36644 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v4, v19, s[8:9]
36645 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
36646 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
36647 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, v0, v20, s[10:11]
36648 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v1, v16, vcc
36649 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
36650 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
36651 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
36652 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
36653 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v20
36654 ; GFX7-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36655 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:68 ; 4-byte Folded Reload
36656 ; GFX7-NEXT:    s_mov_b64 exec, s[4:5]
36657 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
36658 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
36660 ; GFX8-LABEL: v_vselect_v16bf16:
36661 ; GFX8:       ; %bb.0:
36662 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36663 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36664 ; GFX8-NEXT:    buffer_store_dword v31, off, s[0:3], s32 offset:4 ; 4-byte Folded Spill
36665 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
36666 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
36667 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36668 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v1
36669 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v0
36670 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v2
36671 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v0
36672 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v3
36673 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v0
36674 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v4
36675 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v0
36676 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v5
36677 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v0
36678 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v6
36679 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v0
36680 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v7
36681 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v0
36682 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v8
36683 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v0
36684 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v9
36685 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v0
36686 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v10
36687 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v0
36688 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s32
36689 ; GFX8-NEXT:    v_writelane_b32 v31, s30, 0
36690 ; GFX8-NEXT:    v_and_b32_e32 v2, 1, v12
36691 ; GFX8-NEXT:    v_and_b32_e32 v3, 1, v13
36692 ; GFX8-NEXT:    v_writelane_b32 v31, s31, 1
36693 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[26:27], 1, v2
36694 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v22
36695 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[28:29], 1, v3
36696 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v30
36697 ; GFX8-NEXT:    v_writelane_b32 v31, s34, 2
36698 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v11
36699 ; GFX8-NEXT:    v_and_b32_e32 v4, 1, v14
36700 ; GFX8-NEXT:    v_and_b32_e32 v5, 1, v15
36701 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v3, v2, s[28:29]
36702 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v20
36703 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v28
36704 ; GFX8-NEXT:    v_writelane_b32 v31, s35, 3
36705 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v1
36706 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v23
36707 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[30:31], 1, v4
36708 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[34:35], 1, v5
36709 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, v3, v2, s[20:21]
36710 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v21
36711 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v29
36712 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v5, v4, s[24:25]
36713 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v19
36714 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v27
36715 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v9, v4, s[16:17]
36716 ; GFX8-NEXT:    v_lshrrev_b32_e32 v15, 16, v24
36717 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v30, v22, s[26:27]
36718 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v27, v19, s[14:15]
36719 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
36720 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
36721 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, v29, v21, s[22:23]
36722 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v28, v20, s[18:19]
36723 ; GFX8-NEXT:    v_cndmask_b32_e64 v9, v26, v18, s[10:11]
36724 ; GFX8-NEXT:    v_cndmask_b32_e64 v14, v25, v17, s[6:7]
36725 ; GFX8-NEXT:    v_or_b32_sdwa v3, v4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36726 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v10
36727 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
36728 ; GFX8-NEXT:    v_or_b32_sdwa v6, v7, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36729 ; GFX8-NEXT:    v_or_b32_sdwa v4, v11, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36730 ; GFX8-NEXT:    v_or_b32_sdwa v5, v8, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36731 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
36732 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
36733 ; GFX8-NEXT:    v_cndmask_b32_e64 v12, v0, v23, s[30:31]
36734 ; GFX8-NEXT:    v_cndmask_b32_e64 v13, v2, v1, s[34:35]
36735 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v18
36736 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v26
36737 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v1, v0, s[12:13]
36738 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v17
36739 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v25
36740 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v0, s[8:9]
36741 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v16
36742 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v15, v0, s[4:5]
36743 ; GFX8-NEXT:    v_cndmask_b32_e32 v15, v24, v16, vcc
36744 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
36745 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
36746 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
36747 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v13
36748 ; GFX8-NEXT:    v_or_b32_sdwa v0, v15, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36749 ; GFX8-NEXT:    v_or_b32_sdwa v1, v14, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36750 ; GFX8-NEXT:    v_or_b32_sdwa v2, v9, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36751 ; GFX8-NEXT:    v_or_b32_sdwa v7, v12, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
36752 ; GFX8-NEXT:    v_readlane_b32 s35, v31, 3
36753 ; GFX8-NEXT:    v_readlane_b32 s34, v31, 2
36754 ; GFX8-NEXT:    v_readlane_b32 s31, v31, 1
36755 ; GFX8-NEXT:    v_readlane_b32 s30, v31, 0
36756 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
36757 ; GFX8-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:4 ; 4-byte Folded Reload
36758 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
36759 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
36760 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
36762 ; GFX9-LABEL: v_vselect_v16bf16:
36763 ; GFX9:       ; %bb.0:
36764 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36765 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v4
36766 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v4
36767 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v14
36768 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v4
36769 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v15
36770 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v4
36771 ; GFX9-NEXT:    buffer_load_dword v4, off, s[0:3], s32
36772 ; GFX9-NEXT:    v_and_b32_e32 v12, 1, v12
36773 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v12
36774 ; GFX9-NEXT:    v_and_b32_e32 v12, 1, v13
36775 ; GFX9-NEXT:    v_and_b32_e32 v10, 1, v10
36776 ; GFX9-NEXT:    v_and_b32_e32 v6, 1, v6
36777 ; GFX9-NEXT:    v_and_b32_e32 v5, 1, v5
36778 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v12
36779 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v10
36780 ; GFX9-NEXT:    v_and_b32_e32 v10, 1, v11
36781 ; GFX9-NEXT:    v_and_b32_e32 v8, 1, v8
36782 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v6
36783 ; GFX9-NEXT:    v_and_b32_e32 v6, 1, v7
36784 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v5
36785 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v22
36786 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v30
36787 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v10
36788 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v8
36789 ; GFX9-NEXT:    v_and_b32_e32 v8, 1, v9
36790 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v7, v5, s[4:5]
36791 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v21
36792 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v29
36793 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v8
36794 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v9, v5, s[8:9]
36795 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v20
36796 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v28
36797 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v6
36798 ; GFX9-NEXT:    v_cndmask_b32_e64 v9, v11, v9, s[12:13]
36799 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v19
36800 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 16, v27
36801 ; GFX9-NEXT:    v_and_b32_e32 v2, 1, v2
36802 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v13, v11, s[16:17]
36803 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 16, v23
36804 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v30, v22, vcc
36805 ; GFX9-NEXT:    v_and_b32_e32 v3, 1, v3
36806 ; GFX9-NEXT:    v_cndmask_b32_e64 v15, v26, v18, s[18:19]
36807 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
36808 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
36809 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v25, v17, vcc
36810 ; GFX9-NEXT:    v_lshrrev_b32_e32 v17, 16, v17
36811 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
36812 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
36813 ; GFX9-NEXT:    v_cndmask_b32_e64 v8, v29, v21, s[6:7]
36814 ; GFX9-NEXT:    v_cndmask_b32_e64 v10, v28, v20, s[10:11]
36815 ; GFX9-NEXT:    v_cndmask_b32_e64 v12, v27, v19, s[14:15]
36816 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
36817 ; GFX9-NEXT:    v_perm_b32 v5, v5, v8, s4
36818 ; GFX9-NEXT:    v_perm_b32 v6, v7, v6, s4
36819 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
36820 ; GFX9-NEXT:    v_cndmask_b32_e64 v14, v4, v23, s[20:21]
36821 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
36822 ; GFX9-NEXT:    v_cndmask_b32_e64 v13, v4, v13, s[22:23]
36823 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v18
36824 ; GFX9-NEXT:    v_lshrrev_b32_e32 v18, 16, v26
36825 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v18, v4, s[24:25]
36826 ; GFX9-NEXT:    v_lshrrev_b32_e32 v18, 16, v25
36827 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v18, v17, vcc
36828 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
36829 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v24, v16, vcc
36830 ; GFX9-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
36831 ; GFX9-NEXT:    v_lshrrev_b32_e32 v17, 16, v24
36832 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
36833 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v17, v16, vcc
36834 ; GFX9-NEXT:    v_perm_b32 v0, v1, v0, s4
36835 ; GFX9-NEXT:    v_perm_b32 v1, v3, v2, s4
36836 ; GFX9-NEXT:    v_perm_b32 v2, v4, v15, s4
36837 ; GFX9-NEXT:    v_perm_b32 v3, v11, v12, s4
36838 ; GFX9-NEXT:    v_perm_b32 v4, v9, v10, s4
36839 ; GFX9-NEXT:    v_perm_b32 v7, v13, v14, s4
36840 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
36842 ; GFX10-LABEL: v_vselect_v16bf16:
36843 ; GFX10:       ; %bb.0:
36844 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36845 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32
36846 ; GFX10-NEXT:    v_and_b32_e32 v12, 1, v12
36847 ; GFX10-NEXT:    v_and_b32_e32 v13, 1, v13
36848 ; GFX10-NEXT:    v_and_b32_e32 v10, 1, v10
36849 ; GFX10-NEXT:    v_lshrrev_b32_e32 v33, 16, v22
36850 ; GFX10-NEXT:    v_lshrrev_b32_e32 v34, 16, v30
36851 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
36852 ; GFX10-NEXT:    v_and_b32_e32 v11, 1, v11
36853 ; GFX10-NEXT:    v_and_b32_e32 v8, 1, v8
36854 ; GFX10-NEXT:    v_lshrrev_b32_e32 v35, 16, v21
36855 ; GFX10-NEXT:    v_lshrrev_b32_e32 v36, 16, v29
36856 ; GFX10-NEXT:    v_cndmask_b32_e32 v12, v30, v22, vcc_lo
36857 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v13
36858 ; GFX10-NEXT:    v_and_b32_e32 v9, 1, v9
36859 ; GFX10-NEXT:    v_and_b32_e32 v6, 1, v6
36860 ; GFX10-NEXT:    v_lshrrev_b32_e32 v37, 16, v20
36861 ; GFX10-NEXT:    v_lshrrev_b32_e32 v38, 16, v28
36862 ; GFX10-NEXT:    v_cndmask_b32_e32 v13, v34, v33, vcc_lo
36863 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v10
36864 ; GFX10-NEXT:    v_and_b32_e32 v4, 1, v4
36865 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v2
36866 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v3
36867 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
36868 ; GFX10-NEXT:    v_cndmask_b32_e32 v10, v29, v21, vcc_lo
36869 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v11
36870 ; GFX10-NEXT:    v_lshrrev_b32_e32 v51, 16, v17
36871 ; GFX10-NEXT:    v_lshrrev_b32_e32 v52, 16, v25
36872 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
36873 ; GFX10-NEXT:    v_and_b32_e32 v5, 1, v5
36874 ; GFX10-NEXT:    v_cndmask_b32_e32 v11, v36, v35, vcc_lo
36875 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v8
36876 ; GFX10-NEXT:    v_lshrrev_b32_e32 v53, 16, v16
36877 ; GFX10-NEXT:    v_lshrrev_b32_e32 v54, 16, v24
36878 ; GFX10-NEXT:    v_and_b32_e32 v7, 1, v7
36879 ; GFX10-NEXT:    v_lshrrev_b32_e32 v49, 16, v18
36880 ; GFX10-NEXT:    v_cndmask_b32_e32 v8, v28, v20, vcc_lo
36881 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v9
36882 ; GFX10-NEXT:    v_lshrrev_b32_e32 v50, 16, v26
36883 ; GFX10-NEXT:    v_and_b32_e32 v14, 1, v14
36884 ; GFX10-NEXT:    v_lshrrev_b32_e32 v39, 16, v19
36885 ; GFX10-NEXT:    v_lshrrev_b32_e32 v48, 16, v27
36886 ; GFX10-NEXT:    v_cndmask_b32_e32 v9, v38, v37, vcc_lo
36887 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
36888 ; GFX10-NEXT:    v_and_b32_e32 v15, 1, v15
36889 ; GFX10-NEXT:    v_lshrrev_b32_e32 v32, 16, v23
36890 ; GFX10-NEXT:    v_cndmask_b32_e32 v6, v27, v19, vcc_lo
36891 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
36892 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v26, v18, vcc_lo
36893 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36894 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v25, v17, vcc_lo
36895 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36896 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v52, v51, vcc_lo
36897 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36898 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v24, v16, vcc_lo
36899 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36900 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v54, v53, vcc_lo
36901 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
36902 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36903 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v50, v49, vcc_lo
36904 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
36905 ; GFX10-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36906 ; GFX10-NEXT:    v_perm_b32 v2, v5, v4, 0x5040100
36907 ; GFX10-NEXT:    v_cndmask_b32_e32 v7, v48, v39, vcc_lo
36908 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v14
36909 ; GFX10-NEXT:    v_perm_b32 v4, v9, v8, 0x5040100
36910 ; GFX10-NEXT:    v_perm_b32 v5, v11, v10, 0x5040100
36911 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
36912 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v31
36913 ; GFX10-NEXT:    v_cndmask_b32_e32 v14, v31, v23, vcc_lo
36914 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v15
36915 ; GFX10-NEXT:    v_cndmask_b32_e32 v15, v3, v32, vcc_lo
36916 ; GFX10-NEXT:    v_perm_b32 v3, v7, v6, 0x5040100
36917 ; GFX10-NEXT:    v_perm_b32 v6, v13, v12, 0x5040100
36918 ; GFX10-NEXT:    v_perm_b32 v7, v15, v14, 0x5040100
36919 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
36921 ; GFX11-LABEL: v_vselect_v16bf16:
36922 ; GFX11:       ; %bb.0:
36923 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
36924 ; GFX11-NEXT:    scratch_load_b32 v31, off, s32
36925 ; GFX11-NEXT:    v_lshrrev_b32_e32 v39, 16, v19
36926 ; GFX11-NEXT:    v_lshrrev_b32_e32 v48, 16, v27
36927 ; GFX11-NEXT:    v_and_b32_e32 v12, 1, v12
36928 ; GFX11-NEXT:    v_and_b32_e32 v13, 1, v13
36929 ; GFX11-NEXT:    v_lshrrev_b32_e32 v33, 16, v22
36930 ; GFX11-NEXT:    v_lshrrev_b32_e32 v34, 16, v30
36931 ; GFX11-NEXT:    v_lshrrev_b32_e32 v49, 16, v18
36932 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
36933 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v1
36934 ; GFX11-NEXT:    v_lshrrev_b32_e32 v50, 16, v26
36935 ; GFX11-NEXT:    v_and_b32_e32 v10, 1, v10
36936 ; GFX11-NEXT:    v_dual_cndmask_b32 v12, v30, v22 :: v_dual_and_b32 v11, 1, v11
36937 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v13
36938 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
36939 ; GFX11-NEXT:    v_lshrrev_b32_e32 v35, 16, v21
36940 ; GFX11-NEXT:    v_lshrrev_b32_e32 v36, 16, v29
36941 ; GFX11-NEXT:    v_lshrrev_b32_e32 v53, 16, v16
36942 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v34, v33, vcc_lo
36943 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v10
36944 ; GFX11-NEXT:    v_and_b32_e32 v3, 1, v3
36945 ; GFX11-NEXT:    v_lshrrev_b32_e32 v54, 16, v24
36946 ; GFX11-NEXT:    v_and_b32_e32 v8, 1, v8
36947 ; GFX11-NEXT:    v_and_b32_e32 v9, 1, v9
36948 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v29, v21, vcc_lo
36949 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v11
36950 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v2
36951 ; GFX11-NEXT:    v_lshrrev_b32_e32 v37, 16, v20
36952 ; GFX11-NEXT:    v_lshrrev_b32_e32 v38, 16, v28
36953 ; GFX11-NEXT:    v_lshrrev_b32_e32 v51, 16, v17
36954 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v36, v35, vcc_lo
36955 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v8
36956 ; GFX11-NEXT:    v_and_b32_e32 v5, 1, v5
36957 ; GFX11-NEXT:    v_lshrrev_b32_e32 v52, 16, v25
36958 ; GFX11-NEXT:    v_and_b32_e32 v6, 1, v6
36959 ; GFX11-NEXT:    v_lshrrev_b32_e32 v32, 16, v23
36960 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v28, v20, vcc_lo
36961 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v9
36962 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v4
36963 ; GFX11-NEXT:    v_and_b32_e32 v15, 1, v15
36964 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v38, v37, vcc_lo
36965 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
36966 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v27, v19, vcc_lo
36967 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
36968 ; GFX11-NEXT:    v_dual_cndmask_b32 v4, v26, v18 :: v_dual_and_b32 v7, 1, v7
36969 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
36970 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v25, v17, vcc_lo
36971 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
36972 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v52, v51, vcc_lo
36973 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
36974 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v24, v16, vcc_lo
36975 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
36976 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v54, v53, vcc_lo
36977 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
36978 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
36979 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
36980 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v50, v49, vcc_lo
36981 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
36982 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
36983 ; GFX11-NEXT:    v_perm_b32 v2, v5, v4, 0x5040100
36984 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v48, v39, vcc_lo
36985 ; GFX11-NEXT:    v_perm_b32 v4, v9, v8, 0x5040100
36986 ; GFX11-NEXT:    v_perm_b32 v5, v11, v10, 0x5040100
36987 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
36988 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v31
36989 ; GFX11-NEXT:    v_and_b32_e32 v14, 1, v14
36990 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
36991 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v14
36992 ; GFX11-NEXT:    v_cndmask_b32_e32 v14, v31, v23, vcc_lo
36993 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v15
36994 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v3, v32, vcc_lo
36995 ; GFX11-NEXT:    v_perm_b32 v3, v7, v6, 0x5040100
36996 ; GFX11-NEXT:    v_perm_b32 v6, v13, v12, 0x5040100
36997 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
36998 ; GFX11-NEXT:    v_perm_b32 v7, v15, v14, 0x5040100
36999 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
37000   %op = select <16 x i1> %cond, <16 x bfloat> %a, <16 x bfloat> %b
37001   ret <16 x bfloat> %op
37004 define <32 x bfloat> @v_vselect_v32bf16(<32 x i1> %cond, <32 x bfloat> %a, <32 x bfloat> %b) {
37005 ; GCN-LABEL: v_vselect_v32bf16:
37006 ; GCN:       ; %bb.0:
37007 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37008 ; GCN-NEXT:    buffer_store_dword v40, off, s[0:3], s32 offset:312 ; 4-byte Folded Spill
37009 ; GCN-NEXT:    buffer_store_dword v41, off, s[0:3], s32 offset:308 ; 4-byte Folded Spill
37010 ; GCN-NEXT:    buffer_store_dword v42, off, s[0:3], s32 offset:304 ; 4-byte Folded Spill
37011 ; GCN-NEXT:    buffer_store_dword v43, off, s[0:3], s32 offset:300 ; 4-byte Folded Spill
37012 ; GCN-NEXT:    buffer_store_dword v44, off, s[0:3], s32 offset:296 ; 4-byte Folded Spill
37013 ; GCN-NEXT:    buffer_store_dword v45, off, s[0:3], s32 offset:292 ; 4-byte Folded Spill
37014 ; GCN-NEXT:    buffer_store_dword v46, off, s[0:3], s32 offset:288 ; 4-byte Folded Spill
37015 ; GCN-NEXT:    buffer_store_dword v47, off, s[0:3], s32 offset:284 ; 4-byte Folded Spill
37016 ; GCN-NEXT:    buffer_store_dword v56, off, s[0:3], s32 offset:280 ; 4-byte Folded Spill
37017 ; GCN-NEXT:    buffer_store_dword v57, off, s[0:3], s32 offset:276 ; 4-byte Folded Spill
37018 ; GCN-NEXT:    buffer_store_dword v58, off, s[0:3], s32 offset:272 ; 4-byte Folded Spill
37019 ; GCN-NEXT:    buffer_store_dword v59, off, s[0:3], s32 offset:268 ; 4-byte Folded Spill
37020 ; GCN-NEXT:    buffer_store_dword v60, off, s[0:3], s32 offset:264 ; 4-byte Folded Spill
37021 ; GCN-NEXT:    buffer_store_dword v61, off, s[0:3], s32 offset:260 ; 4-byte Folded Spill
37022 ; GCN-NEXT:    v_and_b32_e32 v0, 1, v0
37023 ; GCN-NEXT:    v_and_b32_e32 v1, 1, v1
37024 ; GCN-NEXT:    v_and_b32_e32 v2, 1, v2
37025 ; GCN-NEXT:    v_and_b32_e32 v36, 1, v13
37026 ; GCN-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:52
37027 ; GCN-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:180
37028 ; GCN-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:56
37029 ; GCN-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:184
37030 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:60
37031 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:188
37032 ; GCN-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:64
37033 ; GCN-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:192
37034 ; GCN-NEXT:    v_and_b32_e32 v53, 1, v26
37035 ; GCN-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:84
37036 ; GCN-NEXT:    buffer_load_dword v48, off, s[0:3], s32 offset:88
37037 ; GCN-NEXT:    buffer_load_dword v49, off, s[0:3], s32 offset:92
37038 ; GCN-NEXT:    buffer_load_dword v50, off, s[0:3], s32 offset:96
37039 ; GCN-NEXT:    buffer_load_dword v51, off, s[0:3], s32 offset:100
37040 ; GCN-NEXT:    buffer_load_dword v52, off, s[0:3], s32 offset:104
37041 ; GCN-NEXT:    buffer_load_dword v54, off, s[0:3], s32 offset:108
37042 ; GCN-NEXT:    buffer_load_dword v55, off, s[0:3], s32 offset:112
37043 ; GCN-NEXT:    v_and_b32_e32 v27, 1, v27
37044 ; GCN-NEXT:    v_and_b32_e32 v28, 1, v28
37045 ; GCN-NEXT:    v_and_b32_e32 v29, 1, v29
37046 ; GCN-NEXT:    v_and_b32_e32 v30, 1, v30
37047 ; GCN-NEXT:    buffer_load_dword v41, off, s[0:3], s32 offset:116
37048 ; GCN-NEXT:    buffer_load_dword v42, off, s[0:3], s32 offset:120
37049 ; GCN-NEXT:    buffer_load_dword v43, off, s[0:3], s32 offset:124
37050 ; GCN-NEXT:    buffer_load_dword v26, off, s[0:3], s32
37051 ; GCN-NEXT:    buffer_load_dword v44, off, s[0:3], s32 offset:252
37052 ; GCN-NEXT:    buffer_load_dword v45, off, s[0:3], s32 offset:248
37053 ; GCN-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:244
37054 ; GCN-NEXT:    s_waitcnt expcnt(6)
37055 ; GCN-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:240
37056 ; GCN-NEXT:    s_waitcnt vmcnt(14)
37057 ; GCN-NEXT:    v_mul_f32_e32 v40, 1.0, v37
37058 ; GCN-NEXT:    v_mul_f32_e32 v38, 1.0, v38
37059 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v36
37060 ; GCN-NEXT:    s_waitcnt vmcnt(5)
37061 ; GCN-NEXT:    v_mul_f32_e32 v36, 1.0, v43
37062 ; GCN-NEXT:    s_waitcnt vmcnt(3)
37063 ; GCN-NEXT:    v_mul_f32_e32 v37, 1.0, v44
37064 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v30
37065 ; GCN-NEXT:    v_cndmask_b32_e64 v30, v37, v36, s[4:5]
37066 ; GCN-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:236
37067 ; GCN-NEXT:    s_waitcnt expcnt(5)
37068 ; GCN-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:232
37069 ; GCN-NEXT:    s_waitcnt expcnt(4)
37070 ; GCN-NEXT:    buffer_load_dword v57, off, s[0:3], s32 offset:228
37071 ; GCN-NEXT:    s_waitcnt expcnt(3)
37072 ; GCN-NEXT:    buffer_load_dword v58, off, s[0:3], s32 offset:224
37073 ; GCN-NEXT:    s_waitcnt expcnt(2)
37074 ; GCN-NEXT:    buffer_load_dword v59, off, s[0:3], s32 offset:220
37075 ; GCN-NEXT:    s_waitcnt expcnt(1)
37076 ; GCN-NEXT:    buffer_load_dword v60, off, s[0:3], s32 offset:216
37077 ; GCN-NEXT:    s_waitcnt expcnt(0)
37078 ; GCN-NEXT:    buffer_load_dword v61, off, s[0:3], s32 offset:212
37079 ; GCN-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:128
37080 ; GCN-NEXT:    v_mul_f32_e32 v42, 1.0, v42
37081 ; GCN-NEXT:    s_waitcnt vmcnt(10)
37082 ; GCN-NEXT:    v_mul_f32_e32 v43, 1.0, v45
37083 ; GCN-NEXT:    v_mul_f32_e32 v41, 1.0, v41
37084 ; GCN-NEXT:    s_waitcnt vmcnt(9)
37085 ; GCN-NEXT:    v_mul_f32_e32 v44, 1.0, v46
37086 ; GCN-NEXT:    v_mul_f32_e32 v55, 1.0, v55
37087 ; GCN-NEXT:    s_waitcnt vmcnt(8)
37088 ; GCN-NEXT:    v_mul_f32_e32 v45, 1.0, v47
37089 ; GCN-NEXT:    v_mul_f32_e32 v54, 1.0, v54
37090 ; GCN-NEXT:    s_waitcnt vmcnt(7)
37091 ; GCN-NEXT:    v_mul_f32_e32 v36, 1.0, v36
37092 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v29
37093 ; GCN-NEXT:    v_cndmask_b32_e64 v29, v43, v42, s[4:5]
37094 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v28
37095 ; GCN-NEXT:    v_cndmask_b32_e64 v28, v44, v41, s[4:5]
37096 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v27
37097 ; GCN-NEXT:    v_cndmask_b32_e64 v27, v45, v55, s[4:5]
37098 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v53
37099 ; GCN-NEXT:    v_cndmask_b32_e64 v36, v36, v54, s[4:5]
37100 ; GCN-NEXT:    buffer_load_dword v53, off, s[0:3], s32 offset:4
37101 ; GCN-NEXT:    buffer_load_dword v54, off, s[0:3], s32 offset:132
37102 ; GCN-NEXT:    buffer_load_dword v55, off, s[0:3], s32 offset:8
37103 ; GCN-NEXT:    buffer_load_dword v41, off, s[0:3], s32 offset:136
37104 ; GCN-NEXT:    buffer_load_dword v42, off, s[0:3], s32 offset:12
37105 ; GCN-NEXT:    buffer_load_dword v43, off, s[0:3], s32 offset:140
37106 ; GCN-NEXT:    buffer_load_dword v44, off, s[0:3], s32 offset:16
37107 ; GCN-NEXT:    buffer_load_dword v45, off, s[0:3], s32 offset:144
37108 ; GCN-NEXT:    v_and_b32_e32 v3, 1, v3
37109 ; GCN-NEXT:    v_and_b32_e32 v4, 1, v4
37110 ; GCN-NEXT:    v_and_b32_e32 v5, 1, v5
37111 ; GCN-NEXT:    v_and_b32_e32 v6, 1, v6
37112 ; GCN-NEXT:    v_and_b32_e32 v18, 1, v18
37113 ; GCN-NEXT:    v_and_b32_e32 v22, 1, v22
37114 ; GCN-NEXT:    v_and_b32_e32 v23, 1, v23
37115 ; GCN-NEXT:    v_and_b32_e32 v24, 1, v24
37116 ; GCN-NEXT:    v_and_b32_e32 v25, 1, v25
37117 ; GCN-NEXT:    v_mul_f32_e32 v52, 1.0, v52
37118 ; GCN-NEXT:    s_waitcnt vmcnt(14)
37119 ; GCN-NEXT:    v_mul_f32_e32 v46, 1.0, v56
37120 ; GCN-NEXT:    v_mul_f32_e32 v51, 1.0, v51
37121 ; GCN-NEXT:    s_waitcnt vmcnt(13)
37122 ; GCN-NEXT:    v_mul_f32_e32 v47, 1.0, v57
37123 ; GCN-NEXT:    v_mul_f32_e32 v50, 1.0, v50
37124 ; GCN-NEXT:    s_waitcnt vmcnt(12)
37125 ; GCN-NEXT:    v_mul_f32_e32 v56, 1.0, v58
37126 ; GCN-NEXT:    v_mul_f32_e32 v49, 1.0, v49
37127 ; GCN-NEXT:    s_waitcnt vmcnt(11)
37128 ; GCN-NEXT:    v_mul_f32_e32 v57, 1.0, v59
37129 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v25
37130 ; GCN-NEXT:    v_cndmask_b32_e64 v25, v46, v52, s[4:5]
37131 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v24
37132 ; GCN-NEXT:    v_cndmask_b32_e64 v24, v47, v51, s[4:5]
37133 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v23
37134 ; GCN-NEXT:    v_cndmask_b32_e64 v23, v56, v50, s[4:5]
37135 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v22
37136 ; GCN-NEXT:    v_cndmask_b32_e64 v22, v57, v49, s[4:5]
37137 ; GCN-NEXT:    buffer_load_dword v49, off, s[0:3], s32 offset:68
37138 ; GCN-NEXT:    buffer_load_dword v50, off, s[0:3], s32 offset:196
37139 ; GCN-NEXT:    buffer_load_dword v51, off, s[0:3], s32 offset:72
37140 ; GCN-NEXT:    buffer_load_dword v52, off, s[0:3], s32 offset:200
37141 ; GCN-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:76
37142 ; GCN-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:204
37143 ; GCN-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:80
37144 ; GCN-NEXT:    buffer_load_dword v57, off, s[0:3], s32 offset:208
37145 ; GCN-NEXT:    v_and_b32_e32 v19, 1, v19
37146 ; GCN-NEXT:    v_and_b32_e32 v20, 1, v20
37147 ; GCN-NEXT:    v_and_b32_e32 v21, 1, v21
37148 ; GCN-NEXT:    v_mul_f32_e32 v48, 1.0, v48
37149 ; GCN-NEXT:    s_waitcnt vmcnt(14)
37150 ; GCN-NEXT:    v_mul_f32_e32 v58, 1.0, v60
37151 ; GCN-NEXT:    v_mul_f32_e32 v39, 1.0, v39
37152 ; GCN-NEXT:    v_mul_f32_e32 v59, 1.0, v61
37153 ; GCN-NEXT:    s_waitcnt vmcnt(3)
37154 ; GCN-NEXT:    v_mul_f32_e32 v46, 1.0, v46
37155 ; GCN-NEXT:    s_waitcnt vmcnt(2)
37156 ; GCN-NEXT:    v_mul_f32_e32 v47, 1.0, v47
37157 ; GCN-NEXT:    s_waitcnt vmcnt(1)
37158 ; GCN-NEXT:    v_mul_f32_e32 v56, 1.0, v56
37159 ; GCN-NEXT:    s_waitcnt vmcnt(0)
37160 ; GCN-NEXT:    v_mul_f32_e32 v57, 1.0, v57
37161 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v21
37162 ; GCN-NEXT:    v_cndmask_b32_e64 v21, v58, v48, s[4:5]
37163 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v20
37164 ; GCN-NEXT:    v_cndmask_b32_e64 v20, v59, v39, s[4:5]
37165 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v19
37166 ; GCN-NEXT:    v_cndmask_b32_e64 v19, v57, v56, s[4:5]
37167 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v18
37168 ; GCN-NEXT:    v_cndmask_b32_e64 v18, v47, v46, s[4:5]
37169 ; GCN-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:20
37170 ; GCN-NEXT:    buffer_load_dword v48, off, s[0:3], s32 offset:148
37171 ; GCN-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:24
37172 ; GCN-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:152
37173 ; GCN-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:28
37174 ; GCN-NEXT:    buffer_load_dword v57, off, s[0:3], s32 offset:156
37175 ; GCN-NEXT:    buffer_load_dword v58, off, s[0:3], s32 offset:32
37176 ; GCN-NEXT:    buffer_load_dword v59, off, s[0:3], s32 offset:160
37177 ; GCN-NEXT:    v_and_b32_e32 v7, 1, v7
37178 ; GCN-NEXT:    v_and_b32_e32 v8, 1, v8
37179 ; GCN-NEXT:    v_and_b32_e32 v9, 1, v9
37180 ; GCN-NEXT:    v_and_b32_e32 v10, 1, v10
37181 ; GCN-NEXT:    v_and_b32_e32 v14, 1, v14
37182 ; GCN-NEXT:    v_and_b32_e32 v15, 1, v15
37183 ; GCN-NEXT:    v_and_b32_e32 v16, 1, v16
37184 ; GCN-NEXT:    v_and_b32_e32 v17, 1, v17
37185 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37186 ; GCN-NEXT:    v_mul_f32_e32 v33, 1.0, v33
37187 ; GCN-NEXT:    v_mul_f32_e32 v34, 1.0, v34
37188 ; GCN-NEXT:    v_mul_f32_e32 v35, 1.0, v35
37189 ; GCN-NEXT:    v_mul_f32_e32 v49, 1.0, v49
37190 ; GCN-NEXT:    v_mul_f32_e32 v50, 1.0, v50
37191 ; GCN-NEXT:    v_mul_f32_e32 v51, 1.0, v51
37192 ; GCN-NEXT:    v_mul_f32_e32 v52, 1.0, v52
37193 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v17
37194 ; GCN-NEXT:    v_cndmask_b32_e64 v17, v52, v51, s[4:5]
37195 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v16
37196 ; GCN-NEXT:    v_cndmask_b32_e64 v16, v50, v49, s[4:5]
37197 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v15
37198 ; GCN-NEXT:    v_cndmask_b32_e64 v15, v35, v34, s[4:5]
37199 ; GCN-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v14
37200 ; GCN-NEXT:    v_cndmask_b32_e64 v14, v33, v32, s[4:5]
37201 ; GCN-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:36
37202 ; GCN-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:164
37203 ; GCN-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:40
37204 ; GCN-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:168
37205 ; GCN-NEXT:    buffer_load_dword v49, off, s[0:3], s32 offset:44
37206 ; GCN-NEXT:    buffer_load_dword v50, off, s[0:3], s32 offset:172
37207 ; GCN-NEXT:    buffer_load_dword v51, off, s[0:3], s32 offset:48
37208 ; GCN-NEXT:    buffer_load_dword v52, off, s[0:3], s32 offset:176
37209 ; GCN-NEXT:    v_and_b32_e32 v11, 1, v11
37210 ; GCN-NEXT:    v_and_b32_e32 v12, 1, v12
37211 ; GCN-NEXT:    v_cndmask_b32_e32 v38, v38, v40, vcc
37212 ; GCN-NEXT:    buffer_load_dword v40, off, s[0:3], s32 offset:256
37213 ; GCN-NEXT:    v_and_b32_e32 v26, 1, v26
37214 ; GCN-NEXT:    v_mul_f32_e32 v53, 1.0, v53
37215 ; GCN-NEXT:    v_mul_f32_e32 v54, 1.0, v54
37216 ; GCN-NEXT:    v_mul_f32_e32 v55, 1.0, v55
37217 ; GCN-NEXT:    v_mul_f32_e32 v41, 1.0, v41
37218 ; GCN-NEXT:    v_mul_f32_e32 v42, 1.0, v42
37219 ; GCN-NEXT:    v_mul_f32_e32 v43, 1.0, v43
37220 ; GCN-NEXT:    v_mul_f32_e32 v44, 1.0, v44
37221 ; GCN-NEXT:    v_mul_f32_e32 v45, 1.0, v45
37222 ; GCN-NEXT:    s_waitcnt vmcnt(14)
37223 ; GCN-NEXT:    v_mul_f32_e32 v39, 1.0, v39
37224 ; GCN-NEXT:    v_mul_f32_e32 v48, 1.0, v48
37225 ; GCN-NEXT:    v_mul_f32_e32 v46, 1.0, v46
37226 ; GCN-NEXT:    s_waitcnt vmcnt(13)
37227 ; GCN-NEXT:    v_mul_f32_e32 v47, 1.0, v47
37228 ; GCN-NEXT:    s_waitcnt vmcnt(12)
37229 ; GCN-NEXT:    v_mul_f32_e32 v56, 1.0, v56
37230 ; GCN-NEXT:    s_waitcnt vmcnt(11)
37231 ; GCN-NEXT:    v_mul_f32_e32 v57, 1.0, v57
37232 ; GCN-NEXT:    s_waitcnt vmcnt(10)
37233 ; GCN-NEXT:    v_mul_f32_e32 v58, 1.0, v58
37234 ; GCN-NEXT:    s_waitcnt vmcnt(9)
37235 ; GCN-NEXT:    v_mul_f32_e32 v59, 1.0, v59
37236 ; GCN-NEXT:    s_waitcnt vmcnt(8)
37237 ; GCN-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37238 ; GCN-NEXT:    s_waitcnt vmcnt(7)
37239 ; GCN-NEXT:    v_mul_f32_e32 v33, 1.0, v33
37240 ; GCN-NEXT:    s_waitcnt vmcnt(6)
37241 ; GCN-NEXT:    v_mul_f32_e32 v34, 1.0, v34
37242 ; GCN-NEXT:    s_waitcnt vmcnt(5)
37243 ; GCN-NEXT:    v_mul_f32_e32 v35, 1.0, v35
37244 ; GCN-NEXT:    s_waitcnt vmcnt(4)
37245 ; GCN-NEXT:    v_mul_f32_e32 v49, 1.0, v49
37246 ; GCN-NEXT:    s_waitcnt vmcnt(3)
37247 ; GCN-NEXT:    v_mul_f32_e32 v50, 1.0, v50
37248 ; GCN-NEXT:    s_waitcnt vmcnt(2)
37249 ; GCN-NEXT:    v_mul_f32_e32 v51, 1.0, v51
37250 ; GCN-NEXT:    s_waitcnt vmcnt(1)
37251 ; GCN-NEXT:    v_mul_f32_e32 v52, 1.0, v52
37252 ; GCN-NEXT:    v_mul_f32_e32 v13, 1.0, v13
37253 ; GCN-NEXT:    v_mul_f32_e32 v31, 1.0, v31
37254 ; GCN-NEXT:    v_mul_f32_e32 v37, 1.0, v37
37255 ; GCN-NEXT:    s_waitcnt vmcnt(0)
37256 ; GCN-NEXT:    v_mul_f32_e32 v40, 1.0, v40
37257 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v12
37258 ; GCN-NEXT:    v_cndmask_b32_e32 v12, v31, v13, vcc
37259 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v11
37260 ; GCN-NEXT:    v_cndmask_b32_e32 v11, v52, v51, vcc
37261 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v10
37262 ; GCN-NEXT:    v_cndmask_b32_e32 v10, v50, v49, vcc
37263 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v9
37264 ; GCN-NEXT:    v_cndmask_b32_e32 v9, v35, v34, vcc
37265 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
37266 ; GCN-NEXT:    v_cndmask_b32_e32 v8, v33, v32, vcc
37267 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
37268 ; GCN-NEXT:    v_cndmask_b32_e32 v7, v59, v58, vcc
37269 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
37270 ; GCN-NEXT:    v_cndmask_b32_e32 v6, v57, v56, vcc
37271 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
37272 ; GCN-NEXT:    v_cndmask_b32_e32 v5, v47, v46, vcc
37273 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
37274 ; GCN-NEXT:    v_cndmask_b32_e32 v4, v48, v39, vcc
37275 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
37276 ; GCN-NEXT:    v_cndmask_b32_e32 v3, v45, v44, vcc
37277 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
37278 ; GCN-NEXT:    v_cndmask_b32_e32 v2, v43, v42, vcc
37279 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
37280 ; GCN-NEXT:    v_cndmask_b32_e32 v1, v41, v55, vcc
37281 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
37282 ; GCN-NEXT:    v_cndmask_b32_e32 v0, v54, v53, vcc
37283 ; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v26
37284 ; GCN-NEXT:    v_cndmask_b32_e32 v31, v40, v37, vcc
37285 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
37286 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
37287 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
37288 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
37289 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
37290 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
37291 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
37292 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
37293 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
37294 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
37295 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
37296 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
37297 ; GCN-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
37298 ; GCN-NEXT:    v_and_b32_e32 v13, 0xffff0000, v38
37299 ; GCN-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
37300 ; GCN-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
37301 ; GCN-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
37302 ; GCN-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
37303 ; GCN-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
37304 ; GCN-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
37305 ; GCN-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
37306 ; GCN-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
37307 ; GCN-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
37308 ; GCN-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
37309 ; GCN-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
37310 ; GCN-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
37311 ; GCN-NEXT:    v_and_b32_e32 v26, 0xffff0000, v36
37312 ; GCN-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
37313 ; GCN-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
37314 ; GCN-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
37315 ; GCN-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
37316 ; GCN-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
37317 ; GCN-NEXT:    buffer_load_dword v61, off, s[0:3], s32 offset:260 ; 4-byte Folded Reload
37318 ; GCN-NEXT:    buffer_load_dword v60, off, s[0:3], s32 offset:264 ; 4-byte Folded Reload
37319 ; GCN-NEXT:    buffer_load_dword v59, off, s[0:3], s32 offset:268 ; 4-byte Folded Reload
37320 ; GCN-NEXT:    buffer_load_dword v58, off, s[0:3], s32 offset:272 ; 4-byte Folded Reload
37321 ; GCN-NEXT:    buffer_load_dword v57, off, s[0:3], s32 offset:276 ; 4-byte Folded Reload
37322 ; GCN-NEXT:    buffer_load_dword v56, off, s[0:3], s32 offset:280 ; 4-byte Folded Reload
37323 ; GCN-NEXT:    buffer_load_dword v47, off, s[0:3], s32 offset:284 ; 4-byte Folded Reload
37324 ; GCN-NEXT:    buffer_load_dword v46, off, s[0:3], s32 offset:288 ; 4-byte Folded Reload
37325 ; GCN-NEXT:    buffer_load_dword v45, off, s[0:3], s32 offset:292 ; 4-byte Folded Reload
37326 ; GCN-NEXT:    buffer_load_dword v44, off, s[0:3], s32 offset:296 ; 4-byte Folded Reload
37327 ; GCN-NEXT:    buffer_load_dword v43, off, s[0:3], s32 offset:300 ; 4-byte Folded Reload
37328 ; GCN-NEXT:    buffer_load_dword v42, off, s[0:3], s32 offset:304 ; 4-byte Folded Reload
37329 ; GCN-NEXT:    buffer_load_dword v41, off, s[0:3], s32 offset:308 ; 4-byte Folded Reload
37330 ; GCN-NEXT:    buffer_load_dword v40, off, s[0:3], s32 offset:312 ; 4-byte Folded Reload
37331 ; GCN-NEXT:    s_waitcnt vmcnt(0)
37332 ; GCN-NEXT:    s_setpc_b64 s[30:31]
37334 ; GFX7-LABEL: v_vselect_v32bf16:
37335 ; GFX7:       ; %bb.0:
37336 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37337 ; GFX7-NEXT:    v_and_b32_e32 v24, 1, v24
37338 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v24
37339 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32
37340 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:228
37341 ; GFX7-NEXT:    v_and_b32_e32 v25, 1, v25
37342 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v25
37343 ; GFX7-NEXT:    v_and_b32_e32 v30, 1, v30
37344 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v30
37345 ; GFX7-NEXT:    v_and_b32_e32 v29, 1, v29
37346 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v29
37347 ; GFX7-NEXT:    v_and_b32_e32 v28, 1, v28
37348 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v28
37349 ; GFX7-NEXT:    v_and_b32_e32 v27, 1, v27
37350 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v27
37351 ; GFX7-NEXT:    v_and_b32_e32 v26, 1, v26
37352 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v26
37353 ; GFX7-NEXT:    v_and_b32_e32 v23, 1, v23
37354 ; GFX7-NEXT:    v_and_b32_e32 v22, 1, v22
37355 ; GFX7-NEXT:    v_and_b32_e32 v21, 1, v21
37356 ; GFX7-NEXT:    v_and_b32_e32 v20, 1, v20
37357 ; GFX7-NEXT:    v_and_b32_e32 v19, 1, v19
37358 ; GFX7-NEXT:    v_and_b32_e32 v18, 1, v18
37359 ; GFX7-NEXT:    v_and_b32_e32 v17, 1, v17
37360 ; GFX7-NEXT:    v_and_b32_e32 v16, 1, v16
37361 ; GFX7-NEXT:    v_and_b32_e32 v15, 1, v15
37362 ; GFX7-NEXT:    v_and_b32_e32 v14, 1, v14
37363 ; GFX7-NEXT:    v_and_b32_e32 v13, 1, v13
37364 ; GFX7-NEXT:    v_and_b32_e32 v12, 1, v12
37365 ; GFX7-NEXT:    v_and_b32_e32 v11, 1, v11
37366 ; GFX7-NEXT:    v_and_b32_e32 v10, 1, v10
37367 ; GFX7-NEXT:    v_and_b32_e32 v9, 1, v9
37368 ; GFX7-NEXT:    v_and_b32_e32 v8, 1, v8
37369 ; GFX7-NEXT:    v_and_b32_e32 v7, 1, v7
37370 ; GFX7-NEXT:    v_and_b32_e32 v6, 1, v6
37371 ; GFX7-NEXT:    v_and_b32_e32 v5, 1, v5
37372 ; GFX7-NEXT:    v_and_b32_e32 v4, 1, v4
37373 ; GFX7-NEXT:    v_and_b32_e32 v3, 1, v3
37374 ; GFX7-NEXT:    v_and_b32_e32 v2, 1, v2
37375 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
37376 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
37377 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:252
37378 ; GFX7-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:256
37379 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
37380 ; GFX7-NEXT:    v_and_b32_e32 v24, 1, v24
37381 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v24
37382 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:124
37383 ; GFX7-NEXT:    s_waitcnt vmcnt(3)
37384 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37385 ; GFX7-NEXT:    s_waitcnt vmcnt(2)
37386 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37387 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37388 ; GFX7-NEXT:    v_mul_f32_e32 v31, 1.0, v31
37389 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37390 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37391 ; GFX7-NEXT:    v_cndmask_b32_e64 v30, v25, v24, s[12:13]
37392 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:120
37393 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:248
37394 ; GFX7-NEXT:    v_and_b32_e32 v30, 0xffff0000, v30
37395 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37396 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37397 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37398 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37399 ; GFX7-NEXT:    v_cndmask_b32_e64 v29, v25, v24, s[14:15]
37400 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:116
37401 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:244
37402 ; GFX7-NEXT:    v_and_b32_e32 v29, 0xffff0000, v29
37403 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37404 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37405 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37406 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37407 ; GFX7-NEXT:    v_cndmask_b32_e64 v28, v25, v24, s[16:17]
37408 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:112
37409 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:240
37410 ; GFX7-NEXT:    v_and_b32_e32 v28, 0xffff0000, v28
37411 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37412 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37413 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37414 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37415 ; GFX7-NEXT:    v_cndmask_b32_e64 v27, v25, v24, s[10:11]
37416 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:108
37417 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:236
37418 ; GFX7-NEXT:    v_and_b32_e32 v27, 0xffff0000, v27
37419 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37420 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37421 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37422 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37423 ; GFX7-NEXT:    v_cndmask_b32_e64 v26, v25, v24, s[8:9]
37424 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:104
37425 ; GFX7-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:232
37426 ; GFX7-NEXT:    v_and_b32_e32 v26, 0xffff0000, v26
37427 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37428 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37429 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37430 ; GFX7-NEXT:    v_mul_f32_e32 v25, 1.0, v25
37431 ; GFX7-NEXT:    v_cndmask_b32_e64 v25, v25, v24, s[6:7]
37432 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:128
37433 ; GFX7-NEXT:    v_and_b32_e32 v25, 0xffff0000, v25
37434 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37435 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37436 ; GFX7-NEXT:    v_cndmask_b32_e64 v31, v31, v24, s[4:5]
37437 ; GFX7-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:100
37438 ; GFX7-NEXT:    v_and_b32_e32 v31, 0xffff0000, v31
37439 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37440 ; GFX7-NEXT:    v_mul_f32_e32 v24, 1.0, v24
37441 ; GFX7-NEXT:    v_cndmask_b32_e32 v24, v32, v24, vcc
37442 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v23
37443 ; GFX7-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:96
37444 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:224
37445 ; GFX7-NEXT:    v_and_b32_e32 v24, 0xffff0000, v24
37446 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37447 ; GFX7-NEXT:    v_mul_f32_e32 v23, 1.0, v23
37448 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37449 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37450 ; GFX7-NEXT:    v_cndmask_b32_e32 v23, v32, v23, vcc
37451 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v22
37452 ; GFX7-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:92
37453 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:220
37454 ; GFX7-NEXT:    v_and_b32_e32 v23, 0xffff0000, v23
37455 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37456 ; GFX7-NEXT:    v_mul_f32_e32 v22, 1.0, v22
37457 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37458 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37459 ; GFX7-NEXT:    v_cndmask_b32_e32 v22, v32, v22, vcc
37460 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v21
37461 ; GFX7-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:88
37462 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:216
37463 ; GFX7-NEXT:    v_and_b32_e32 v22, 0xffff0000, v22
37464 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37465 ; GFX7-NEXT:    v_mul_f32_e32 v21, 1.0, v21
37466 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37467 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37468 ; GFX7-NEXT:    v_cndmask_b32_e32 v21, v32, v21, vcc
37469 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v20
37470 ; GFX7-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:84
37471 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:212
37472 ; GFX7-NEXT:    v_and_b32_e32 v21, 0xffff0000, v21
37473 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37474 ; GFX7-NEXT:    v_mul_f32_e32 v20, 1.0, v20
37475 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37476 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37477 ; GFX7-NEXT:    v_cndmask_b32_e32 v20, v32, v20, vcc
37478 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v19
37479 ; GFX7-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:80
37480 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:208
37481 ; GFX7-NEXT:    v_and_b32_e32 v20, 0xffff0000, v20
37482 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37483 ; GFX7-NEXT:    v_mul_f32_e32 v19, 1.0, v19
37484 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37485 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37486 ; GFX7-NEXT:    v_cndmask_b32_e32 v19, v32, v19, vcc
37487 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v18
37488 ; GFX7-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:76
37489 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:204
37490 ; GFX7-NEXT:    v_and_b32_e32 v19, 0xffff0000, v19
37491 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37492 ; GFX7-NEXT:    v_mul_f32_e32 v18, 1.0, v18
37493 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37494 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37495 ; GFX7-NEXT:    v_cndmask_b32_e32 v18, v32, v18, vcc
37496 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v17
37497 ; GFX7-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:72
37498 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:200
37499 ; GFX7-NEXT:    v_and_b32_e32 v18, 0xffff0000, v18
37500 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37501 ; GFX7-NEXT:    v_mul_f32_e32 v17, 1.0, v17
37502 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37503 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37504 ; GFX7-NEXT:    v_cndmask_b32_e32 v17, v32, v17, vcc
37505 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v16
37506 ; GFX7-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:68
37507 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:196
37508 ; GFX7-NEXT:    v_and_b32_e32 v17, 0xffff0000, v17
37509 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37510 ; GFX7-NEXT:    v_mul_f32_e32 v16, 1.0, v16
37511 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37512 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37513 ; GFX7-NEXT:    v_cndmask_b32_e32 v16, v32, v16, vcc
37514 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v15
37515 ; GFX7-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:64
37516 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:192
37517 ; GFX7-NEXT:    v_and_b32_e32 v16, 0xffff0000, v16
37518 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37519 ; GFX7-NEXT:    v_mul_f32_e32 v15, 1.0, v15
37520 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37521 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37522 ; GFX7-NEXT:    v_cndmask_b32_e32 v15, v32, v15, vcc
37523 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v14
37524 ; GFX7-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:60
37525 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:188
37526 ; GFX7-NEXT:    v_and_b32_e32 v15, 0xffff0000, v15
37527 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37528 ; GFX7-NEXT:    v_mul_f32_e32 v14, 1.0, v14
37529 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37530 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37531 ; GFX7-NEXT:    v_cndmask_b32_e32 v14, v32, v14, vcc
37532 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v13
37533 ; GFX7-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:56
37534 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:184
37535 ; GFX7-NEXT:    v_and_b32_e32 v14, 0xffff0000, v14
37536 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37537 ; GFX7-NEXT:    v_mul_f32_e32 v13, 1.0, v13
37538 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37539 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37540 ; GFX7-NEXT:    v_cndmask_b32_e32 v13, v32, v13, vcc
37541 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v12
37542 ; GFX7-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:52
37543 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:180
37544 ; GFX7-NEXT:    v_and_b32_e32 v13, 0xffff0000, v13
37545 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37546 ; GFX7-NEXT:    v_mul_f32_e32 v12, 1.0, v12
37547 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37548 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37549 ; GFX7-NEXT:    v_cndmask_b32_e32 v12, v32, v12, vcc
37550 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v11
37551 ; GFX7-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:48
37552 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:176
37553 ; GFX7-NEXT:    v_and_b32_e32 v12, 0xffff0000, v12
37554 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37555 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
37556 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37557 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37558 ; GFX7-NEXT:    v_cndmask_b32_e32 v11, v32, v11, vcc
37559 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v10
37560 ; GFX7-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:44
37561 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:172
37562 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
37563 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37564 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
37565 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37566 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37567 ; GFX7-NEXT:    v_cndmask_b32_e32 v10, v32, v10, vcc
37568 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v9
37569 ; GFX7-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:40
37570 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:168
37571 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
37572 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37573 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
37574 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37575 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37576 ; GFX7-NEXT:    v_cndmask_b32_e32 v9, v32, v9, vcc
37577 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
37578 ; GFX7-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:36
37579 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:164
37580 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
37581 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37582 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
37583 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37584 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37585 ; GFX7-NEXT:    v_cndmask_b32_e32 v8, v32, v8, vcc
37586 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v7
37587 ; GFX7-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:32
37588 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:160
37589 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
37590 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37591 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
37592 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37593 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37594 ; GFX7-NEXT:    v_cndmask_b32_e32 v7, v32, v7, vcc
37595 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
37596 ; GFX7-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:28
37597 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:156
37598 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
37599 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37600 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
37601 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37602 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37603 ; GFX7-NEXT:    v_cndmask_b32_e32 v6, v32, v6, vcc
37604 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
37605 ; GFX7-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:24
37606 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:152
37607 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
37608 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37609 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
37610 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37611 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37612 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v32, v5, vcc
37613 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
37614 ; GFX7-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:20
37615 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:148
37616 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
37617 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37618 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
37619 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37620 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37621 ; GFX7-NEXT:    v_cndmask_b32_e32 v4, v32, v4, vcc
37622 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
37623 ; GFX7-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:16
37624 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:144
37625 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
37626 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37627 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
37628 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37629 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37630 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v32, v3, vcc
37631 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
37632 ; GFX7-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:12
37633 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:140
37634 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
37635 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37636 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
37637 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37638 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37639 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v32, v2, vcc
37640 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
37641 ; GFX7-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:8
37642 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:136
37643 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
37644 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37645 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
37646 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37647 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37648 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v32, v1, vcc
37649 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
37650 ; GFX7-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:4
37651 ; GFX7-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:132
37652 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
37653 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
37654 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
37655 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
37656 ; GFX7-NEXT:    v_mul_f32_e32 v32, 1.0, v32
37657 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v32, v0, vcc
37658 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
37659 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
37661 ; GFX8-LABEL: v_vselect_v32bf16:
37662 ; GFX8:       ; %bb.0:
37663 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37664 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
37665 ; GFX8-NEXT:    buffer_store_dword v34, off, s[0:3], s32 offset:132 ; 4-byte Folded Spill
37666 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
37667 ; GFX8-NEXT:    v_writelane_b32 v34, s30, 0
37668 ; GFX8-NEXT:    v_writelane_b32 v34, s31, 1
37669 ; GFX8-NEXT:    v_writelane_b32 v34, s34, 2
37670 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
37671 ; GFX8-NEXT:    v_writelane_b32 v34, s35, 3
37672 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
37673 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v1
37674 ; GFX8-NEXT:    v_writelane_b32 v34, s36, 4
37675 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v0
37676 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v2
37677 ; GFX8-NEXT:    v_writelane_b32 v34, s37, 5
37678 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v0
37679 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v3
37680 ; GFX8-NEXT:    v_writelane_b32 v34, s38, 6
37681 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v0
37682 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v4
37683 ; GFX8-NEXT:    v_writelane_b32 v34, s39, 7
37684 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v0
37685 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v5
37686 ; GFX8-NEXT:    v_writelane_b32 v34, s40, 8
37687 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v0
37688 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v6
37689 ; GFX8-NEXT:    v_writelane_b32 v34, s41, 9
37690 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v0
37691 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v7
37692 ; GFX8-NEXT:    v_writelane_b32 v34, s42, 10
37693 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v0
37694 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v8
37695 ; GFX8-NEXT:    v_writelane_b32 v34, s43, 11
37696 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v0
37697 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v9
37698 ; GFX8-NEXT:    v_writelane_b32 v34, s44, 12
37699 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v0
37700 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v10
37701 ; GFX8-NEXT:    v_writelane_b32 v34, s45, 13
37702 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v0
37703 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v11
37704 ; GFX8-NEXT:    v_writelane_b32 v34, s46, 14
37705 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v0
37706 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v12
37707 ; GFX8-NEXT:    v_writelane_b32 v34, s47, 15
37708 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[26:27], 1, v0
37709 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v13
37710 ; GFX8-NEXT:    v_writelane_b32 v34, s48, 16
37711 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[28:29], 1, v0
37712 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v14
37713 ; GFX8-NEXT:    v_writelane_b32 v34, s49, 17
37714 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[30:31], 1, v0
37715 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v15
37716 ; GFX8-NEXT:    v_writelane_b32 v34, s50, 18
37717 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[34:35], 1, v0
37718 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v16
37719 ; GFX8-NEXT:    v_writelane_b32 v34, s51, 19
37720 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[36:37], 1, v0
37721 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v17
37722 ; GFX8-NEXT:    v_writelane_b32 v34, s52, 20
37723 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[38:39], 1, v0
37724 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v18
37725 ; GFX8-NEXT:    v_writelane_b32 v34, s53, 21
37726 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[40:41], 1, v0
37727 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v19
37728 ; GFX8-NEXT:    v_writelane_b32 v34, s54, 22
37729 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[42:43], 1, v0
37730 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v20
37731 ; GFX8-NEXT:    v_writelane_b32 v34, s55, 23
37732 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[44:45], 1, v0
37733 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v21
37734 ; GFX8-NEXT:    v_writelane_b32 v34, s56, 24
37735 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[46:47], 1, v0
37736 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v22
37737 ; GFX8-NEXT:    v_writelane_b32 v34, s57, 25
37738 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[48:49], 1, v0
37739 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v23
37740 ; GFX8-NEXT:    v_writelane_b32 v34, s58, 26
37741 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[50:51], 1, v0
37742 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v24
37743 ; GFX8-NEXT:    v_writelane_b32 v34, s59, 27
37744 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[52:53], 1, v0
37745 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v25
37746 ; GFX8-NEXT:    v_writelane_b32 v34, s60, 28
37747 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[54:55], 1, v0
37748 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v26
37749 ; GFX8-NEXT:    v_writelane_b32 v34, s61, 29
37750 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[56:57], 1, v0
37751 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v27
37752 ; GFX8-NEXT:    v_writelane_b32 v34, s62, 30
37753 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[58:59], 1, v0
37754 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v28
37755 ; GFX8-NEXT:    v_writelane_b32 v34, s63, 31
37756 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[60:61], 1, v0
37757 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v29
37758 ; GFX8-NEXT:    v_writelane_b32 v34, s64, 32
37759 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[62:63], 1, v0
37760 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v30
37761 ; GFX8-NEXT:    v_writelane_b32 v34, s65, 33
37762 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[64:65], 1, v0
37763 ; GFX8-NEXT:    buffer_load_ushort v0, off, s[0:3], s32
37764 ; GFX8-NEXT:    v_writelane_b32 v34, s66, 34
37765 ; GFX8-NEXT:    v_writelane_b32 v34, s67, 35
37766 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
37767 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
37768 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[66:67], 1, v0
37769 ; GFX8-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:68
37770 ; GFX8-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4
37771 ; GFX8-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:72
37772 ; GFX8-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:8
37773 ; GFX8-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:76
37774 ; GFX8-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:12
37775 ; GFX8-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:80
37776 ; GFX8-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:16
37777 ; GFX8-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:84
37778 ; GFX8-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:20
37779 ; GFX8-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:88
37780 ; GFX8-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:24
37781 ; GFX8-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:92
37782 ; GFX8-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:28
37783 ; GFX8-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:96
37784 ; GFX8-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:32
37785 ; GFX8-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:100
37786 ; GFX8-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:36
37787 ; GFX8-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:104
37788 ; GFX8-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:40
37789 ; GFX8-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:108
37790 ; GFX8-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:44
37791 ; GFX8-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:112
37792 ; GFX8-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:48
37793 ; GFX8-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:116
37794 ; GFX8-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:52
37795 ; GFX8-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:120
37796 ; GFX8-NEXT:    buffer_load_dword v27, off, s[0:3], s32 offset:56
37797 ; GFX8-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:124
37798 ; GFX8-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:60
37799 ; GFX8-NEXT:    buffer_load_dword v29, off, s[0:3], s32 offset:128
37800 ; GFX8-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
37801 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
37802 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v29
37803 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
37804 ; GFX8-NEXT:    v_lshrrev_b32_e32 v28, 16, v32
37805 ; GFX8-NEXT:    v_cndmask_b32_e64 v28, v33, v28, s[66:67]
37806 ; GFX8-NEXT:    v_cndmask_b32_e64 v29, v29, v32, s[64:65]
37807 ; GFX8-NEXT:    v_lshrrev_b32_e32 v32, 16, v31
37808 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v30
37809 ; GFX8-NEXT:    v_cndmask_b32_e64 v32, v33, v32, s[62:63]
37810 ; GFX8-NEXT:    v_cndmask_b32_e64 v30, v30, v31, s[60:61]
37811 ; GFX8-NEXT:    v_lshrrev_b32_e32 v31, 16, v27
37812 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v26
37813 ; GFX8-NEXT:    v_cndmask_b32_e64 v31, v33, v31, s[58:59]
37814 ; GFX8-NEXT:    v_cndmask_b32_e64 v26, v26, v27, s[56:57]
37815 ; GFX8-NEXT:    v_lshrrev_b32_e32 v27, 16, v25
37816 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v24
37817 ; GFX8-NEXT:    v_cndmask_b32_e64 v27, v33, v27, s[54:55]
37818 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, v24, v25, s[52:53]
37819 ; GFX8-NEXT:    v_lshrrev_b32_e32 v25, 16, v23
37820 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v22
37821 ; GFX8-NEXT:    v_cndmask_b32_e64 v25, v33, v25, s[50:51]
37822 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, v22, v23, s[48:49]
37823 ; GFX8-NEXT:    v_lshrrev_b32_e32 v23, 16, v21
37824 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v20
37825 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, v33, v23, s[46:47]
37826 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, v20, v21, s[44:45]
37827 ; GFX8-NEXT:    v_lshrrev_b32_e32 v21, 16, v19
37828 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v18
37829 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, v33, v21, s[42:43]
37830 ; GFX8-NEXT:    v_cndmask_b32_e64 v18, v18, v19, s[40:41]
37831 ; GFX8-NEXT:    v_lshrrev_b32_e32 v19, 16, v17
37832 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v16
37833 ; GFX8-NEXT:    v_cndmask_b32_e64 v19, v33, v19, s[38:39]
37834 ; GFX8-NEXT:    v_cndmask_b32_e64 v16, v16, v17, s[36:37]
37835 ; GFX8-NEXT:    v_lshrrev_b32_e32 v17, 16, v15
37836 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v14
37837 ; GFX8-NEXT:    v_cndmask_b32_e64 v17, v33, v17, s[34:35]
37838 ; GFX8-NEXT:    v_cndmask_b32_e64 v14, v14, v15, s[30:31]
37839 ; GFX8-NEXT:    v_lshrrev_b32_e32 v15, 16, v13
37840 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v12
37841 ; GFX8-NEXT:    v_cndmask_b32_e64 v15, v33, v15, s[28:29]
37842 ; GFX8-NEXT:    v_cndmask_b32_e64 v12, v12, v13, s[26:27]
37843 ; GFX8-NEXT:    v_lshrrev_b32_e32 v13, 16, v11
37844 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v10
37845 ; GFX8-NEXT:    v_cndmask_b32_e64 v13, v33, v13, s[24:25]
37846 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, v10, v11, s[22:23]
37847 ; GFX8-NEXT:    v_lshrrev_b32_e32 v11, 16, v9
37848 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v8
37849 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v33, v11, s[20:21]
37850 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, v8, v9, s[18:19]
37851 ; GFX8-NEXT:    v_lshrrev_b32_e32 v9, 16, v7
37852 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v6
37853 ; GFX8-NEXT:    v_cndmask_b32_e64 v9, v33, v9, s[16:17]
37854 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v6, v7, s[14:15]
37855 ; GFX8-NEXT:    v_lshrrev_b32_e32 v7, 16, v5
37856 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v4
37857 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v33, v7, s[12:13]
37858 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v4, v5, s[10:11]
37859 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v3
37860 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v2
37861 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v33, v5, s[8:9]
37862 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[6:7]
37863 ; GFX8-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
37864 ; GFX8-NEXT:    v_lshrrev_b32_e32 v33, 16, v0
37865 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v33, v3, s[4:5]
37866 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
37867 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
37868 ; GFX8-NEXT:    v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37869 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v5
37870 ; GFX8-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37871 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
37872 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v9
37873 ; GFX8-NEXT:    v_or_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37874 ; GFX8-NEXT:    v_or_b32_sdwa v3, v6, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37875 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v11
37876 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v13
37877 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v15
37878 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v17
37879 ; GFX8-NEXT:    v_or_b32_sdwa v4, v8, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37880 ; GFX8-NEXT:    v_or_b32_sdwa v5, v10, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37881 ; GFX8-NEXT:    v_or_b32_sdwa v6, v12, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37882 ; GFX8-NEXT:    v_or_b32_sdwa v7, v14, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37883 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v19
37884 ; GFX8-NEXT:    v_lshlrev_b32_e32 v9, 16, v21
37885 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v23
37886 ; GFX8-NEXT:    v_lshlrev_b32_e32 v11, 16, v25
37887 ; GFX8-NEXT:    v_lshlrev_b32_e32 v12, 16, v27
37888 ; GFX8-NEXT:    v_lshlrev_b32_e32 v13, 16, v31
37889 ; GFX8-NEXT:    v_lshlrev_b32_e32 v14, 16, v32
37890 ; GFX8-NEXT:    v_lshlrev_b32_e32 v15, 16, v28
37891 ; GFX8-NEXT:    v_or_b32_sdwa v8, v16, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37892 ; GFX8-NEXT:    v_or_b32_sdwa v9, v18, v9 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37893 ; GFX8-NEXT:    v_or_b32_sdwa v10, v20, v10 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37894 ; GFX8-NEXT:    v_or_b32_sdwa v11, v22, v11 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37895 ; GFX8-NEXT:    v_or_b32_sdwa v12, v24, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37896 ; GFX8-NEXT:    v_or_b32_sdwa v13, v26, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37897 ; GFX8-NEXT:    v_or_b32_sdwa v14, v30, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37898 ; GFX8-NEXT:    v_or_b32_sdwa v15, v29, v15 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
37899 ; GFX8-NEXT:    v_readlane_b32 s67, v34, 35
37900 ; GFX8-NEXT:    v_readlane_b32 s66, v34, 34
37901 ; GFX8-NEXT:    v_readlane_b32 s65, v34, 33
37902 ; GFX8-NEXT:    v_readlane_b32 s64, v34, 32
37903 ; GFX8-NEXT:    v_readlane_b32 s63, v34, 31
37904 ; GFX8-NEXT:    v_readlane_b32 s62, v34, 30
37905 ; GFX8-NEXT:    v_readlane_b32 s61, v34, 29
37906 ; GFX8-NEXT:    v_readlane_b32 s60, v34, 28
37907 ; GFX8-NEXT:    v_readlane_b32 s59, v34, 27
37908 ; GFX8-NEXT:    v_readlane_b32 s58, v34, 26
37909 ; GFX8-NEXT:    v_readlane_b32 s57, v34, 25
37910 ; GFX8-NEXT:    v_readlane_b32 s56, v34, 24
37911 ; GFX8-NEXT:    v_readlane_b32 s55, v34, 23
37912 ; GFX8-NEXT:    v_readlane_b32 s54, v34, 22
37913 ; GFX8-NEXT:    v_readlane_b32 s53, v34, 21
37914 ; GFX8-NEXT:    v_readlane_b32 s52, v34, 20
37915 ; GFX8-NEXT:    v_readlane_b32 s51, v34, 19
37916 ; GFX8-NEXT:    v_readlane_b32 s50, v34, 18
37917 ; GFX8-NEXT:    v_readlane_b32 s49, v34, 17
37918 ; GFX8-NEXT:    v_readlane_b32 s48, v34, 16
37919 ; GFX8-NEXT:    v_readlane_b32 s47, v34, 15
37920 ; GFX8-NEXT:    v_readlane_b32 s46, v34, 14
37921 ; GFX8-NEXT:    v_readlane_b32 s45, v34, 13
37922 ; GFX8-NEXT:    v_readlane_b32 s44, v34, 12
37923 ; GFX8-NEXT:    v_readlane_b32 s43, v34, 11
37924 ; GFX8-NEXT:    v_readlane_b32 s42, v34, 10
37925 ; GFX8-NEXT:    v_readlane_b32 s41, v34, 9
37926 ; GFX8-NEXT:    v_readlane_b32 s40, v34, 8
37927 ; GFX8-NEXT:    v_readlane_b32 s39, v34, 7
37928 ; GFX8-NEXT:    v_readlane_b32 s38, v34, 6
37929 ; GFX8-NEXT:    v_readlane_b32 s37, v34, 5
37930 ; GFX8-NEXT:    v_readlane_b32 s36, v34, 4
37931 ; GFX8-NEXT:    v_readlane_b32 s35, v34, 3
37932 ; GFX8-NEXT:    v_readlane_b32 s34, v34, 2
37933 ; GFX8-NEXT:    v_readlane_b32 s31, v34, 1
37934 ; GFX8-NEXT:    v_readlane_b32 s30, v34, 0
37935 ; GFX8-NEXT:    s_xor_saveexec_b64 s[4:5], -1
37936 ; GFX8-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:132 ; 4-byte Folded Reload
37937 ; GFX8-NEXT:    s_mov_b64 exec, s[4:5]
37938 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
37939 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
37941 ; GFX9-LABEL: v_vselect_v32bf16:
37942 ; GFX9:       ; %bb.0:
37943 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
37944 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
37945 ; GFX9-NEXT:    buffer_store_dword v33, off, s[0:3], s32 offset:132 ; 4-byte Folded Spill
37946 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
37947 ; GFX9-NEXT:    v_writelane_b32 v33, s30, 0
37948 ; GFX9-NEXT:    v_writelane_b32 v33, s31, 1
37949 ; GFX9-NEXT:    v_writelane_b32 v33, s34, 2
37950 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
37951 ; GFX9-NEXT:    v_writelane_b32 v33, s35, 3
37952 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v0
37953 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v3
37954 ; GFX9-NEXT:    v_writelane_b32 v33, s36, 4
37955 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 1, v0
37956 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v2
37957 ; GFX9-NEXT:    v_writelane_b32 v33, s37, 5
37958 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 1, v0
37959 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v5
37960 ; GFX9-NEXT:    v_writelane_b32 v33, s38, 6
37961 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 1, v0
37962 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v4
37963 ; GFX9-NEXT:    v_writelane_b32 v33, s39, 7
37964 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 1, v0
37965 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v7
37966 ; GFX9-NEXT:    v_writelane_b32 v33, s40, 8
37967 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[14:15], 1, v0
37968 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v6
37969 ; GFX9-NEXT:    v_writelane_b32 v33, s41, 9
37970 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[16:17], 1, v0
37971 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v9
37972 ; GFX9-NEXT:    v_writelane_b32 v33, s42, 10
37973 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[18:19], 1, v0
37974 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v8
37975 ; GFX9-NEXT:    v_writelane_b32 v33, s43, 11
37976 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[20:21], 1, v0
37977 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v11
37978 ; GFX9-NEXT:    v_writelane_b32 v33, s44, 12
37979 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[22:23], 1, v0
37980 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v10
37981 ; GFX9-NEXT:    v_writelane_b32 v33, s45, 13
37982 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[24:25], 1, v0
37983 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v13
37984 ; GFX9-NEXT:    v_writelane_b32 v33, s46, 14
37985 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[26:27], 1, v0
37986 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v12
37987 ; GFX9-NEXT:    v_writelane_b32 v33, s47, 15
37988 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[28:29], 1, v0
37989 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v15
37990 ; GFX9-NEXT:    v_writelane_b32 v33, s48, 16
37991 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[30:31], 1, v0
37992 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v14
37993 ; GFX9-NEXT:    v_writelane_b32 v33, s49, 17
37994 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[34:35], 1, v0
37995 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v17
37996 ; GFX9-NEXT:    v_writelane_b32 v33, s50, 18
37997 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[36:37], 1, v0
37998 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v16
37999 ; GFX9-NEXT:    v_writelane_b32 v33, s51, 19
38000 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[38:39], 1, v0
38001 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v19
38002 ; GFX9-NEXT:    v_writelane_b32 v33, s52, 20
38003 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[40:41], 1, v0
38004 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v18
38005 ; GFX9-NEXT:    v_writelane_b32 v33, s53, 21
38006 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[42:43], 1, v0
38007 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v21
38008 ; GFX9-NEXT:    v_writelane_b32 v33, s54, 22
38009 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[44:45], 1, v0
38010 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v20
38011 ; GFX9-NEXT:    v_writelane_b32 v33, s55, 23
38012 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[46:47], 1, v0
38013 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v23
38014 ; GFX9-NEXT:    v_writelane_b32 v33, s56, 24
38015 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[48:49], 1, v0
38016 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v22
38017 ; GFX9-NEXT:    v_writelane_b32 v33, s57, 25
38018 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[50:51], 1, v0
38019 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v25
38020 ; GFX9-NEXT:    v_writelane_b32 v33, s58, 26
38021 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[52:53], 1, v0
38022 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v24
38023 ; GFX9-NEXT:    v_writelane_b32 v33, s59, 27
38024 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[54:55], 1, v0
38025 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v27
38026 ; GFX9-NEXT:    v_writelane_b32 v33, s60, 28
38027 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[56:57], 1, v0
38028 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v26
38029 ; GFX9-NEXT:    v_writelane_b32 v33, s61, 29
38030 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[58:59], 1, v0
38031 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v29
38032 ; GFX9-NEXT:    v_writelane_b32 v33, s62, 30
38033 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[60:61], 1, v0
38034 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v28
38035 ; GFX9-NEXT:    v_writelane_b32 v33, s63, 31
38036 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[62:63], 1, v0
38037 ; GFX9-NEXT:    buffer_load_ushort v0, off, s[0:3], s32
38038 ; GFX9-NEXT:    v_writelane_b32 v33, s64, 32
38039 ; GFX9-NEXT:    v_writelane_b32 v33, s65, 33
38040 ; GFX9-NEXT:    v_writelane_b32 v33, s66, 34
38041 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
38042 ; GFX9-NEXT:    v_writelane_b32 v33, s67, 35
38043 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v1
38044 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
38045 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
38046 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[64:65], 1, v0
38047 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v30
38048 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[66:67], 1, v0
38049 ; GFX9-NEXT:    buffer_load_dword v0, off, s[0:3], s32 offset:68
38050 ; GFX9-NEXT:    buffer_load_dword v1, off, s[0:3], s32 offset:4
38051 ; GFX9-NEXT:    buffer_load_dword v2, off, s[0:3], s32 offset:72
38052 ; GFX9-NEXT:    buffer_load_dword v3, off, s[0:3], s32 offset:8
38053 ; GFX9-NEXT:    buffer_load_dword v4, off, s[0:3], s32 offset:76
38054 ; GFX9-NEXT:    buffer_load_dword v5, off, s[0:3], s32 offset:12
38055 ; GFX9-NEXT:    buffer_load_dword v6, off, s[0:3], s32 offset:80
38056 ; GFX9-NEXT:    buffer_load_dword v7, off, s[0:3], s32 offset:16
38057 ; GFX9-NEXT:    buffer_load_dword v8, off, s[0:3], s32 offset:84
38058 ; GFX9-NEXT:    buffer_load_dword v9, off, s[0:3], s32 offset:20
38059 ; GFX9-NEXT:    buffer_load_dword v10, off, s[0:3], s32 offset:88
38060 ; GFX9-NEXT:    buffer_load_dword v11, off, s[0:3], s32 offset:24
38061 ; GFX9-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:92
38062 ; GFX9-NEXT:    buffer_load_dword v13, off, s[0:3], s32 offset:28
38063 ; GFX9-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:96
38064 ; GFX9-NEXT:    buffer_load_dword v15, off, s[0:3], s32 offset:32
38065 ; GFX9-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:100
38066 ; GFX9-NEXT:    buffer_load_dword v17, off, s[0:3], s32 offset:36
38067 ; GFX9-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:104
38068 ; GFX9-NEXT:    buffer_load_dword v19, off, s[0:3], s32 offset:40
38069 ; GFX9-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:108
38070 ; GFX9-NEXT:    buffer_load_dword v21, off, s[0:3], s32 offset:44
38071 ; GFX9-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:112
38072 ; GFX9-NEXT:    buffer_load_dword v23, off, s[0:3], s32 offset:48
38073 ; GFX9-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:116
38074 ; GFX9-NEXT:    buffer_load_dword v25, off, s[0:3], s32 offset:52
38075 ; GFX9-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:120
38076 ; GFX9-NEXT:    buffer_load_dword v27, off, s[0:3], s32 offset:56
38077 ; GFX9-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:124
38078 ; GFX9-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:60
38079 ; GFX9-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:128
38080 ; GFX9-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:64
38081 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
38082 ; GFX9-NEXT:    v_cndmask_b32_e64 v29, v31, v32, s[66:67]
38083 ; GFX9-NEXT:    v_lshrrev_b32_e32 v32, 16, v32
38084 ; GFX9-NEXT:    v_lshrrev_b32_e32 v31, 16, v31
38085 ; GFX9-NEXT:    v_cndmask_b32_e64 v31, v31, v32, s[64:65]
38086 ; GFX9-NEXT:    v_cndmask_b32_e64 v32, v28, v30, s[62:63]
38087 ; GFX9-NEXT:    v_lshrrev_b32_e32 v30, 16, v30
38088 ; GFX9-NEXT:    v_lshrrev_b32_e32 v28, 16, v28
38089 ; GFX9-NEXT:    v_cndmask_b32_e64 v28, v28, v30, s[60:61]
38090 ; GFX9-NEXT:    v_cndmask_b32_e64 v30, v26, v27, s[58:59]
38091 ; GFX9-NEXT:    v_lshrrev_b32_e32 v27, 16, v27
38092 ; GFX9-NEXT:    v_lshrrev_b32_e32 v26, 16, v26
38093 ; GFX9-NEXT:    v_cndmask_b32_e64 v26, v26, v27, s[56:57]
38094 ; GFX9-NEXT:    v_cndmask_b32_e64 v27, v24, v25, s[54:55]
38095 ; GFX9-NEXT:    v_lshrrev_b32_e32 v25, 16, v25
38096 ; GFX9-NEXT:    v_lshrrev_b32_e32 v24, 16, v24
38097 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, v24, v25, s[52:53]
38098 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, v22, v23, s[50:51]
38099 ; GFX9-NEXT:    v_lshrrev_b32_e32 v23, 16, v23
38100 ; GFX9-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
38101 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, v22, v23, s[48:49]
38102 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, v20, v21, s[46:47]
38103 ; GFX9-NEXT:    v_lshrrev_b32_e32 v21, 16, v21
38104 ; GFX9-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
38105 ; GFX9-NEXT:    v_cndmask_b32_e64 v20, v20, v21, s[44:45]
38106 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, v18, v19, s[42:43]
38107 ; GFX9-NEXT:    v_lshrrev_b32_e32 v19, 16, v19
38108 ; GFX9-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
38109 ; GFX9-NEXT:    v_cndmask_b32_e64 v18, v18, v19, s[40:41]
38110 ; GFX9-NEXT:    v_cndmask_b32_e64 v19, v16, v17, s[38:39]
38111 ; GFX9-NEXT:    v_lshrrev_b32_e32 v17, 16, v17
38112 ; GFX9-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
38113 ; GFX9-NEXT:    v_cndmask_b32_e64 v16, v16, v17, s[36:37]
38114 ; GFX9-NEXT:    v_cndmask_b32_e64 v17, v14, v15, s[34:35]
38115 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 16, v15
38116 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
38117 ; GFX9-NEXT:    v_cndmask_b32_e64 v14, v14, v15, s[30:31]
38118 ; GFX9-NEXT:    v_cndmask_b32_e64 v15, v12, v13, s[28:29]
38119 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 16, v13
38120 ; GFX9-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
38121 ; GFX9-NEXT:    v_cndmask_b32_e64 v12, v12, v13, s[26:27]
38122 ; GFX9-NEXT:    v_cndmask_b32_e64 v13, v10, v11, s[24:25]
38123 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v11
38124 ; GFX9-NEXT:    v_lshrrev_b32_e32 v10, 16, v10
38125 ; GFX9-NEXT:    v_cndmask_b32_e64 v10, v10, v11, s[22:23]
38126 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v8, v9, s[20:21]
38127 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v9
38128 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 16, v8
38129 ; GFX9-NEXT:    v_cndmask_b32_e64 v8, v8, v9, s[18:19]
38130 ; GFX9-NEXT:    v_cndmask_b32_e64 v9, v6, v7, s[16:17]
38131 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
38132 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 16, v6
38133 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v6, v7, s[14:15]
38134 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v4, v5, s[12:13]
38135 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
38136 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
38137 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v4, v5, s[10:11]
38138 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v2, v3, s[8:9]
38139 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
38140 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
38141 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v3, s[6:7]
38142 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v0, v1, s[4:5]
38143 ; GFX9-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
38144 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38145 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
38146 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
38147 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
38148 ; GFX9-NEXT:    v_perm_b32 v1, v2, v5, s4
38149 ; GFX9-NEXT:    v_perm_b32 v2, v4, v7, s4
38150 ; GFX9-NEXT:    v_perm_b32 v3, v6, v9, s4
38151 ; GFX9-NEXT:    v_perm_b32 v4, v8, v11, s4
38152 ; GFX9-NEXT:    v_perm_b32 v5, v10, v13, s4
38153 ; GFX9-NEXT:    v_perm_b32 v6, v12, v15, s4
38154 ; GFX9-NEXT:    v_perm_b32 v7, v14, v17, s4
38155 ; GFX9-NEXT:    v_perm_b32 v8, v16, v19, s4
38156 ; GFX9-NEXT:    v_perm_b32 v9, v18, v21, s4
38157 ; GFX9-NEXT:    v_perm_b32 v10, v20, v23, s4
38158 ; GFX9-NEXT:    v_perm_b32 v11, v22, v25, s4
38159 ; GFX9-NEXT:    v_perm_b32 v12, v24, v27, s4
38160 ; GFX9-NEXT:    v_perm_b32 v13, v26, v30, s4
38161 ; GFX9-NEXT:    v_perm_b32 v14, v28, v32, s4
38162 ; GFX9-NEXT:    v_perm_b32 v15, v31, v29, s4
38163 ; GFX9-NEXT:    v_readlane_b32 s67, v33, 35
38164 ; GFX9-NEXT:    v_readlane_b32 s66, v33, 34
38165 ; GFX9-NEXT:    v_readlane_b32 s65, v33, 33
38166 ; GFX9-NEXT:    v_readlane_b32 s64, v33, 32
38167 ; GFX9-NEXT:    v_readlane_b32 s63, v33, 31
38168 ; GFX9-NEXT:    v_readlane_b32 s62, v33, 30
38169 ; GFX9-NEXT:    v_readlane_b32 s61, v33, 29
38170 ; GFX9-NEXT:    v_readlane_b32 s60, v33, 28
38171 ; GFX9-NEXT:    v_readlane_b32 s59, v33, 27
38172 ; GFX9-NEXT:    v_readlane_b32 s58, v33, 26
38173 ; GFX9-NEXT:    v_readlane_b32 s57, v33, 25
38174 ; GFX9-NEXT:    v_readlane_b32 s56, v33, 24
38175 ; GFX9-NEXT:    v_readlane_b32 s55, v33, 23
38176 ; GFX9-NEXT:    v_readlane_b32 s54, v33, 22
38177 ; GFX9-NEXT:    v_readlane_b32 s53, v33, 21
38178 ; GFX9-NEXT:    v_readlane_b32 s52, v33, 20
38179 ; GFX9-NEXT:    v_readlane_b32 s51, v33, 19
38180 ; GFX9-NEXT:    v_readlane_b32 s50, v33, 18
38181 ; GFX9-NEXT:    v_readlane_b32 s49, v33, 17
38182 ; GFX9-NEXT:    v_readlane_b32 s48, v33, 16
38183 ; GFX9-NEXT:    v_readlane_b32 s47, v33, 15
38184 ; GFX9-NEXT:    v_readlane_b32 s46, v33, 14
38185 ; GFX9-NEXT:    v_readlane_b32 s45, v33, 13
38186 ; GFX9-NEXT:    v_readlane_b32 s44, v33, 12
38187 ; GFX9-NEXT:    v_readlane_b32 s43, v33, 11
38188 ; GFX9-NEXT:    v_readlane_b32 s42, v33, 10
38189 ; GFX9-NEXT:    v_readlane_b32 s41, v33, 9
38190 ; GFX9-NEXT:    v_readlane_b32 s40, v33, 8
38191 ; GFX9-NEXT:    v_readlane_b32 s39, v33, 7
38192 ; GFX9-NEXT:    v_readlane_b32 s38, v33, 6
38193 ; GFX9-NEXT:    v_readlane_b32 s37, v33, 5
38194 ; GFX9-NEXT:    v_readlane_b32 s36, v33, 4
38195 ; GFX9-NEXT:    v_readlane_b32 s35, v33, 3
38196 ; GFX9-NEXT:    v_readlane_b32 s34, v33, 2
38197 ; GFX9-NEXT:    v_readlane_b32 s31, v33, 1
38198 ; GFX9-NEXT:    v_readlane_b32 s30, v33, 0
38199 ; GFX9-NEXT:    s_xor_saveexec_b64 s[4:5], -1
38200 ; GFX9-NEXT:    buffer_load_dword v33, off, s[0:3], s32 offset:132 ; 4-byte Folded Reload
38201 ; GFX9-NEXT:    s_mov_b64 exec, s[4:5]
38202 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
38203 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
38205 ; GFX10-LABEL: v_vselect_v32bf16:
38206 ; GFX10:       ; %bb.0:
38207 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38208 ; GFX10-NEXT:    s_or_saveexec_b32 s4, -1
38209 ; GFX10-NEXT:    buffer_store_dword v40, off, s[0:3], s32 offset:132 ; 4-byte Folded Spill
38210 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
38211 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
38212 ; GFX10-NEXT:    v_and_b32_e32 v29, 1, v29
38213 ; GFX10-NEXT:    v_and_b32_e32 v30, 1, v30
38214 ; GFX10-NEXT:    v_and_b32_e32 v28, 1, v28
38215 ; GFX10-NEXT:    v_and_b32_e32 v26, 1, v26
38216 ; GFX10-NEXT:    v_and_b32_e32 v24, 1, v24
38217 ; GFX10-NEXT:    v_and_b32_e32 v22, 1, v22
38218 ; GFX10-NEXT:    v_and_b32_e32 v20, 1, v20
38219 ; GFX10-NEXT:    v_and_b32_e32 v18, 1, v18
38220 ; GFX10-NEXT:    v_and_b32_e32 v16, 1, v16
38221 ; GFX10-NEXT:    v_and_b32_e32 v14, 1, v14
38222 ; GFX10-NEXT:    v_and_b32_e32 v12, 1, v12
38223 ; GFX10-NEXT:    s_clause 0x14
38224 ; GFX10-NEXT:    buffer_load_dword v31, off, s[0:3], s32 offset:60
38225 ; GFX10-NEXT:    buffer_load_dword v32, off, s[0:3], s32 offset:124
38226 ; GFX10-NEXT:    buffer_load_ushort v33, off, s[0:3], s32
38227 ; GFX10-NEXT:    buffer_load_dword v34, off, s[0:3], s32 offset:128
38228 ; GFX10-NEXT:    buffer_load_dword v35, off, s[0:3], s32 offset:64
38229 ; GFX10-NEXT:    buffer_load_dword v36, off, s[0:3], s32 offset:48
38230 ; GFX10-NEXT:    buffer_load_dword v37, off, s[0:3], s32 offset:116
38231 ; GFX10-NEXT:    buffer_load_dword v38, off, s[0:3], s32 offset:52
38232 ; GFX10-NEXT:    buffer_load_dword v39, off, s[0:3], s32 offset:120
38233 ; GFX10-NEXT:    buffer_load_dword v48, off, s[0:3], s32 offset:56
38234 ; GFX10-NEXT:    buffer_load_dword v49, off, s[0:3], s32 offset:32
38235 ; GFX10-NEXT:    buffer_load_dword v50, off, s[0:3], s32 offset:100
38236 ; GFX10-NEXT:    buffer_load_dword v51, off, s[0:3], s32 offset:36
38237 ; GFX10-NEXT:    buffer_load_dword v52, off, s[0:3], s32 offset:104
38238 ; GFX10-NEXT:    buffer_load_dword v53, off, s[0:3], s32 offset:40
38239 ; GFX10-NEXT:    buffer_load_dword v54, off, s[0:3], s32 offset:108
38240 ; GFX10-NEXT:    buffer_load_dword v55, off, s[0:3], s32 offset:44
38241 ; GFX10-NEXT:    buffer_load_dword v64, off, s[0:3], s32 offset:112
38242 ; GFX10-NEXT:    buffer_load_dword v65, off, s[0:3], s32 offset:72
38243 ; GFX10-NEXT:    buffer_load_dword v66, off, s[0:3], s32 offset:76
38244 ; GFX10-NEXT:    buffer_load_dword v67, off, s[0:3], s32 offset:80
38245 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v29
38246 ; GFX10-NEXT:    s_clause 0x1
38247 ; GFX10-NEXT:    buffer_load_dword v29, off, s[0:3], s32 offset:92
38248 ; GFX10-NEXT:    buffer_load_dword v68, off, s[0:3], s32 offset:28
38249 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 1, v30
38250 ; GFX10-NEXT:    buffer_load_dword v30, off, s[0:3], s32 offset:96
38251 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s5, 1, v28
38252 ; GFX10-NEXT:    buffer_load_dword v28, off, s[0:3], s32 offset:88
38253 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s6, 1, v26
38254 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s7, 1, v24
38255 ; GFX10-NEXT:    buffer_load_dword v24, off, s[0:3], s32 offset:84
38256 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s8, 1, v22
38257 ; GFX10-NEXT:    buffer_load_dword v22, off, s[0:3], s32 offset:20
38258 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s9, 1, v20
38259 ; GFX10-NEXT:    buffer_load_dword v20, off, s[0:3], s32 offset:16
38260 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s10, 1, v18
38261 ; GFX10-NEXT:    buffer_load_dword v18, off, s[0:3], s32 offset:12
38262 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s11, 1, v16
38263 ; GFX10-NEXT:    buffer_load_dword v16, off, s[0:3], s32 offset:8
38264 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s12, 1, v14
38265 ; GFX10-NEXT:    s_clause 0x1
38266 ; GFX10-NEXT:    buffer_load_dword v14, off, s[0:3], s32 offset:68
38267 ; GFX10-NEXT:    buffer_load_dword v26, off, s[0:3], s32 offset:24
38268 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s13, 1, v12
38269 ; GFX10-NEXT:    buffer_load_dword v12, off, s[0:3], s32 offset:4
38270 ; GFX10-NEXT:    v_writelane_b32 v40, s30, 0
38271 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
38272 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v2
38273 ; GFX10-NEXT:    v_and_b32_e32 v4, 1, v4
38274 ; GFX10-NEXT:    v_and_b32_e32 v6, 1, v6
38275 ; GFX10-NEXT:    v_and_b32_e32 v8, 1, v8
38276 ; GFX10-NEXT:    v_and_b32_e32 v10, 1, v10
38277 ; GFX10-NEXT:    v_writelane_b32 v40, s31, 1
38278 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
38279 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v3
38280 ; GFX10-NEXT:    v_and_b32_e32 v5, 1, v5
38281 ; GFX10-NEXT:    v_and_b32_e32 v7, 1, v7
38282 ; GFX10-NEXT:    v_and_b32_e32 v9, 1, v9
38283 ; GFX10-NEXT:    v_and_b32_e32 v11, 1, v11
38284 ; GFX10-NEXT:    v_and_b32_e32 v13, 1, v13
38285 ; GFX10-NEXT:    v_and_b32_e32 v15, 1, v15
38286 ; GFX10-NEXT:    v_and_b32_e32 v17, 1, v17
38287 ; GFX10-NEXT:    v_and_b32_e32 v19, 1, v19
38288 ; GFX10-NEXT:    v_and_b32_e32 v21, 1, v21
38289 ; GFX10-NEXT:    v_and_b32_e32 v23, 1, v23
38290 ; GFX10-NEXT:    v_and_b32_e32 v25, 1, v25
38291 ; GFX10-NEXT:    v_and_b32_e32 v27, 1, v27
38292 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s14, 1, v10
38293 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s15, 1, v8
38294 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s16, 1, v6
38295 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s17, 1, v4
38296 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s18, 1, v2
38297 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s19, 1, v0
38298 ; GFX10-NEXT:    v_writelane_b32 v40, s34, 2
38299 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s20, 1, v27
38300 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s21, 1, v25
38301 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s22, 1, v23
38302 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s23, 1, v21
38303 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s24, 1, v19
38304 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s25, 1, v17
38305 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s26, 1, v15
38306 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s27, 1, v13
38307 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s28, 1, v11
38308 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s29, 1, v7
38309 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_hi, 1, v3
38310 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s30, 1, v1
38311 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s31, 1, v5
38312 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s34, 1, v9
38313 ; GFX10-NEXT:    s_waitcnt vmcnt(32)
38314 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v31
38315 ; GFX10-NEXT:    s_waitcnt vmcnt(31)
38316 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 16, v32
38317 ; GFX10-NEXT:    s_waitcnt vmcnt(30)
38318 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v33
38319 ; GFX10-NEXT:    s_waitcnt vmcnt(29)
38320 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 16, v34
38321 ; GFX10-NEXT:    s_waitcnt vmcnt(28)
38322 ; GFX10-NEXT:    v_cndmask_b32_e64 v15, v34, v35, s4
38323 ; GFX10-NEXT:    v_lshrrev_b32_e32 v3, 16, v35
38324 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, v32, v31, s5
38325 ; GFX10-NEXT:    s_waitcnt vmcnt(25)
38326 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, v37, v38, s7
38327 ; GFX10-NEXT:    s_waitcnt vmcnt(24)
38328 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 16, v39
38329 ; GFX10-NEXT:    s_waitcnt vmcnt(23)
38330 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, v39, v48, s6
38331 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 16, v48
38332 ; GFX10-NEXT:    v_lshrrev_b32_e32 v7, 16, v38
38333 ; GFX10-NEXT:    v_lshrrev_b32_e32 v8, 16, v37
38334 ; GFX10-NEXT:    v_lshrrev_b32_e32 v9, 16, v36
38335 ; GFX10-NEXT:    s_waitcnt vmcnt(18)
38336 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, v52, v53, s10
38337 ; GFX10-NEXT:    s_waitcnt vmcnt(17)
38338 ; GFX10-NEXT:    v_lshrrev_b32_e32 v25, 16, v54
38339 ; GFX10-NEXT:    s_waitcnt vmcnt(16)
38340 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, v54, v55, s9
38341 ; GFX10-NEXT:    s_waitcnt vmcnt(15)
38342 ; GFX10-NEXT:    v_cndmask_b32_e64 v11, v64, v36, s8
38343 ; GFX10-NEXT:    v_lshrrev_b32_e32 v10, 16, v64
38344 ; GFX10-NEXT:    v_lshrrev_b32_e32 v23, 16, v55
38345 ; GFX10-NEXT:    v_lshrrev_b32_e32 v31, 16, v53
38346 ; GFX10-NEXT:    v_lshrrev_b32_e32 v32, 16, v52
38347 ; GFX10-NEXT:    v_cndmask_b32_e64 v33, v50, v51, s11
38348 ; GFX10-NEXT:    v_lshrrev_b32_e32 v34, 16, v51
38349 ; GFX10-NEXT:    v_lshrrev_b32_e32 v35, 16, v50
38350 ; GFX10-NEXT:    s_waitcnt vmcnt(9)
38351 ; GFX10-NEXT:    v_cndmask_b32_e64 v36, v30, v49, s12
38352 ; GFX10-NEXT:    v_lshrrev_b32_e32 v37, 16, v49
38353 ; GFX10-NEXT:    v_lshrrev_b32_e32 v30, 16, v30
38354 ; GFX10-NEXT:    v_cndmask_b32_e64 v38, v29, v68, s13
38355 ; GFX10-NEXT:    v_lshrrev_b32_e32 v39, 16, v68
38356 ; GFX10-NEXT:    v_lshrrev_b32_e32 v29, 16, v29
38357 ; GFX10-NEXT:    s_waitcnt vmcnt(6)
38358 ; GFX10-NEXT:    v_cndmask_b32_e64 v49, v24, v22, s15
38359 ; GFX10-NEXT:    v_lshrrev_b32_e32 v22, 16, v22
38360 ; GFX10-NEXT:    v_lshrrev_b32_e32 v24, 16, v24
38361 ; GFX10-NEXT:    s_waitcnt vmcnt(5)
38362 ; GFX10-NEXT:    v_cndmask_b32_e64 v50, v67, v20, s16
38363 ; GFX10-NEXT:    v_lshrrev_b32_e32 v20, 16, v20
38364 ; GFX10-NEXT:    v_lshrrev_b32_e32 v51, 16, v67
38365 ; GFX10-NEXT:    s_waitcnt vmcnt(4)
38366 ; GFX10-NEXT:    v_cndmask_b32_e64 v52, v66, v18, s17
38367 ; GFX10-NEXT:    v_lshrrev_b32_e32 v18, 16, v18
38368 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
38369 ; GFX10-NEXT:    v_cndmask_b32_e64 v48, v28, v26, s14
38370 ; GFX10-NEXT:    v_lshrrev_b32_e32 v26, 16, v26
38371 ; GFX10-NEXT:    v_lshrrev_b32_e32 v28, 16, v28
38372 ; GFX10-NEXT:    v_lshrrev_b32_e32 v53, 16, v66
38373 ; GFX10-NEXT:    v_cndmask_b32_e64 v54, v65, v16, s18
38374 ; GFX10-NEXT:    v_lshrrev_b32_e32 v16, 16, v16
38375 ; GFX10-NEXT:    v_lshrrev_b32_e32 v55, 16, v65
38376 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
38377 ; GFX10-NEXT:    v_cndmask_b32_e64 v64, v14, v12, s19
38378 ; GFX10-NEXT:    v_lshrrev_b32_e32 v12, 16, v12
38379 ; GFX10-NEXT:    v_lshrrev_b32_e32 v14, 16, v14
38380 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 1, v2
38381 ; GFX10-NEXT:    v_cndmask_b32_e32 v65, v1, v0, vcc_lo
38382 ; GFX10-NEXT:    v_cndmask_b32_e64 v66, v6, v5, s20
38383 ; GFX10-NEXT:    v_cndmask_b32_e64 v67, v8, v7, s21
38384 ; GFX10-NEXT:    v_cndmask_b32_e64 v68, v10, v9, s22
38385 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v25, v23, s23
38386 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, v32, v31, s24
38387 ; GFX10-NEXT:    v_cndmask_b32_e64 v8, v35, v34, s25
38388 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v30, v37, s26
38389 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v29, v39, s27
38390 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, v28, v26, s28
38391 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, v51, v20, s29
38392 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v14, v12, s30
38393 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v55, v16, vcc_hi
38394 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v53, v18, s31
38395 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, v24, v22, s34
38396 ; GFX10-NEXT:    v_cndmask_b32_e64 v16, v4, v3, s4
38397 ; GFX10-NEXT:    v_perm_b32 v0, v0, v64, 0x5040100
38398 ; GFX10-NEXT:    v_perm_b32 v1, v1, v54, 0x5040100
38399 ; GFX10-NEXT:    v_perm_b32 v2, v2, v52, 0x5040100
38400 ; GFX10-NEXT:    v_perm_b32 v3, v20, v50, 0x5040100
38401 ; GFX10-NEXT:    v_perm_b32 v4, v12, v49, 0x5040100
38402 ; GFX10-NEXT:    v_perm_b32 v5, v5, v48, 0x5040100
38403 ; GFX10-NEXT:    v_perm_b32 v6, v6, v38, 0x5040100
38404 ; GFX10-NEXT:    v_perm_b32 v7, v7, v36, 0x5040100
38405 ; GFX10-NEXT:    v_perm_b32 v8, v8, v33, 0x5040100
38406 ; GFX10-NEXT:    v_perm_b32 v9, v9, v27, 0x5040100
38407 ; GFX10-NEXT:    v_perm_b32 v10, v10, v21, 0x5040100
38408 ; GFX10-NEXT:    v_perm_b32 v11, v68, v11, 0x5040100
38409 ; GFX10-NEXT:    v_perm_b32 v12, v67, v19, 0x5040100
38410 ; GFX10-NEXT:    v_perm_b32 v13, v66, v13, 0x5040100
38411 ; GFX10-NEXT:    v_perm_b32 v14, v65, v17, 0x5040100
38412 ; GFX10-NEXT:    v_perm_b32 v15, v16, v15, 0x5040100
38413 ; GFX10-NEXT:    v_readlane_b32 s34, v40, 2
38414 ; GFX10-NEXT:    v_readlane_b32 s31, v40, 1
38415 ; GFX10-NEXT:    v_readlane_b32 s30, v40, 0
38416 ; GFX10-NEXT:    s_or_saveexec_b32 s4, -1
38417 ; GFX10-NEXT:    buffer_load_dword v40, off, s[0:3], s32 offset:132 ; 4-byte Folded Reload
38418 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
38419 ; GFX10-NEXT:    s_mov_b32 exec_lo, s4
38420 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
38421 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
38423 ; GFX11-LABEL: v_vselect_v32bf16:
38424 ; GFX11:       ; %bb.0:
38425 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38426 ; GFX11-NEXT:    s_clause 0x1f
38427 ; GFX11-NEXT:    scratch_load_u16 v31, off, s32
38428 ; GFX11-NEXT:    scratch_load_b32 v32, off, s32 offset:128
38429 ; GFX11-NEXT:    scratch_load_b32 v33, off, s32 offset:64
38430 ; GFX11-NEXT:    scratch_load_b32 v34, off, s32 offset:124
38431 ; GFX11-NEXT:    scratch_load_b32 v35, off, s32 offset:60
38432 ; GFX11-NEXT:    scratch_load_b32 v36, off, s32 offset:120
38433 ; GFX11-NEXT:    scratch_load_b32 v37, off, s32 offset:56
38434 ; GFX11-NEXT:    scratch_load_b32 v38, off, s32 offset:116
38435 ; GFX11-NEXT:    scratch_load_b32 v39, off, s32 offset:52
38436 ; GFX11-NEXT:    scratch_load_b32 v48, off, s32 offset:112
38437 ; GFX11-NEXT:    scratch_load_b32 v49, off, s32 offset:48
38438 ; GFX11-NEXT:    scratch_load_b32 v50, off, s32 offset:108
38439 ; GFX11-NEXT:    scratch_load_b32 v51, off, s32 offset:44
38440 ; GFX11-NEXT:    scratch_load_b32 v52, off, s32 offset:104
38441 ; GFX11-NEXT:    scratch_load_b32 v53, off, s32 offset:40
38442 ; GFX11-NEXT:    scratch_load_b32 v54, off, s32 offset:100
38443 ; GFX11-NEXT:    scratch_load_b32 v55, off, s32 offset:36
38444 ; GFX11-NEXT:    scratch_load_b32 v64, off, s32 offset:96
38445 ; GFX11-NEXT:    scratch_load_b32 v65, off, s32 offset:32
38446 ; GFX11-NEXT:    scratch_load_b32 v66, off, s32 offset:92
38447 ; GFX11-NEXT:    scratch_load_b32 v67, off, s32 offset:28
38448 ; GFX11-NEXT:    scratch_load_b32 v68, off, s32 offset:88
38449 ; GFX11-NEXT:    scratch_load_b32 v69, off, s32 offset:24
38450 ; GFX11-NEXT:    scratch_load_b32 v70, off, s32 offset:84
38451 ; GFX11-NEXT:    scratch_load_b32 v71, off, s32 offset:20
38452 ; GFX11-NEXT:    scratch_load_b32 v80, off, s32 offset:80
38453 ; GFX11-NEXT:    scratch_load_b32 v81, off, s32 offset:16
38454 ; GFX11-NEXT:    scratch_load_b32 v82, off, s32 offset:76
38455 ; GFX11-NEXT:    scratch_load_b32 v83, off, s32 offset:12
38456 ; GFX11-NEXT:    scratch_load_b32 v84, off, s32 offset:72
38457 ; GFX11-NEXT:    scratch_load_b32 v85, off, s32 offset:8
38458 ; GFX11-NEXT:    scratch_load_b32 v86, off, s32 offset:68
38459 ; GFX11-NEXT:    scratch_load_b32 v87, off, s32 offset:4
38460 ; GFX11-NEXT:    v_and_b32_e32 v30, 1, v30
38461 ; GFX11-NEXT:    v_and_b32_e32 v28, 1, v28
38462 ; GFX11-NEXT:    v_and_b32_e32 v26, 1, v26
38463 ; GFX11-NEXT:    v_and_b32_e32 v24, 1, v24
38464 ; GFX11-NEXT:    v_and_b32_e32 v22, 1, v22
38465 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v30
38466 ; GFX11-NEXT:    v_and_b32_e32 v3, 1, v3
38467 ; GFX11-NEXT:    v_and_b32_e32 v20, 1, v20
38468 ; GFX11-NEXT:    v_and_b32_e32 v18, 1, v18
38469 ; GFX11-NEXT:    v_and_b32_e32 v16, 1, v16
38470 ; GFX11-NEXT:    s_waitcnt vmcnt(30)
38471 ; GFX11-NEXT:    v_cndmask_b32_e32 v30, v32, v33, vcc_lo
38472 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v28
38473 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v1
38474 ; GFX11-NEXT:    v_lshrrev_b32_e32 v33, 16, v33
38475 ; GFX11-NEXT:    v_lshrrev_b32_e32 v32, 16, v32
38476 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
38477 ; GFX11-NEXT:    s_waitcnt vmcnt(28)
38478 ; GFX11-NEXT:    v_cndmask_b32_e32 v28, v34, v35, vcc_lo
38479 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v26
38480 ; GFX11-NEXT:    v_and_b32_e32 v7, 1, v7
38481 ; GFX11-NEXT:    v_lshrrev_b32_e32 v35, 16, v35
38482 ; GFX11-NEXT:    v_lshrrev_b32_e32 v34, 16, v34
38483 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v2
38484 ; GFX11-NEXT:    s_waitcnt vmcnt(26)
38485 ; GFX11-NEXT:    v_cndmask_b32_e32 v26, v36, v37, vcc_lo
38486 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v24
38487 ; GFX11-NEXT:    v_and_b32_e32 v5, 1, v5
38488 ; GFX11-NEXT:    v_lshrrev_b32_e32 v37, 16, v37
38489 ; GFX11-NEXT:    v_lshrrev_b32_e32 v36, 16, v36
38490 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v4
38491 ; GFX11-NEXT:    s_waitcnt vmcnt(24)
38492 ; GFX11-NEXT:    v_cndmask_b32_e32 v24, v38, v39, vcc_lo
38493 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v22
38494 ; GFX11-NEXT:    v_and_b32_e32 v11, 1, v11
38495 ; GFX11-NEXT:    v_lshrrev_b32_e32 v39, 16, v39
38496 ; GFX11-NEXT:    v_lshrrev_b32_e32 v38, 16, v38
38497 ; GFX11-NEXT:    v_and_b32_e32 v6, 1, v6
38498 ; GFX11-NEXT:    s_waitcnt vmcnt(22)
38499 ; GFX11-NEXT:    v_cndmask_b32_e32 v22, v48, v49, vcc_lo
38500 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v20
38501 ; GFX11-NEXT:    v_and_b32_e32 v9, 1, v9
38502 ; GFX11-NEXT:    v_lshrrev_b32_e32 v49, 16, v49
38503 ; GFX11-NEXT:    v_lshrrev_b32_e32 v48, 16, v48
38504 ; GFX11-NEXT:    v_and_b32_e32 v8, 1, v8
38505 ; GFX11-NEXT:    s_waitcnt vmcnt(20)
38506 ; GFX11-NEXT:    v_cndmask_b32_e32 v20, v50, v51, vcc_lo
38507 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v18
38508 ; GFX11-NEXT:    v_and_b32_e32 v15, 1, v15
38509 ; GFX11-NEXT:    v_lshrrev_b32_e32 v51, 16, v51
38510 ; GFX11-NEXT:    v_lshrrev_b32_e32 v50, 16, v50
38511 ; GFX11-NEXT:    v_and_b32_e32 v10, 1, v10
38512 ; GFX11-NEXT:    s_waitcnt vmcnt(18)
38513 ; GFX11-NEXT:    v_cndmask_b32_e32 v18, v52, v53, vcc_lo
38514 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v16
38515 ; GFX11-NEXT:    v_and_b32_e32 v13, 1, v13
38516 ; GFX11-NEXT:    v_lshrrev_b32_e32 v53, 16, v53
38517 ; GFX11-NEXT:    v_lshrrev_b32_e32 v52, 16, v52
38518 ; GFX11-NEXT:    v_and_b32_e32 v12, 1, v12
38519 ; GFX11-NEXT:    s_waitcnt vmcnt(16)
38520 ; GFX11-NEXT:    v_cndmask_b32_e32 v16, v54, v55, vcc_lo
38521 ; GFX11-NEXT:    v_lshrrev_b32_e32 v55, 16, v55
38522 ; GFX11-NEXT:    v_lshrrev_b32_e32 v54, 16, v54
38523 ; GFX11-NEXT:    v_and_b32_e32 v14, 1, v14
38524 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
38525 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v14
38526 ; GFX11-NEXT:    s_waitcnt vmcnt(14)
38527 ; GFX11-NEXT:    v_dual_cndmask_b32 v14, v64, v65 :: v_dual_and_b32 v19, 1, v19
38528 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
38529 ; GFX11-NEXT:    v_and_b32_e32 v17, 1, v17
38530 ; GFX11-NEXT:    v_lshrrev_b32_e32 v65, 16, v65
38531 ; GFX11-NEXT:    v_lshrrev_b32_e32 v64, 16, v64
38532 ; GFX11-NEXT:    s_waitcnt vmcnt(12)
38533 ; GFX11-NEXT:    v_cndmask_b32_e32 v12, v66, v67, vcc_lo
38534 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v10
38535 ; GFX11-NEXT:    v_and_b32_e32 v23, 1, v23
38536 ; GFX11-NEXT:    v_lshrrev_b32_e32 v67, 16, v67
38537 ; GFX11-NEXT:    v_lshrrev_b32_e32 v66, 16, v66
38538 ; GFX11-NEXT:    s_waitcnt vmcnt(10)
38539 ; GFX11-NEXT:    v_cndmask_b32_e32 v10, v68, v69, vcc_lo
38540 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v8
38541 ; GFX11-NEXT:    v_and_b32_e32 v21, 1, v21
38542 ; GFX11-NEXT:    v_lshrrev_b32_e32 v69, 16, v69
38543 ; GFX11-NEXT:    v_lshrrev_b32_e32 v68, 16, v68
38544 ; GFX11-NEXT:    s_waitcnt vmcnt(8)
38545 ; GFX11-NEXT:    v_cndmask_b32_e32 v8, v70, v71, vcc_lo
38546 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
38547 ; GFX11-NEXT:    v_and_b32_e32 v27, 1, v27
38548 ; GFX11-NEXT:    v_lshrrev_b32_e32 v71, 16, v71
38549 ; GFX11-NEXT:    v_lshrrev_b32_e32 v70, 16, v70
38550 ; GFX11-NEXT:    s_waitcnt vmcnt(6)
38551 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, v80, v81, vcc_lo
38552 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
38553 ; GFX11-NEXT:    v_and_b32_e32 v25, 1, v25
38554 ; GFX11-NEXT:    v_lshrrev_b32_e32 v81, 16, v81
38555 ; GFX11-NEXT:    v_lshrrev_b32_e32 v80, 16, v80
38556 ; GFX11-NEXT:    s_waitcnt vmcnt(4)
38557 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v82, v83, vcc_lo
38558 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
38559 ; GFX11-NEXT:    v_and_b32_e32 v31, 1, v31
38560 ; GFX11-NEXT:    v_lshrrev_b32_e32 v83, 16, v83
38561 ; GFX11-NEXT:    v_lshrrev_b32_e32 v82, 16, v82
38562 ; GFX11-NEXT:    s_waitcnt vmcnt(2)
38563 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v84, v85, vcc_lo
38564 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
38565 ; GFX11-NEXT:    v_and_b32_e32 v29, 1, v29
38566 ; GFX11-NEXT:    v_lshrrev_b32_e32 v85, 16, v85
38567 ; GFX11-NEXT:    v_lshrrev_b32_e32 v84, 16, v84
38568 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
38569 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v86, v87, vcc_lo
38570 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v31
38571 ; GFX11-NEXT:    v_lshrrev_b32_e32 v87, 16, v87
38572 ; GFX11-NEXT:    v_lshrrev_b32_e32 v86, 16, v86
38573 ; GFX11-NEXT:    v_cndmask_b32_e32 v31, v32, v33, vcc_lo
38574 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v29
38575 ; GFX11-NEXT:    v_cndmask_b32_e32 v29, v34, v35, vcc_lo
38576 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v27
38577 ; GFX11-NEXT:    v_cndmask_b32_e32 v27, v36, v37, vcc_lo
38578 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v25
38579 ; GFX11-NEXT:    v_cndmask_b32_e32 v25, v38, v39, vcc_lo
38580 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v23
38581 ; GFX11-NEXT:    v_cndmask_b32_e32 v23, v48, v49, vcc_lo
38582 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v21
38583 ; GFX11-NEXT:    v_cndmask_b32_e32 v21, v50, v51, vcc_lo
38584 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v19
38585 ; GFX11-NEXT:    v_cndmask_b32_e32 v19, v52, v53, vcc_lo
38586 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v17
38587 ; GFX11-NEXT:    v_cndmask_b32_e32 v17, v54, v55, vcc_lo
38588 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v15
38589 ; GFX11-NEXT:    v_cndmask_b32_e32 v15, v64, v65, vcc_lo
38590 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v13
38591 ; GFX11-NEXT:    v_cndmask_b32_e32 v13, v66, v67, vcc_lo
38592 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v11
38593 ; GFX11-NEXT:    v_cndmask_b32_e32 v11, v68, v69, vcc_lo
38594 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v7
38595 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, v80, v81, vcc_lo
38596 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v3
38597 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v84, v85, vcc_lo
38598 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
38599 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v86, v87, vcc_lo
38600 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
38601 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
38602 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x5040100
38603 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v82, v83, vcc_lo
38604 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v9
38605 ; GFX11-NEXT:    v_perm_b32 v1, v3, v2, 0x5040100
38606 ; GFX11-NEXT:    v_perm_b32 v3, v7, v6, 0x5040100
38607 ; GFX11-NEXT:    v_perm_b32 v6, v13, v12, 0x5040100
38608 ; GFX11-NEXT:    v_perm_b32 v2, v5, v4, 0x5040100
38609 ; GFX11-NEXT:    v_cndmask_b32_e32 v9, v70, v71, vcc_lo
38610 ; GFX11-NEXT:    v_perm_b32 v5, v11, v10, 0x5040100
38611 ; GFX11-NEXT:    v_perm_b32 v7, v15, v14, 0x5040100
38612 ; GFX11-NEXT:    v_perm_b32 v10, v21, v20, 0x5040100
38613 ; GFX11-NEXT:    v_perm_b32 v11, v23, v22, 0x5040100
38614 ; GFX11-NEXT:    v_perm_b32 v4, v9, v8, 0x5040100
38615 ; GFX11-NEXT:    v_perm_b32 v8, v17, v16, 0x5040100
38616 ; GFX11-NEXT:    v_perm_b32 v9, v19, v18, 0x5040100
38617 ; GFX11-NEXT:    v_perm_b32 v12, v25, v24, 0x5040100
38618 ; GFX11-NEXT:    v_perm_b32 v13, v27, v26, 0x5040100
38619 ; GFX11-NEXT:    v_perm_b32 v14, v29, v28, 0x5040100
38620 ; GFX11-NEXT:    v_perm_b32 v15, v31, v30, 0x5040100
38621 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
38622   %op = select <32 x i1> %cond, <32 x bfloat> %a, <32 x bfloat> %b
38623   ret <32 x bfloat> %op
38626 declare bfloat @llvm.fma.bf16(bfloat, bfloat, bfloat)
38627 declare <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat>, <2 x bfloat>, <2 x bfloat>)
38628 declare <3 x bfloat> @llvm.fma.v3bf16(<3 x bfloat>, <3 x bfloat>, <3 x bfloat>)
38629 declare <4 x bfloat> @llvm.fma.v4bf16(<4 x bfloat>, <4 x bfloat>, <4 x bfloat>)
38631 define bfloat @v_fma_bf16(bfloat %a, bfloat %b, bfloat %c) {
38632 ; GCN-LABEL: v_fma_bf16:
38633 ; GCN:       ; %bb.0:
38634 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38635 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38636 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38637 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38638 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38639 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38640 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38641 ; GCN-NEXT:    v_fma_f32 v0, v0, v1, v2
38642 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38643 ; GCN-NEXT:    s_setpc_b64 s[30:31]
38645 ; GFX7-LABEL: v_fma_bf16:
38646 ; GFX7:       ; %bb.0:
38647 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38648 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38649 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38650 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38651 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38652 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38653 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38654 ; GFX7-NEXT:    v_fma_f32 v0, v0, v1, v2
38655 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38656 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
38658 ; GFX8-LABEL: v_fma_bf16:
38659 ; GFX8:       ; %bb.0:
38660 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38661 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
38662 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38663 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
38664 ; GFX8-NEXT:    v_fma_f32 v0, v0, v1, v2
38665 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
38666 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
38667 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
38668 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
38669 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
38670 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
38671 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38672 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
38674 ; GFX9-LABEL: v_fma_bf16:
38675 ; GFX9:       ; %bb.0:
38676 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38677 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
38678 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38679 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
38680 ; GFX9-NEXT:    v_fma_f32 v0, v0, v1, v2
38681 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
38682 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
38683 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
38684 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
38685 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
38686 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
38687 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38688 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
38690 ; GFX10-LABEL: v_fma_bf16:
38691 ; GFX10:       ; %bb.0:
38692 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38693 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
38694 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38695 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
38696 ; GFX10-NEXT:    v_fmac_f32_e32 v2, v0, v1
38697 ; GFX10-NEXT:    v_bfe_u32 v0, v2, 16, 1
38698 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v2
38699 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
38700 ; GFX10-NEXT:    v_add3_u32 v0, v0, v2, 0x7fff
38701 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
38702 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38703 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
38705 ; GFX11-LABEL: v_fma_bf16:
38706 ; GFX11:       ; %bb.0:
38707 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38708 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v2
38709 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38710 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
38711 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
38712 ; GFX11-NEXT:    v_fmac_f32_e32 v2, v0, v1
38713 ; GFX11-NEXT:    v_bfe_u32 v0, v2, 16, 1
38714 ; GFX11-NEXT:    v_or_b32_e32 v1, 0x400000, v2
38715 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
38716 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
38717 ; GFX11-NEXT:    v_add3_u32 v0, v0, v2, 0x7fff
38718 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc_lo
38719 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
38720 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38721 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
38722   %op = call bfloat @llvm.fma.bf16(bfloat %a, bfloat %b, bfloat %c)
38723   ret bfloat %op
38726 define <2 x bfloat> @v_fma_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) {
38727 ; GCN-LABEL: v_fma_v2bf16:
38728 ; GCN:       ; %bb.0:
38729 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38730 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38731 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38732 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
38733 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38734 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
38735 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
38736 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
38737 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
38738 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38739 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
38740 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38741 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38742 ; GCN-NEXT:    v_fma_f32 v1, v1, v3, v5
38743 ; GCN-NEXT:    v_fma_f32 v0, v0, v2, v4
38744 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38745 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38746 ; GCN-NEXT:    s_setpc_b64 s[30:31]
38748 ; GFX7-LABEL: v_fma_v2bf16:
38749 ; GFX7:       ; %bb.0:
38750 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38751 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38752 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
38753 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
38754 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38755 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38756 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
38757 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
38758 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
38759 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38760 ; GFX7-NEXT:    v_fma_f32 v1, v1, v3, v5
38761 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v4
38762 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38763 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38764 ; GFX7-NEXT:    v_fma_f32 v0, v0, v2, v3
38765 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38766 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38767 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
38769 ; GFX8-LABEL: v_fma_v2bf16:
38770 ; GFX8:       ; %bb.0:
38771 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38772 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
38773 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
38774 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
38775 ; GFX8-NEXT:    v_fma_f32 v3, v5, v4, v3
38776 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
38777 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
38778 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38779 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38780 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38781 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
38782 ; GFX8-NEXT:    v_fma_f32 v0, v0, v1, v2
38783 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
38784 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
38785 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
38786 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
38787 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
38788 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
38789 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
38790 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
38791 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
38792 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38793 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
38794 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
38796 ; GFX9-LABEL: v_fma_v2bf16:
38797 ; GFX9:       ; %bb.0:
38798 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38799 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
38800 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
38801 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
38802 ; GFX9-NEXT:    v_fma_f32 v3, v5, v4, v3
38803 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38804 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38805 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38806 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
38807 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
38808 ; GFX9-NEXT:    v_fma_f32 v0, v0, v1, v2
38809 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
38810 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
38811 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
38812 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
38813 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
38814 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
38815 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
38816 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
38817 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
38818 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
38819 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
38820 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
38822 ; GFX10-LABEL: v_fma_v2bf16:
38823 ; GFX10:       ; %bb.0:
38824 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38825 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
38826 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
38827 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
38828 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38829 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38830 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38831 ; GFX10-NEXT:    v_fmac_f32_e32 v3, v5, v4
38832 ; GFX10-NEXT:    v_fmac_f32_e32 v2, v0, v1
38833 ; GFX10-NEXT:    v_bfe_u32 v0, v3, 16, 1
38834 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v3
38835 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
38836 ; GFX10-NEXT:    v_bfe_u32 v1, v2, 16, 1
38837 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v2
38838 ; GFX10-NEXT:    v_add3_u32 v0, v0, v3, 0x7fff
38839 ; GFX10-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
38840 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc_lo
38841 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
38842 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
38843 ; GFX10-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
38844 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
38846 ; GFX11-LABEL: v_fma_v2bf16:
38847 ; GFX11:       ; %bb.0:
38848 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38849 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v1
38850 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
38851 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38852 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38853 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
38854 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38855 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
38856 ; GFX11-NEXT:    v_dual_fmac_f32 v2, v0, v1 :: v_dual_fmac_f32 v3, v5, v4
38857 ; GFX11-NEXT:    v_bfe_u32 v1, v2, 16, 1
38858 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
38859 ; GFX11-NEXT:    v_bfe_u32 v0, v3, 16, 1
38860 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v3
38861 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
38862 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v2
38863 ; GFX11-NEXT:    v_add3_u32 v1, v1, v2, 0x7fff
38864 ; GFX11-NEXT:    v_add3_u32 v0, v0, v3, 0x7fff
38865 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
38866 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc_lo
38867 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
38868 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
38869 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
38870 ; GFX11-NEXT:    v_perm_b32 v0, v1, v0, 0x7060302
38871 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
38872   %op = call <2 x bfloat> @llvm.fma.v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c)
38873   ret <2 x bfloat> %op
38876 define <3 x bfloat> @v_fma_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b, <3 x bfloat> %c) {
38877 ; GCN-LABEL: v_fma_v3bf16:
38878 ; GCN:       ; %bb.0:
38879 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38880 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38881 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
38882 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
38883 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38884 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
38885 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
38886 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38887 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
38888 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
38889 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
38890 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
38891 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38892 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
38893 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
38894 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38895 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
38896 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
38897 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38898 ; GCN-NEXT:    v_fma_f32 v2, v2, v5, v8
38899 ; GCN-NEXT:    v_fma_f32 v1, v1, v4, v7
38900 ; GCN-NEXT:    v_fma_f32 v0, v0, v3, v6
38901 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38902 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38903 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38904 ; GCN-NEXT:    s_setpc_b64 s[30:31]
38906 ; GFX7-LABEL: v_fma_v3bf16:
38907 ; GFX7:       ; %bb.0:
38908 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38909 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
38910 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
38911 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
38912 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
38913 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
38914 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
38915 ; GFX7-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
38916 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
38917 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38918 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
38919 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
38920 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
38921 ; GFX7-NEXT:    v_fma_f32 v2, v2, v5, v8
38922 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v7
38923 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
38924 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38925 ; GFX7-NEXT:    v_fma_f32 v1, v1, v4, v5
38926 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v6
38927 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
38928 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38929 ; GFX7-NEXT:    v_fma_f32 v0, v0, v3, v4
38930 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38931 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38932 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
38933 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
38935 ; GFX8-LABEL: v_fma_v3bf16:
38936 ; GFX8:       ; %bb.0:
38937 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38938 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
38939 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
38940 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38941 ; GFX8-NEXT:    v_fma_f32 v1, v1, v3, v5
38942 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
38943 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
38944 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
38945 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
38946 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
38947 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
38948 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
38949 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v2
38950 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v0
38951 ; GFX8-NEXT:    v_fma_f32 v3, v6, v5, v3
38952 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
38953 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
38954 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
38955 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
38956 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38957 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38958 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
38959 ; GFX8-NEXT:    v_fma_f32 v0, v0, v2, v4
38960 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
38961 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
38962 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
38963 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
38964 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
38965 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
38966 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
38967 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
38968 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
38969 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
38970 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
38971 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
38972 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
38974 ; GFX9-LABEL: v_fma_v3bf16:
38975 ; GFX9:       ; %bb.0:
38976 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
38977 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
38978 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
38979 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
38980 ; GFX9-NEXT:    v_fma_f32 v1, v1, v3, v5
38981 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
38982 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
38983 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
38984 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
38985 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
38986 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
38987 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
38988 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v2
38989 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v0
38990 ; GFX9-NEXT:    v_fma_f32 v3, v6, v5, v3
38991 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
38992 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
38993 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
38994 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
38995 ; GFX9-NEXT:    v_fma_f32 v0, v0, v2, v4
38996 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
38997 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
38998 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
38999 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
39000 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
39001 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
39002 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39003 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39004 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
39005 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
39006 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
39007 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
39008 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
39010 ; GFX10-LABEL: v_fma_v3bf16:
39011 ; GFX10:       ; %bb.0:
39012 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39013 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v4
39014 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v2
39015 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v0
39016 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
39017 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
39018 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39019 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39020 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39021 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39022 ; GFX10-NEXT:    v_fmac_f32_e32 v6, v8, v7
39023 ; GFX10-NEXT:    v_fmac_f32_e32 v5, v1, v3
39024 ; GFX10-NEXT:    v_fmac_f32_e32 v4, v0, v2
39025 ; GFX10-NEXT:    v_bfe_u32 v1, v6, 16, 1
39026 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v6
39027 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
39028 ; GFX10-NEXT:    v_bfe_u32 v0, v5, 16, 1
39029 ; GFX10-NEXT:    v_bfe_u32 v2, v4, 16, 1
39030 ; GFX10-NEXT:    v_add3_u32 v1, v1, v6, 0x7fff
39031 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v4
39032 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v5
39033 ; GFX10-NEXT:    v_add3_u32 v0, v0, v5, 0x7fff
39034 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, 0x7fff
39035 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc_lo
39036 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
39037 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v7, vcc_lo
39038 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
39039 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v0, v8, vcc_lo
39040 ; GFX10-NEXT:    v_perm_b32 v0, v2, v1, 0x7060302
39041 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v3, 16
39042 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
39043   %op = call <3 x bfloat> @llvm.fma.v3bf16(<3 x bfloat> %a, <3 x bfloat> %b, <3 x bfloat> %c)
39044   ret <3 x bfloat> %op
39047 define <4 x bfloat> @v_fma_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b, <4 x bfloat> %c) {
39048 ; GCN-LABEL: v_fma_v4bf16:
39049 ; GCN:       ; %bb.0:
39050 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39051 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39052 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39053 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39054 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39055 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39056 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
39057 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39058 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39059 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
39060 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39061 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39062 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
39063 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
39064 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
39065 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39066 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
39067 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
39068 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39069 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
39070 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39071 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39072 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
39073 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39074 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39075 ; GCN-NEXT:    v_fma_f32 v3, v3, v7, v11
39076 ; GCN-NEXT:    v_fma_f32 v2, v2, v6, v10
39077 ; GCN-NEXT:    v_fma_f32 v1, v1, v5, v9
39078 ; GCN-NEXT:    v_fma_f32 v0, v0, v4, v8
39079 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39080 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39081 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39082 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39083 ; GCN-NEXT:    s_setpc_b64 s[30:31]
39085 ; GFX7-LABEL: v_fma_v4bf16:
39086 ; GFX7:       ; %bb.0:
39087 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39088 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39089 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39090 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
39091 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39092 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39093 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
39094 ; GFX7-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
39095 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
39096 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39097 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39098 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39099 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
39100 ; GFX7-NEXT:    v_fma_f32 v3, v3, v7, v11
39101 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v10
39102 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
39103 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39104 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39105 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39106 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39107 ; GFX7-NEXT:    v_fma_f32 v2, v2, v6, v7
39108 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v9
39109 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39110 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39111 ; GFX7-NEXT:    v_fma_f32 v1, v1, v5, v6
39112 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v8
39113 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39114 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39115 ; GFX7-NEXT:    v_fma_f32 v0, v0, v4, v5
39116 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39117 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39118 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39119 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39120 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
39122 ; GFX8-LABEL: v_fma_v4bf16:
39123 ; GFX8:       ; %bb.0:
39124 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39125 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
39126 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v3
39127 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v1
39128 ; GFX8-NEXT:    v_fma_f32 v6, v8, v7, v6
39129 ; GFX8-NEXT:    v_bfe_u32 v7, v6, 16, 1
39130 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v6
39131 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39132 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39133 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39134 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 0x7fff, v7
39135 ; GFX8-NEXT:    v_fma_f32 v1, v1, v3, v5
39136 ; GFX8-NEXT:    v_or_b32_e32 v8, 0x400000, v6
39137 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
39138 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
39139 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
39140 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
39141 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
39142 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
39143 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
39144 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39145 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
39146 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
39147 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v2
39148 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
39149 ; GFX8-NEXT:    v_fma_f32 v3, v7, v5, v3
39150 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
39151 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
39152 ; GFX8-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39153 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39154 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39155 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
39156 ; GFX8-NEXT:    v_fma_f32 v0, v0, v2, v4
39157 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v3
39158 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39159 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
39160 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
39161 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
39162 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
39163 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39164 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39165 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
39166 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
39167 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39168 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
39169 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
39170 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
39172 ; GFX9-LABEL: v_fma_v4bf16:
39173 ; GFX9:       ; %bb.0:
39174 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39175 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
39176 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v3
39177 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 16, v1
39178 ; GFX9-NEXT:    v_fma_f32 v6, v8, v7, v6
39179 ; GFX9-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39180 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39181 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39182 ; GFX9-NEXT:    v_bfe_u32 v7, v6, 16, 1
39183 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
39184 ; GFX9-NEXT:    v_fma_f32 v1, v1, v3, v5
39185 ; GFX9-NEXT:    v_add3_u32 v7, v7, v6, s4
39186 ; GFX9-NEXT:    v_or_b32_e32 v8, 0x400000, v6
39187 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
39188 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
39189 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
39190 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
39191 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
39192 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39193 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
39194 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
39195 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v2
39196 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
39197 ; GFX9-NEXT:    v_fma_f32 v3, v7, v5, v3
39198 ; GFX9-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39199 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39200 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39201 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
39202 ; GFX9-NEXT:    v_fma_f32 v0, v0, v2, v4
39203 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
39204 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v3
39205 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39206 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
39207 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
39208 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
39209 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39210 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39211 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
39212 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
39213 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
39214 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
39215 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
39217 ; GFX10-LABEL: v_fma_v4bf16:
39218 ; GFX10:       ; %bb.0:
39219 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39220 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
39221 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v3
39222 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v1
39223 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39224 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39225 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39226 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
39227 ; GFX10-NEXT:    v_fmac_f32_e32 v6, v8, v7
39228 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v4
39229 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
39230 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39231 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39232 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39233 ; GFX10-NEXT:    v_bfe_u32 v10, v6, 16, 1
39234 ; GFX10-NEXT:    v_fmac_f32_e32 v5, v1, v3
39235 ; GFX10-NEXT:    v_fmac_f32_e32 v7, v9, v8
39236 ; GFX10-NEXT:    v_or_b32_e32 v1, 0x400000, v6
39237 ; GFX10-NEXT:    v_fmac_f32_e32 v4, v0, v2
39238 ; GFX10-NEXT:    v_add3_u32 v0, v10, v6, 0x7fff
39239 ; GFX10-NEXT:    v_bfe_u32 v2, v5, 16, 1
39240 ; GFX10-NEXT:    v_bfe_u32 v3, v7, 16, 1
39241 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
39242 ; GFX10-NEXT:    v_bfe_u32 v8, v4, 16, 1
39243 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v5
39244 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc_lo
39245 ; GFX10-NEXT:    v_add3_u32 v0, v2, v5, 0x7fff
39246 ; GFX10-NEXT:    v_add3_u32 v2, v3, v7, 0x7fff
39247 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v7
39248 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
39249 ; GFX10-NEXT:    v_add3_u32 v6, v8, v4, 0x7fff
39250 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v4
39251 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc_lo
39252 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
39253 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v6, v8, vcc_lo
39254 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
39255 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v0, v9, vcc_lo
39256 ; GFX10-NEXT:    v_perm_b32 v0, v3, v2, 0x7060302
39257 ; GFX10-NEXT:    v_perm_b32 v1, v4, v1, 0x7060302
39258 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
39260 ; GFX11-LABEL: v_fma_v4bf16:
39261 ; GFX11:       ; %bb.0:
39262 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39263 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v1
39264 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39265 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
39266 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39267 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v3
39268 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39269 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v5
39270 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39271 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
39272 ; GFX11-NEXT:    v_fmac_f32_e32 v5, v1, v3
39273 ; GFX11-NEXT:    v_dual_fmac_f32 v6, v8, v7 :: v_dual_lshlrev_b32 v7, 16, v4
39274 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39275 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_1)
39276 ; GFX11-NEXT:    v_bfe_u32 v10, v6, 16, 1
39277 ; GFX11-NEXT:    v_or_b32_e32 v1, 0x400000, v6
39278 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
39279 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v2
39280 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39281 ; GFX11-NEXT:    v_fmac_f32_e32 v4, v0, v2
39282 ; GFX11-NEXT:    v_add3_u32 v0, v10, v6, 0x7fff
39283 ; GFX11-NEXT:    v_bfe_u32 v2, v5, 16, 1
39284 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
39285 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v0, v1, vcc_lo
39286 ; GFX11-NEXT:    v_fmac_f32_e32 v7, v9, v8
39287 ; GFX11-NEXT:    v_bfe_u32 v8, v4, 16, 1
39288 ; GFX11-NEXT:    v_add3_u32 v0, v2, v5, 0x7fff
39289 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v5
39290 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_3) | instid1(VALU_DEP_4)
39291 ; GFX11-NEXT:    v_bfe_u32 v3, v7, 16, 1
39292 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
39293 ; GFX11-NEXT:    v_add3_u32 v6, v8, v4, 0x7fff
39294 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v4
39295 ; GFX11-NEXT:    v_add3_u32 v2, v3, v7, 0x7fff
39296 ; GFX11-NEXT:    v_or_b32_e32 v3, 0x400000, v7
39297 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_3)
39298 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc_lo
39299 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
39300 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v6, v8, vcc_lo
39301 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
39302 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v0, v9, vcc_lo
39303 ; GFX11-NEXT:    v_perm_b32 v0, v3, v2, 0x7060302
39304 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
39305 ; GFX11-NEXT:    v_perm_b32 v1, v4, v1, 0x7060302
39306 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
39307   %op = call <4 x bfloat> @llvm.fma.v4bf16(<4 x bfloat> %a, <4 x bfloat> %b, <4 x bfloat> %c)
39308   ret <4 x bfloat> %op
39311 declare bfloat @llvm.fmuladd.bf16(bfloat, bfloat, bfloat)
39312 declare <2 x bfloat> @llvm.fmuladd.v2bf16(<2 x bfloat>, <2 x bfloat>, <2 x bfloat>)
39313 declare <3 x bfloat> @llvm.fmuladd.v3bf16(<3 x bfloat>, <3 x bfloat>, <3 x bfloat>)
39314 declare <4 x bfloat> @llvm.fmuladd.v4bf16(<4 x bfloat>, <4 x bfloat>, <4 x bfloat>)
39316 define bfloat @v_fmuladd_bf16(bfloat %a, bfloat %b, bfloat %c) {
39317 ; GCN-LABEL: v_fmuladd_bf16:
39318 ; GCN:       ; %bb.0:
39319 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39320 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39321 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39322 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39323 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39324 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39325 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v1
39326 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39327 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
39328 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v1
39329 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39330 ; GCN-NEXT:    s_setpc_b64 s[30:31]
39332 ; GFX7-LABEL: v_fmuladd_bf16:
39333 ; GFX7:       ; %bb.0:
39334 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39335 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39336 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39337 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39338 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39339 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39340 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v1
39341 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39342 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
39343 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v1
39344 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39345 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
39347 ; GFX8-LABEL: v_fmuladd_bf16:
39348 ; GFX8:       ; %bb.0:
39349 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39350 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39351 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
39352 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
39353 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
39354 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
39355 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
39356 ; GFX8-NEXT:    v_or_b32_e32 v3, 0x400000, v0
39357 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39358 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
39359 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39360 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
39361 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v1
39362 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
39363 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
39364 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
39365 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39366 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39367 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
39368 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39369 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
39371 ; GFX9-LABEL: v_fmuladd_bf16:
39372 ; GFX9:       ; %bb.0:
39373 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39374 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39375 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
39376 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
39377 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
39378 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
39379 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
39380 ; GFX9-NEXT:    v_or_b32_e32 v3, 0x400000, v0
39381 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39382 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc
39383 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39384 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
39385 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v1
39386 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
39387 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
39388 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39389 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39390 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
39391 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39392 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
39394 ; GFX10-LABEL: v_fmuladd_bf16:
39395 ; GFX10:       ; %bb.0:
39396 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39397 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39398 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
39399 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
39400 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
39401 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v0
39402 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39403 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
39404 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v3, vcc_lo
39405 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v2
39406 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39407 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v1
39408 ; GFX10-NEXT:    v_bfe_u32 v1, v0, 16, 1
39409 ; GFX10-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39410 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39411 ; GFX10-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
39412 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
39413 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39414 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
39416 ; GFX11-LABEL: v_fmuladd_bf16:
39417 ; GFX11:       ; %bb.0:
39418 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39419 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39420 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
39421 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
39422 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
39423 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
39424 ; GFX11-NEXT:    v_or_b32_e32 v3, 0x400000, v0
39425 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39426 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
39427 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
39428 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v1, v3 :: v_dual_lshlrev_b32 v1, 16, v2
39429 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
39430 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39431 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v1
39432 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
39433 ; GFX11-NEXT:    v_bfe_u32 v1, v0, 16, 1
39434 ; GFX11-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39435 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39436 ; GFX11-NEXT:    v_add3_u32 v1, v1, v0, 0x7fff
39437 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
39438 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc_lo
39439 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39440 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
39441   %op = call bfloat @llvm.fmuladd.bf16(bfloat %a, bfloat %b, bfloat %c)
39442   ret bfloat %op
39445 define <2 x bfloat> @v_fmuladd_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c) {
39446 ; GCN-LABEL: v_fmuladd_v2bf16:
39447 ; GCN:       ; %bb.0:
39448 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39449 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39450 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39451 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39452 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39453 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39454 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39455 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39456 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39457 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39458 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39459 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39460 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39461 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v3
39462 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v2
39463 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39464 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39465 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v5
39466 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v4
39467 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39468 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39469 ; GCN-NEXT:    s_setpc_b64 s[30:31]
39471 ; GFX7-LABEL: v_fmuladd_v2bf16:
39472 ; GFX7:       ; %bb.0:
39473 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39474 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39475 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39476 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39477 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39478 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39479 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39480 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39481 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39482 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39483 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39484 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v3
39485 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v2
39486 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39487 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
39488 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39489 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
39490 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v3
39491 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v2
39492 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39493 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39494 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
39496 ; GFX8-LABEL: v_fmuladd_v2bf16:
39497 ; GFX8:       ; %bb.0:
39498 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39499 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
39500 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
39501 ; GFX8-NEXT:    v_mul_f32_e32 v3, v4, v3
39502 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
39503 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
39504 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x7fff, v4
39505 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39506 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39507 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
39508 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39509 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
39510 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v4
39511 ; GFX8-NEXT:    v_bfe_u32 v4, v3, 16, 1
39512 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
39513 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v3
39514 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39515 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39516 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s4, v4
39517 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v1
39518 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39519 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39520 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
39521 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
39522 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
39523 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s4, v1
39524 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39525 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39526 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc
39527 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39528 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
39529 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v1
39530 ; GFX8-NEXT:    v_bfe_u32 v1, v0, 16, 1
39531 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
39532 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, 0x7fff, v1
39533 ; GFX8-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39534 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39535 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
39536 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39537 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
39538 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
39540 ; GFX9-LABEL: v_fmuladd_v2bf16:
39541 ; GFX9:       ; %bb.0:
39542 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39543 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
39544 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
39545 ; GFX9-NEXT:    v_mul_f32_e32 v3, v4, v3
39546 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
39547 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
39548 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
39549 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39550 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39551 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
39552 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39553 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
39554 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v4
39555 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39556 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39557 ; GFX9-NEXT:    v_bfe_u32 v4, v3, 16, 1
39558 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v1
39559 ; GFX9-NEXT:    v_add3_u32 v4, v4, v3, s4
39560 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39561 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39562 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
39563 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
39564 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
39565 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39566 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39567 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v4, vcc
39568 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39569 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v2
39570 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v1
39571 ; GFX9-NEXT:    v_bfe_u32 v1, v0, 16, 1
39572 ; GFX9-NEXT:    v_add3_u32 v1, v1, v0, s4
39573 ; GFX9-NEXT:    v_or_b32_e32 v2, 0x400000, v0
39574 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39575 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
39576 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
39577 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
39578 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
39580 ; GFX10-LABEL: v_fmuladd_v2bf16:
39581 ; GFX10:       ; %bb.0:
39582 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39583 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
39584 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
39585 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39586 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39587 ; GFX10-NEXT:    v_mul_f32_e32 v3, v4, v3
39588 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v1
39589 ; GFX10-NEXT:    v_bfe_u32 v1, v3, 16, 1
39590 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39591 ; GFX10-NEXT:    v_bfe_u32 v4, v0, 16, 1
39592 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
39593 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v0
39594 ; GFX10-NEXT:    v_add3_u32 v1, v1, v3, 0x7fff
39595 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
39596 ; GFX10-NEXT:    v_add3_u32 v4, v4, v0, 0x7fff
39597 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39598 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
39599 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39600 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39601 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v4, v6, vcc_lo
39602 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
39603 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39604 ; GFX10-NEXT:    v_or_b32_e32 v4, 0x400000, v1
39605 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
39606 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
39607 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
39608 ; GFX10-NEXT:    v_bfe_u32 v3, v0, 16, 1
39609 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
39610 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
39611 ; GFX10-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
39612 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
39613 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39614 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
39615 ; GFX10-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
39616 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
39618 ; GFX11-LABEL: v_fmuladd_v2bf16:
39619 ; GFX11:       ; %bb.0:
39620 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39621 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v1
39622 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v0
39623 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
39625 ; GFX11-NEXT:    v_dual_mul_f32 v3, v4, v3 :: v_dual_and_b32 v0, 0xffff0000, v0
39626 ; GFX11-NEXT:    v_mul_f32_e32 v0, v0, v1
39627 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
39628 ; GFX11-NEXT:    v_bfe_u32 v1, v3, 16, 1
39629 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
39630 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
39631 ; GFX11-NEXT:    v_add3_u32 v1, v1, v3, 0x7fff
39632 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
39633 ; GFX11-NEXT:    v_bfe_u32 v4, v0, 16, 1
39634 ; GFX11-NEXT:    v_or_b32_e32 v6, 0x400000, v0
39635 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_4)
39636 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
39637 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39638 ; GFX11-NEXT:    v_add3_u32 v4, v4, v0, 0x7fff
39639 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
39640 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39641 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39642 ; GFX11-NEXT:    v_dual_cndmask_b32 v0, v4, v6 :: v_dual_add_f32 v1, v1, v3
39643 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
39644 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39645 ; GFX11-NEXT:    v_or_b32_e32 v4, 0x400000, v1
39646 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
39647 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
39648 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
39649 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
39650 ; GFX11-NEXT:    v_bfe_u32 v3, v0, 16, 1
39651 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
39652 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
39653 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
39654 ; GFX11-NEXT:    v_add3_u32 v3, v3, v0, 0x7fff
39655 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
39656 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v2, v4, vcc_lo
39657 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39658 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v5, vcc_lo
39659 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
39660 ; GFX11-NEXT:    v_perm_b32 v0, v0, v1, 0x7060302
39661 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
39662   %op = call <2 x bfloat> @llvm.fmuladd.v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c)
39663   ret <2 x bfloat> %op
39666 define <3 x bfloat> @v_fmuladd_v3bf16(<3 x bfloat> %a, <3 x bfloat> %b, <3 x bfloat> %c) {
39667 ; GCN-LABEL: v_fmuladd_v3bf16:
39668 ; GCN:       ; %bb.0:
39669 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39670 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39671 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39672 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39673 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39674 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39675 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39676 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39677 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39678 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39679 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39680 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39681 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
39682 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39683 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39684 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
39685 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39686 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39687 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
39688 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v5
39689 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v4
39690 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v3
39691 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39692 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39693 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39694 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v8
39695 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v7
39696 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v6
39697 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39698 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39699 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39700 ; GCN-NEXT:    s_setpc_b64 s[30:31]
39702 ; GFX7-LABEL: v_fmuladd_v3bf16:
39703 ; GFX7:       ; %bb.0:
39704 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39705 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39706 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39707 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39708 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39709 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39710 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39711 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39712 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39713 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39714 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39715 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39716 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39717 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39718 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39719 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39720 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v5
39721 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v4
39722 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v3
39723 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39724 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v8
39725 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39726 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v7
39727 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39728 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v6
39729 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v5
39730 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v4
39731 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v3
39732 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39733 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39734 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39735 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
39737 ; GFX8-LABEL: v_fmuladd_v3bf16:
39738 ; GFX8:       ; %bb.0:
39739 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39740 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
39741 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39742 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v3
39743 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
39744 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
39745 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 0x7fff, v3
39746 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v1
39747 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39748 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc
39749 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39750 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v5
39751 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
39752 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
39753 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
39754 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
39755 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
39756 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
39757 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39758 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
39759 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
39760 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
39761 ; GFX8-NEXT:    v_mul_f32_e32 v3, v5, v3
39762 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
39763 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
39764 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
39765 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
39766 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39767 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
39768 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39769 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
39770 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v5
39771 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
39772 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
39773 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39774 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39775 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
39776 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
39777 ; GFX8-NEXT:    v_or_b32_e32 v6, 0x400000, v3
39778 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39779 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
39780 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
39781 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
39782 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v2
39783 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
39784 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39785 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
39786 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39787 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
39788 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
39789 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
39790 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
39791 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
39792 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39793 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39794 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
39795 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
39796 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
39797 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
39798 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
39800 ; GFX9-LABEL: v_fmuladd_v3bf16:
39801 ; GFX9:       ; %bb.0:
39802 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39803 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
39804 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39805 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v3
39806 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
39807 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
39808 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
39809 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v1
39810 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39811 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v6, vcc
39812 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39813 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v5
39814 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v3
39815 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
39816 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
39817 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
39818 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
39819 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
39820 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
39821 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
39822 ; GFX9-NEXT:    v_mul_f32_e32 v3, v5, v3
39823 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
39824 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
39825 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
39826 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39827 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
39828 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39829 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
39830 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v5
39831 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39832 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39833 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
39834 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v2
39835 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
39836 ; GFX9-NEXT:    v_or_b32_e32 v6, 0x400000, v3
39837 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
39838 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
39839 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v6, vcc
39840 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
39841 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
39842 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39843 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
39844 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39845 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
39846 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
39847 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
39848 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
39849 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
39850 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
39851 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
39852 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
39853 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
39854 ; GFX9-NEXT:    v_alignbit_b32 v1, s4, v1, 16
39855 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
39857 ; GFX10-LABEL: v_fmuladd_v3bf16:
39858 ; GFX10:       ; %bb.0:
39859 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39860 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
39861 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
39862 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v2
39863 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v0
39864 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39865 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39866 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
39867 ; GFX10-NEXT:    v_mul_f32_e32 v3, v7, v6
39868 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
39869 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
39870 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
39871 ; GFX10-NEXT:    v_bfe_u32 v7, v3, 16, 1
39872 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
39873 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
39874 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
39875 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v3
39876 ; GFX10-NEXT:    v_add3_u32 v7, v7, v3, 0x7fff
39877 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v0
39878 ; GFX10-NEXT:    v_add3_u32 v8, v8, v0, 0x7fff
39879 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v6, vcc_lo
39880 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
39881 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v5
39882 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
39883 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39884 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39885 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v7, v9, vcc_lo
39886 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39887 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
39888 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39889 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v8, v10, vcc_lo
39890 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
39891 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v5
39892 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39893 ; GFX10-NEXT:    v_bfe_u32 v3, v2, 16, 1
39894 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v4
39895 ; GFX10-NEXT:    v_or_b32_e32 v7, 0x400000, v2
39896 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
39897 ; GFX10-NEXT:    v_bfe_u32 v4, v1, 16, 1
39898 ; GFX10-NEXT:    v_add3_u32 v3, v3, v2, 0x7fff
39899 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
39900 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
39901 ; GFX10-NEXT:    v_add3_u32 v4, v4, v1, 0x7fff
39902 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v7, vcc_lo
39903 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
39904 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
39905 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v8, vcc_lo
39906 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
39907 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
39908 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v6, vcc_lo
39909 ; GFX10-NEXT:    v_alignbit_b32 v1, s4, v1, 16
39910 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
39911   %op = call <3 x bfloat> @llvm.fmuladd.v3bf16(<3 x bfloat> %a, <3 x bfloat> %b, <3 x bfloat> %c)
39912   ret <3 x bfloat> %op
39915 define <4 x bfloat> @v_fmuladd_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b, <4 x bfloat> %c) {
39916 ; GCN-LABEL: v_fmuladd_v4bf16:
39917 ; GCN:       ; %bb.0:
39918 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39919 ; GCN-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39920 ; GCN-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39921 ; GCN-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39922 ; GCN-NEXT:    v_mul_f32_e32 v9, 1.0, v9
39923 ; GCN-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39924 ; GCN-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39925 ; GCN-NEXT:    v_mul_f32_e32 v10, 1.0, v10
39926 ; GCN-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39927 ; GCN-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39928 ; GCN-NEXT:    v_mul_f32_e32 v11, 1.0, v11
39929 ; GCN-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39930 ; GCN-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39931 ; GCN-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
39932 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39933 ; GCN-NEXT:    v_and_b32_e32 v11, 0xffff0000, v11
39934 ; GCN-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
39935 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39936 ; GCN-NEXT:    v_and_b32_e32 v10, 0xffff0000, v10
39937 ; GCN-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39938 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39939 ; GCN-NEXT:    v_and_b32_e32 v9, 0xffff0000, v9
39940 ; GCN-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39941 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39942 ; GCN-NEXT:    v_and_b32_e32 v8, 0xffff0000, v8
39943 ; GCN-NEXT:    v_mul_f32_e32 v3, v3, v7
39944 ; GCN-NEXT:    v_mul_f32_e32 v2, v2, v6
39945 ; GCN-NEXT:    v_mul_f32_e32 v1, v1, v5
39946 ; GCN-NEXT:    v_mul_f32_e32 v0, v0, v4
39947 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39948 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39949 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39950 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39951 ; GCN-NEXT:    v_add_f32_e32 v3, v3, v11
39952 ; GCN-NEXT:    v_add_f32_e32 v2, v2, v10
39953 ; GCN-NEXT:    v_add_f32_e32 v1, v1, v9
39954 ; GCN-NEXT:    v_add_f32_e32 v0, v0, v8
39955 ; GCN-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39956 ; GCN-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39957 ; GCN-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39958 ; GCN-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39959 ; GCN-NEXT:    s_setpc_b64 s[30:31]
39961 ; GFX7-LABEL: v_fmuladd_v4bf16:
39962 ; GFX7:       ; %bb.0:
39963 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39964 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
39965 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
39966 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
39967 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
39968 ; GFX7-NEXT:    v_mul_f32_e32 v2, 1.0, v2
39969 ; GFX7-NEXT:    v_mul_f32_e32 v6, 1.0, v6
39970 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
39971 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v7
39972 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v7
39973 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39974 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
39975 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39976 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
39977 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39978 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
39979 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39980 ; GFX7-NEXT:    v_mul_f32_e32 v8, 1.0, v8
39981 ; GFX7-NEXT:    v_mul_f32_e32 v9, 1.0, v9
39982 ; GFX7-NEXT:    v_mul_f32_e32 v10, 1.0, v10
39983 ; GFX7-NEXT:    v_mul_f32_e32 v11, 1.0, v11
39984 ; GFX7-NEXT:    v_mul_f32_e32 v3, v3, v7
39985 ; GFX7-NEXT:    v_mul_f32_e32 v2, v2, v6
39986 ; GFX7-NEXT:    v_mul_f32_e32 v1, v1, v5
39987 ; GFX7-NEXT:    v_mul_f32_e32 v0, v0, v4
39988 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
39989 ; GFX7-NEXT:    v_and_b32_e32 v7, 0xffff0000, v11
39990 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
39991 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v10
39992 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
39993 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v9
39994 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
39995 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v8
39996 ; GFX7-NEXT:    v_add_f32_e32 v3, v3, v7
39997 ; GFX7-NEXT:    v_add_f32_e32 v2, v2, v6
39998 ; GFX7-NEXT:    v_add_f32_e32 v1, v1, v5
39999 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v4
40000 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40001 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40002 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
40003 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40004 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
40006 ; GFX8-LABEL: v_fmuladd_v4bf16:
40007 ; GFX8:       ; %bb.0:
40008 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40009 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, 16, v3
40010 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v1
40011 ; GFX8-NEXT:    v_mul_f32_e32 v6, v7, v6
40012 ; GFX8-NEXT:    v_bfe_u32 v7, v6, 16, 1
40013 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v6
40014 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 0x7fff, v7
40015 ; GFX8-NEXT:    v_or_b32_e32 v8, 0x400000, v6
40016 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
40017 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
40018 ; GFX8-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
40019 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 16, v5
40020 ; GFX8-NEXT:    v_add_f32_e32 v6, v6, v7
40021 ; GFX8-NEXT:    v_bfe_u32 v7, v6, 16, 1
40022 ; GFX8-NEXT:    s_movk_i32 s4, 0x7fff
40023 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v6
40024 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40025 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40026 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s4, v7
40027 ; GFX8-NEXT:    v_mul_f32_e32 v1, v1, v3
40028 ; GFX8-NEXT:    v_or_b32_e32 v8, 0x400000, v6
40029 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
40030 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
40031 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
40032 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
40033 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
40034 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v1
40035 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
40036 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v7, vcc
40037 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40038 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
40039 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
40040 ; GFX8-NEXT:    v_bfe_u32 v3, v1, 16, 1
40041 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v1
40042 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, s4, v3
40043 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v1
40044 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
40045 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
40046 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
40047 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
40048 ; GFX8-NEXT:    v_mul_f32_e32 v3, v5, v3
40049 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
40050 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
40051 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
40052 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v3
40053 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
40054 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
40055 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40056 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
40057 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v5
40058 ; GFX8-NEXT:    v_bfe_u32 v5, v3, 16, 1
40059 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v3
40060 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
40061 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40062 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s4, v5
40063 ; GFX8-NEXT:    v_mul_f32_e32 v0, v0, v2
40064 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v3
40065 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
40066 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
40067 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
40068 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
40069 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v2
40070 ; GFX8-NEXT:    v_or_b32_e32 v5, 0x400000, v0
40071 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
40072 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
40073 ; GFX8-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40074 ; GFX8-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
40075 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
40076 ; GFX8-NEXT:    v_bfe_u32 v2, v0, 16, 1
40077 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v0
40078 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 0x7fff, v2
40079 ; GFX8-NEXT:    v_or_b32_e32 v4, 0x400000, v0
40080 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
40081 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
40082 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
40083 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
40084 ; GFX8-NEXT:    v_alignbit_b32 v0, v0, v3, 16
40085 ; GFX8-NEXT:    v_alignbit_b32 v1, v1, v6, 16
40086 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
40088 ; GFX9-LABEL: v_fmuladd_v4bf16:
40089 ; GFX9:       ; %bb.0:
40090 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40091 ; GFX9-NEXT:    v_lshlrev_b32_e32 v6, 16, v3
40092 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v1
40093 ; GFX9-NEXT:    v_mul_f32_e32 v6, v7, v6
40094 ; GFX9-NEXT:    v_bfe_u32 v7, v6, 16, 1
40095 ; GFX9-NEXT:    s_movk_i32 s4, 0x7fff
40096 ; GFX9-NEXT:    v_add3_u32 v7, v7, v6, s4
40097 ; GFX9-NEXT:    v_or_b32_e32 v8, 0x400000, v6
40098 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
40099 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
40100 ; GFX9-NEXT:    v_and_b32_e32 v6, 0xffff0000, v6
40101 ; GFX9-NEXT:    v_lshlrev_b32_e32 v7, 16, v5
40102 ; GFX9-NEXT:    v_add_f32_e32 v6, v6, v7
40103 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40104 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40105 ; GFX9-NEXT:    v_bfe_u32 v7, v6, 16, 1
40106 ; GFX9-NEXT:    v_mul_f32_e32 v1, v1, v3
40107 ; GFX9-NEXT:    v_add3_u32 v7, v7, v6, s4
40108 ; GFX9-NEXT:    v_or_b32_e32 v8, 0x400000, v6
40109 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v6, v6
40110 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
40111 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v7, v8, vcc
40112 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
40113 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v1
40114 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
40115 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v7, vcc
40116 ; GFX9-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40117 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
40118 ; GFX9-NEXT:    v_add_f32_e32 v1, v1, v3
40119 ; GFX9-NEXT:    v_bfe_u32 v3, v1, 16, 1
40120 ; GFX9-NEXT:    v_add3_u32 v3, v3, v1, s4
40121 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v1
40122 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
40123 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v5, vcc
40124 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
40125 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
40126 ; GFX9-NEXT:    v_mul_f32_e32 v3, v5, v3
40127 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
40128 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
40129 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v3
40130 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
40131 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
40132 ; GFX9-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40133 ; GFX9-NEXT:    v_lshlrev_b32_e32 v5, 16, v4
40134 ; GFX9-NEXT:    v_add_f32_e32 v3, v3, v5
40135 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
40136 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40137 ; GFX9-NEXT:    v_bfe_u32 v5, v3, 16, 1
40138 ; GFX9-NEXT:    v_mul_f32_e32 v0, v0, v2
40139 ; GFX9-NEXT:    v_add3_u32 v5, v5, v3, s4
40140 ; GFX9-NEXT:    v_or_b32_e32 v7, 0x400000, v3
40141 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
40142 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
40143 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v5, v7, vcc
40144 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
40145 ; GFX9-NEXT:    v_or_b32_e32 v5, 0x400000, v0
40146 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
40147 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v5, vcc
40148 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40149 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff0000, v4
40150 ; GFX9-NEXT:    v_add_f32_e32 v0, v0, v2
40151 ; GFX9-NEXT:    v_bfe_u32 v2, v0, 16, 1
40152 ; GFX9-NEXT:    v_add3_u32 v2, v2, v0, s4
40153 ; GFX9-NEXT:    v_or_b32_e32 v4, 0x400000, v0
40154 ; GFX9-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
40155 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v2, v4, vcc
40156 ; GFX9-NEXT:    s_mov_b32 s4, 0x7060302
40157 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
40158 ; GFX9-NEXT:    v_perm_b32 v1, v1, v6, s4
40159 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
40161 ; GFX10-LABEL: v_fmuladd_v4bf16:
40162 ; GFX10:       ; %bb.0:
40163 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40164 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v3
40165 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v1
40166 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40167 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40168 ; GFX10-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
40169 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40170 ; GFX10-NEXT:    v_mul_f32_e32 v6, v7, v6
40171 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 16, v2
40172 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
40173 ; GFX10-NEXT:    v_mul_f32_e32 v1, v1, v3
40174 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
40175 ; GFX10-NEXT:    v_bfe_u32 v10, v6, 16, 1
40176 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v6
40177 ; GFX10-NEXT:    v_mul_f32_e32 v7, v9, v7
40178 ; GFX10-NEXT:    v_mul_f32_e32 v0, v0, v2
40179 ; GFX10-NEXT:    v_bfe_u32 v2, v1, 16, 1
40180 ; GFX10-NEXT:    v_add3_u32 v10, v10, v6, 0x7fff
40181 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
40182 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v1
40183 ; GFX10-NEXT:    v_bfe_u32 v9, v7, 16, 1
40184 ; GFX10-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
40185 ; GFX10-NEXT:    v_bfe_u32 v11, v0, 16, 1
40186 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v10, v3, vcc_lo
40187 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
40188 ; GFX10-NEXT:    v_or_b32_e32 v10, 0x400000, v7
40189 ; GFX10-NEXT:    v_add3_u32 v9, v9, v7, 0x7fff
40190 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v0
40191 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40192 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v2, v6, vcc_lo
40193 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
40194 ; GFX10-NEXT:    v_add3_u32 v11, v11, v0, 0x7fff
40195 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v5
40196 ; GFX10-NEXT:    v_add_f32_e32 v3, v3, v8
40197 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40198 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v9, v10, vcc_lo
40199 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
40200 ; GFX10-NEXT:    v_lshlrev_b32_e32 v6, 16, v4
40201 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
40202 ; GFX10-NEXT:    v_bfe_u32 v7, v3, 16, 1
40203 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff0000, v2
40204 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v11, v12, vcc_lo
40205 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v5
40206 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v3
40207 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
40208 ; GFX10-NEXT:    v_add_f32_e32 v2, v2, v6
40209 ; GFX10-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40210 ; GFX10-NEXT:    v_bfe_u32 v6, v1, 16, 1
40211 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
40212 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v4
40213 ; GFX10-NEXT:    v_add3_u32 v4, v7, v3, 0x7fff
40214 ; GFX10-NEXT:    v_bfe_u32 v7, v2, 16, 1
40215 ; GFX10-NEXT:    v_bfe_u32 v8, v0, 16, 1
40216 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc_lo
40217 ; GFX10-NEXT:    v_add3_u32 v4, v6, v1, 0x7fff
40218 ; GFX10-NEXT:    v_add3_u32 v5, v7, v2, 0x7fff
40219 ; GFX10-NEXT:    v_or_b32_e32 v6, 0x400000, v2
40220 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
40221 ; GFX10-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
40222 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
40223 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v5, v6, vcc_lo
40224 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
40225 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
40226 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
40227 ; GFX10-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
40228 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc_lo
40229 ; GFX10-NEXT:    v_perm_b32 v1, v1, v3, 0x7060302
40230 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
40232 ; GFX11-LABEL: v_fmuladd_v4bf16:
40233 ; GFX11:       ; %bb.0:
40234 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
40235 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v0
40236 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40237 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v1
40238 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
40239 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
40240 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v3
40241 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40242 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
40243 ; GFX11-NEXT:    v_dual_mul_f32 v6, v7, v6 :: v_dual_and_b32 v5, 0xffff0000, v5
40244 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v2
40245 ; GFX11-NEXT:    v_dual_mul_f32 v1, v1, v3 :: v_dual_and_b32 v2, 0xffff0000, v2
40246 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
40247 ; GFX11-NEXT:    v_bfe_u32 v10, v6, 16, 1
40248 ; GFX11-NEXT:    v_mul_f32_e32 v7, v9, v7
40249 ; GFX11-NEXT:    v_or_b32_e32 v3, 0x400000, v6
40250 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v6, v6
40251 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_2) | instid1(VALU_DEP_3)
40252 ; GFX11-NEXT:    v_add3_u32 v10, v10, v6, 0x7fff
40253 ; GFX11-NEXT:    v_or_b32_e32 v6, 0x400000, v1
40254 ; GFX11-NEXT:    v_bfe_u32 v9, v7, 16, 1
40255 ; GFX11-NEXT:    v_dual_cndmask_b32 v3, v10, v3 :: v_dual_mul_f32 v0, v0, v2
40256 ; GFX11-NEXT:    v_bfe_u32 v2, v1, 16, 1
40257 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
40258 ; GFX11-NEXT:    v_or_b32_e32 v10, 0x400000, v7
40259 ; GFX11-NEXT:    v_add3_u32 v9, v9, v7, 0x7fff
40260 ; GFX11-NEXT:    v_bfe_u32 v11, v0, 16, 1
40261 ; GFX11-NEXT:    v_add3_u32 v2, v2, v1, 0x7fff
40262 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v0
40263 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
40264 ; GFX11-NEXT:    v_add3_u32 v11, v11, v0, 0x7fff
40265 ; GFX11-NEXT:    v_dual_cndmask_b32 v1, v2, v6 :: v_dual_lshlrev_b32 v6, 16, v4
40266 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v7, v7
40267 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff0000, v4
40268 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_2)
40269 ; GFX11-NEXT:    v_dual_cndmask_b32 v2, v9, v10 :: v_dual_and_b32 v1, 0xffff0000, v1
40270 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
40271 ; GFX11-NEXT:    v_dual_add_f32 v1, v1, v5 :: v_dual_and_b32 v2, 0xffff0000, v2
40272 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v11, v12, vcc_lo
40273 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
40274 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
40275 ; GFX11-NEXT:    v_add_f32_e32 v2, v2, v6
40276 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
40277 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
40278 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v3
40279 ; GFX11-NEXT:    v_bfe_u32 v6, v1, 16, 1
40280 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v4
40281 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
40282 ; GFX11-NEXT:    v_add_f32_e32 v3, v3, v8
40283 ; GFX11-NEXT:    v_bfe_u32 v8, v0, 16, 1
40284 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
40285 ; GFX11-NEXT:    v_bfe_u32 v7, v3, 16, 1
40286 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v3
40287 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v3, v3
40288 ; GFX11-NEXT:    v_add3_u32 v4, v7, v3, 0x7fff
40289 ; GFX11-NEXT:    v_bfe_u32 v7, v2, 16, 1
40290 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_3)
40291 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc_lo
40292 ; GFX11-NEXT:    v_add3_u32 v4, v6, v1, 0x7fff
40293 ; GFX11-NEXT:    v_add3_u32 v5, v7, v2, 0x7fff
40294 ; GFX11-NEXT:    v_or_b32_e32 v6, 0x400000, v2
40295 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v2, v2
40296 ; GFX11-NEXT:    v_add3_u32 v7, v8, v0, 0x7fff
40297 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
40298 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
40299 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v5, v6, vcc_lo
40300 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
40301 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v7, v8, vcc_lo
40302 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
40303 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
40304 ; GFX11-NEXT:    v_perm_b32 v0, v0, v2, 0x7060302
40305 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc_lo
40306 ; GFX11-NEXT:    v_perm_b32 v1, v1, v3, 0x7060302
40307 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
40308   %op = call <4 x bfloat> @llvm.fmuladd.v4bf16(<4 x bfloat> %a, <4 x bfloat> %b, <4 x bfloat> %c)
40309   ret <4 x bfloat> %op