1 # RUN: llc --mtriple=amdgcn--amdhsa -mcpu=fiji -verify-machineinstrs -run-pass si-fold-operands,si-shrink-instructions %s -o - | FileCheck %s
3 define amdgpu_kernel void @add_f32_1.0_one_f16_use() #0 {
4 %f16.val0 = load volatile half, ptr addrspace(1) undef
5 %f16.val1 = load volatile half, ptr addrspace(1) undef
6 %f32.val = load volatile float, ptr addrspace(1) undef
7 %f16.add0 = fadd half %f16.val0, 0xH3C00
8 %f32.add = fadd float %f32.val, 1.000000e+00
9 store volatile half %f16.add0, ptr addrspace(1) undef
10 store volatile float %f32.add, ptr addrspace(1) undef
14 define amdgpu_kernel void @add_f32_1.0_multi_f16_use() #0 {
15 %f16.val0 = load volatile half, ptr addrspace(1) undef
16 %f16.val1 = load volatile half, ptr addrspace(1) undef
17 %f32.val = load volatile float, ptr addrspace(1) undef
18 %f16.add0 = fadd half %f16.val0, 0xH3C00
19 %f32.add = fadd float %f32.val, 1.000000e+00
20 store volatile half %f16.add0, ptr addrspace(1) undef
21 store volatile float %f32.add, ptr addrspace(1) undef
25 define amdgpu_kernel void @add_f32_1.0_one_f32_use_one_f16_use () #0 {
26 %f16.val0 = load volatile half, ptr addrspace(1) undef
27 %f16.val1 = load volatile half, ptr addrspace(1) undef
28 %f32.val = load volatile float, ptr addrspace(1) undef
29 %f16.add0 = fadd half %f16.val0, 0xH3C00
30 %f32.add = fadd float %f32.val, 1.000000e+00
31 store volatile half %f16.add0, ptr addrspace(1) undef
32 store volatile float %f32.add, ptr addrspace(1) undef
36 define amdgpu_kernel void @add_f32_1.0_one_f32_use_multi_f16_use () #0 {
37 %f16.val0 = load volatile half, ptr addrspace(1) undef
38 %f16.val1 = load volatile half, ptr addrspace(1) undef
39 %f32.val = load volatile float, ptr addrspace(1) undef
40 %f16.add0 = fadd half %f16.val0, 0xH3C00
41 %f16.add1 = fadd half %f16.val1, 0xH3C00
42 %f32.add = fadd float %f32.val, 1.000000e+00
43 store volatile half %f16.add0, ptr addrspace(1) undef
44 store volatile half %f16.add1, ptr addrspace(1) undef
45 store volatile float %f32.add, ptr addrspace(1) undef
49 define amdgpu_kernel void @add_i32_1_multi_f16_use() #0 {
50 %f16.val0 = load volatile half, ptr addrspace(1) undef
51 %f16.val1 = load volatile half, ptr addrspace(1) undef
52 %f16.add0 = fadd half %f16.val0, 0xH0001
53 %f16.add1 = fadd half %f16.val1, 0xH0001
54 store volatile half %f16.add0, ptr addrspace(1) undef
55 store volatile half %f16.add1,ptr addrspace(1) undef
59 define amdgpu_kernel void @add_i32_m2_one_f32_use_multi_f16_use () #0 {
60 %f16.val0 = load volatile half, ptr addrspace(1) undef
61 %f16.val1 = load volatile half, ptr addrspace(1) undef
62 %f32.val = load volatile float, ptr addrspace(1) undef
63 %f16.add0 = fadd half %f16.val0, 0xHFFFE
64 %f16.add1 = fadd half %f16.val1, 0xHFFFE
65 %f32.add = fadd float %f32.val, 0xffffffffc0000000
66 store volatile half %f16.add0, ptr addrspace(1) undef
67 store volatile half %f16.add1, ptr addrspace(1) undef
68 store volatile float %f32.add, ptr addrspace(1) undef
72 define amdgpu_kernel void @add_f16_1.0_multi_f32_use() #0 {
73 %f32.val0 = load volatile float, ptr addrspace(1) undef
74 %f32.val1 = load volatile float, ptr addrspace(1) undef
75 %f32.val = load volatile float, ptr addrspace(1) undef
76 %f32.add0 = fadd float %f32.val0, 1.0
77 %f32.add1 = fadd float %f32.val1, 1.0
78 store volatile float %f32.add0, ptr addrspace(1) undef
79 store volatile float %f32.add1, ptr addrspace(1) undef
83 define amdgpu_kernel void @add_f16_1.0_other_high_bits_multi_f16_use() #0 {
84 %f16.val0 = load volatile half, ptr addrspace(1) undef
85 %f16.val1 = load volatile half, ptr addrspace(1) undef
86 %f32.val = load volatile half, ptr addrspace(1) undef
87 %f16.add0 = fadd half %f16.val0, 0xH3C00
88 %f32.add = fadd half %f32.val, 1.000000e+00
89 store volatile half %f16.add0, ptr addrspace(1) undef
90 store volatile half %f32.add, ptr addrspace(1) undef
94 define amdgpu_kernel void @add_f16_1.0_other_high_bits_use_f16_f32() #0 {
95 %f16.val0 = load volatile half, ptr addrspace(1) undef
96 %f16.val1 = load volatile half, ptr addrspace(1) undef
97 %f32.val = load volatile half, ptr addrspace(1) undef
98 %f16.add0 = fadd half %f16.val0, 0xH3C00
99 %f32.add = fadd half %f32.val, 1.000000e+00
100 store volatile half %f16.add0, ptr addrspace(1) undef
101 store volatile half %f32.add, ptr addrspace(1) undef
105 attributes #0 = { nounwind }
110 # f32 1.0 with a single use should be folded as the low 32-bits of a
113 # CHECK-LABEL: name: add_f32_1.0_one_f16_use
114 # CHECK: %13:vgpr_32 = V_ADD_F16_e32 1065353216, killed %11, implicit $mode, implicit $exec
116 name: add_f32_1.0_one_f16_use
118 exposesReturnsTwice: false
120 regBankSelected: false
122 tracksRegLiveness: true
124 - { id: 0, class: sreg_64 }
125 - { id: 1, class: sreg_32 }
126 - { id: 2, class: sgpr_32 }
127 - { id: 3, class: vgpr_32 }
128 - { id: 4, class: sreg_64 }
129 - { id: 5, class: sreg_32 }
130 - { id: 6, class: sreg_64 }
131 - { id: 7, class: sreg_32 }
132 - { id: 8, class: sreg_32 }
133 - { id: 9, class: sreg_32 }
134 - { id: 10, class: sgpr_128 }
135 - { id: 11, class: vgpr_32 }
136 - { id: 12, class: vgpr_32 }
137 - { id: 13, class: vgpr_32 }
139 isFrameAddressTaken: false
140 isReturnAddressTaken: false
149 hasOpaqueSPAdjustment: false
151 hasMustTailInVarArgFunc: false
160 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
161 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
162 %12 = V_MOV_B32_e32 1065353216, implicit $exec
163 %13 = V_ADD_F16_e64 0, killed %11, 0, %12, 0, 0, implicit $mode, implicit $exec
164 BUFFER_STORE_SHORT_OFFSET killed %13, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
169 # Materialized f32 inline immediate should not be folded into the f16
172 # CHECK-LABEL: name: add_f32_1.0_multi_f16_use
173 # CHECK: %14:vgpr_32 = V_ADD_F16_e32 1065353216, killed %11, implicit $mode, implicit $exec
174 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, killed %12, implicit $mode, implicit $exec
177 name: add_f32_1.0_multi_f16_use
179 exposesReturnsTwice: false
181 regBankSelected: false
183 tracksRegLiveness: true
185 - { id: 0, class: sreg_64 }
186 - { id: 1, class: sreg_32 }
187 - { id: 2, class: sgpr_32 }
188 - { id: 3, class: vgpr_32 }
189 - { id: 4, class: sreg_64 }
190 - { id: 5, class: sreg_32 }
191 - { id: 6, class: sreg_64 }
192 - { id: 7, class: sreg_32 }
193 - { id: 8, class: sreg_32 }
194 - { id: 9, class: sreg_32 }
195 - { id: 10, class: sgpr_128 }
196 - { id: 11, class: vgpr_32 }
197 - { id: 12, class: vgpr_32 }
198 - { id: 13, class: vgpr_32 }
199 - { id: 14, class: vgpr_32 }
200 - { id: 15, class: vgpr_32 }
202 isFrameAddressTaken: false
203 isReturnAddressTaken: false
212 hasOpaqueSPAdjustment: false
214 hasMustTailInVarArgFunc: false
223 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
224 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
225 %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
226 %13 = V_MOV_B32_e32 1065353216, implicit $exec
227 %14 = V_ADD_F16_e64 0, killed %11, 0, %13, 0, 0, implicit $mode, implicit $exec
228 %15 = V_ADD_F16_e64 0, killed %12, 0, killed %13, 0, 0, implicit $mode, implicit $exec
229 BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
230 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
236 # f32 1.0 should be folded into the single f32 use as an inline
237 # immediate, and folded into the single f16 use as a literal constant
239 # CHECK-LABEL: name: add_f32_1.0_one_f32_use_one_f16_use
240 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, %11, implicit $mode, implicit $exec
241 # CHECK: %16:vgpr_32 = V_ADD_F32_e32 1065353216, killed %13, implicit $mode, implicit $exec
243 name: add_f32_1.0_one_f32_use_one_f16_use
245 exposesReturnsTwice: false
247 regBankSelected: false
249 tracksRegLiveness: true
251 - { id: 0, class: sreg_64 }
252 - { id: 1, class: sreg_32 }
253 - { id: 2, class: sgpr_32 }
254 - { id: 3, class: vgpr_32 }
255 - { id: 4, class: sreg_64 }
256 - { id: 5, class: sreg_32 }
257 - { id: 6, class: sreg_64 }
258 - { id: 7, class: sreg_32 }
259 - { id: 8, class: sreg_32 }
260 - { id: 9, class: sreg_32 }
261 - { id: 10, class: sgpr_128 }
262 - { id: 11, class: vgpr_32 }
263 - { id: 12, class: vgpr_32 }
264 - { id: 13, class: vgpr_32 }
265 - { id: 14, class: vgpr_32 }
266 - { id: 15, class: vgpr_32 }
267 - { id: 16, class: vgpr_32 }
269 isFrameAddressTaken: false
270 isReturnAddressTaken: false
279 hasOpaqueSPAdjustment: false
281 hasMustTailInVarArgFunc: false
290 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
291 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
292 %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
293 %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
294 %14 = V_MOV_B32_e32 1065353216, implicit $exec
295 %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec
296 %16 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec
297 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
298 BUFFER_STORE_DWORD_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
304 # f32 1.0 should be folded for the single f32 use as an inline
305 # constant, and not folded as a multi-use literal for the f16 cases
307 # CHECK-LABEL: name: add_f32_1.0_one_f32_use_multi_f16_use
308 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 1065353216, %11, implicit $mode, implicit $exec
309 # CHECK: %16:vgpr_32 = V_ADD_F16_e32 1065353216, %12, implicit $mode, implicit $exec
310 # CHECK: %17:vgpr_32 = V_ADD_F32_e32 1065353216, killed %13, implicit $mode, implicit $exec
312 name: add_f32_1.0_one_f32_use_multi_f16_use
314 exposesReturnsTwice: false
316 regBankSelected: false
318 tracksRegLiveness: true
320 - { id: 0, class: sreg_64 }
321 - { id: 1, class: sreg_32 }
322 - { id: 2, class: sgpr_32 }
323 - { id: 3, class: vgpr_32 }
324 - { id: 4, class: sreg_64 }
325 - { id: 5, class: sreg_32 }
326 - { id: 6, class: sreg_64 }
327 - { id: 7, class: sreg_32 }
328 - { id: 8, class: sreg_32 }
329 - { id: 9, class: sreg_32 }
330 - { id: 10, class: sgpr_128 }
331 - { id: 11, class: vgpr_32 }
332 - { id: 12, class: vgpr_32 }
333 - { id: 13, class: vgpr_32 }
334 - { id: 14, class: vgpr_32 }
335 - { id: 15, class: vgpr_32 }
336 - { id: 16, class: vgpr_32 }
337 - { id: 17, class: vgpr_32 }
339 isFrameAddressTaken: false
340 isReturnAddressTaken: false
349 hasOpaqueSPAdjustment: false
351 hasMustTailInVarArgFunc: false
360 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
361 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
362 %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
363 %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
364 %14 = V_MOV_B32_e32 1065353216, implicit $exec
365 %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec
366 %16 = V_ADD_F16_e64 0, %12, 0, %14, 0, 0, implicit $mode, implicit $exec
367 %17 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec
368 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
369 BUFFER_STORE_SHORT_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
370 BUFFER_STORE_DWORD_OFFSET killed %17, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
375 # CHECK-LABEL: name: add_i32_1_multi_f16_use
376 # CHECK: %14:vgpr_32 = V_ADD_F16_e32 1, killed %11, implicit $mode, implicit $exec
377 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 1, killed %12, implicit $mode, implicit $exec
380 name: add_i32_1_multi_f16_use
382 exposesReturnsTwice: false
384 regBankSelected: false
386 tracksRegLiveness: true
388 - { id: 0, class: sreg_64 }
389 - { id: 1, class: sreg_32 }
390 - { id: 2, class: sgpr_32 }
391 - { id: 3, class: vgpr_32 }
392 - { id: 4, class: sreg_64 }
393 - { id: 5, class: sreg_32 }
394 - { id: 6, class: sreg_64 }
395 - { id: 7, class: sreg_32 }
396 - { id: 8, class: sreg_32 }
397 - { id: 9, class: sreg_32 }
398 - { id: 10, class: sgpr_128 }
399 - { id: 11, class: vgpr_32 }
400 - { id: 12, class: vgpr_32 }
401 - { id: 13, class: vgpr_32 }
402 - { id: 14, class: vgpr_32 }
403 - { id: 15, class: vgpr_32 }
405 isFrameAddressTaken: false
406 isReturnAddressTaken: false
415 hasOpaqueSPAdjustment: false
417 hasMustTailInVarArgFunc: false
426 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
427 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
428 %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
429 %13 = V_MOV_B32_e32 1, implicit $exec
430 %14 = V_ADD_F16_e64 0, killed %11, 0, %13, 0, 0, implicit $mode, implicit $exec
431 %15 = V_ADD_F16_e64 0, killed %12, 0, killed %13, 0, 0, implicit $mode, implicit $exec
432 BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
433 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
439 # CHECK-LABEL: name: add_i32_m2_one_f32_use_multi_f16_use
440 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 -2, %11, implicit $mode, implicit $exec
441 # CHECK: %16:vgpr_32 = V_ADD_F16_e32 -2, %12, implicit $mode, implicit $exec
442 # CHECK: %17:vgpr_32 = V_ADD_F32_e32 -2, killed %13, implicit $mode, implicit $exec
444 name: add_i32_m2_one_f32_use_multi_f16_use
446 exposesReturnsTwice: false
448 regBankSelected: false
450 tracksRegLiveness: true
452 - { id: 0, class: sreg_64 }
453 - { id: 1, class: sreg_32 }
454 - { id: 2, class: sgpr_32 }
455 - { id: 3, class: vgpr_32 }
456 - { id: 4, class: sreg_64 }
457 - { id: 5, class: sreg_32 }
458 - { id: 6, class: sreg_64 }
459 - { id: 7, class: sreg_32 }
460 - { id: 8, class: sreg_32 }
461 - { id: 9, class: sreg_32 }
462 - { id: 10, class: sgpr_128 }
463 - { id: 11, class: vgpr_32 }
464 - { id: 12, class: vgpr_32 }
465 - { id: 13, class: vgpr_32 }
466 - { id: 14, class: vgpr_32 }
467 - { id: 15, class: vgpr_32 }
468 - { id: 16, class: vgpr_32 }
469 - { id: 17, class: vgpr_32 }
471 isFrameAddressTaken: false
472 isReturnAddressTaken: false
481 hasOpaqueSPAdjustment: false
483 hasMustTailInVarArgFunc: false
492 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
493 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
494 %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
495 %13 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
496 %14 = V_MOV_B32_e32 -2, implicit $exec
497 %15 = V_ADD_F16_e64 0, %11, 0, %14, 0, 0, implicit $mode, implicit $exec
498 %16 = V_ADD_F16_e64 0, %12, 0, %14, 0, 0, implicit $mode, implicit $exec
499 %17 = V_ADD_F32_e64 0, killed %13, 0, killed %14, 0, 0, implicit $mode, implicit $exec
500 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
501 BUFFER_STORE_SHORT_OFFSET killed %16, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
502 BUFFER_STORE_DWORD_OFFSET killed %17, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
508 # f32 1.0 should be folded for the single f32 use as an inline
509 # constant, and not folded as a multi-use literal for the f16 cases
511 # CHECK-LABEL: name: add_f16_1.0_multi_f32_use
512 # CHECK: %14:vgpr_32 = V_ADD_F32_e32 15360, %11, implicit $mode, implicit $exec
513 # CHECK: %15:vgpr_32 = V_ADD_F32_e32 15360, %12, implicit $mode, implicit $exec
515 name: add_f16_1.0_multi_f32_use
517 exposesReturnsTwice: false
519 regBankSelected: false
521 tracksRegLiveness: true
523 - { id: 0, class: sreg_64 }
524 - { id: 1, class: sreg_32 }
525 - { id: 2, class: sgpr_32 }
526 - { id: 3, class: vgpr_32 }
527 - { id: 4, class: sreg_64 }
528 - { id: 5, class: sreg_32 }
529 - { id: 6, class: sreg_64 }
530 - { id: 7, class: sreg_32 }
531 - { id: 8, class: sreg_32 }
532 - { id: 9, class: sreg_32 }
533 - { id: 10, class: sgpr_128 }
534 - { id: 11, class: vgpr_32 }
535 - { id: 12, class: vgpr_32 }
536 - { id: 13, class: vgpr_32 }
537 - { id: 14, class: vgpr_32 }
538 - { id: 15, class: vgpr_32 }
540 isFrameAddressTaken: false
541 isReturnAddressTaken: false
550 hasOpaqueSPAdjustment: false
552 hasMustTailInVarArgFunc: false
561 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
562 %11 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
563 %12 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
564 %13 = V_MOV_B32_e32 15360, implicit $exec
565 %14 = V_ADD_F32_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec
566 %15 = V_ADD_F32_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec
567 BUFFER_STORE_DWORD_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
568 BUFFER_STORE_DWORD_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
574 # The low 16-bits are an inline immediate, but the high bits are junk
576 # CHECK-LABEL: name: add_f16_1.0_other_high_bits_multi_f16_use
577 # CHECK: %14:vgpr_32 = V_ADD_F16_e32 80886784, %11, implicit $mode, implicit $exec
578 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 80886784, %12, implicit $mode, implicit $exec
580 name: add_f16_1.0_other_high_bits_multi_f16_use
582 exposesReturnsTwice: false
584 regBankSelected: false
586 tracksRegLiveness: true
588 - { id: 0, class: sreg_64 }
589 - { id: 1, class: sreg_32 }
590 - { id: 2, class: sgpr_32 }
591 - { id: 3, class: vgpr_32 }
592 - { id: 4, class: sreg_64 }
593 - { id: 5, class: sreg_32 }
594 - { id: 6, class: sreg_64 }
595 - { id: 7, class: sreg_32 }
596 - { id: 8, class: sreg_32 }
597 - { id: 9, class: sreg_32 }
598 - { id: 10, class: sgpr_128 }
599 - { id: 11, class: vgpr_32 }
600 - { id: 12, class: vgpr_32 }
601 - { id: 13, class: vgpr_32 }
602 - { id: 14, class: vgpr_32 }
603 - { id: 15, class: vgpr_32 }
605 isFrameAddressTaken: false
606 isReturnAddressTaken: false
615 hasOpaqueSPAdjustment: false
617 hasMustTailInVarArgFunc: false
626 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
627 %11 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
628 %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
629 %13 = V_MOV_B32_e32 80886784, implicit $exec
630 %14 = V_ADD_F16_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec
631 %15 = V_ADD_F16_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec
632 BUFFER_STORE_SHORT_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
633 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)
639 # CHECK-LABEL: name: add_f16_1.0_other_high_bits_use_f16_f32
640 # CHECK: %14:vgpr_32 = V_ADD_F32_e32 305413120, %11, implicit $mode, implicit $exec
641 # CHECK: %15:vgpr_32 = V_ADD_F16_e32 305413120, %12, implicit $mode, implicit $exec
642 name: add_f16_1.0_other_high_bits_use_f16_f32
644 exposesReturnsTwice: false
646 regBankSelected: false
648 tracksRegLiveness: true
650 - { id: 0, class: sreg_64 }
651 - { id: 1, class: sreg_32 }
652 - { id: 2, class: sgpr_32 }
653 - { id: 3, class: vgpr_32 }
654 - { id: 4, class: sreg_64 }
655 - { id: 5, class: sreg_32 }
656 - { id: 6, class: sreg_64 }
657 - { id: 7, class: sreg_32 }
658 - { id: 8, class: sreg_32 }
659 - { id: 9, class: sreg_32 }
660 - { id: 10, class: sgpr_128 }
661 - { id: 11, class: vgpr_32 }
662 - { id: 12, class: vgpr_32 }
663 - { id: 13, class: vgpr_32 }
664 - { id: 14, class: vgpr_32 }
665 - { id: 15, class: vgpr_32 }
667 isFrameAddressTaken: false
668 isReturnAddressTaken: false
677 hasOpaqueSPAdjustment: false
679 hasMustTailInVarArgFunc: false
688 %10 = REG_SEQUENCE killed %7, 1, killed %5, 2, killed %9, 3, killed %8, 4
689 %11 = BUFFER_LOAD_DWORD_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s32) from `ptr addrspace(1) undef`)
690 %12 = BUFFER_LOAD_USHORT_OFFSET %10, 0, 0, 0, 0, implicit $exec :: (volatile load (s16) from `ptr addrspace(1) undef`)
691 %13 = V_MOV_B32_e32 305413120, implicit $exec
692 %14 = V_ADD_F32_e64 0, %11, 0, %13, 0, 0, implicit $mode, implicit $exec
693 %15 = V_ADD_F16_e64 0, %12, 0, %13, 0, 0, implicit $mode, implicit $exec
694 BUFFER_STORE_DWORD_OFFSET killed %14, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) undef`)
695 BUFFER_STORE_SHORT_OFFSET killed %15, %10, 0, 0, 0, 0, implicit $exec :: (volatile store (s16) into `ptr addrspace(1) undef`)