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

    <tr>
        <th>Summary</th>
        <td>
            MIPS "Invalid register name global variable" when using sp in register variable
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:MIPS
      </td>
    </tr>

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

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

<pre>
    The Linux kernel is looking to use `sp` in a register variable: https://git.kernel.org/mips/c/200ed341b8646ea893d5466974d6e107c46237ba

Unfortunately, this does not appear to be supported in `MipsTargetLowering::getRegisterByName()`, causing the following crash:

```
$ cat repro.c
register unsigned long current_stack_pointer __asm__("sp");

unsigned long foo(void)
{
        return current_stack_pointer;
}

$ clang --target=mipsel-linux-gnu -c -o /dev/null repro.c
fatal error: error in backend: Invalid register name global variable
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang --target=mipsel-linux-gnu -c -o /dev/null repro.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'repro.c'.
4.      Running pass 'MIPS DAG->DAG Pattern Instruction Selection' on function '@foo'
...
```

Is it possible to support this?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVNtu2zgQ_Rr5hbAgk7rYD3pw4qQIkBRB0302KGkkc0ORAi9O8_edkZykQbvAYrGGTInkcObMmcNpbPdafz8Bu1cm_mDP4AxopjzT1j4rM7BgWfTAkjLzEw5MGSaZg0H5AI6dpVOy0ZCIPTuFMHn8SPgtPoMK6eIttW7AhVHhLr9t8c-zDDqRb5ptmZcgtzvRFXlZ7qq8K2GTVW1eclE1MskOSbZfxr9Mb12IRgbQrwm_ZuGEKDsLnhkbmJwmkI7QNsB8nCY0ho7QIugHDP1dugHCvX0Bh2kRTLHHhW-XTK5ev8oREr5N-A5PUIBWRj8zgOz0Vmv7QrPWSX-i479gowPLs0x5jocDsjQ5m7bL4jtl0Xg1GMSmLbmLzoEJRx9k-3ycrDJkczxKPx6PMxyOvHNOsMTVr0E_--mtReuzVR1ZLmbVxZ5dfg5CdObPIT-cV4dPqVEuWmKE9TrMFCbiQKUEvdYkmfVgIlu3bG0ZVraDM44mav05-14GqRk4Zx1JZf6g4jQIAUxHa3fmLLXqPrRlsCBs0LbBk-86m7093t_sn26wzM2osPSsiQOFw5KTAH7T4Sk2aWtHnGh9fnutEd3f0AacKu8jkDaZNCSZVscO5rLPxZ5BBidbIFVMc14teI_Uexvdskwnpfe2VZJ056JhvnVqCukC-YnIZl0cp3ftZOlSlkdnBydHhuzGEQtD2P8PzjcX_4m4Btsn4oZN0nkkFqWJnDPbs169UcovxtcWUx_AgJNBWbNsisvmt2gM3YEJM8XI1W00LVmxR1p4kEYOqCReMVwabRc1kNUbKF5duMj_wd3D3eMTO-y_rBErvtBrQB0YVIYPLi6RnkDD_HUJ079BwHmSZ_M1qJYwaZr--XrO451nqJ3Jeq9QV6SbS9eYG0siblddLbqd2MlVUEFDPaPDm_jvdMo5ezmBYUsL8ROJ_beuuYpO1_9drkW-qfLVqe7aSpTZdidByF1RFNhBixK6rJICdj3frLRsQPs6Ka4Q18eVo4yotRSHlap5xnkmMrGpskzwdFuIosw3Zd-UcttgS8kzGKXSKYGhjr5y9YwL757HTY2Z-Y9NrCg1J5hjon8Zw8m6Grv3SZqW_rCa86jnJH4CZSAT1g">