Skip to content

[AMDGPU][GISel] Dead code generated by GISel #122724

@tyb0807

Description

@tyb0807

Given this IR, 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.

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions