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

    <tr>
        <th>Summary</th>
        <td>
            [X86] error in backend: Cannot emit physreg copy instruction
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86,
            crash,
            crash-on-valid
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          ramosian-glider
      </td>
    </tr>
</table>

<pre>
    (also reported at https://github.com/ClangBuiltLinux/linux/issues/1845)

When compiling the reproducer extracted from the Linux kernel v6.4-rc1, trunk Clang crashes in tryOptimizeLEAtoMOV():

```
$ clang -v
clang version 17.0.0 (git@github.com:llvm/llvm-project.git feb69dad8a131d718d7c44e983e1cf6ef202127c)
Target: x86_64-unknown-linux-gnu
Thread model: posix
```

```
$ cat vmwgfx.i
static void vmw_close_channel(short *channel_id)
{
        unsigned long eax, ebx, ecx, edx, si, di;
        ({
                asm volatile(""
                             : "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx),
                               "=S"(si), "=D"(di)
                             : "a"(0), "b"(0), "c"(0), "d"(*channel_id),
                               "S"(si), "D"(di)
                             : "memory");
        });
}
void vmw_host_printf(const char *fmt, ...)
{
        __builtin_va_list ap;
        short id;
        __builtin_va_start(ap, fmt);
        vmw_close_channel(&id);
}
```

```
$ clang -mstack-alignment=8 -O2 -fsanitize=kernel-memory -c vmwgfx.i
fatal error: error in backend: Cannot emit physreg copy instruction
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.Th
Stack dump:
0.      Program arguments: /usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang -mstack-alignment=8 -O2 -fsanitize=kernel-memory -c vmwgfx.i
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'vmwgfx.i'.
4.      Running pass 'Argument Stack Rebase' on function '@vmw_host_printf'
 #0 0x000055ff98150efb llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x39f2efb)
 #1 0x000055ff9814e8ab llvm::sys::RunSignalHandlers() (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x39f08ab)
 #2 0x000055ff980a5c76 llvm::CrashRecoveryContext::HandleExit(int) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x3947c76)
 #3 0x000055ff98148e9e llvm::sys::Process::Exit(int, bool) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x39eae9e)
 #4 0x000055ff956b4214 LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
 #5 0x000055ff980b1489 llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x3953489)
 #6 0x000055ff980b15fa (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x39535fa)
 #7 0x000055ff96eefe0f llvm::X86InstrInfo::copyPhysReg(llvm::MachineBasicBlock&, llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, llvm::DebugLoc const&, llvm::MCRegister, llvm::MCRegister, bool) const (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x2791e0f)
 #8 0x000055ff96c42b57 tryOptimizeLEAtoMOV(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>) X86RegisterInfo.cpp:0:0
 #9 0x000055ff96c42dd8 llvm::X86RegisterInfo::eliminateFrameIndex(llvm::MachineInstrBundleIterator<llvm::MachineInstr, false>, unsigned int, llvm::Register, int) const (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x24e4dd8)
#10 0x000055ff96c7acc6 (anonymous namespace)::X86ArgumentStackSlotPass::runOnMachineFunction(llvm::MachineFunction&) X86ArgumentStackSlotRebase.cpp:0:0
#11 0x000055ff9752e41b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#12 0x000055ff97ad9639 llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x337b639)
#13 0x000055ff97ad9771 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x337b771)
#14 0x000055ff97ada077 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/local/google/src/llvm-git-monorepo/llvm_cmake_build/bin//clang+0x337c077)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWF1v2zoS_TXMC2GDor4f8uDYMbZAigZpcfe-GRQ5krmRSIOkUuf--gUp2ZYS36J70WaL1LJH1MyZM8NDUsxa2SiAW5TeoXRzw3q31-bWsE5bydSiaaUAc1Np8XqLaMFaq7GBgzYOBGYO7507WBSvEN0ium2k2_fVkusO0e26Zaq562XrHqTqj4hu2_Eqre3BIrqNiiRFtERkg8hq-Pz3HhTmujvIVqoGuz34eEaLnoPBcHSGcR-7NroLd4Nz_AxGQYtfsmWyMDxCdI2d6dUzDigwN8zuwWKpsDOvXw5OdvIveLhfOf35yx-IFh5FvJoCQRkZ_4afNME8-Fq8DJbh1wsYK7XCUb4kS4IRLRrpUEImVMSrtn3xjPjL4mD0f4C7ZSMdrqHKSsFEwaI4EnlUiJwnCZRFDBGvM6gpoRHN-Zmjb8w04FC8wsci22XJolfPSn9Xi0DtolH9OG5vgAncaQGtH33QVh6v5_W3yTKHX7rvTX1cysFqHXOS4xcthb-z4622sON7phS0iBZ2r43DiK5G006KS3Hzu1O8sleh5wRutWowsKOvFlTDhQ8XES5W-k8hUXx52hdr4gyRktkOv-iWOdlCKCX1f5MBiJTY__NM-FvxhoVBRYhd-hiDuRrN1dzMRzOfm8VoFqP5Wkg8jv06jPUJTTxsBquQk0lwBfCIllyerd5Z-DvLCO9dPX4A9ArKn4TYQafNaxhbzqqVb2aWfDN8OTfRXlu3OxipXI1owbWyDvM9M76P6s55FMvl8mof7XaVVxepdi9s10rrMDtMYw_9KMXUNnvGOmacV7WDDxOizcBfa3JEs4HGdyn99MQaVKSzjvHnBWtlozpQDsWbAi--ULyoLVPSyb8AxZtB1xYDvXjB30zJmjnWYjBGG1-I8MWLXMX4MyjhbWumlHYYOunwYf9qDTSY68Mrlso603MntRqcPT7cr77eY9tXfizDVd-MWo-d_pHSX5G3qcpjpgSWire9gCDZQY0DRq_m4Mk_BJHnYC0IbHVvBrN_klmruWRe9E2vsOVGHtzy234A_dWziEXfHc76TZaIlI9GN4Z1mJmm9_TaoVG3vTUequas9Wlo3XjR2FrDTxk00i06rbRPfbTteMeeIbSOQHRbSTWw8CtLGXnUKF6DrlF8jw_MWDB-iQUlsK5x7dUtjKR-5FoLwA0oMOxSwdjfeeqV8kvngVmLEc23vQpFxo_e8Jkp1oBBNMda-QWib8GPOoOh-XJwllxzthrpxAPvT1AxC6Oz-hQI0Rwl5N3szge_GNGYYHIkhJA0reuyiFICdYVDG8UrFK_sqx2-PPpHQ6hvQ6cUl0GGfd9p6wywDtHMd4tUfgbjMEt_Q6ERvSPHuKwp1NVZkHw20TybBAp2NZunXn2VjWLtv5gSLRg7bDx-O2BSsDlgOgNMWMrzbAJ47efnE3D9AuZ1rZWDoxvuDMDvj9LL5sfQneQ8z2bo4zd0F1DC9eYJgjL8mGJe40rr9gOwA4MSZtiTKfY0qxIaJfjh4Y_P9166x75AtPDrI6IrjzWshmFhHA0n8JxHu45JteQHL34k_D9HSuc1rqKkKCcsDcK-CwvIblhAppPr23ep4BQ1-0DK0jgpyhll2dtE0pr9fhRpzWYo8imKDKAGUk_o_LPIPvn19JOq9WDxa-zj_tU-QTNj9jPje6ngjlnJ71rNn0d-340I_u563xGfnJd5v8avrw8L-xfWWkDx_dzZBqq-edB8VsuJk_UTNNI6MD-ynzsubM9-K_c0LyMg9Yz7YsY9T2iV5n9zjvuFLJb4zyI7seDren2elW_BCVHMG2PqYzBCKzupmIOtYR18UgKOvxb7Gp8PWaPiXZ6aFnaU8I-oawKJEMVlI0_jiMypyxnnmUfBlFavne4tVqwDewgrf3nm87QHCfuCr612fmMzqlqvvqiRltO-5xqzl3vZWOh3Toetzfuae-CzBT9PKSRR9X4Cn4K8gXcV1xtAiBbLAzNu6c9z-Iq_67hm63rORJnFU83fPvpHTzvA_xnRbxTcOK-yuJw1R_w2lzyPfiKXz2FHO6_5aPqYPPI8muWRvMmDkTyf5NFCw_jruGG5ZPSpO7TnrP5_2XCS55dsTmfZG3EbizIu2Q3cRlkRZ3FOKb3Z3_KcsDSLWJpATkkWlTSNRUwgqes6Jll0I28poTFJSRnFhETxUmSFEJwLz02RpgIlBDom26WHuNSmuQnHyNuMZjS9aVkFrQ3vKim9nHH_LLLw5mGNKA1ny_mvhVaLF9bK8EIk3dyY28BJ1TcWJaSV1tlLOCddG96Geqfp5h8fqW96097-8zNzyPe_AQAA__9M05O-">