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

    <tr>
        <th>Summary</th>
        <td>
            `RegAllocFast::runOnMachineFunction` misses a virtual register
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Given this input: [reduced.ll.txt](https://github.com/llvm/llvm-project/files/10078103/reduced.ll.txt)

In a build without assertions, `llc -O0` crashes:

```
$ llc -O0 reduced.ll
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llc -O0 reduced.ll
1.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
2.      Running pass 'Prologue/Epilogue Insertion & Frame Finalization' on function '@"_ZN55_$LT$std..io..stdio..Stdin$u20$as$u20$std..io..Read$GT$11read_to_end17haba70a09681d41d3E"'
 #0 0x0000000001cf0804 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000000001cee00b SignalHandler(int) Signals.cpp:0:0
 #2 0x00007fa8d0a40b50 __restore_rt (/lib64/libc.so.6+0x3cb50)
 #3 0x000000000064c4b0 scavengeVReg(llvm::MachineRegisterInfo&, llvm::RegScavenger&, llvm::Register, bool) (.cold) RegisterScavenging.cpp:0:0
 #4 0x00000000011e7660 scavengeFrameVirtualRegsInBlock(llvm::MachineRegisterInfo&, llvm::RegScavenger&, llvm::MachineBasicBlock&) RegisterScavenging.cpp:0:0
 #5 0x00000000011e77a8 llvm::scavengeFrameVirtualRegs(llvm::MachineFunction&, llvm::RegScavenger&) (/home/jistone/llvm-project/build-ndebug/bin/llc+0x11e77a8)
 #6 0x00000000011636ee (anonymous namespace)::PEI::runOnMachineFunction(llvm::MachineFunction&) PrologEpilogInserter.cpp:0:0
 #7 0x00000000010320d1 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
 #8 0x00000000014c92b0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jistone/llvm-project/build-ndebug/bin/llc+0x14c92b0)
 #9 0x00000000014c93dc llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jistone/llvm-project/build-ndebug/bin/llc+0x14c93dc)
#10 0x00000000014c9d08 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jistone/llvm-project/build-ndebug/bin/llc+0x14c9d08)
#11 0x00000000006e6f17 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#12 0x000000000065f742 main (/home/jistone/llvm-project/build-ndebug/bin/llc+0x65f742)
#13 0x00007fa8d0a2b510 __libc_start_call_main (/lib64/libc.so.6+0x27510)
#14 0x00007fa8d0a2b5c9 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x275c9)
#15 0x00000000006df235 _start (/home/jistone/llvm-project/build-ndebug/bin/llc+0x6df235)
Segmentation fault (core dumped)
```

With assertions, this fails earlier in `MachineRegisterInfo::clearVirtRegs`:

```
$ llc -O0 reduced.ll
Remaining virtual register operands
UNREACHABLE executed at /home/jistone/llvm-project/llvm/lib/CodeGen/MachineRegisterInfo.cpp:207!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llc -O0 ../build-ndebug/reduced.ll
1.      Running pass 'Function Pass Manager' on module '../build-ndebug/reduced.ll'.
2.      Running pass 'Fast Register Allocator' on function '@"_ZN55_$LT$std..io..stdio..Stdin$u20$as$u20$std..io..Read$GT$11read_to_end17haba70a09681d41d3E"'
 #0 0x0000000001f5adb4 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
 #1 0x0000000001f584eb SignalHandler(int) Signals.cpp:0:0
 #2 0x00007efcfe780b50 __restore_rt (/lib64/libc.so.6+0x3cb50)
 #3 0x00007efcfe7d0e7c __pthread_kill_implementation (/lib64/libc.so.6+0x8ce7c)
 #4 0x00007efcfe780aa6 gsignal (/lib64/libc.so.6+0x3caa6)
 #5 0x00007efcfe76a7fc abort (/lib64/libc.so.6+0x267fc)
 #6 0x0000000001eb7b8a (/home/jistone/llvm-project/build/bin/llc+0x1eb7b8a)
 #7 0x00000000011ba332 llvm::MachineRegisterInfo::clearVirtRegs() (/home/jistone/llvm-project/build/bin/llc+0x11ba332)
 #8 0x00000000012cca4c (anonymous namespace)::RegAllocFast::runOnMachineFunction(llvm::MachineFunction&) RegAllocFast.cpp:0:0
 #9 0x000000000112883b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#10 0x0000000001665c50 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/jistone/llvm-project/build/bin/llc+0x1665c50)
#11 0x0000000001665d91 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/jistone/llvm-project/build/bin/llc+0x1665d91)
#12 0x0000000001666657 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/jistone/llvm-project/build/bin/llc+0x1666657)
#13 0x0000000000657a66 main (/home/jistone/llvm-project/build/bin/llc+0x657a66)
#14 0x00007efcfe76b510 __libc_start_call_main (/lib64/libc.so.6+0x27510)
#15 0x00007efcfe76b5c9 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x275c9)
#16 0x00000000006d7995 _start (/home/jistone/llvm-project/build/bin/llc+0x6d7995)
Aborted (core dumped)
```

The input file is a reduction from a Rust build with LTO -- optimized+debuginfo code from the standard library merged with unoptimized code from the test case. After reduction, only one `std` function remains. It compiles fine with `llc -O1` or higher, or with `llc -O0 --optimize-regalloc`.

xref: https://bugzilla.redhat.com/show_bug.cgi?id=2142648
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzVmNtu2zgQhp_GviEiUNT5whdOmrQB0m2QdLvA3hgURclsadGgqDTp0--Qkg-y1bpp0y0aODqRnPmHh-En5ap4mr0WD7xGZikaJOp1aybBHE2ic82LlvHCk9Izj2YSvZqQdGnMuoHyCbmCXyXMss09plZwI-XD5nS21uojZwZuSyF5A2cf4yT1cQCXB3ZJNsGvJnjeHa9rRFHeClmgz2BdtQbRpuHaCFWDnQs0ibGUDJ29w3CFmKbNkjtFe0agpP91tyREfRu0c96V3d5czu8vUdPmK2Gc6wrqrJU2yCj07HBF07QuXkTrAnqTybbg0LW8U4pyyj4ZTRn3Ovf3Bh6gol2ttyFgD7m_W60qTVeI6qpd8dpYHV8Nw-8b3bV1LeoKraHT0IQkV23NbNehW_vgLa1pxTU8R_BopYpWcltrzxpJemXkKxZBllRVyyHGy7Vwl-i67kcIKsToClRzdCVqKsUXah_3DsuNGLifhHhCyOLfv6JoAeNz8x4OjSk8TyjPgwt7uocTtA1bAnVD2mwvtxXvOC3g_rVt7fsa7hZGLXhd-MmS5jTBFGdx6hehXwSX4M86dtGBhAAj_Ig3fz4rcYpD6HVRGzcq7-0w3YsKwngDgyltv6UPSoBDmA8Z6ooaj63t2GH3v7XtD21zjnGODo2Bp5OGSG8oKWlaYBriPMJosdC8MUrzBUxTMGTnocjjsDszr1FePCHn-DFgUH27wqy9YF8YjkMW5hg1jEIGqPiHO16BOTe1YToG87eULUXN4bFoDNfXdalghO0y3NWBwvu-vR4rdC3t01wpaeMFD7CGZGGvN-W9BZho490QDvrT50kc72S7CfdBaNNSCQab6_pcKvbpZSPpDZzTRrDefPycCKLDCBKa7pn_WixjQWwW9ekAsn52LNXKLtiPoFTV_DhtuYR7Vhcc0p-9tcsO6jA3iXqxg2kUD6OJg5jbTJLSWtVPK9U2qIY4mjUsIdvOqbu9vO4udFu_q49iORFnhrrM0yWdLuNwPd7XyUAdDggu_OOh3Ji3qXFP2KiiAyl2Cq-pNp5dXGjE3riudKArZBmBxbfn5NY23STpZyv66XHuBA3GOTtUHBTsOxS_dVvLcEz7Ry-pFsTs8AGSLj5UW-D9NSZ5RdlTPxl3uq9Xa7nV_ss1g6SBZn-YkHlc-gkCxIBpzrfdyJZUu21nPlzwNzcf3l6o2nDLUU4luDqee9YPGfqJyiQkaEVF_RKBdeYGcQXDjYvkkW83Lrs_LRoDa2fBqJSLPQXjWxhJoOHAcnhkmWVDy9YoAMbrm-vziwXxiBedcsGygYto2FlFafN3Z_xFussZ3Hq855UFPIdKqKStdE4Y7O-ODHmx03YAtu74D2DpASQ7li-pkA3iVEvBNbLdHOOxbdDNJCahot133KYT4x8n6jtuu98i40O3jUGNzhtSa66Bfpqu4t9_3V3OL97Mz28uEX_krDW8QNTGfrJ3N_AtcjheqIK_5rZ_R6LrFwPByYT4fzTye97xtHrZ14ATHk6-GlzRxmx5CM0lUBIFSv0T6L-MaJH_IvovozTkP0n_vGQlT9KXov_eXoF5wsDe2ixd730SkJEFbId8l4--5SBl0H7gIDwUTGmMqsbFeEIr1ByYioamYpqUDNFcnQiaxFDvG6zK8yRP6XOy-PE23tkYOBkip5_TAAbv268fI3nXinoWaYzAunM90DbETsIYDdkpWAc5bgHbNf1T1L5vaHySDxnTJ2ka5L-b1o9pMo4jFv0GWj8e4U7J1yHSVigy___F9FGZoGIgkxzIhCrJ7-DzMbFWyyjAboA5oXH8bGAeIWVrZ5xn-0T3cqR8mEJ_ASnHB6ScZNmPkPIIIltLW1dzm_cBD5_Dxe8Bwdz3bGQ_QiMgYtrBasfZWgFoAcMAs-y-N6Ob9-_Q2RmQqhEr8cW6OHcoJCBjw2sZkJ1raPEOgqwLqgsEfaSpfkIrrive22nrrYmDZgY2b8Rowz00Ly0obTVZcle1fIIDt7AOoGO_cW_BSTuybjx0bTZviED5kMs6l9sv475tpTRaimrZfXqDm2EVDEFuBJ4Bn1OboqHU2-_AR81LS6BDJIbO-AKcQD3QvaSmZ-NmqT4voMhjlZgEV8BJwSvihyQO0ymfwfrKCElSP5sWs6DIgoxOjTCSz8Dnd241ENMKWJvbYTx8s5i2Ws5-nNyjzE_IdDnDMSjL8rjEQUrSjCUkDSJewn5KSvu1YSppzmUzm0TngJM1_4ycCYuW0aupmBFMCGxggZ8CakVeBFtsiv0MblheJJZ67QhKz-rwlK6meuYkQb81UCghlmZXCBkQuIlz5w7s09YslZ6x9kHAe9TUuZ456f8BPuvJNA">