Issue 122724
Summary [AMDGPU][GISel] Dead code generated by GISel
Labels backend:AMDGPU, llvm:globalisel
Assignees
Reporter tyb0807
    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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to