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

    <tr>
        <th>Summary</th>
        <td>
            [MIPS] `llc` crashes with "Using an undefined physical register" when using global register variable
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          el-ev
      </td>
    </tr>
</table>

<pre>
    ### Description

1. Save the following piece of C code:

    ```c
    register long reg28 __asm__("$28");
    
 long foo() {
        return reg28;
    }
    ```
2. Compile the code to LLVM IR:

    `clang --target=mipsel-linux mips.c -S -emit-llvm -o mips.ll`

3. Attempt to compile it using llc with assersions:

    `llc --mtriple=mipsel-linux mips.ll`

4. llc crashes.

However, direct compilation from C to assembly works correctly and produces valid assembly that uses the `$gp` register as expected.

https://llvm.godbolt.org/z/qvrvfzz8v
https://godbolt.org/z/v5xMf5PKe

### LLVM Version:

trunk


### Backtrace
```
# Machine code for function foo: NoPHIs, TracksLiveness, TiedOpsRewritten, TracksDebugUserValues

bb.0.entry:
  %0:gpr32 = COPY $gp
  $v0 = COPY %0:gpr32
  RetRA implicit killed $v0

# End machine code for function foo.

*** Bad machine code: Using an undefined physical register ***
- function:    foo
- basic block: %bb.0 entry (0x56285e7c66c0)
- instruction: %0:gpr32 = COPY $gp
- operand 1:   $gp
LLVM ERROR: Found 1 machine code errors.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llvm-build-debug/bin/llc --mtriple=mipsel-linux mips1.ll
1.      Running pass 'Function Pass Manager' on module 'mips1.ll'.
2.      Running pass 'Greedy Register Allocator' on function '@foo'
 #0 0x0000562859a0a5e9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm-project/llvm/lib/Support/Unix/Signals.inc:804:11
 #1 0x0000562859a0aa9b PrintStackTraceSignalHandler(void*) /llvm-project/llvm/lib/Support/Unix/Signals.inc:880:1
 #2 0x0000562859a08c9f llvm::sys::RunSignalHandlers() /llvm-project/llvm/lib/Support/Signals.cpp:105:5
 #3 0x0000562859a0b199 SignalHandler(int, siginfo_t*, void*) /llvm-project/llvm/lib/Support/Unix/Signals.inc:418:7
 #4 0x00007f0f64644520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x00007f0f646989fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #6 0x00007f0f646989fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #7 0x00007f0f646989fc pthread_kill ./nptl/pthread_kill.c:89:10
 #8 0x00007f0f64644476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #9 0x00007f0f6462a7f3 abort ./stdlib/abort.c:81:7
#10 0x00005628599370dc llvm::report_fatal_error(llvm::Twine const&, bool) /llvm-project/llvm/lib/Support/ErrorHandling.cpp:126:5
#11 0x0000562858585323 (anonymous namespace)::MachineVerifier::ReportedErrors::~ReportedErrors() /llvm-project/llvm/lib/CodeGen/MachineVerifier.cpp:262:7
#12 0x00005628585846d0 (anonymous namespace)::MachineVerifier::~MachineVerifier() /llvm-project/llvm/lib/CodeGen/MachineVerifier.cpp:102:8
#13 0x0000562858584b84 llvm::MachineFunction::verify(llvm::Pass*, char const*, llvm::raw_ostream*, bool) const /llvm-project/llvm/lib/CodeGen/MachineVerifier.cpp:431:3
#14 0x00005628582fb748 llvm::LiveRangeCalc::findReachingDefs(llvm::LiveRange&, llvm::MachineBasicBlock&, llvm::SlotIndex, llvm::Register, llvm::ArrayRef<llvm::SlotIndex>) /llvm-project/llvm/lib/CodeGen/LiveRangeCalc.cpp:211:7
#15 0x00005628582fb5f7 llvm::LiveRangeCalc::extend(llvm::LiveRange&, llvm::SlotIndex, llvm::Register, llvm::ArrayRef<llvm::SlotIndex>) /llvm-project/llvm/lib/CodeGen/LiveRangeCalc.cpp:104:7
#16 0x00005628583004df llvm::LiveIntervalCalc::extendToUses(llvm::LiveRange&, llvm::Register, llvm::LaneBitmask, llvm::LiveInterval*) /llvm-project/llvm/lib/CodeGen/LiveIntervalCalc.cpp:145:27
#17 0x00005628582ddfa7 llvm::LiveIntervalCalc::extendToUses(llvm::LiveRange&, llvm::MCRegister) /llvm-project/llvm/include/llvm/CodeGen/LiveIntervalCalc.h:56:3
#18 0x00005628582d8532 llvm::LiveIntervals::computeRegUnitRange(llvm::LiveRange&, unsigned int) /llvm-project/llvm/lib/CodeGen/LiveIntervals.cpp:341:7
#19 0x00005628582ddaca llvm::LiveIntervals::getRegUnit(unsigned int) /llvm-project/llvm/include/llvm/CodeGen/LiveIntervals.h:422:13
#20 0x0000562858305d8e llvm::LiveRegMatrix::checkRegUnitInterference(llvm::LiveInterval const&, llvm::MCRegister)::$_0::operator()(unsigned int, llvm::LiveRange const&) const /llvm-project/llvm/lib/CodeGen/LiveRegMatrix.cpp:180:39
#21 0x0000562858305221 bool foreachUnit<llvm::LiveRegMatrix::checkRegUnitInterference(llvm::LiveInterval const&, llvm::MCRegister)::$_0>(llvm::TargetRegisterInfo const*, llvm::LiveInterval const&, llvm::MCRegister, llvm::LiveRegMatrix::checkRegUnitInterference(llvm::LiveInterval const&, llvm::MCRegister)::$_0) /llvm-project/llvm/lib/CodeGen/LiveRegMatrix.cpp:104:11
#22 0x0000562858304ff7 llvm::LiveRegMatrix::checkRegUnitInterference(llvm::LiveInterval const&, llvm::MCRegister) /llvm-project/llvm/lib/CodeGen/LiveRegMatrix.cpp:178:8
#23 0x0000562858305341 llvm::LiveRegMatrix::checkInterference(llvm::LiveInterval const&, llvm::MCRegister) /llvm-project/llvm/lib/CodeGen/LiveRegMatrix.cpp:204:7
#24 0x00005628586a9daf llvm::RAGreedy::tryAssign(llvm::LiveInterval const&, llvm::AllocationOrder&, llvm::SmallVectorImpl<llvm::Register>&, llvm::SmallSet<llvm::Register, 16u, std::less<llvm::Register>> const&) /llvm-project/llvm/lib/CodeGen/RegAllocGreedy.cpp:556:10
#25 0x00005628586b294a llvm::RAGreedy::selectOrSplitImpl(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::Register>&, llvm::SmallSet<llvm::Register, 16u, std::less<llvm::Register>>&, llvm::SmallVector<std::pair<llvm::LiveInterval const*, llvm::MCRegister>, 8u>&, unsigned int) /llvm-project/llvm/lib/CodeGen/RegAllocGreedy.cpp:2583:11
#26 0x00005628586b336e llvm::RAGreedy::selectOrSplit(llvm::LiveInterval const&, llvm::SmallVectorImpl<llvm::Register>&) /llvm-project/llvm/lib/CodeGen/RegAllocGreedy.cpp:2312:7
#27 0x00005628589d1025 llvm::RegAllocBase::allocatePhysRegs() /llvm-project/llvm/lib/CodeGen/RegAllocBase.cpp:115:35
#28 0x00005628586a9059 llvm::RAGreedy::run(llvm::MachineFunction&) /llvm-project/llvm/lib/CodeGen/RegAllocGreedy.cpp:2925:3
#29 0x00005628586b5bf1 (anonymous namespace)::RAGreedyLegacy::runOnMachineFunction(llvm::MachineFunction&) /llvm-project/llvm/lib/CodeGen/RegAllocGreedy.cpp:298:15
#30 0x000056285840def2 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:108:8
#31 0x0000562858c319ef llvm::FPPassManager::runOnFunction(llvm::Function&) /llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1406:23
#32 0x0000562858c3608b llvm::FPPassManager::runOnModule(llvm::Module&) /llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1452:16
#33 0x0000562858c32269 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1521:23
#34 0x0000562858c31e16 llvm::legacy::PassManagerImpl::run(llvm::Module&) /llvm-project/llvm/lib/IR/LegacyPassManager.cpp:539:16
#35 0x0000562858c36331 llvm::legacy::PassManager::run(llvm::Module&) /llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1648:3
#36 0x0000562857342e40 compileModule(char**, llvm::LLVMContext&) /llvm-project/llvm/tools/llc/llc.cpp:755:9
#37 0x0000562857341065 main /llvm-project/llvm/tools/llc/llc.cpp:400:13
#38 0x00007f0f6462bd90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#39 0x00007f0f6462be40 call_init ./csu/../csu/libc-start.c:128:20
#40 0x00007f0f6462be40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#41 0x0000562857340845 _start (/llvm-build-debug/bin/llc+0xda1845)
[1]    746812 IOT instruction (core dumped)  llvm-build-debug/bin/llc --mtriple=mipsel-linux mips1.ll
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWktT4zi7_jVio0pKlu8LFiGQGeo0Byp0d9VZpWRbdnRQJH-SHGAW89u_kmwT2wQ6dDPXVJPI8qvnfd6rJROtWSUoPQfhBQgvz0hjtlKdUz6j-7NMFs_nAPvtB15SnStWGyYFQAuAFt4c3pM9hWZLYSk5l49MVLBmNKdQlnAJc1lQ4C_a2RBCCCLUfvJuQNGKaUMV5FJU9hdO4GZD9G6zATgBGAMcdH9T4F_0YtCivaGU0k1LIYj7i61Y0yjRyhvcFl9OcQC0wHO4lLua8VYRixkaCb98-X4Dr9dT-DknooKzmSGqogb4lztWa8pnnInmCdof8xzO7uGM7piZcb7fwZlsxzlvFwRo4c_hwhi6q41dKu-WZwY22lLIeQ4fmdlCojVVmkmhpzjslNlsZxSrOT0KY7BcMHcic0X0lup5O_i7fKR7qgBewoIpmpsOB7EGhqWSO7i06CyGXcaf4aNUDxrmUtnJ_BkSUcBayaLJqYZ7wllxmGu2xCpDtePUAsFBVYMIHSxONKRPNc0NLTpEW2NqpyheAbyy3M0rWWSSm7lUFcCrPwBe_Wev9uUffyT7Vze8nrsPn27K8O5_aCv_4MrOuN9bal-YNaoRD93M4eQLkj8YRXInZeA49toNybdMdF5TSgXLRuQtgVICfwH_V979fq0tyV8VyR_0F7angup2hNHittZr-qiYMVQcZl3SrKm-aaq-E95Q3SLKsjmaU2HUcwsZQoBDBPxFVSsfQ-BfwuXt3f_Blur2erBHwwuH6e76mpr1ArJdzVnODHxgnNOiveuFBHglCrh7T815P7f7wAsyvsPy8M05NhGwEQUtmaAFrLfPmuWEH1ziRQRAi9nLGvZ2CB2hdjgjmuUw4zJ_sFcADi0x0BEDAU7QUxjhJKRxHkU5snnD3sWENqp5kfc-czMoa6qsf3vt4v0F5zdX6_WtzQtwJRs7ZcwOVUoqF2N3X64W91dQN9mOGUhg1tgMV0vlgn7iu8xsm2yey13n-d2fWa3k_9PcALxiWltXwCsXeEzkvCm6lGXjGma9m9q17w3JH2DR7OrWV9C8TYx3SlaK7CBRVbOjwlgE0C2UNYwXs8I6HsCrjAmH4AdJxrNZxhUC99-6EcKVAKI1BDhe9V5yZwduiCCVTTgxlALuZNFwame9CMLxvM3HR4X9pigtnuG6d5YF5zInRvYCX1wS4BgEyJWG2Lo5wD6C6AkhhJxnpASRkKZObcuOv9DPuv1yp5gwjruvLuBxcpikyONGaqMo2QEc2VhlwrjS88pUvQFZBvDqvqmtzQFefRPsyQ6wShCu50zkwF8kKAD-wvM6pN4UKUkzOIHVCvidiIJbOpO9ZIWLm1_Gktig6KHgCZQkT8tjpK0bMUKk-5J8KpYeRF5bb_VQCPxF2IHwJyAyL03hlABniCXUrGKilBvjyFjCT-Ml8BLgL3pnCjpIcYnKKIiCIMQIOp07aU9JtImCNkxmlWjaC_lcy3kE8AV6CnCIu8xkBYZjgWmSljncbGqzVZQUG5uWNzZJUxuxbXmeA7wSteEAr4bT5g6tdag46oRHpwgXhipB-Lti48QZpxMbHxM7vOddWUk6lJVMCQ3iCFbamcCJab8CvJq7X8-6oLXNhLXUzlqKME2dYBwDf9Grno7lYhKXPiSZTcBOjilae7mhFpfX2dlG4jhppH6Minzg_20q35TEEL5xWX-ULr4-tiVBaNOli0xK_iFfvLJCnZczUfXRgaMuOizEUbaw__vYt65IhBTPO9loKMiO6trlsrQF1rUs36liJaOqi2GnDC3ckl1c_zkZPCmql7Kgv9lWZjVZp8OPIzygGE_wB1GBfgr_n9PRTwHrIQs26cD6U7BZEgz8oROxOnQtwF_srcDnkWPYWtglqHxLVO8ibuCNarMYuo-b_6uaBb71dL_TLBhphsssDpIBFtuzromo6JLwvB0qmSjW1ImuLmmpRxq-zO8c_xVHF7aFu3Ad3HTGPZfmWhT0aTzcV_3x6EIp8rymJfCXxyT4Vx_ygZGavbt6w4wQTnkKy_h9nuiToaI4kZ1_me6e60x63aOR7j5CQVFOdL-2ZWRP-FT9r_Kbpqe6yHFtvxBBL5jZEf0wuTBY97RaP1Z6iLnXOwjbStIqHo-NXhQlmRr9UxS_WR5Uf0eJrvE_DLyjz9aWimgQ6MlEF1sw3tClKwK53NWNoWtafRPMdMjf0acRbkOpOLE5Pg6-bwX9YBh96dQQJCfvg6-o6YADnJyM7ESGtaM3wLZEeB3BGE2iJCwSOs0QtLohRrGnjuAtzR86lE50SRUV-WuW-3VHPcUb7tMOARxsUPvVPc-6ZyVbF1-xMY0oZ9HBQh-uOiNF-7hyTxd-2lHlTanC2HNFDpZS2dLi7DbMbv8Ie1fjrs5t-_Vzr0Up36jfH1zzlQH-ZjU_XCumtj08xVrb4oltg_J1ofwbNPxFndwTT9f9YX_qrn7gnaDSv0QXPKzleNzvRSQtyLCWrxftXkv7y6jnhTsl-Cj8boOGSXGrCqvDtN3ZEc6_09xIdb2r-SjUXxS38Xfsvntqjt-Al9CLGrcdYIr2GqdavyndvxrluZNZXtPKKdhS1dEcumrrdbvDeNwvRhlOA_Imz5pymptbdV9zZhwhH-T738Lne8CAv3wRUxOmXuX3qY6LN0PCLrSESXNY8ad7j6O2xGHiD3NaNDGm70f0NGP-lYb8ZS19b_BAjsfNblp4CIfj5tyJuCCatiOkDXJ6t33Wa1p9eJdgKLHPu57tv_1ujwMn02SFwvRN3lUzTlPTh_JPoSzF4aGnxunEL8Ks9H60h9GD_kIrkh-g34pXeP9yXdyuXsf1eJ88CVBBS_z2FofbyThgPwr6Z9EeWeql1RiU5fF-eZL7XkqHpWx1Z-_sTx4-Fev12tZaZ8DBGi_PkChy0dXBxBOYEUqyE2DeuEOSsRd0Q58AMXSPLlEH0Z9AxDhKf7gX90_gDrE3pDaYegD1ogG1fBBiA2FtYj2aMj4LaOinQ37DqQtY5_0hzr8YoxcFySGX-aMaF_sBpgHqX094sWm-Jao_qR09t3z5frOUwtCnHzZTRkqu2wPG9t8OThzazNo9IfrxBI2HohDuCBMfFxwgNHhMn5444KxIEdxsOMvyjTZEmU1OON-4teYAr3LdvD596A43jt3U7rwkQ_NPDyMyRy1xpy_MTFdpv1rRMyfanU54OHGtfCsxQMckjpQ4hv-oZD9OD6cKgTfhHSVBCFuR_TnXOyfG7oSrIF4ShO0RFwgvPBBeQghhHESJh-H17dfhgbwVmktF3Xk1Lazn_PqZ9PBNjbPi3C9SPyVn9NyLgyBJvQTFZ9tzkmc-Qn5C0jQs8zLEZeJleUowjgqM0_SMnWOEQxR4sYc9hOJ5VGRehJKiSCMUp3kIAkR3hPG5BTyXqjpz5_Tnnh95Pj7jJKNcu7erMBb0EbqrAGMQXp6p807LSoMAcaaNPogxzHD3WtbN9d29pa996QdEqH-Pp31FCGB8yrsVAGP4uKWie8Oo4jIbvnmxJ4qRjNOzRvHzn381odN6f47_GwAA__-Mr8IW">