xref: /llvm-project/llvm/test/CodeGen/AMDGPU/amdgcn.bitcast.ll (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1; RUN: llc -mtriple=amdgcn -amdgpu-codegenprepare-break-large-phis-threshold=4096 < %s | FileCheck %s
2; RUN: llc -mtriple=amdgcn -mcpu=tonga -amdgpu-codegenprepare-break-large-phis-threshold=4096 < %s | FileCheck %s
3; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -amdgpu-codegenprepare-break-large-phis-threshold=4096 < %s | FileCheck %s
4; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -amdgpu-codegenprepare-break-large-phis-threshold=4096 < %s | FileCheck %s
5
6; This test just checks that the compiler doesn't crash.
7
8; CHECK-LABEL: {{^}}v32i8_to_v8i32:
9define amdgpu_ps float @v32i8_to_v8i32(ptr addrspace(4) inreg) #0 {
10entry:
11  %1 = load <32 x i8>, ptr addrspace(4) %0
12  %2 = bitcast <32 x i8> %1 to <8 x i32>
13  %3 = extractelement <8 x i32> %2, i32 1
14  %4 = icmp ne i32 %3, 0
15  %5 = select i1 %4, float 0.0, float 1.0
16  ret float %5
17}
18
19; CHECK-LABEL: {{^}}i8ptr_v16i8ptr:
20; CHECK: s_endpgm
21define amdgpu_kernel void @i8ptr_v16i8ptr(ptr addrspace(1) %out, ptr addrspace(1) %in) {
22entry:
23  %0 = load <16 x i8>, ptr addrspace(1) %in
24  store <16 x i8> %0, ptr addrspace(1) %out
25  ret void
26}
27
28define amdgpu_kernel void @f32_to_v2i16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
29  %load = load float, ptr addrspace(1) %in, align 4
30  %fadd32 = fadd float %load, 1.0
31  %bc = bitcast float %fadd32 to <2 x i16>
32  %add.bitcast = add <2 x i16> %bc, <i16 2, i16 2>
33  store <2 x i16> %add.bitcast, ptr addrspace(1) %out
34  ret void
35}
36
37define amdgpu_kernel void @v2i16_to_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
38  %load = load <2 x i16>, ptr addrspace(1) %in, align 4
39  %add.v2i16 = add <2 x i16> %load, <i16 2, i16 2>
40  %bc = bitcast <2 x i16> %add.v2i16 to float
41  %fadd.bitcast = fadd float %bc, 1.0
42  store float %fadd.bitcast, ptr addrspace(1) %out
43  ret void
44}
45
46define amdgpu_kernel void @f32_to_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
47  %load = load float, ptr addrspace(1) %in, align 4
48  %fadd32 = fadd float %load, 1.0
49  %bc = bitcast float %fadd32 to <2 x half>
50  %add.bitcast = fadd <2 x half> %bc, <half 2.0, half 2.0>
51  store <2 x half> %add.bitcast, ptr addrspace(1) %out
52  ret void
53}
54
55define amdgpu_kernel void @v2f16_to_f32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
56  %load = load <2 x half>, ptr addrspace(1) %in, align 4
57  %add.v2f16 = fadd <2 x half> %load, <half 2.0, half 2.0>
58  %bc = bitcast <2 x half> %add.v2f16 to float
59  %fadd.bitcast = fadd float %bc, 1.0
60  store float %fadd.bitcast, ptr addrspace(1) %out
61  ret void
62}
63
64define amdgpu_kernel void @v4i8_to_i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
65  %load = load <4 x i8>, ptr addrspace(1) %in, align 4
66  %bc = bitcast <4 x i8> %load to i32
67  store i32 %bc, ptr addrspace(1) %out, align 4
68  ret void
69}
70
71define amdgpu_kernel void @i32_to_v4i8(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
72  %load = load i32, ptr addrspace(1) %in, align 4
73  %bc = bitcast i32 %load to <4 x i8>
74  store <4 x i8> %bc, ptr addrspace(1) %out, align 4
75  ret void
76}
77
78; CHECK-LABEL: {{^}}bitcast_v2i32_to_f64:
79; CHECK: s_endpgm
80define amdgpu_kernel void @bitcast_v2i32_to_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) {
81  %val = load <2 x i32>, ptr addrspace(1) %in, align 8
82  %add = add <2 x i32> %val, <i32 4, i32 9>
83  %bc = bitcast <2 x i32> %add to double
84  %fadd.bc = fadd double %bc, 1.0
85  store double %fadd.bc, ptr addrspace(1) %out, align 8
86  ret void
87}
88
89; CHECK-LABEL: {{^}}bitcast_f64_to_v2i32:
90; CHECK: s_endpgm
91define amdgpu_kernel void @bitcast_f64_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) {
92  %val = load double, ptr addrspace(1) %in, align 8
93  %add = fadd double %val, 4.0
94  %bc = bitcast double %add to <2 x i32>
95  store <2 x i32> %bc, ptr addrspace(1) %out, align 8
96  ret void
97}
98
99; CHECK-LABEL: {{^}}bitcast_v2i64_to_v2f64:
100define amdgpu_kernel void @bitcast_v2i64_to_v2f64(i32 %cond, ptr addrspace(1) %out, <2 x i64> %value) {
101entry:
102  %cmp0 = icmp eq i32 %cond, 0
103  br i1 %cmp0, label %if, label %end
104
105if:
106  %cast = bitcast <2 x i64> %value to <2 x double>
107  br label %end
108
109end:
110  %phi = phi <2 x double> [zeroinitializer, %entry], [%cast, %if]
111  store <2 x double> %phi, ptr addrspace(1) %out
112  ret void
113}
114
115; CHECK-LABEL: {{^}}bitcast_v2f64_to_v2i64:
116define amdgpu_kernel void @bitcast_v2f64_to_v2i64(i32 %cond, ptr addrspace(1) %out, <2 x double> %value) {
117entry:
118  %cmp0 = icmp eq i32 %cond, 0
119  br i1 %cmp0, label %if, label %end
120
121if:
122  %cast = bitcast <2 x double> %value to <2 x i64>
123  br label %end
124
125end:
126  %phi = phi <2 x i64> [zeroinitializer, %entry], [%cast, %if]
127  store <2 x i64> %phi, ptr addrspace(1) %out
128  ret void
129}
130
131; CHECK-LABEL: {{^}}v4i16_to_f64:
132define amdgpu_kernel void @v4i16_to_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
133  %load = load <4 x i16>, ptr addrspace(1) %in, align 4
134  %add.v4i16 = add <4 x i16> %load, <i16 4, i16 4, i16 4, i16 4>
135  %bc = bitcast <4 x i16> %add.v4i16 to double
136  %fadd.bitcast = fadd double %bc, 1.0
137  store double %fadd.bitcast, ptr addrspace(1) %out
138  ret void
139}
140
141; CHECK-LABEL: {{^}}v4f16_to_f64:
142define amdgpu_kernel void @v4f16_to_f64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
143  %load = load <4 x half>, ptr addrspace(1) %in, align 4
144  %add.v4half = fadd <4 x half> %load, <half 4.0, half 4.0, half 4.0, half 4.0>
145  %bc = bitcast <4 x half> %add.v4half to double
146  %fadd.bitcast = fadd double %bc, 1.0
147  store double %fadd.bitcast, ptr addrspace(1) %out
148  ret void
149}
150
151; CHECK-LABEL: {{^}}f64_to_v4f16:
152define amdgpu_kernel void @f64_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
153  %load = load double, ptr addrspace(1) %in, align 4
154  %fadd32 = fadd double %load, 1.0
155  %bc = bitcast double %fadd32 to <4 x half>
156  %add.bitcast = fadd <4 x half> %bc, <half 2.0, half 2.0, half 2.0, half 2.0>
157  store <4 x half> %add.bitcast, ptr addrspace(1) %out
158  ret void
159}
160
161; CHECK-LABEL: {{^}}f64_to_v4i16:
162define amdgpu_kernel void @f64_to_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
163  %load = load double, ptr addrspace(1) %in, align 4
164  %fadd32 = fadd double %load, 1.0
165  %bc = bitcast double %fadd32 to <4 x i16>
166  %add.bitcast = add <4 x i16> %bc, <i16 2, i16 2, i16 2, i16 2>
167  store <4 x i16> %add.bitcast, ptr addrspace(1) %out
168  ret void
169}
170
171; CHECK-LABEL: {{^}}v4i16_to_i64:
172define amdgpu_kernel void @v4i16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
173  %load = load <4 x i16>, ptr addrspace(1) %in, align 4
174  %add.v4i16 = add <4 x i16> %load, <i16 4, i16 4, i16 4, i16 4>
175  %bc = bitcast <4 x i16> %add.v4i16 to i64
176  %add.bitcast = add i64 %bc, 1
177  store i64 %add.bitcast, ptr addrspace(1) %out
178  ret void
179}
180
181; CHECK-LABEL: {{^}}v4f16_to_i64:
182define amdgpu_kernel void @v4f16_to_i64(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
183  %load = load <4 x half>, ptr addrspace(1) %in, align 4
184  %add.v4half = fadd <4 x half> %load, <half 4.0, half 4.0, half 4.0, half 4.0>
185  %bc = bitcast <4 x half> %add.v4half to i64
186  %add.bitcast = add i64 %bc, 1
187  store i64 %add.bitcast, ptr addrspace(1) %out
188  ret void
189}
190
191; CHECK-LABEL: {{^}}bitcast_i64_to_v4i16:
192define amdgpu_kernel void @bitcast_i64_to_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) {
193  %val = load i64, ptr addrspace(1) %in, align 8
194  %add = add i64 %val, 4
195  %bc = bitcast i64 %add to <4 x i16>
196  %add.v4i16 = add <4 x i16> %bc, <i16 1, i16 2, i16 3, i16 4>
197  store <4 x i16> %add.v4i16, ptr addrspace(1) %out, align 8
198  ret void
199}
200
201; CHECK-LABEL: {{^}}bitcast_i64_to_v4f16:
202define amdgpu_kernel void @bitcast_i64_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) {
203  %val = load i64, ptr addrspace(1) %in, align 8
204  %add = add i64 %val, 4
205  %bc = bitcast i64 %add to <4 x half>
206  %add.v4i16 = fadd <4 x half> %bc, <half 1.0, half 2.0, half 4.0, half 8.0>
207  store <4 x half> %add.v4i16, ptr addrspace(1) %out, align 8
208  ret void
209}
210
211; CHECK-LABEL: {{^}}v4i16_to_v2f32:
212define amdgpu_kernel void @v4i16_to_v2f32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
213  %load = load <4 x i16>, ptr addrspace(1) %in, align 4
214  %add.v4i16 = add <4 x i16> %load, <i16 4, i16 4, i16 4, i16 4>
215  %bc = bitcast <4 x i16> %add.v4i16 to <2 x float>
216  %fadd.bitcast = fadd <2 x float> %bc, <float 1.0, float 1.0>
217  store <2 x float> %fadd.bitcast, ptr addrspace(1) %out
218  ret void
219}
220
221; CHECK-LABEL: {{^}}v4f16_to_v2f32:
222define amdgpu_kernel void @v4f16_to_v2f32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
223  %load = load <4 x half>, ptr addrspace(1) %in, align 4
224  %add.v4half = fadd <4 x half> %load, <half 4.0, half 4.0, half 4.0, half 4.0>
225  %bc = bitcast <4 x half> %add.v4half to <2 x float>
226  %fadd.bitcast = fadd <2 x float> %bc, <float 1.0, float 1.0>
227  store <2 x float> %fadd.bitcast, ptr addrspace(1) %out
228  ret void
229}
230
231; CHECK-LABEL: {{^}}v2f32_to_v4i16:
232define amdgpu_kernel void @v2f32_to_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
233  %load = load <2 x float>, ptr addrspace(1) %in, align 4
234  %add.v2f32 = fadd <2 x float> %load, <float 2.0, float 4.0>
235  %bc = bitcast <2 x float> %add.v2f32 to <4 x i16>
236  %add.bitcast = add <4 x i16> %bc, <i16 1, i16 2, i16 3, i16 4>
237  store <4 x i16> %add.bitcast, ptr addrspace(1) %out
238  ret void
239}
240
241; CHECK-LABEL: {{^}}v2f32_to_v4f16:
242define amdgpu_kernel void @v2f32_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
243  %load = load <2 x float>, ptr addrspace(1) %in, align 4
244  %add.v2f32 = fadd <2 x float> %load, <float 2.0, float 4.0>
245  %bc = bitcast <2 x float> %add.v2f32 to <4 x half>
246  %add.bitcast = fadd <4 x half> %bc, <half 1.0, half 2.0, half 4.0, half 8.0>
247  store <4 x half> %add.bitcast, ptr addrspace(1) %out
248  ret void
249}
250
251; CHECK-LABEL: {{^}}v4i16_to_v2i32:
252define amdgpu_kernel void @v4i16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
253  %load = load <4 x i16>, ptr addrspace(1) %in, align 4
254  %add.v4i16 = add <4 x i16> %load, <i16 4, i16 4, i16 4, i16 4>
255  %bc = bitcast <4 x i16> %add.v4i16 to <2 x i32>
256  %add.bitcast = add <2 x i32> %bc, <i32 1, i32 1>
257  store <2 x i32> %add.bitcast, ptr addrspace(1) %out
258  ret void
259}
260
261; CHECK-LABEL: {{^}}v4f16_to_v2i32:
262define amdgpu_kernel void @v4f16_to_v2i32(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
263  %load = load <4 x half>, ptr addrspace(1) %in, align 4
264  %add.v4half = fadd <4 x half> %load, <half 4.0, half 4.0, half 4.0, half 4.0>
265  %bc = bitcast <4 x half> %add.v4half to <2 x i32>
266  %add.bitcast = add <2 x i32> %bc, <i32 1, i32 1>
267  store <2 x i32> %add.bitcast, ptr addrspace(1) %out
268  ret void
269}
270
271; CHECK-LABEL: {{^}}v2i32_to_v4i16:
272define amdgpu_kernel void @v2i32_to_v4i16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
273  %load = load <2 x i32>, ptr addrspace(1) %in, align 4
274  %add.v2i32 = add <2 x i32> %load, <i32 2, i32 4>
275  %bc = bitcast <2 x i32> %add.v2i32 to <4 x i16>
276  %add.bitcast = add <4 x i16> %bc, <i16 1, i16 2, i16 3, i16 4>
277  store <4 x i16> %add.bitcast, ptr addrspace(1) %out
278  ret void
279}
280
281; CHECK-LABEL: {{^}}v2i32_to_v4f16:
282define amdgpu_kernel void @v2i32_to_v4f16(ptr addrspace(1) %out, ptr addrspace(1) %in) nounwind {
283  %load = load <2 x i32>, ptr addrspace(1) %in, align 4
284  %add.v2i32 = add <2 x i32> %load, <i32 2, i32 4>
285  %bc = bitcast <2 x i32> %add.v2i32 to <4 x half>
286  %add.bitcast = fadd <4 x half> %bc, <half 1.0, half 2.0, half 4.0, half 8.0>
287  store <4 x half> %add.bitcast, ptr addrspace(1) %out
288  ret void
289}
290
291declare <4 x float> @llvm.amdgcn.s.buffer.load.v4f32(<4 x i32>, i32, i32 immarg)
292
293; CHECK-LABEL: {{^}}bitcast_v4f32_to_v2i64:
294; CHECK: s_buffer_load_{{dwordx4|b128}}
295define <2 x i64> @bitcast_v4f32_to_v2i64(<2 x i64> %arg) {
296  %val = call <4 x float> @llvm.amdgcn.s.buffer.load.v4f32(<4 x i32> undef, i32 0, i32 0)
297  %cast = bitcast <4 x float> %val to <2 x i64>
298  %div = udiv <2 x i64> %cast, %arg
299  ret <2 x i64> %div
300}
301
302declare half @llvm.canonicalize.f16(half)
303
304; CHECK-LABEL: {{^}}bitcast_f32_to_v1i32:
305define amdgpu_kernel void @bitcast_f32_to_v1i32(ptr addrspace(1) %out) {
306  %f16 = call arcp afn half @llvm.canonicalize.f16(half 0xH03F0)
307  %f32 = fpext half %f16 to float
308  %v = bitcast float %f32 to <1 x i32>
309  %v1 = extractelement <1 x i32> %v, i32 0
310  store i32 %v1, ptr addrspace(1) %out
311  ret void
312}
313
314; CHECK-LABEL: {{^}}bitcast_v4i64_to_v16i16:
315define amdgpu_kernel void @bitcast_v4i64_to_v16i16(i32 %cond, ptr addrspace(1) %out, <4 x i64> %value) {
316entry:
317  %cmp0 = icmp eq i32 %cond, 0
318  br i1 %cmp0, label %if, label %end
319
320if:
321  %phi_value = phi <4 x i64> [zeroinitializer, %entry], [%value, %if]
322  %cast = bitcast <4 x i64> %phi_value to <16 x i16>
323  %cmp1 = icmp eq i32 %cond, 1
324  br i1 %cmp1, label %if, label %end
325
326end:
327  %phi_cast = phi <16 x i16> [zeroinitializer, %entry], [%cast, %if]
328  store <16 x i16> %phi_cast, ptr addrspace(1) %out
329  ret void
330}
331
332; CHECK-LABEL: {{^}}bitcast_v4f64_to_v16f16:
333define amdgpu_kernel void @bitcast_v4f64_to_v16f16(i32 %cond, ptr addrspace(1) %out, <4 x double> %value) {
334entry:
335  %cmp0 = icmp eq i32 %cond, 0
336  br i1 %cmp0, label %if, label %end
337
338if:
339  %phi_value = phi <4 x double> [zeroinitializer, %entry], [%value, %if]
340  %cast = bitcast <4 x double> %phi_value to <16 x half>
341  %cmp1 = icmp eq i32 %cond, 1
342  br i1 %cmp1, label %if, label %end
343
344end:
345  %phi_cast = phi <16 x half> [zeroinitializer, %entry], [%cast, %if]
346  store <16 x half> %phi_cast, ptr addrspace(1) %out
347  ret void
348}
349
350; CHECK-LABEL: {{^}}bitcast_v16i16_to_v4i64:
351define amdgpu_kernel void @bitcast_v16i16_to_v4i64(i32 %cond, ptr addrspace(1) %out, <16 x i16> %value) {
352entry:
353  %cmp0 = icmp eq i32 %cond, 0
354  br i1 %cmp0, label %if, label %end
355
356if:
357  %phi_value = phi <16 x i16> [zeroinitializer, %entry], [%value, %if]
358  %cast = bitcast <16 x i16> %phi_value to <4 x i64>
359  %cmp1 = icmp eq i32 %cond, 1
360  br i1 %cmp1, label %if, label %end
361
362end:
363  %phi_cast = phi <4 x i64> [zeroinitializer, %entry], [%cast, %if]
364  store <4 x i64> %phi_cast, ptr addrspace(1) %out
365  ret void
366}
367
368; CHECK-LABEL: {{^}}bitcast_v16f16_to_v4f64:
369define amdgpu_kernel void @bitcast_v16f16_to_v4f64(i32 %cond, ptr addrspace(1) %out, <16 x half> %value) {
370entry:
371  %cmp0 = icmp eq i32 %cond, 0
372  br i1 %cmp0, label %if, label %end
373
374if:
375  %phi_value = phi <16 x half> [zeroinitializer, %entry], [%value, %if]
376  %cast = bitcast <16 x half> %phi_value to <4 x double>
377  %cmp1 = icmp eq i32 %cond, 1
378  br i1 %cmp1, label %if, label %end
379
380end:
381  %phi_cast = phi <4 x double> [zeroinitializer, %entry], [%cast, %if]
382  store <4 x double> %phi_cast, ptr addrspace(1) %out
383  ret void
384}
385
386; CHECK-LABEL: {{^}}bitcast_v20f16_to_v5f64:
387; CHECK: ScratchSize: 0
388define amdgpu_kernel void @bitcast_v20f16_to_v5f64(i32 %cond, ptr addrspace(1) %out, <20 x half> %value) {
389entry:
390  %cmp0 = icmp eq i32 %cond, 0
391  br i1 %cmp0, label %if, label %end
392
393if:
394  %phi_value = phi <20 x half> [zeroinitializer, %entry], [%value, %if]
395  %cast = bitcast <20 x half> %phi_value to <5 x double>
396  %cmp1 = icmp eq i32 %cond, 1
397  br i1 %cmp1, label %if, label %end
398
399end:
400  %phi_cast = phi <5 x double> [zeroinitializer, %entry], [%cast, %if]
401  store <5 x double> %phi_cast, ptr addrspace(1) %out
402  ret void
403}
404
405; CHECK-LABEL: {{^}}bitcast_v10f32_to_v5f64:
406; CHECK: ScratchSize: 0
407define amdgpu_kernel void @bitcast_v10f32_to_v5f64(i32 %cond, ptr addrspace(1) %out, <10 x float> %value) {
408entry:
409  %cmp0 = icmp eq i32 %cond, 0
410  br i1 %cmp0, label %if, label %end
411
412if:
413  %phi_value = phi <10 x float> [zeroinitializer, %entry], [%value, %if]
414  %cast = bitcast <10 x float> %phi_value to <5 x double>
415  %cmp1 = icmp eq i32 %cond, 1
416  br i1 %cmp1, label %if, label %end
417
418end:
419  %phi_cast = phi <5 x double> [zeroinitializer, %entry], [%cast, %if]
420  store <5 x double> %phi_cast, ptr addrspace(1) %out
421  ret void
422}
423
424; CHECK-LABEL: {{^}}bitcast_v10i32_to_v5f64:
425; CHECK: ScratchSize: 0
426define amdgpu_kernel void @bitcast_v10i32_to_v5f64(i32 %cond, ptr addrspace(1) %out, <10 x i32> %value) {
427entry:
428  %cmp0 = icmp eq i32 %cond, 0
429  br i1 %cmp0, label %if, label %end
430
431if:
432  %phi_value = phi <10 x i32> [zeroinitializer, %entry], [%value, %if]
433  %cast = bitcast <10 x i32> %phi_value to <5 x double>
434  %cmp1 = icmp eq i32 %cond, 1
435  br i1 %cmp1, label %if, label %end
436
437end:
438  %phi_cast = phi <5 x double> [zeroinitializer, %entry], [%cast, %if]
439  store <5 x double> %phi_cast, ptr addrspace(1) %out
440  ret void
441}
442
443; CHECK-LABEL: {{^}}bitcast_v10f32_to_v5i64:
444; CHECK: ScratchSize: 0
445define amdgpu_kernel void @bitcast_v10f32_to_v5i64(i32 %cond, ptr addrspace(1) %out, <10 x float> %value) {
446entry:
447  %cmp0 = icmp eq i32 %cond, 0
448  br i1 %cmp0, label %if, label %end
449
450if:
451  %phi_value = phi <10 x float> [zeroinitializer, %entry], [%value, %if]
452  %cast = bitcast <10 x float> %phi_value to <5 x i64>
453  %cmp1 = icmp eq i32 %cond, 1
454  br i1 %cmp1, label %if, label %end
455
456end:
457  %phi_cast = phi <5 x i64> [zeroinitializer, %entry], [%cast, %if]
458  store <5 x i64> %phi_cast, ptr addrspace(1) %out
459  ret void
460}
461
462; CHECK-LABEL: {{^}}bitcast_v10i32_to_v5i64:
463; CHECK: ScratchSize: 0
464define amdgpu_kernel void @bitcast_v10i32_to_v5i64(i32 %cond, ptr addrspace(1) %out, <10 x i32> %value) {
465entry:
466  %cmp0 = icmp eq i32 %cond, 0
467  br i1 %cmp0, label %if, label %end
468
469if:
470  %phi_value = phi <10 x i32> [zeroinitializer, %entry], [%value, %if]
471  %cast = bitcast <10 x i32> %phi_value to <5 x i64>
472  %cmp1 = icmp eq i32 %cond, 1
473  br i1 %cmp1, label %if, label %end
474
475end:
476  %phi_cast = phi <5 x i64> [zeroinitializer, %entry], [%cast, %if]
477  store <5 x i64> %phi_cast, ptr addrspace(1) %out
478  ret void
479}
480
481; CHECK-LABEL: {{^}}bitcast_v40i8_to_v5f64:
482; CHECK: ScratchSize: 0
483define amdgpu_kernel void @bitcast_v40i8_to_v5f64(i32 %cond, ptr addrspace(1) %out, <40 x i8> %value) {
484entry:
485  %cmp0 = icmp eq i32 %cond, 0
486  br i1 %cmp0, label %if, label %end
487
488if:
489  %phi_value = phi <40 x i8> [zeroinitializer, %entry], [%value, %if]
490  %cast = bitcast <40 x i8> %phi_value to <5 x double>
491  %cmp1 = icmp eq i32 %cond, 1
492  br i1 %cmp1, label %if, label %end
493
494end:
495  %phi_cast = phi <5 x double> [zeroinitializer, %entry], [%cast, %if]
496  store <5 x double> %phi_cast, ptr addrspace(1) %out
497  ret void
498}
499
500; CHECK-LABEL: {{^}}bitcast_v40i8_to_v5i64:
501; CHECK: ScratchSize: 0
502define amdgpu_kernel void @bitcast_v40i8_to_v5i64(i32 %cond, ptr addrspace(1) %out, <40 x i8> %value) {
503entry:
504  %cmp0 = icmp eq i32 %cond, 0
505  br i1 %cmp0, label %if, label %end
506
507if:
508  %phi_value = phi <40 x i8> [zeroinitializer, %entry], [%value, %if]
509  %cast = bitcast <40 x i8> %phi_value to <5 x i64>
510  %cmp1 = icmp eq i32 %cond, 1
511  br i1 %cmp1, label %if, label %end
512
513end:
514  %phi_cast = phi <5 x i64> [zeroinitializer, %entry], [%cast, %if]
515  store <5 x i64> %phi_cast, ptr addrspace(1) %out
516  ret void
517}
518
519; CHECK-LABEL: {{^}}bitcast_v5f64_to_v10f32:
520; CHECK: ScratchSize: 0
521define amdgpu_kernel void @bitcast_v5f64_to_v10f32(i32 %cond, ptr addrspace(1) %out, <5 x double> %value) {
522entry:
523  %cmp0 = icmp eq i32 %cond, 0
524  br i1 %cmp0, label %if, label %end
525
526if:
527  %phi_value = phi <5 x double> [zeroinitializer, %entry], [%value, %if]
528  %cast = bitcast <5 x double> %phi_value to <10 x float>
529  %cmp1 = icmp eq i32 %cond, 1
530  br i1 %cmp1, label %if, label %end
531
532end:
533  %phi_cast = phi <10 x float> [zeroinitializer, %entry], [%cast, %if]
534  store <10 x float> %phi_cast, ptr addrspace(1) %out
535  ret void
536}
537
538; CHECK-LABEL: {{^}}bitcast_v5f64_to_v10i32:
539; CHECK: ScratchSize: 0
540define amdgpu_kernel void @bitcast_v5f64_to_v10i32(i32 %cond, ptr addrspace(1) %out, <5 x double> %value) {
541entry:
542  %cmp0 = icmp eq i32 %cond, 0
543  br i1 %cmp0, label %if, label %end
544
545if:
546  %phi_value = phi <5 x double> [zeroinitializer, %entry], [%value, %if]
547  %cast = bitcast <5 x double> %phi_value to <10 x i32>
548  %cmp1 = icmp eq i32 %cond, 1
549  br i1 %cmp1, label %if, label %end
550
551end:
552  %phi_cast = phi <10 x i32> [zeroinitializer, %entry], [%cast, %if]
553  store <10 x i32> %phi_cast, ptr addrspace(1) %out
554  ret void
555}
556
557; CHECK-LABEL: {{^}}bitcast_v5i64_to_v10f32:
558; CHECK: ScratchSize: 0
559define amdgpu_kernel void @bitcast_v5i64_to_v10f32(i32 %cond, ptr addrspace(1) %out, <5 x i64> %value) {
560entry:
561  %cmp0 = icmp eq i32 %cond, 0
562  br i1 %cmp0, label %if, label %end
563
564if:
565  %phi_value = phi <5 x i64> [zeroinitializer, %entry], [%value, %if]
566  %cast = bitcast <5 x i64> %phi_value to <10 x float>
567  %cmp1 = icmp eq i32 %cond, 1
568  br i1 %cmp1, label %if, label %end
569
570end:
571  %phi_cast = phi <10 x float> [zeroinitializer, %entry], [%cast, %if]
572  store <10 x float> %phi_cast, ptr addrspace(1) %out
573  ret void
574}
575
576; CHECK-LABEL: {{^}}bitcast_v5i64_to_v10i32:
577; CHECK: ScratchSize: 0
578define amdgpu_kernel void @bitcast_v5i64_to_v10i32(i32 %cond, ptr addrspace(1) %out, <5 x i64> %value) {
579entry:
580  %cmp0 = icmp eq i32 %cond, 0
581  br i1 %cmp0, label %if, label %end
582
583if:
584  %phi_value = phi <5 x i64> [zeroinitializer, %entry], [%value, %if]
585  %cast = bitcast <5 x i64> %phi_value to <10 x i32>
586  %cmp1 = icmp eq i32 %cond, 1
587  br i1 %cmp1, label %if, label %end
588
589end:
590  %phi_cast = phi <10 x i32> [zeroinitializer, %entry], [%cast, %if]
591  store <10 x i32> %phi_cast, ptr addrspace(1) %out
592  ret void
593}
594
595; CHECK-LABEL: {{^}}bitcast_v6f64_to_v12i32:
596; CHECK: ScratchSize: 0
597define amdgpu_kernel void @bitcast_v6f64_to_v12i32(i32 %cond, ptr addrspace(1) %out, <6 x double> %value) {
598entry:
599  %cmp0 = icmp eq i32 %cond, 0
600  br i1 %cmp0, label %if, label %end
601
602if:
603  %phi_value = phi <6 x double> [zeroinitializer, %entry], [%value, %if]
604  %cast = bitcast <6 x double> %phi_value to <12 x i32>
605  %cmp1 = icmp eq i32 %cond, 1
606  br i1 %cmp1, label %if, label %end
607
608end:
609  %phi_cast = phi <12 x i32> [zeroinitializer, %entry], [%cast, %if]
610  store <12 x i32> %phi_cast, ptr addrspace(1) %out
611  ret void
612}
613
614; CHECK-LABEL: {{^}}bitcast_v6f64_to_v12f32:
615; CHECK: ScratchSize: 0
616define amdgpu_kernel void @bitcast_v6f64_to_v12f32(i32 %cond, ptr addrspace(1) %out, <6 x double> %value) {
617entry:
618  %cmp0 = icmp eq i32 %cond, 0
619  br i1 %cmp0, label %if, label %end
620
621if:
622  %phi_value = phi <6 x double> [zeroinitializer, %entry], [%value, %if]
623  %cast = bitcast <6 x double> %phi_value to <12 x float>
624  %cmp1 = icmp eq i32 %cond, 1
625  br i1 %cmp1, label %if, label %end
626
627end:
628  %phi_cast = phi <12 x float> [zeroinitializer, %entry], [%cast, %if]
629  store <12 x float> %phi_cast, ptr addrspace(1) %out
630  ret void
631}
632
633; CHECK-LABEL: {{^}}bitcast_v12i32_to_v6i64:
634; CHECK: ScratchSize: 0
635define amdgpu_kernel void @bitcast_v12i32_to_v6i64(i32 %cond, ptr addrspace(1) %out, <12 x i32> %value) {
636entry:
637  %cmp0 = icmp eq i32 %cond, 0
638  br i1 %cmp0, label %if, label %end
639
640if:
641  %phi_value = phi <12 x i32> [zeroinitializer, %entry], [%value, %if]
642  %cast = bitcast <12 x i32> %phi_value to <6 x i64>
643  %cmp1 = icmp eq i32 %cond, 1
644  br i1 %cmp1, label %if, label %end
645
646end:
647  %phi_cast = phi <6 x i64> [zeroinitializer, %entry], [%cast, %if]
648  store <6 x i64> %phi_cast, ptr addrspace(1) %out
649  ret void
650}
651
652; CHECK-LABEL: {{^}}bitcast_v12i32_to_v6f64:
653; CHECK: ScratchSize: 0
654define amdgpu_kernel void @bitcast_v12i32_to_v6f64(i32 %cond, ptr addrspace(1) %out, <12 x i32> %value) {
655entry:
656  %cmp0 = icmp eq i32 %cond, 0
657  br i1 %cmp0, label %if, label %end
658
659if:
660  %phi_value = phi <12 x i32> [zeroinitializer, %entry], [%value, %if]
661  %cast = bitcast <12 x i32> %phi_value to <6 x double>
662  %cmp1 = icmp eq i32 %cond, 1
663  br i1 %cmp1, label %if, label %end
664
665end:
666  %phi_cast = phi <6 x double> [zeroinitializer, %entry], [%cast, %if]
667  store <6 x double> %phi_cast, ptr addrspace(1) %out
668  ret void
669}
670
671; CHECK-LABEL: {{^}}bitcast_v6i64_to_v12i32:
672; CHECK: ScratchSize: 0
673define amdgpu_kernel void @bitcast_v6i64_to_v12i32(i32 %cond, ptr addrspace(1) %out, <6 x i64> %value) {
674entry:
675  %cmp0 = icmp eq i32 %cond, 0
676  br i1 %cmp0, label %if, label %end
677
678if:
679  %phi_value = phi <6 x i64> [zeroinitializer, %entry], [%value, %if]
680  %cast = bitcast <6 x i64> %phi_value to <12 x i32>
681  %cmp1 = icmp eq i32 %cond, 1
682  br i1 %cmp1, label %if, label %end
683
684end:
685  %phi_cast = phi <12 x i32> [zeroinitializer, %entry], [%cast, %if]
686  store <12 x i32> %phi_cast, ptr addrspace(1) %out
687  ret void
688}
689
690; CHECK-LABEL: {{^}}bitcast_v7i64_to_v14i32:
691; CHECK: ScratchSize: 0
692define amdgpu_kernel void @bitcast_v7i64_to_v14i32(i32 %cond, ptr addrspace(1) %out, <7 x i64> %value) {
693entry:
694  %cmp0 = icmp eq i32 %cond, 0
695  br i1 %cmp0, label %if, label %end
696
697if:
698  %phi_value = phi <7 x i64> [zeroinitializer, %entry], [%value, %if]
699  %cast = bitcast <7 x i64> %phi_value to <14 x i32>
700  %cmp1 = icmp eq i32 %cond, 1
701  br i1 %cmp1, label %if, label %end
702
703end:
704  %phi_cast = phi <14 x i32> [zeroinitializer, %entry], [%cast, %if]
705  store <14 x i32> %phi_cast, ptr addrspace(1) %out
706  ret void
707}
708
709; CHECK-LABEL: {{^}}bitcast_v7f64_to_v14i32:
710; CHECK: ScratchSize: 0
711define amdgpu_kernel void @bitcast_v7f64_to_v14i32(i32 %cond, ptr addrspace(1) %out, <7 x double> %value) {
712entry:
713  %cmp0 = icmp eq i32 %cond, 0
714  br i1 %cmp0, label %if, label %end
715
716if:
717  %phi_value = phi <7 x double> [zeroinitializer, %entry], [%value, %if]
718  %cast = bitcast <7 x double> %phi_value to <14 x i32>
719  %cmp1 = icmp eq i32 %cond, 1
720  br i1 %cmp1, label %if, label %end
721
722end:
723  %phi_cast = phi <14 x i32> [zeroinitializer, %entry], [%cast, %if]
724  store <14 x i32> %phi_cast, ptr addrspace(1) %out
725  ret void
726}
727
728; CHECK-LABEL: {{^}}bitcast_v9i64_to_v18i32:
729; CHECK: ScratchSize: 0
730define amdgpu_kernel void @bitcast_v9i64_to_v18i32(i32 %cond, ptr addrspace(1) %out, <9 x i64> %value) {
731entry:
732  %cmp0 = icmp eq i32 %cond, 0
733  br i1 %cmp0, label %if, label %end
734
735if:
736  %phi_value = phi <9 x i64> [zeroinitializer, %entry], [%value, %if]
737  %cast = bitcast <9 x i64> %phi_value to <18 x i32>
738  %cmp1 = icmp eq i32 %cond, 1
739  br i1 %cmp1, label %if, label %end
740
741end:
742  %phi_cast = phi <18 x i32> [zeroinitializer, %entry], [%cast, %if]
743  store <18 x i32> %phi_cast, ptr addrspace(1) %out
744  ret void
745}
746
747; CHECK-LABEL: {{^}}bitcast_v10i64_to_v20i32:
748; CHECK: ScratchSize: 0
749define amdgpu_kernel void @bitcast_v10i64_to_v20i32(i32 %cond, ptr addrspace(1) %out, <10 x i64> %value) {
750entry:
751  %cmp0 = icmp eq i32 %cond, 0
752  br i1 %cmp0, label %if, label %end
753
754if:
755  %phi_value = phi <10 x i64> [zeroinitializer, %entry], [%value, %if]
756  %cast = bitcast <10 x i64> %phi_value to <20 x i32>
757  %cmp1 = icmp eq i32 %cond, 1
758  br i1 %cmp1, label %if, label %end
759
760end:
761  %phi_cast = phi <20 x i32> [zeroinitializer, %entry], [%cast, %if]
762  store <20 x i32> %phi_cast, ptr addrspace(1) %out
763  ret void
764}
765
766; CHECK-LABEL: {{^}}bitcast_v11i64_to_v20i32:
767; CHECK: ScratchSize: 0
768define amdgpu_kernel void @bitcast_v11i64_to_v20i32(i32 %cond, ptr addrspace(1) %out, <11 x i64> %value) {
769entry:
770  %cmp0 = icmp eq i32 %cond, 0
771  br i1 %cmp0, label %if, label %end
772
773if:
774  %phi_value = phi <11 x i64> [zeroinitializer, %entry], [%value, %if]
775  %cast = bitcast <11 x i64> %phi_value to <22 x i32>
776  %cmp1 = icmp eq i32 %cond, 1
777  br i1 %cmp1, label %if, label %end
778
779end:
780  %phi_cast = phi <22 x i32> [zeroinitializer, %entry], [%cast, %if]
781  store <22 x i32> %phi_cast, ptr addrspace(1) %out
782  ret void
783}
784
785; CHECK-LABEL: {{^}}bitcast_v12i64_to_v22i32:
786; CHECK: ScratchSize: 0
787define amdgpu_kernel void @bitcast_v12i64_to_v22i32(i32 %cond, ptr addrspace(1) %out, <12 x i64> %value) {
788entry:
789  %cmp0 = icmp eq i32 %cond, 0
790  br i1 %cmp0, label %if, label %end
791
792if:
793  %phi_value = phi <12 x i64> [zeroinitializer, %entry], [%value, %if]
794  %cast = bitcast <12 x i64> %phi_value to <24 x i32>
795  %cmp1 = icmp eq i32 %cond, 1
796  br i1 %cmp1, label %if, label %end
797
798end:
799  %phi_cast = phi <24 x i32> [zeroinitializer, %entry], [%cast, %if]
800  store <24 x i32> %phi_cast, ptr addrspace(1) %out
801  ret void
802}
803
804; CHECK-LABEL: {{^}}bitcast_v13i64_to_v24i32:
805; CHECK: ScratchSize: 0
806define amdgpu_kernel void @bitcast_v13i64_to_v24i32(i32 %cond, ptr addrspace(1) %out, <13 x i64> %value) {
807entry:
808  %cmp0 = icmp eq i32 %cond, 0
809  br i1 %cmp0, label %if, label %end
810
811if:
812  %phi_value = phi <13 x i64> [zeroinitializer, %entry], [%value, %if]
813  %cast = bitcast <13 x i64> %phi_value to <26 x i32>
814  %cmp1 = icmp eq i32 %cond, 1
815  br i1 %cmp1, label %if, label %end
816
817end:
818  %phi_cast = phi <26 x i32> [zeroinitializer, %entry], [%cast, %if]
819  store <26 x i32> %phi_cast, ptr addrspace(1) %out
820  ret void
821}
822
823; CHECK-LABEL: {{^}}bitcast_v14i64_to_v26i32:
824; CHECK: ScratchSize: 0
825define amdgpu_kernel void @bitcast_v14i64_to_v26i32(i32 %cond, ptr addrspace(1) %out, <14 x i64> %value) {
826entry:
827  %cmp0 = icmp eq i32 %cond, 0
828  br i1 %cmp0, label %if, label %end
829
830if:
831  %phi_value = phi <14 x i64> [zeroinitializer, %entry], [%value, %if]
832  %cast = bitcast <14 x i64> %phi_value to <28 x i32>
833  %cmp1 = icmp eq i32 %cond, 1
834  br i1 %cmp1, label %if, label %end
835
836end:
837  %phi_cast = phi <28 x i32> [zeroinitializer, %entry], [%cast, %if]
838  store <28 x i32> %phi_cast, ptr addrspace(1) %out
839  ret void
840}
841
842; CHECK-LABEL: {{^}}bitcast_v15i64_to_v26i32:
843; CHECK: ScratchSize: 0
844define amdgpu_kernel void @bitcast_v15i64_to_v26i32(i32 %cond, ptr addrspace(1) %out, <15 x i64> %value) {
845entry:
846  %cmp0 = icmp eq i32 %cond, 0
847  br i1 %cmp0, label %if, label %end
848
849if:
850  %phi_value = phi <15 x i64> [zeroinitializer, %entry], [%value, %if]
851  %cast = bitcast <15 x i64> %phi_value to <30 x i32>
852  %cmp1 = icmp eq i32 %cond, 1
853  br i1 %cmp1, label %if, label %end
854
855end:
856  %phi_cast = phi <30 x i32> [zeroinitializer, %entry], [%cast, %if]
857  store <30 x i32> %phi_cast, ptr addrspace(1) %out
858  ret void
859}
860
861; CHECK-LABEL: {{^}}v_bitcast_v2bf16_to_i32:
862define void @v_bitcast_v2bf16_to_i32(i32 %cond, ptr addrspace(1) %out, <2 x bfloat> %value) {
863entry:
864  %cmp0 = icmp eq i32 %cond, 0
865  br i1 %cmp0, label %if, label %end
866
867if:
868  %cast = bitcast <2 x bfloat> %value to i32
869  br label %end
870
871end:
872  %phi = phi i32 [0, %entry], [%cast, %if]
873  store i32 %phi, ptr addrspace(1) %out
874  ret void
875}
876
877; CHECK-LABEL: {{^}}v_bitcast_v2bf16_to_v2i16:
878define void @v_bitcast_v2bf16_to_v2i16(i32 %cond, ptr addrspace(1) %out, <2 x bfloat> %value) {
879entry:
880  %cmp0 = icmp eq i32 %cond, 0
881  br i1 %cmp0, label %if, label %end
882
883if:
884  %cast = bitcast <2 x bfloat> %value to <2 x i16>
885  br label %end
886
887end:
888  %phi = phi <2 x i16> [zeroinitializer, %entry], [%cast, %if]
889  store <2 x i16> %phi, ptr addrspace(1) %out
890  ret void
891}
892
893; CHECK-LABEL: {{^}}v_bitcast_v2bf16_to_v2f16:
894define void @v_bitcast_v2bf16_to_v2f16(i32 %cond, ptr addrspace(1) %out, <2 x bfloat> %value) {
895entry:
896  %cmp0 = icmp eq i32 %cond, 0
897  br i1 %cmp0, label %if, label %end
898
899if:
900  %cast = bitcast <2 x bfloat> %value to <2 x half>
901  br label %end
902
903end:
904  %phi = phi <2 x half> [zeroinitializer, %entry], [%cast, %if]
905  store <2 x half> %phi, ptr addrspace(1) %out
906  ret void
907}
908
909; CHECK-LABEL: {{^}}v_bitcast_v2bf16_to_v4i8:
910define void @v_bitcast_v2bf16_to_v4i8(i32 %cond, ptr addrspace(1) %out, <2 x bfloat> %value) {
911entry:
912  %cmp0 = icmp eq i32 %cond, 0
913  br i1 %cmp0, label %if, label %end
914
915if:
916  %cast = bitcast <2 x bfloat> %value to <4 x i8>
917  br label %end
918
919end:
920  %phi = phi <4 x i8> [zeroinitializer, %entry], [%cast, %if]
921  store <4 x i8> %phi, ptr addrspace(1) %out
922  ret void
923}
924
925; CHECK-LABEL: {{^}}v_bitcast_v3bf16_to_v3i16:
926define void @v_bitcast_v3bf16_to_v3i16(i32 %cond, ptr addrspace(1) %out, <3 x bfloat> %value) {
927entry:
928  %cmp0 = icmp eq i32 %cond, 0
929  br i1 %cmp0, label %if, label %end
930
931if:
932  %cast = bitcast <3 x bfloat> %value to <3 x i16>
933  br label %end
934
935end:
936  %phi = phi <3 x i16> [zeroinitializer, %entry], [%cast, %if]
937  store <3 x i16> %phi, ptr addrspace(1) %out
938  ret void
939}
940
941; CHECK-LABEL: {{^}}v_bitcast_v3bf16_to_v3f16:
942define void @v_bitcast_v3bf16_to_v3f16(i32 %cond, ptr addrspace(1) %out, <3 x bfloat> %value) {
943entry:
944  %cmp0 = icmp eq i32 %cond, 0
945  br i1 %cmp0, label %if, label %end
946
947if:
948  %cast = bitcast <3 x bfloat> %value to <3 x half>
949  br label %end
950
951end:
952  %phi = phi <3 x half> [zeroinitializer, %entry], [%cast, %if]
953  store <3 x half> %phi, ptr addrspace(1) %out
954  ret void
955}
956
957; CHECK-LABEL: {{^}}v_bitcast_i32_to_v2bf16:
958define void @v_bitcast_i32_to_v2bf16(i32 %cond, ptr addrspace(1) %out, i32 %value) {
959entry:
960  %cmp0 = icmp eq i32 %cond, 0
961  br i1 %cmp0, label %if, label %end
962
963if:
964  %cast = bitcast i32 %value to <2 x bfloat>
965  br label %end
966
967end:
968  %phi = phi <2 x bfloat> [zeroinitializer, %entry], [%cast, %if]
969  store <2 x bfloat> %phi, ptr addrspace(1) %out
970  ret void
971}
972
973; CHECK-LABEL: {{^}}v_bitcast_v2i16_to_v2bf16:
974define void @v_bitcast_v2i16_to_v2bf16(i32 %cond, ptr addrspace(1) %out, <2 x i16> %value) {
975entry:
976  %cmp0 = icmp eq i32 %cond, 0
977  br i1 %cmp0, label %if, label %end
978
979if:
980  %cast = bitcast <2 x i16> %value to <2 x bfloat>
981  br label %end
982
983end:
984  %phi = phi <2 x bfloat> [zeroinitializer, %entry], [%cast, %if]
985  store <2 x bfloat> %phi, ptr addrspace(1) %out
986  ret void
987}
988
989; CHECK-LABEL: {{^}}v_bitcast_v2f16_to_v2bf16:
990define void @v_bitcast_v2f16_to_v2bf16(i32 %cond, ptr addrspace(1) %out, <2 x half> %value) {
991entry:
992  %cmp0 = icmp eq i32 %cond, 0
993  br i1 %cmp0, label %if, label %end
994
995if:
996  %cast = bitcast <2 x half> %value to <2 x bfloat>
997  br label %end
998
999end:
1000  %phi = phi <2 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1001  store <2 x bfloat> %phi, ptr addrspace(1) %out
1002  ret void
1003}
1004
1005; CHECK-LABEL: {{^}}v_bitcast_v4i8_to_v2bf16:
1006define void @v_bitcast_v4i8_to_v2bf16(i32 %cond, ptr addrspace(1) %out, <4 x i8> %value) {
1007entry:
1008  %cmp0 = icmp eq i32 %cond, 0
1009  br i1 %cmp0, label %if, label %end
1010
1011if:
1012  %cast = bitcast <4 x i8> %value to <2 x bfloat>
1013  br label %end
1014
1015end:
1016  %phi = phi <2 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1017  store <2 x bfloat> %phi, ptr addrspace(1) %out
1018  ret void
1019}
1020
1021; CHECK-LABEL: {{^}}v_bitcast_v3i16_to_v3bf16:
1022define void @v_bitcast_v3i16_to_v3bf16(i32 %cond, ptr addrspace(1) %out, <3 x i16> %value) {
1023entry:
1024  %cmp0 = icmp eq i32 %cond, 0
1025  br i1 %cmp0, label %if, label %end
1026
1027if:
1028  %cast = bitcast <3 x i16> %value to <3 x bfloat>
1029  br label %end
1030
1031end:
1032  %phi = phi <3 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1033  store <3 x bfloat> %phi, ptr addrspace(1) %out
1034  ret void
1035}
1036
1037; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_v4f16:
1038define void @v_bitcast_v4bf16_to_v4f16(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1039entry:
1040  %cmp0 = icmp eq i32 %cond, 0
1041  br i1 %cmp0, label %if, label %end
1042
1043if:
1044  %cast = bitcast <4 x bfloat> %value to <4 x half>
1045  br label %end
1046
1047end:
1048  %phi = phi <4 x half> [zeroinitializer, %entry], [%cast, %if]
1049  store <4 x half> %phi, ptr addrspace(1) %out
1050  ret void
1051}
1052
1053; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_v4i16:
1054define void @v_bitcast_v4bf16_to_v4i16(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1055entry:
1056  %cmp0 = icmp eq i32 %cond, 0
1057  br i1 %cmp0, label %if, label %end
1058
1059if:
1060  %cast = bitcast <4 x bfloat> %value to <4 x i16>
1061  br label %end
1062
1063end:
1064  %phi = phi <4 x i16> [zeroinitializer, %entry], [%cast, %if]
1065  store <4 x i16> %phi, ptr addrspace(1) %out
1066  ret void
1067}
1068
1069; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_v2i32:
1070define void @v_bitcast_v4bf16_to_v2i32(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1071entry:
1072  %cmp0 = icmp eq i32 %cond, 0
1073  br i1 %cmp0, label %if, label %end
1074
1075if:
1076  %cast = bitcast <4 x bfloat> %value to <2 x i32>
1077  br label %end
1078
1079end:
1080  %phi = phi <2 x i32> [zeroinitializer, %entry], [%cast, %if]
1081  store <2 x i32> %phi, ptr addrspace(1) %out
1082  ret void
1083}
1084
1085; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_v2f32:
1086define void @v_bitcast_v4bf16_to_v2f32(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1087entry:
1088  %cmp0 = icmp eq i32 %cond, 0
1089  br i1 %cmp0, label %if, label %end
1090
1091if:
1092  %cast = bitcast <4 x bfloat> %value to <2 x float>
1093  br label %end
1094
1095end:
1096  %phi = phi <2 x float> [zeroinitializer, %entry], [%cast, %if]
1097  store <2 x float> %phi, ptr addrspace(1) %out
1098  ret void
1099}
1100
1101; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_f64:
1102define void @v_bitcast_v4bf16_to_f64(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1103entry:
1104  %cmp0 = icmp eq i32 %cond, 0
1105  br i1 %cmp0, label %if, label %end
1106
1107if:
1108  %cast = bitcast <4 x bfloat> %value to double
1109  br label %end
1110
1111end:
1112  %phi = phi double [0.0, %entry], [%cast, %if]
1113  store double %phi, ptr addrspace(1) %out
1114  ret void
1115}
1116
1117; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_i64:
1118define void @v_bitcast_v4bf16_to_i64(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1119entry:
1120  %cmp0 = icmp eq i32 %cond, 0
1121  br i1 %cmp0, label %if, label %end
1122
1123if:
1124  %cast = bitcast <4 x bfloat> %value to i64
1125  br label %end
1126
1127end:
1128  %phi = phi i64 [0, %entry], [%cast, %if]
1129  store i64 %phi, ptr addrspace(1) %out
1130  ret void
1131}
1132
1133; CHECK-LABEL: {{^}}v_bitcast_v4bf16_to_v8i8:
1134define void @v_bitcast_v4bf16_to_v8i8(i32 %cond, ptr addrspace(1) %out, <4 x bfloat> %value) {
1135entry:
1136  %cmp0 = icmp eq i32 %cond, 0
1137  br i1 %cmp0, label %if, label %end
1138
1139if:
1140  %cast = bitcast <4 x bfloat> %value to <8 x i8>
1141  br label %end
1142
1143end:
1144  %phi = phi <8 x i8> [zeroinitializer, %entry], [%cast, %if]
1145  store <8 x i8> %phi, ptr addrspace(1) %out
1146  ret void
1147}
1148
1149; CHECK-LABEL: {{^}}v_bitcast_i64_to_v4bf16:
1150define void @v_bitcast_i64_to_v4bf16(i32 %cond, ptr addrspace(1) %out, i64 %value) {
1151entry:
1152  %cmp0 = icmp eq i32 %cond, 0
1153  br i1 %cmp0, label %if, label %end
1154
1155if:
1156  %cast = bitcast i64 %value to <4 x bfloat>
1157  br label %end
1158
1159end:
1160  %phi = phi <4 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1161  store <4 x bfloat> %phi, ptr addrspace(1) %out
1162  ret void
1163}
1164
1165; CHECK-LABEL: {{^}}v_bitcast_v2f32_to_v4bf16:
1166define void @v_bitcast_v2f32_to_v4bf16(i32 %cond, ptr addrspace(1) %out, <2 x float> %value) {
1167entry:
1168  %cmp0 = icmp eq i32 %cond, 0
1169  br i1 %cmp0, label %if, label %end
1170
1171if:
1172  %cast = bitcast <2 x float> %value to <4 x bfloat>
1173  br label %end
1174
1175end:
1176  %phi = phi <4 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1177  store <4 x bfloat> %phi, ptr addrspace(1) %out
1178  ret void
1179}
1180
1181; CHECK-LABEL: {{^}}v_bitcast_v2i32_to_v4bf16:
1182define void @v_bitcast_v2i32_to_v4bf16(i32 %cond, ptr addrspace(1) %out, <2 x i32> %value) {
1183entry:
1184  %cmp0 = icmp eq i32 %cond, 0
1185  br i1 %cmp0, label %if, label %end
1186
1187if:
1188  %cast = bitcast <2 x i32> %value to <4 x bfloat>
1189  br label %end
1190
1191end:
1192  %phi = phi <4 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1193  store <4 x bfloat> %phi, ptr addrspace(1) %out
1194  ret void
1195}
1196
1197; CHECK-LABEL: {{^}}v_bitcast_v4i16_to_v4bf16:
1198define void @v_bitcast_v4i16_to_v4bf16(i32 %cond, ptr addrspace(1) %out, <4 x i16> %value) {
1199entry:
1200  %cmp0 = icmp eq i32 %cond, 0
1201  br i1 %cmp0, label %if, label %end
1202
1203if:
1204  %cast = bitcast <4 x i16> %value to <4 x bfloat>
1205  br label %end
1206
1207end:
1208  %phi = phi <4 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1209  store <4 x bfloat> %phi, ptr addrspace(1) %out
1210  ret void
1211}
1212
1213; CHECK-LABEL: {{^}}v_bitcast_v4f16_to_v4bf16:
1214define void @v_bitcast_v4f16_to_v4bf16(i32 %cond, ptr addrspace(1) %out, <4 x half> %value) {
1215entry:
1216  %cmp0 = icmp eq i32 %cond, 0
1217  br i1 %cmp0, label %if, label %end
1218
1219if:
1220  %cast = bitcast <4 x half> %value to <4 x bfloat>
1221  br label %end
1222
1223end:
1224  %phi = phi <4 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1225  store <4 x bfloat> %phi, ptr addrspace(1) %out
1226  ret void
1227}
1228
1229; CHECK-LABEL: {{^}}v_bitcast_v6bf16_to_v6i16:
1230define void @v_bitcast_v6bf16_to_v6i16(i32 %cond, ptr addrspace(1) %out, <6 x bfloat> %value) {
1231entry:
1232  %cmp0 = icmp eq i32 %cond, 0
1233  br i1 %cmp0, label %if, label %end
1234
1235if:
1236  %cast = bitcast <6 x bfloat> %value to <6 x i16>
1237  br label %end
1238
1239end:
1240  %phi = phi <6 x i16> [zeroinitializer, %entry], [%cast, %if]
1241  store <6 x i16> %phi, ptr addrspace(1) %out
1242  ret void
1243}
1244
1245; CHECK-LABEL: {{^}}v_bitcast_v6bf16_to_v6f16:
1246define void @v_bitcast_v6bf16_to_v6f16(i32 %cond, ptr addrspace(1) %out, <6 x bfloat> %value) {
1247entry:
1248  %cmp0 = icmp eq i32 %cond, 0
1249  br i1 %cmp0, label %if, label %end
1250
1251if:
1252  %cast = bitcast <6 x bfloat> %value to <6 x half>
1253  br label %end
1254
1255end:
1256  %phi = phi <6 x half> [zeroinitializer, %entry], [%cast, %if]
1257  store <6 x half> %phi, ptr addrspace(1) %out
1258  ret void
1259}
1260
1261; CHECK-LABEL: {{^}}v_bitcast_v6bf16_to_v12i8:
1262define void @v_bitcast_v6bf16_to_v12i8(i32 %cond, ptr addrspace(1) %out, <6 x bfloat> %value) {
1263entry:
1264  %cmp0 = icmp eq i32 %cond, 0
1265  br i1 %cmp0, label %if, label %end
1266
1267if:
1268  %cast = bitcast <6 x bfloat> %value to <12 x i8>
1269  br label %end
1270
1271end:
1272  %phi = phi <12 x i8> [zeroinitializer, %entry], [%cast, %if]
1273  store <12 x i8> %phi, ptr addrspace(1) %out
1274  ret void
1275}
1276
1277; CHECK-LABEL: {{^}}v_bitcast_v6f16_to_v6bf16:
1278define void @v_bitcast_v6f16_to_v6bf16(i32 %cond, ptr addrspace(1) %out, <6 x half> %value) {
1279entry:
1280  %cmp0 = icmp eq i32 %cond, 0
1281  br i1 %cmp0, label %if, label %end
1282
1283if:
1284  %cast = bitcast <6 x half> %value to <6 x bfloat>
1285  br label %end
1286
1287end:
1288  %phi = phi <6 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1289  store <6 x bfloat> %phi, ptr addrspace(1) %out
1290  ret void
1291}
1292
1293; CHECK-LABEL: {{^}}v_bitcast_v6i16_to_v6bf16:
1294define void @v_bitcast_v6i16_to_v6bf16(i32 %cond, ptr addrspace(1) %out, <6 x i16> %value) {
1295entry:
1296  %cmp0 = icmp eq i32 %cond, 0
1297  br i1 %cmp0, label %if, label %end
1298
1299if:
1300  %cast = bitcast <6 x i16> %value to <6 x bfloat>
1301  br label %end
1302
1303end:
1304  %phi = phi <6 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1305  store <6 x bfloat> %phi, ptr addrspace(1) %out
1306  ret void
1307}
1308
1309; CHECK-LABEL: {{^}}v_bitcast_v12i8_to_v6bf16:
1310define void @v_bitcast_v12i8_to_v6bf16(i32 %cond, ptr addrspace(1) %out, <12 x i8> %value) {
1311entry:
1312  %cmp0 = icmp eq i32 %cond, 0
1313  br i1 %cmp0, label %if, label %end
1314
1315if:
1316  %cast = bitcast <12 x i8> %value to <6 x bfloat>
1317  br label %end
1318
1319end:
1320  %phi = phi <6 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1321  store <6 x bfloat> %phi, ptr addrspace(1) %out
1322  ret void
1323}
1324
1325; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v2f64:
1326define void @v_bitcast_v8bf16_to_v2f64(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1327entry:
1328  %cmp0 = icmp eq i32 %cond, 0
1329  br i1 %cmp0, label %if, label %end
1330
1331if:
1332  %cast = bitcast <8 x bfloat> %value to <2 x double>
1333  br label %end
1334
1335end:
1336  %phi = phi <2 x double> [zeroinitializer, %entry], [%cast, %if]
1337  store <2 x double> %phi, ptr addrspace(1) %out
1338  ret void
1339}
1340
1341; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v2i64:
1342define void @v_bitcast_v8bf16_to_v2i64(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1343entry:
1344  %cmp0 = icmp eq i32 %cond, 0
1345  br i1 %cmp0, label %if, label %end
1346
1347if:
1348  %cast = bitcast <8 x bfloat> %value to <2 x i64>
1349  br label %end
1350
1351end:
1352  %phi = phi <2 x i64> [zeroinitializer, %entry], [%cast, %if]
1353  store <2 x i64> %phi, ptr addrspace(1) %out
1354  ret void
1355}
1356
1357; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v4f32:
1358define void @v_bitcast_v8bf16_to_v4f32(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1359entry:
1360  %cmp0 = icmp eq i32 %cond, 0
1361  br i1 %cmp0, label %if, label %end
1362
1363if:
1364  %cast = bitcast <8 x bfloat> %value to <4 x float>
1365  br label %end
1366
1367end:
1368  %phi = phi <4 x float> [zeroinitializer, %entry], [%cast, %if]
1369  store <4 x float> %phi, ptr addrspace(1) %out
1370  ret void
1371}
1372
1373; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v4i32:
1374define void @v_bitcast_v8bf16_to_v4i32(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1375entry:
1376  %cmp0 = icmp eq i32 %cond, 0
1377  br i1 %cmp0, label %if, label %end
1378
1379if:
1380  %cast = bitcast <8 x bfloat> %value to <4 x i32>
1381  br label %end
1382
1383end:
1384  %phi = phi <4 x i32> [zeroinitializer, %entry], [%cast, %if]
1385  store <4 x i32> %phi, ptr addrspace(1) %out
1386  ret void
1387}
1388
1389; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v8f16:
1390define void @v_bitcast_v8bf16_to_v8f16(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1391entry:
1392  %cmp0 = icmp eq i32 %cond, 0
1393  br i1 %cmp0, label %if, label %end
1394
1395if:
1396  %cast = bitcast <8 x bfloat> %value to <8 x half>
1397  br label %end
1398
1399end:
1400  %phi = phi <8 x half> [zeroinitializer, %entry], [%cast, %if]
1401  store <8 x half> %phi, ptr addrspace(1) %out
1402  ret void
1403}
1404
1405; CHECK-LABEL: {{^}}v_bitcast_v8bf16_to_v8i16:
1406define void @v_bitcast_v8bf16_to_v8i16(i32 %cond, ptr addrspace(1) %out, <8 x bfloat> %value) {
1407entry:
1408  %cmp0 = icmp eq i32 %cond, 0
1409  br i1 %cmp0, label %if, label %end
1410
1411if:
1412  %cast = bitcast <8 x bfloat> %value to <8 x i16>
1413  br label %end
1414
1415end:
1416  %phi = phi <8 x i16> [zeroinitializer, %entry], [%cast, %if]
1417  store <8 x i16> %phi, ptr addrspace(1) %out
1418  ret void
1419}
1420
1421; CHECK-LABEL: {{^}}v_bitcast_v8f16_to_v8bf16:
1422define void @v_bitcast_v8f16_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <8 x half> %value) {
1423entry:
1424  %cmp0 = icmp eq i32 %cond, 0
1425  br i1 %cmp0, label %if, label %end
1426
1427if:
1428  %cast = bitcast <8 x half> %value to <8 x bfloat>
1429  br label %end
1430
1431end:
1432  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1433  store <8 x bfloat> %phi, ptr addrspace(1) %out
1434  ret void
1435}
1436
1437; CHECK-LABEL: {{^}}v_bitcast_v8i16_to_v8bf16:
1438define void @v_bitcast_v8i16_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <8 x i16> %value) {
1439entry:
1440  %cmp0 = icmp eq i32 %cond, 0
1441  br i1 %cmp0, label %if, label %end
1442
1443if:
1444  %cast = bitcast <8 x i16> %value to <8 x bfloat>
1445  br label %end
1446
1447end:
1448  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1449  store <8 x bfloat> %phi, ptr addrspace(1) %out
1450  ret void
1451}
1452
1453; CHECK-LABEL: {{^}}v_bitcast_v16i8_to_v8bf16:
1454define void @v_bitcast_v16i8_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <16 x i8> %value) {
1455entry:
1456  %cmp0 = icmp eq i32 %cond, 0
1457  br i1 %cmp0, label %if, label %end
1458
1459if:
1460  %cast = bitcast <16 x i8> %value to <8 x bfloat>
1461  br label %end
1462
1463end:
1464  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1465  store <8 x bfloat> %phi, ptr addrspace(1) %out
1466  ret void
1467}
1468
1469; CHECK-LABEL: {{^}}v_bitcast_v2i64_to_v8bf16:
1470define void @v_bitcast_v2i64_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <2 x i64> %value) {
1471entry:
1472  %cmp0 = icmp eq i32 %cond, 0
1473  br i1 %cmp0, label %if, label %end
1474
1475if:
1476  %cast = bitcast <2 x i64> %value to <8 x bfloat>
1477  br label %end
1478
1479end:
1480  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1481  store <8 x bfloat> %phi, ptr addrspace(1) %out
1482  ret void
1483}
1484
1485; CHECK-LABEL: {{^}}v_bitcast_v2f64_to_v8bf16:
1486define void @v_bitcast_v2f64_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <2 x double> %value) {
1487entry:
1488  %cmp0 = icmp eq i32 %cond, 0
1489  br i1 %cmp0, label %if, label %end
1490
1491if:
1492  %cast = bitcast <2 x double> %value to <8 x bfloat>
1493  br label %end
1494
1495end:
1496  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1497  store <8 x bfloat> %phi, ptr addrspace(1) %out
1498  ret void
1499}
1500
1501; CHECK-LABEL: {{^}}v_bitcast_v4i32_to_v8bf16:
1502define void @v_bitcast_v4i32_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <4 x i32> %value) {
1503entry:
1504  %cmp0 = icmp eq i32 %cond, 0
1505  br i1 %cmp0, label %if, label %end
1506
1507if:
1508  %cast = bitcast <4 x i32> %value to <8 x bfloat>
1509  br label %end
1510
1511end:
1512  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1513  store <8 x bfloat> %phi, ptr addrspace(1) %out
1514  ret void
1515}
1516
1517; CHECK-LABEL: {{^}}v_bitcast_v4f32_to_v8bf16:
1518define void @v_bitcast_v4f32_to_v8bf16(i32 %cond, ptr addrspace(1) %out, <4 x float> %value) {
1519entry:
1520  %cmp0 = icmp eq i32 %cond, 0
1521  br i1 %cmp0, label %if, label %end
1522
1523if:
1524  %cast = bitcast <4 x float> %value to <8 x bfloat>
1525  br label %end
1526
1527end:
1528  %phi = phi <8 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1529  store <8 x bfloat> %phi, ptr addrspace(1) %out
1530  ret void
1531}
1532
1533; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v16i16:
1534define void @v_bitcast_v16bf16_to_v16i16(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1535entry:
1536  %cmp0 = icmp eq i32 %cond, 0
1537  br i1 %cmp0, label %if, label %end
1538
1539if:
1540  %cast = bitcast <16 x bfloat> %value to <16 x i16>
1541  br label %end
1542
1543end:
1544  %phi = phi <16 x i16> [zeroinitializer, %entry], [%cast, %if]
1545  store <16 x i16> %phi, ptr addrspace(1) %out
1546  ret void
1547}
1548
1549; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v16f16:
1550define void @v_bitcast_v16bf16_to_v16f16(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1551entry:
1552  %cmp0 = icmp eq i32 %cond, 0
1553  br i1 %cmp0, label %if, label %end
1554
1555if:
1556  %cast = bitcast <16 x bfloat> %value to <16 x half>
1557  br label %end
1558
1559end:
1560  %phi = phi <16 x half> [zeroinitializer, %entry], [%cast, %if]
1561  store <16 x half> %phi, ptr addrspace(1) %out
1562  ret void
1563}
1564
1565; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v8i32:
1566define void @v_bitcast_v16bf16_to_v8i32(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1567entry:
1568  %cmp0 = icmp eq i32 %cond, 0
1569  br i1 %cmp0, label %if, label %end
1570
1571if:
1572  %cast = bitcast <16 x bfloat> %value to <8 x i32>
1573  br label %end
1574
1575end:
1576  %phi = phi <8 x i32> [zeroinitializer, %entry], [%cast, %if]
1577  store <8 x i32> %phi, ptr addrspace(1) %out
1578  ret void
1579}
1580
1581; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v8f32:
1582define void @v_bitcast_v16bf16_to_v8f32(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1583entry:
1584  %cmp0 = icmp eq i32 %cond, 0
1585  br i1 %cmp0, label %if, label %end
1586
1587if:
1588  %cast = bitcast <16 x bfloat> %value to <8 x float>
1589  br label %end
1590
1591end:
1592  %phi = phi <8 x float> [zeroinitializer, %entry], [%cast, %if]
1593  store <8 x float> %phi, ptr addrspace(1) %out
1594  ret void
1595}
1596
1597; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v4f64:
1598define void @v_bitcast_v16bf16_to_v4f64(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1599entry:
1600  %cmp0 = icmp eq i32 %cond, 0
1601  br i1 %cmp0, label %if, label %end
1602
1603if:
1604  %cast = bitcast <16 x bfloat> %value to <4 x double>
1605  br label %end
1606
1607end:
1608  %phi = phi <4 x double> [zeroinitializer, %entry], [%cast, %if]
1609  store <4 x double> %phi, ptr addrspace(1) %out
1610  ret void
1611}
1612
1613; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v4i64:
1614define void @v_bitcast_v16bf16_to_v4i64(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1615entry:
1616  %cmp0 = icmp eq i32 %cond, 0
1617  br i1 %cmp0, label %if, label %end
1618
1619if:
1620  %cast = bitcast <16 x bfloat> %value to <4 x i64>
1621  br label %end
1622
1623end:
1624  %phi = phi <4 x i64> [zeroinitializer, %entry], [%cast, %if]
1625  store <4 x i64> %phi, ptr addrspace(1) %out
1626  ret void
1627}
1628
1629; CHECK-LABEL: {{^}}v_bitcast_v16bf16_to_v32i8:
1630define void @v_bitcast_v16bf16_to_v32i8(i32 %cond, ptr addrspace(1) %out, <16 x bfloat> %value) {
1631entry:
1632  %cmp0 = icmp eq i32 %cond, 0
1633  br i1 %cmp0, label %if, label %end
1634
1635if:
1636  %cast = bitcast <16 x bfloat> %value to <32 x i8>
1637  br label %end
1638
1639end:
1640  %phi = phi <32 x i8> [zeroinitializer, %entry], [%cast, %if]
1641  store <32 x i8> %phi, ptr addrspace(1) %out
1642  ret void
1643}
1644
1645; CHECK-LABEL: {{^}}v_bitcast_v8f32_to_v16bf16:
1646define void @v_bitcast_v8f32_to_v16bf16(i32 %cond, ptr addrspace(1) %out, <8 x float> %value) {
1647entry:
1648  %cmp0 = icmp eq i32 %cond, 0
1649  br i1 %cmp0, label %if, label %end
1650
1651if:
1652  %cast = bitcast <8 x float> %value to <16 x bfloat>
1653  br label %end
1654
1655end:
1656  %phi = phi <16 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1657  store <16 x bfloat> %phi, ptr addrspace(1) %out
1658  ret void
1659}
1660
1661; CHECK-LABEL: {{^}}v_bitcast_v8i32_to_v16bf16:
1662define void @v_bitcast_v8i32_to_v16bf16(i32 %cond, ptr addrspace(1) %out, <8 x i32> %value) {
1663entry:
1664  %cmp0 = icmp eq i32 %cond, 0
1665  br i1 %cmp0, label %if, label %end
1666
1667if:
1668  %cast = bitcast <8 x i32> %value to <16 x bfloat>
1669  br label %end
1670
1671end:
1672  %phi = phi <16 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1673  store <16 x bfloat> %phi, ptr addrspace(1) %out
1674  ret void
1675}
1676
1677; CHECK-LABEL: {{^}}v_bitcast_v4i64_to_v16bf16:
1678define void @v_bitcast_v4i64_to_v16bf16(i32 %cond, ptr addrspace(1) %out, <4 x i64> %value) {
1679entry:
1680  %cmp0 = icmp eq i32 %cond, 0
1681  br i1 %cmp0, label %if, label %end
1682
1683if:
1684  %cast = bitcast <4 x i64> %value to <16 x bfloat>
1685  br label %end
1686
1687end:
1688  %phi = phi <16 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1689  store <16 x bfloat> %phi, ptr addrspace(1) %out
1690  ret void
1691}
1692
1693; CHECK-LABEL: {{^}}v_bitcast_v4f64_to_v16bf16:
1694define void @v_bitcast_v4f64_to_v16bf16(i32 %cond, ptr addrspace(1) %out, <4 x double> %value) {
1695entry:
1696  %cmp0 = icmp eq i32 %cond, 0
1697  br i1 %cmp0, label %if, label %end
1698
1699if:
1700  %cast = bitcast <4 x double> %value to <16 x bfloat>
1701  br label %end
1702
1703end:
1704  %phi = phi <16 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1705  store <16 x bfloat> %phi, ptr addrspace(1) %out
1706  ret void
1707}
1708
1709; CHECK-LABEL: {{^}}v_bitcast_v32i8_to_v16bf16:
1710define void @v_bitcast_v32i8_to_v16bf16(i32 %cond, ptr addrspace(1) %out, <32 x i8> %value) {
1711entry:
1712  %cmp0 = icmp eq i32 %cond, 0
1713  br i1 %cmp0, label %if, label %end
1714
1715if:
1716  %cast = bitcast <32 x i8> %value to <16 x bfloat>
1717  br label %end
1718
1719end:
1720  %phi = phi <16 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1721  store <16 x bfloat> %phi, ptr addrspace(1) %out
1722  ret void
1723}
1724
1725; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v8i64:
1726define void @v_bitcast_v32bf16_to_v8i64(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1727entry:
1728  %cmp0 = icmp eq i32 %cond, 0
1729  br i1 %cmp0, label %if, label %end
1730
1731if:
1732  %cast = bitcast <32 x bfloat> %value to <8 x i64>
1733  br label %end
1734
1735end:
1736  %phi = phi <8 x i64> [zeroinitializer, %entry], [%cast, %if]
1737  store <8 x i64> %phi, ptr addrspace(1) %out
1738  ret void
1739}
1740
1741; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v8f64:
1742define void @v_bitcast_v32bf16_to_v8f64(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1743entry:
1744  %cmp0 = icmp eq i32 %cond, 0
1745  br i1 %cmp0, label %if, label %end
1746
1747if:
1748  %cast = bitcast <32 x bfloat> %value to <8 x double>
1749  br label %end
1750
1751end:
1752  %phi = phi <8 x double> [zeroinitializer, %entry], [%cast, %if]
1753  store <8 x double> %phi, ptr addrspace(1) %out
1754  ret void
1755}
1756
1757; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v16i32:
1758define void @v_bitcast_v32bf16_to_v16i32(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1759entry:
1760  %cmp0 = icmp eq i32 %cond, 0
1761  br i1 %cmp0, label %if, label %end
1762
1763if:
1764  %cast = bitcast <32 x bfloat> %value to <16 x i32>
1765  br label %end
1766
1767end:
1768  %phi = phi <16 x i32> [zeroinitializer, %entry], [%cast, %if]
1769  store <16 x i32> %phi, ptr addrspace(1) %out
1770  ret void
1771}
1772
1773; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v16f32:
1774define void @v_bitcast_v32bf16_to_v16f32(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1775entry:
1776  %cmp0 = icmp eq i32 %cond, 0
1777  br i1 %cmp0, label %if, label %end
1778
1779if:
1780  %cast = bitcast <32 x bfloat> %value to <16 x float>
1781  br label %end
1782
1783end:
1784  %phi = phi <16 x float> [zeroinitializer, %entry], [%cast, %if]
1785  store <16 x float> %phi, ptr addrspace(1) %out
1786  ret void
1787}
1788
1789; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v32f16:
1790define void @v_bitcast_v32bf16_to_v32f16(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1791entry:
1792  %cmp0 = icmp eq i32 %cond, 0
1793  br i1 %cmp0, label %if, label %end
1794
1795if:
1796  %cast = bitcast <32 x bfloat> %value to <32 x half>
1797  br label %end
1798
1799end:
1800  %phi = phi <32 x half> [zeroinitializer, %entry], [%cast, %if]
1801  store <32 x half> %phi, ptr addrspace(1) %out
1802  ret void
1803}
1804
1805; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v32i16:
1806define void @v_bitcast_v32bf16_to_v32i16(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1807entry:
1808  %cmp0 = icmp eq i32 %cond, 0
1809  br i1 %cmp0, label %if, label %end
1810
1811if:
1812  %cast = bitcast <32 x bfloat> %value to <32 x i16>
1813  br label %end
1814
1815end:
1816  %phi = phi <32 x i16> [zeroinitializer, %entry], [%cast, %if]
1817  store <32 x i16> %phi, ptr addrspace(1) %out
1818  ret void
1819}
1820
1821; CHECK-LABEL: {{^}}v_bitcast_v32bf16_to_v64i8:
1822define void @v_bitcast_v32bf16_to_v64i8(i32 %cond, ptr addrspace(1) %out, <32 x bfloat> %value) {
1823entry:
1824  %cmp0 = icmp eq i32 %cond, 0
1825  br i1 %cmp0, label %if, label %end
1826
1827if:
1828  %cast = bitcast <32 x bfloat> %value to <64 x i8>
1829  br label %end
1830
1831end:
1832  %phi = phi <64 x i8> [zeroinitializer, %entry], [%cast, %if]
1833  store <64 x i8> %phi, ptr addrspace(1) %out
1834  ret void
1835}
1836
1837; CHECK-LABEL: {{^}}v_bitcast_v64i8_to_v32bf16:
1838define void @v_bitcast_v64i8_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <64 x i8> %value) {
1839entry:
1840  %cmp0 = icmp eq i32 %cond, 0
1841  br i1 %cmp0, label %if, label %end
1842
1843if:
1844  %cast = bitcast <64 x i8> %value to <32 x bfloat>
1845  br label %end
1846
1847end:
1848  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1849  store <32 x bfloat> %phi, ptr addrspace(1) %out
1850  ret void
1851}
1852
1853; CHECK-LABEL: {{^}}v_bitcast_v32i16_to_v32bf16:
1854define void @v_bitcast_v32i16_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <32 x i16> %value) {
1855entry:
1856  %cmp0 = icmp eq i32 %cond, 0
1857  br i1 %cmp0, label %if, label %end
1858
1859if:
1860  %cast = bitcast <32 x i16> %value to <32 x bfloat>
1861  br label %end
1862
1863end:
1864  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1865  store <32 x bfloat> %phi, ptr addrspace(1) %out
1866  ret void
1867}
1868
1869; CHECK-LABEL: {{^}}v_bitcast_v32f16_to_v32bf16:
1870define void @v_bitcast_v32f16_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <32 x half> %value) {
1871entry:
1872  %cmp0 = icmp eq i32 %cond, 0
1873  br i1 %cmp0, label %if, label %end
1874
1875if:
1876  %cast = bitcast <32 x half> %value to <32 x bfloat>
1877  br label %end
1878
1879end:
1880  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1881  store <32 x bfloat> %phi, ptr addrspace(1) %out
1882  ret void
1883}
1884
1885; CHECK-LABEL: {{^}}v_bitcast_v16i32_to_v32bf16:
1886define void @v_bitcast_v16i32_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <16 x i32> %value) {
1887entry:
1888  %cmp0 = icmp eq i32 %cond, 0
1889  br i1 %cmp0, label %if, label %end
1890
1891if:
1892  %cast = bitcast <16 x i32> %value to <32 x bfloat>
1893  br label %end
1894
1895end:
1896  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1897  store <32 x bfloat> %phi, ptr addrspace(1) %out
1898  ret void
1899}
1900
1901; CHECK-LABEL: {{^}}v_bitcast_v16f32_to_v32bf16:
1902define void @v_bitcast_v16f32_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <16 x float> %value) {
1903entry:
1904  %cmp0 = icmp eq i32 %cond, 0
1905  br i1 %cmp0, label %if, label %end
1906
1907if:
1908  %cast = bitcast <16 x float> %value to <32 x bfloat>
1909  br label %end
1910
1911end:
1912  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1913  store <32 x bfloat> %phi, ptr addrspace(1) %out
1914  ret void
1915}
1916
1917; CHECK-LABEL: {{^}}v_bitcast_v8f64_to_v32bf16:
1918define void @v_bitcast_v8f64_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <8 x double> %value) {
1919entry:
1920  %cmp0 = icmp eq i32 %cond, 0
1921  br i1 %cmp0, label %if, label %end
1922
1923if:
1924  %cast = bitcast <8 x double> %value to <32 x bfloat>
1925  br label %end
1926
1927end:
1928  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1929  store <32 x bfloat> %phi, ptr addrspace(1) %out
1930  ret void
1931}
1932
1933; CHECK-LABEL: {{^}}v_bitcast_v8i64_to_v32bf16:
1934define void @v_bitcast_v8i64_to_v32bf16(i32 %cond, ptr addrspace(1) %out, <8 x i64> %value) {
1935entry:
1936  %cmp0 = icmp eq i32 %cond, 0
1937  br i1 %cmp0, label %if, label %end
1938
1939if:
1940  %cast = bitcast <8 x i64> %value to <32 x bfloat>
1941  br label %end
1942
1943end:
1944  %phi = phi <32 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1945  store <32 x bfloat> %phi, ptr addrspace(1) %out
1946  ret void
1947}
1948
1949
1950
1951
1952
1953
1954
1955
1956; CHECK-LABEL: {{^}}v_bitcast_v32f32_to_v64bf16:
1957define void @v_bitcast_v32f32_to_v64bf16(i32 %cond, ptr addrspace(1) %out, <32 x float> %value) {
1958entry:
1959  %cmp0 = icmp eq i32 %cond, 0
1960  br i1 %cmp0, label %if, label %end
1961
1962if:
1963  %cast = bitcast <32 x float> %value to <64 x bfloat>
1964  br label %end
1965
1966end:
1967  %phi = phi <64 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1968  store <64 x bfloat> %phi, ptr addrspace(1) %out
1969  ret void
1970}
1971
1972; CHECK-LABEL: {{^}}v_bitcast_v32i32_to_v64bf16:
1973define void @v_bitcast_v32i32_to_v64bf16(i32 %cond, ptr addrspace(1) %out, <32 x i32> %value) {
1974entry:
1975  %cmp0 = icmp eq i32 %cond, 0
1976  br i1 %cmp0, label %if, label %end
1977
1978if:
1979  %cast = bitcast <32 x i32> %value to <64 x bfloat>
1980  br label %end
1981
1982end:
1983  %phi = phi <64 x bfloat> [zeroinitializer, %entry], [%cast, %if]
1984  store <64 x bfloat> %phi, ptr addrspace(1) %out
1985  ret void
1986}
1987
1988; CHECK-LABEL: {{^}}v_bitcast_v64i16_to_v64bf16:
1989define void @v_bitcast_v64i16_to_v64bf16(i32 %cond, ptr addrspace(1) %out, <64 x i16> %value) {
1990entry:
1991  %cmp0 = icmp eq i32 %cond, 0
1992  br i1 %cmp0, label %if, label %end
1993
1994if:
1995  %cast = bitcast <64 x i16> %value to <64 x bfloat>
1996  br label %end
1997
1998end:
1999  %phi = phi <64 x bfloat> [zeroinitializer, %entry], [%cast, %if]
2000  store <64 x bfloat> %phi, ptr addrspace(1) %out
2001  ret void
2002}
2003
2004; CHECK-LABEL: {{^}}v_bitcast_v64f16_to_v64bf16:
2005define void @v_bitcast_v64f16_to_v64bf16(i32 %cond, ptr addrspace(1) %out, <64 x half> %value) {
2006entry:
2007  %cmp0 = icmp eq i32 %cond, 0
2008  br i1 %cmp0, label %if, label %end
2009
2010if:
2011  %cast = bitcast <64 x half> %value to <64 x bfloat>
2012  br label %end
2013
2014end:
2015  %phi = phi <64 x bfloat> [zeroinitializer, %entry], [%cast, %if]
2016  store <64 x bfloat> %phi, ptr addrspace(1) %out
2017  ret void
2018}
2019
2020; CHECK-LABEL: {{^}}v_bitcast_v128i8_to_v64bf16:
2021define void @v_bitcast_v128i8_to_v64bf16(i32 %cond, ptr addrspace(1) %out, <128 x i8> %value) {
2022entry:
2023  %cmp0 = icmp eq i32 %cond, 0
2024  br i1 %cmp0, label %if, label %end
2025
2026if:
2027  %cast = bitcast <128 x i8> %value to <64 x bfloat>
2028  br label %end
2029
2030end:
2031  %phi = phi <64 x bfloat> [zeroinitializer, %entry], [%cast, %if]
2032  store <64 x bfloat> %phi, ptr addrspace(1) %out
2033  ret void
2034}
2035
2036; CHECK-LABEL: {{^}}v_bitcast_v64bf16_to_v64i16:
2037define void @v_bitcast_v64bf16_to_v64i16(i32 %cond, ptr addrspace(1) %out, <64 x bfloat> %value) {
2038entry:
2039  %cmp0 = icmp eq i32 %cond, 0
2040  br i1 %cmp0, label %if, label %end
2041
2042if:
2043  %cast = bitcast <64 x bfloat> %value to <64 x i16>
2044  br label %end
2045
2046end:
2047  %phi = phi <64 x i16> [zeroinitializer, %entry], [%cast, %if]
2048  store <64 x i16> %phi, ptr addrspace(1) %out
2049  ret void
2050}
2051
2052; CHECK-LABEL: {{^}}v_bitcast_v64bf16_to_v64f16:
2053define void @v_bitcast_v64bf16_to_v64f16(i32 %cond, ptr addrspace(1) %out, <64 x bfloat> %value) {
2054entry:
2055  %cmp0 = icmp eq i32 %cond, 0
2056  br i1 %cmp0, label %if, label %end
2057
2058if:
2059  %cast = bitcast <64 x bfloat> %value to <64 x half>
2060  br label %end
2061
2062end:
2063  %phi = phi <64 x half> [zeroinitializer, %entry], [%cast, %if]
2064  store <64 x half> %phi, ptr addrspace(1) %out
2065  ret void
2066}
2067
2068; CHECK-LABEL: {{^}}v_bitcast_v64bf16_to_v128i8:
2069define void @v_bitcast_v64bf16_to_v128i8(i32 %cond, ptr addrspace(1) %out, <64 x bfloat> %value) {
2070entry:
2071  %cmp0 = icmp eq i32 %cond, 0
2072  br i1 %cmp0, label %if, label %end
2073
2074if:
2075  %cast = bitcast <64 x bfloat> %value to <128 x i8>
2076  br label %end
2077
2078end:
2079  %phi = phi <128 x i8> [zeroinitializer, %entry], [%cast, %if]
2080  store <128 x i8> %phi, ptr addrspace(1) %out
2081  ret void
2082}
2083
2084; CHECK-LABEL: {{^}}v_bitcast_v64bf16_to_v16i64:
2085define void @v_bitcast_v64bf16_to_v16i64(i32 %cond, ptr addrspace(1) %out, <64 x bfloat> %value) {
2086entry:
2087  %cmp0 = icmp eq i32 %cond, 0
2088  br i1 %cmp0, label %if, label %end
2089
2090if:
2091  %cast = bitcast <64 x bfloat> %value to <16 x i64>
2092  br label %end
2093
2094end:
2095  %phi = phi <16 x i64> [zeroinitializer, %entry], [%cast, %if]
2096  store <16 x i64> %phi, ptr addrspace(1) %out
2097  ret void
2098}
2099
2100; CHECK-LABEL: {{^}}v_bitcast_v64bf16_to_v16f64:
2101define void @v_bitcast_v64bf16_to_v16f64(i32 %cond, ptr addrspace(1) %out, <64 x bfloat> %value) {
2102entry:
2103  %cmp0 = icmp eq i32 %cond, 0
2104  br i1 %cmp0, label %if, label %end
2105
2106if:
2107  %cast = bitcast <64 x bfloat> %value to <16 x double>
2108  br label %end
2109
2110end:
2111  %phi = phi <16 x double> [zeroinitializer, %entry], [%cast, %if]
2112  store <16 x double> %phi, ptr addrspace(1) %out
2113  ret void
2114}
2115