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

    <tr>
        <th>Summary</th>
        <td>
            LLVM ERROR: Error while trying to spill X8 from class GPR64: Cannot scavenge register without an emergency spill slot!
        </td>
    </tr>

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

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

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

<pre>
    # Description
The following code crashes aarch64 backend with "Error while trying to spill X8 from class GPR64: Cannot scavenge register without an emergency spill slot!!".

It's interesting that the command with -mtriple=aarch64 -O=2 results in an error, but the command with **-mtriple=aarch64 -O=0 does not produce an error**.

# Minimal Reproduction
https://godbolt.org/z/KcWovEv7q

## code
```
define double @f(i8 %0, i32 %1, i1 %L1, ptr %G.4, ptr %G.2, ptr %G.6, ptr %A4, ptr %A, ptr %G.8, ptr %G.9, ptr %G.11, ptr %G.13, ptr %G2, ptr %G3, ptr %G7, ptr %G5, ptr %G) {
BB:
  %A42 = alloca i1, i32 0, align 1
  br label %BB1

BB1: ; preds = %BB1, %BB
  store i8 %0, ptr %A, align 1
  store i1 true, ptr %A4, align 1
  store i32 65536, ptr %G.8, align 4
  store i1 false, ptr %G.9, align 1
  %G6 = getelementptr double, ptr %A42, i8 42
 store ptr %G.13, ptr %G6, align 8
  store i32 %1, ptr %G.6, align 4
 store float 0.000000e+00, ptr %G.11, align 4
  br i1 %L1, label %BB1, label %BB6

BB6:                                              ; preds = %BB1
  store i1 false, ptr %G.4, align 1
  store i1 false, ptr %G2, align 1
  store ptr %G3, ptr %G7, align 8
  store i1 false, ptr %G.2, align 1
  store ptr %G5, ptr %G, align 8
  ret double 0.000000e+00
}

```

## Stack Trace
```
LLVM ERROR: Error while trying to spill X8 from class GPR64: Cannot scavenge register without an emergency spill slot!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /opt/compiler-explorer/clang-assertions-trunk/bin/llc -o /app/output.s -x86-asm-syntax=intel -mtriple=aarch64 -O=2 <source>
1.      Running pass 'Function Pass Manager' on module '<source>'.
2.      Running pass 'Prologue/Epilogue Insertion & Frame Finalization' on function '@f'
 #0 0x000000000394da58 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x394da58)
 #1 0x000000000394b1ac SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f0184842520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x00007f01848969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x00007f0184842476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x00007f01848287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000000000720037 (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x720037)
 #7 0x0000000002b7af8e llvm::RegScavenger::spill(llvm::Register, llvm::TargetRegisterClass const&, int, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2b7af8e)
 #8 0x0000000002b7b862 llvm::RegScavenger::scavengeRegisterBackwards(llvm::TargetRegisterClass const&, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, bool, int, bool) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2b7b862)
 #9 0x0000000002b7c910 scavengeFrameVirtualRegsInBlock(llvm::MachineRegisterInfo&, llvm::RegScavenger&, llvm::MachineBasicBlock&) RegisterScavenging.cpp:0:0
#10 0x0000000002b7cda3 llvm::scavengeFrameVirtualRegs(llvm::MachineFunction&, llvm::RegScavenger&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2b7cda3)
#11 0x0000000002ae3047 (anonymous namespace)::PEI::runOnMachineFunction(llvm::MachineFunction&) PrologEpilogInserter.cpp:0:0
#12 0x0000000002961c51 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#13 0x0000000002f20a13 llvm::FPPassManager::runOnFunction(llvm::Function&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2f20a13)
#14 0x0000000002f20c51 llvm::FPPassManager::runOnModule(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2f20c51)
#15 0x0000000002f214b5 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x2f214b5)
#16 0x0000000000828c2c compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#17 0x0000000000727676 main (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x727676)
#18 0x00007f0184829d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#19 0x00007f0184829e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#20 0x000000000081f74e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/llc+0x81f74e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWF1z4yoS_TX4hbILIVkfD36w43g2tTM1qWRqdt9SCCGZDQItoElyf_0WSE6E7Uw2u657Xbl3hASnT59udYOIMbyRjK3AcgOW2xnp7V7p1ZY33_VWNbNSVS8rgGO4ZYZq3lmuJEBbgNY_9gzWSgj1xGUDqaoYpJqYPTOQEE33aQJLQh-ZrOATt3sIML7WWmn4tOeCQatf3DqroOm4EPCfOay1aiEVxBj45fYuTUC8hldESmWhoeQXkw2DmjXcWKY9puotJBKylumGSfoyQhmhLMCR_8OLge3w_xsLcGYgl5ZpZqwnsCcW2j2DVLUtOZCdt1bzTjAQbw_OzL-DeIuhZqYX1mF4084jgK9g2Z9BAXgN8Po9LAQrxQx07nVaVT1lE0S3MKDuYvCNS94SAe_YsOAtGHtrOwPiNcA7gHeNqkol7ELpBuDdHwDv_k7_oX5d_8r-fQTpUF3oxhspGv_8sGI1lwxWqi8FgyBBNcA5zyHAS-R85jF215G_jtzlV3_dWe0GXxZJMMLBKJ2M1tOJ62BaHoyKYBSF1qJ4OgysBU-y6WA5HQBcQJBtBu83G6env4QDSQxBvIVECEUJ5NFBAq8FEbyRMDrMLzUUpGTCLdxsoqnqbhivIYg3sNOsMh50nIavhqsDjLFKMziRfKrRkclxbgSt7tmJuOcnxximy2Wcnko-zE9OwGsiDDuNyRG8e5B6xxpmmWAtk9YtGFIpIOfjxHOY4HHxYOqdqKZvxvJTXw7JGCZZ6MowuxaKWIgWyP8YwBuEzuTWkQqlDvI8iHA4TsOIpy7in_qdTY-Pg_GbWJ-Zjt-d_f6Lc178c1w-Rj96-U7ANbOH6nMUqkHdbBuUs7B6BTXu3hL6CH9oQs-Xuq9ff36D13d33-9cpP7kPuUZ3H69Xt9fQ9OXLbeQwLJvoGad0tbZPqrv3O77ckFVC_BOiF-Hf-adVv9i1AK848b0zAC8g64bcUlFX7GhQ7km7VuzdXKMTWYQqOrb7rXqoQVAxa1WjSYtJLrp3VtsfO3CO9U5K1S1HRdMz9lzJ5Rm2t0TRDZzYgzTrj-ZudW9fAR4V3LpeVI4Vw6CdJ0D6m3X24WB8-c8nRPTzs2LtOQZxFvXpsVvWjGIr4zqNWUgvh4oR47yXS-lC1nnAgRwtuul75Tw1t34RiRpHNEMKglbVfWut-EsAMPZKAs-B3irlVCNK7K76477S3gjR38hwCncadIyuOOSCP4H8W16sFcfuDiLvqFmY7IDHCOIntHhFxdJRZY59OGN1yBemxczXNxqLq0P2JDQOH-bpMnTgzJWM9IC7Msfl9b3NZz_n2Fzb97zSAvg4o13dMS7jAiF97yRRPyNyEo4_HykMdw2C9q5REP-v1cgPAJlNYryJE_wEqORuOAlwLvnPH1Ik7ngsn-eN7IfHtCFUa7Ub9CzXxKQi0PMIi1qCju714xUD4_uNfyUAb8-MJAck06yFDbG-_lZ8kmWBtjLEBvnWR1DUrqi8ClkvzBATqcxQxlGKM4ulSMDWmAum5rDZUbqnE1S-44192Pl1GOyuwoZZPbdWFF9p329-4PohtnDsytflKmSxk6zf7rgG6F7LtmNNFZvepedN5ZpYpUG8dX5aQ5gaG-uNFwULL3gqznKGuieH-le5in-ve7j8KDohtDHJ6IrE8TiI9UvKneplJiEchheUjUnSqBacaQaLSL02tp9bf_Jte2JuGONuZEboehjoM_ozkGgG1mrE2UC7d-RbUMMpyO8T5UD4riSy-a0krqKjI49qEg8bSXv-HLOiUP7_NiBS8bEEX6NifMoaDKYsBglvmARqeRLq3oDJWmZ6XxDLMZGeX0zdsVefpcn_nzgawGHRj_0-KHBM31ebxywK9KILqPTcB7g3UZkQuwsoyMqAOeLjmi7cN0NnsE7zysOeNUYkWiaB7tbt_SwJfo0o4vEeiAVxDo5Zh2q-R7rb34zF8Z1vHVpxtQdNCeMl0eMo6RcThgL1hD6MiblG_ebthOv_P8M3o5WwDvcBuQ4p5jC0carnHRPxi9SYQFwh6YrJS17tiNTIej5PMyOthtZmqWwJVxebs_hIAPf8qPNU1EVn9xN-iUBZnGMyRIEHx7csgdjibYPE6f-ayssCaxgFEYlqrOEwQH_UnoNoK9WD8c8y3TLJbFs_II5bGPdme_-5sv99Zefw_Sr0bA7ofdassrNiOLi6Gw9q1ZxVcQFmbFVlEVxlqG0WM72K4xIUkZJhjFCdZ0TVFe0SKoIJ0m0REU24yuMcIISjFGGk-VyUVdFgau6TrNsmaMsBQliLeFi4dJxoXQz8yfeVV4ss3Tmv8QY_00bY8meoH8IMAbL7Uyv_Fm57BsDEiS4seYNxXIr2Oqv_Bww67VY_e_nfS_AfwIAAP__U0Abww">