<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/122724>122724</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AMDGPU][GISel] Dead code generated by GISel
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU,
llvm:globalisel
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tyb0807
</td>
</tr>
</table>
<pre>
Given [this IR](https://github.com/user-attachments/files/18398484/input.txt), the last basic block is translated with `llc -O3 -march=amdgcn -mcpu=gfx942 -print-after-all -mtriple amdgcn-amd-hmcsa -global-isel --asm-verbose --asm-show-inst input.txt -o gisel.s 2> gisel.mir` into
```
bb.4 (%ir-block.1168):
; predecessors: %bb.1
liveins: $agpr55, $sgpr15, $sgpr22, $vgpr53, $agpr32_agpr33_agpr34_agpr35, $agpr36_agpr37_agpr38_agpr39, $agpr40_agpr41_agpr42_agpr43, $agpr44_agpr45_agpr46_agpr47, $agpr48_agpr49_agpr50_agpr51, $agpr56_agpr57_agpr58_agpr59, $agpr60_agpr61_
$vgpr16_vgpr17_vgpr18_vgpr19 = SCRATCH_LOAD_DWORDX4_ST 0, 0, implicit $exec, implicit $flat_scr :: (load (s128) from %stack.0, align 4, addrspace 5)
renamable $vgpr20, dead renamable $sgpr0_sgpr1 = V_DIV_SCALE_F32_e64 0, $vgpr53, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr28 = nofpexcept V_RCP_F32_e32 $vgpr20, implicit $mode, implicit $exec
renamable $vgpr21, renamable $vcc = V_DIV_SCALE_F32_e64 0, 1065353216, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
$vgpr32 = V_MOV_B32_e32 $vgpr53, implicit $exec, implicit $exec
renamable $vgpr22 = nofpexcept V_FMA_F32_e64 1, $vgpr20, 0, $vgpr28, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr28 = nofpexcept V_FMAC_F32_e32 killed $vgpr22, killed $vgpr28, $vgpr28(tied-def 0), implicit $mode, implicit $exec
renamable $vgpr29 = nofpexcept V_MUL_F32_e32 $vgpr21, $vgpr28, implicit $mode, implicit $exec
renamable $vgpr22 = nofpexcept V_FMA_F32_e64 1, $vgpr20, 0, $vgpr29, 0, $vgpr21, 0, 0, implicit $mode, implicit $exec
renamable $vgpr29 = nofpexcept V_FMAC_F32_e32 killed $vgpr22, $vgpr28, killed $vgpr29(tied-def 0), implicit $mode, implicit $exec
renamable $vgpr30 = nofpexcept V_FMA_F32_e64 1, killed $vgpr20, 0, $vgpr29, 0, killed $vgpr21, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr36 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr37 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr38 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr39 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr40 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr41 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr42 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr43 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr44 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr45 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr46 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr47 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr48 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr49 = nofpexcept V_DIV_FIXUP_F32_e64 0, killed $vgpr31, 0, $vgpr53, 0, 1065353216, 0, 0, implicit $mode, implicit $exec
renamable $vgpr31 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
renamable $vgpr26 = nofpexcept V_DIV_FMAS_F32_e64 0, $vgpr30, 0, $vgpr28, 0, $vgpr29, 0, 0, implicit $mode, implicit $vcc, implicit $exec
...
```
Only the result of the first `V_DIV_FMAS_F32_e64` is used in later code (`$vgpr36`), the other copies (e.g. `$vgpr37/38/39/...`) are not used and these registers are overridden.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsmU1v2zwSxz8NfSEkiKQkSwcfnLjuBmiQImmzvQmUNJa5oV5A0m7y7RckvanfkgaIDewDGCg8JjUc_uc3KhV5uNai6QAmKLlCyWzEV2bZq4l5KaMsGo_Kvn6ZfBVr6DBKrsxSaHxzj5IZotnSmEEjNkV0jui8EWa5KsOqbxGdrzSogBvDq2ULndGIzhdCgrUkY3kWZzGic9ENKxOaZ4Nojug1NkvAkmuDS65FhUvZV09YaGwU77TkBmr8W5glRmkkZYWDO4aDlqtqidiMt3VTdThoq2GF2KxZPOcxxcGgRGcCvjBWj5Q4aI0SgwTs_QPe1sGyrTTHQSP7kstAaJA4CLhugzWostewGell_zsQnTb4VTcOetzYBaHGFLEvm0ErFEojLDrTo2iK0mjzL5risgxjjGiGaCJU4DIMCUkzS4BNrQdiV3hQUEMFWvfKAsaIJmUZEnsZYynWILrNfMybQSWJpYdorJtBke0BpZvB2rqxzcCuYbRwhnkTe5Nse6R-buxN5k2-5RFHbi4m3viI8fYusY8bJ974iPF428PHjXNnEh8xIVseiV-VeB2J90-2daR-VUoKB9BnS9LCmbE3mTc5RmyGH67vpz-u_1V8u5vOitm_7-5nv-Li4QeObFD3IdpBikoYGw2eodqfW0huCl0pbKvmKpHJntfWamLLm-OF6ltbOW149RS6qFyKpsOx-1rXSg-8ApzY2rvKKuh4y0sJ_8uBulU18Hr3mi1tVLhqu3wei9nNY_FwPf32pZgzWkAa-zR2Kv_GDInShCWMkvR16gBB29dwFEs0PaI6c6K6fjHAcwWDwY_F_fV3r4zR3eQ-ussxOu4u2Z2uqveBHEn29EQ2EW2qTsvt3WNxtZu83-1vd9nbiOkh4vnt9DVXspUYjfZTtffniVI9VpYj5Z_fTq9f6_8kpIT6Tyo29t5ctqc2MwLqoIaFVZd_VmB-KPD257eD-5McIPvMpp-rWH4wQ05XsCM8_lqwHS57DvmJC8aiD7Db0_Aewj3X05Fk5FCoPYjmt9OHowcze-__5qHwD-lbVx8_R1j6huCbXz-_7yrehcbIGc_PfyDZY5LHF7ZnY3vkGXNheyK2Rx4HF7anYRsfeZJd2J6I7VuSL2w_z_bIX68Xtidiyy5sz8Y2vrA9G9vkwvZsbC_vZedje3kvOx_by3vZ-dhe3svOxpa-dd7-f0gOw3CvkXjXyRfXL1WgV9LgfuFGC6G0wSiNDuW7jqTGKw01Fh2W3IDCVV-Da0em0esvgu77az-2N0vnNwjQ1hPCJsRb7mNE5yyzHzmicyvULcdcAe564_fjXW2DaSu3EdqA0s6hX4NSoq6hC0f1hNU5y_kIJmTM0nFGMsJGy8kiz1nG6iiNKhKNIYKExJwu6sWYAK0YG4kJjWgSEcJIQhmjYQlpNqa0iheQkipiKI6g5UKGUq7bsFfNSGi9ggmhdEzjkeQlSO3a35SWvHqCrkZsOr2dff3-E7lfuxGldi1iU98kFhqkvZLMRmpirwTlqtEojqTQRv_ZxwgjXWN9EyyZoeTq680DSJTM8Ax47SvQQAfK9bfLF-yuj1ZKTt5psDs53gSD6v8DlUF07vJyTXaf2npC_xsAAP__BUhPGw">