[llvm] [AMDGPU] remove move instruction if there is no user of it (PR #136735)
Mariusz Sikora via llvm-commits
llvm-commits at lists.llvm.org
Mon May 5 06:26:09 PDT 2025
================
@@ -797,7 +797,7 @@ MachineInstr *SIShrinkInstructions::matchSwap(MachineInstr &MovT) const {
dropInstructionKeepingImpDefs(*MovY);
MachineInstr *Next = &*std::next(MovT.getIterator());
- if (T.isVirtual() && MRI->use_nodbg_empty(T)) {
+ if (MRI->use_nodbg_empty(T)) {
----------------
mariusz-sikora-at-amd wrote:
It looks like `use_nodbg_empty` is not tracing registers which are used as sub-registers (for Physical Registers)
e.g.
```
$vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec // this instruction will be removed
$vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec
$vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec
$vgpr3 = V_MOV_B32_e32 0, implicit $exec
$vgpr4_vgpr5 = V_MOV_B64_e32 $vgpr2_vgpr3, implicit $exec
```
vs.
```
$vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec
$vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec
$vgpr1 = V_MOV_B32_e32 $vgpr2, implicit $exec
$vgpr4 = V_MOV_B64_e32 $vgpr2, implicit $exec
```
Maybe we should also check if `T` is not marked as `killed` ?
https://github.com/llvm/llvm-project/pull/136735
More information about the llvm-commits
mailing list