<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/120970>120970</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            "Already live at def" assertion in RegisterCoalescer
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:regalloc
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          arsenm
      </td>
    </tr>
</table>

<pre>
    [already-live-at-def.mir.zip](https://github.com/user-attachments/files/18230543/already-live-at-def.mir.zip)


```
llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -o /dev/null -run-pass=register-coalescer -verify-coalescing /Users/matt/src/llvm-project/llvm/test/CodeGen/AMDGPU/already-live-at-def.mir
Assertion failed: (SlotIndex::isEarlierInstr(Def, S->start) && "Already live at def"), function createDeadDef, file LiveInterval.cpp, line 114.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./bin/llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 -o /dev/null -run-pass=register-coalescer -verify-coalescing /Users/matt/src/llvm-project/llvm/test/CodeGen/AMDGPU/already-live-at-def.mir
1.      Running pass 'Function Pass Manager' on module '/Users/matt/src/llvm-project/llvm/test/CodeGen/AMDGPU/already-live-at-def.mir'.
2.      Running pass 'Register Coalescer' on function '@already_live_at_def'
 #0 0x00000001090126fc llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x106b066fc)
 #1 0x0000000109012c6c PrintStackTraceSignalHandler(void*) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x106b06c6c)
 #2 0x0000000109010a64 llvm::sys::RunSignalHandlers() (/Users/matt/src/llvm-project/build_debug/bin/llc+0x106b04a64)
 #3 0x0000000109013584 SignalHandler(int) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x106b07584)
 #4 0x00000001850a0184 (/usr/lib/system/libsystem_platform.dylib+0x180484184)
 #5 0x000000018506af70 (/usr/lib/system/libsystem_pthread.dylib+0x18044ef70)
 #6 0x0000000184f77908 (/usr/lib/system/libsystem_c.dylib+0x18035b908)
 #7 0x0000000184f76c1c (/usr/lib/system/libsystem_c.dylib+0x18035ac1c)
 #8 0x0000000106b518f8 (anonymous namespace)::CalcLiveRangeUtilBase<(anonymous namespace)::CalcLiveRangeUtilVector, llvm::LiveRange::Segment*, llvm::SmallVector<llvm::LiveRange::Segment, 2u>>::createDeadDef(llvm::SlotIndex, llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>*, llvm::VNInfo*) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x1046458f8)
 #9 0x0000000106b50f70 llvm::LiveRange::createDeadDef(llvm::SlotIndex, llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul, 128ul>&) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104644f70)
#10 0x0000000106fd0754 (anonymous namespace)::RegisterCoalescer::reMaterializeTrivialDef(llvm::CoalescerPair const&, llvm::MachineInstr*, bool&) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104ac4754)
#11 0x0000000106fcd000 (anonymous namespace)::RegisterCoalescer::joinCopy(llvm::MachineInstr*, bool&, llvm::SmallPtrSetImpl<llvm::MachineInstr*>&) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104ac1000)
#12 0x0000000106fca1c4 (anonymous namespace)::RegisterCoalescer::copyCoalesceWorkList(llvm::MutableArrayRef<llvm::MachineInstr*>) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104abe1c4)
#13 0x0000000106fc73c8 (anonymous namespace)::RegisterCoalescer::joinAllIntervals() (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104abb3c8)
#14 0x0000000106fc4f10 (anonymous namespace)::RegisterCoalescer::runOnMachineFunction(llvm::MachineFunction&) (/Users/matt/src/llvm-project/build_debug/bin/llc+0x104ab8f10)

```

If the unused $vgpr0 block live in is removed, the assert is avoided but there is a verifier error after coalescing 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWF1v47oR_TX0C2GDoj794AetHd8G2LRBcvf2MRhRI5l3KVIgKXd9f31B2Yll72cDFygaKIgkkjOHZ85oOAHnZKsRVyT9QNLNDAa_M3YF1qHuZpWpD2EElEWoD3Ml9zgHP6-xWXTSLv6SPUk3hBc773tH4pLwLeHbVvrdUC2E6QjfDg7tHLwHsetQe0f4tpEKw9-o4DFLk5jw7Y888CVh5enK2OlipVKCzjtvZa-QxBvo6lboOXR1-N05oPNO9AOJN23zZZlwOjeU8G2Ne8K3elCKzu2g5z04R-KNxVY6j3YuDCh0Ai2d79HK5vD6Ruo2rP_k0AbsHXhP-NZZQfhWqX037635E4U_PRK-9ejC09rU-Btqwrflw-a3x0_f3y1hZekcWi-Npg1IhTWJS0p48ayMv9c1fgkcx6V0d2CVRHuvnbeEFxtsCF_T5zmJ75wH6wlfUsIzwjNKOC-P_mjwR8HTOkzngVi-ps2gxehRWASPG4T6ZC7EiX6Ue7zXHu0e1EL0fRhQUiONomRBWPn48a58vqNuqDrpKdBqaKnF3lhPvaE_EMaJpSvupHPDKA4KuqZSCzXUSP0OqbDgdrQC8dlbEBh8P3sQn2k9dH1wwUq2IGz5aE1roaNg2-GouLikC8K3ldSjv_9D2URh40-D1sFdwEYJz7evgX0MLx5AQ4uW8JwaTTtTDwrDrP82OJ6HSPFvAXw6sUfXr-yd0L1JMuBL2Mn0SzD9Av5llG9OWEiNmFH2hR1_IrZkEc8aQUe0Y6q4gzvePFqp_SiY34N8CC_Okyz868U4bxG6MWnWVOpTChW_yE81SFW_1FgN7VRqhH9gXyKWVSzLGnH8lAXU0TVqkQl6BfFZthrU30DXKjBT7I2sCS9vjUtkE1z8CheDLPkWm0-DvoDnRkQ3BZZAlpyBxVfA4rRI6DVDt49anhYTEMkERJEyYFGRnLwNzoa1sgquDs5jd3w83r_0CnxjbLeoD-OcYL9gSZFEU_vppf0Mmpz9on2_CzlyZT7BJmdn89nUfNLk-ZIVv2ZeXBqO02rJirPh_MpwJiLxTsMgookci2nUsyqNimZEDNroQ2cGRzV06PoxoZdHaa5BiVC0nkC3-MlL9QEcknj9ny77A4U3dix3b_p_m3B8fMY2VJgxKafTnjtQr-vj9c-XrykfSHw3XmHgqhJPvlTng8CFww9D1z96WyplBHhj77teXXh-gDD0Nh5WJ2yZDeryLuLFoAKM6x398fd73Zgbf32SLEmLZqKj5VW4WdD_d-n7H2ApuzEdyVu-hhpxUdqypmZ5mvxM_a819VxSjxUOH8CjlaDkX_i7lXsJ6pq1tyWPIC0VRodSn11S-ABiJzWezp2jSCpj1K2ZAJHkaXJmIrpkQtSMsXcy8aeRem36w8XWf7StrxL70dtn9N8Qz6WN2-sDRMTYRB_8ihWIxHv1IUx_eH31T2M_f5Qh-FOGBg-VwtJaODxh89Od33LbFUZiIob4att5LH5aFH4ghlKp1_7m1qeYBKoqFsUZenIFPWmi9-rYDvof-sT860n_W5o-j91YjFXRROzcnE86c8LK-2bs2QY9OKwp4cm-7S2jlTLi87ENlZpKRy12Zo91yLIwH8b2NwxAOO1iTavBhxGL40s6NlcSLUVrjaXQhPZh0mrN6lVcL-MlzHAV5XGyzFJeRLPdKk1ZXcQ5b6KmjnmVsgJiHhXpUogKmrqeyRVnPIl4iFJSsGhRFAUkdbXEPMtYxguSMOxAqkXgaWFsOxt71VXE2TJnMwUVKjf-H4XzUxQstmNFCc12upnZ1UhxNbSOJExJ593ZmJde4eq7zfqJmtAUSU2_0sRssGr1_mb7tIf9iv87AAD__7jDppA">