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

    <tr>
        <th>Summary</th>
        <td>
            "Unimplemented combination of reg class/subreg idx" while building eigen
        </td>
    </tr>

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

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

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

<pre>
    `UNREACHABLE` while building `eigen/test/product_trsolve.cpp` from https://gitlab.com/libeigen/eigen/

It'd be great if we could find a way to fix this for the 20.x release, @iajbar.  Note that this reduced test case does not fail downstream.

```
$ ./bin/llc -O2 --mtriple=hexagon reduced.ll 
Reg class id: 20 idx: 1
Unimplemented combination of reg class/subreg idx
UNREACHABLE executed at /local/mnt/workspace/upstream/llvm-project/llvm/lib/Target/Hexagon/HexagonBitTracker.cpp:153!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./bin/llc -O2 --mtriple=hexagon reduced.ll
1.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
2.      Running pass 'Hexagon Loop Rescheduling' on function '@_Z7trsolveIfLi4ELi1EEvii'
 #0 0x000055c68d0fa348 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./bin/llc+0x4625348)
 #1 0x000055c68d0f7d90 llvm::sys::RunSignalHandlers() (./bin/llc+0x4622d90)
 #2 0x000055c68d0faa61 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f83f503a520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f83f508e9fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007f83f508e9fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007f83f508e9fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007f83f503a476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007f83f50207f3 abort ./stdlib/abort.c:81:7
 #9 0x000055c68d068681 (./bin/llc+0x4593681)
#10 0x000055c68b66605e (./bin/llc+0x2b9105e)
#11 0x000055c68b67530f llvm::BitTracker::MachineEvaluator::getRegBitWidth(llvm::BitTracker::RegisterRef const&) const BitTracker.cpp:0:0
#12 0x000055c68b665c21 llvm::HexagonEvaluator::mask(llvm::Register, unsigned int) const HexagonBitTracker.cpp:0:0
#13 0x000055c68b6781d8 llvm::BitTracker::MachineEvaluator::evaluate(llvm::MachineInstr const&, std::__1::map<unsigned int, llvm::BitTracker::RegisterCell, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, llvm::BitTracker::RegisterCell>>> const&, std::__1::map<unsigned int, llvm::BitTracker::RegisterCell, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, llvm::BitTracker::RegisterCell>>>&) const BitTracker.cpp:0:0
#14 0x000055c68b6714bf llvm::HexagonEvaluator::evaluate(llvm::MachineInstr const&, std::__1::map<unsigned int, llvm::BitTracker::RegisterCell, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, llvm::BitTracker::RegisterCell>>> const&, std::__1::map<unsigned int, llvm::BitTracker::RegisterCell, std::__1::less<unsigned int>, std::__1::allocator<std::__1::pair<unsigned int const, llvm::BitTracker::RegisterCell>>>&) const HexagonBitTracker.cpp:0:0
#15 0x000055c68b6794bf llvm::BitTracker::visitNonBranch(llvm::MachineInstr const&) BitTracker.cpp:0:0
#16 0x000055c68b67b56b llvm::BitTracker::runEdgeQueue(llvm::BitVector&) BitTracker.cpp:0:0
#17 0x000055c68b67bbfd llvm::BitTracker::run() BitTracker.cpp:0:0
#18 0x000055c68b652f8c (anonymous namespace)::HexagonLoopRescheduling::runOnMachineFunction(llvm::MachineFunction&) HexagonBitSimplify.cpp:0:0
#19 0x000055c68c106cb3 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (./bin/llc+0x3631cb3)
#20 0x000055c68c68a8dc llvm::FPPassManager::runOnFunction(llvm::Function&) (./bin/llc+0x3bb58dc)
#21 0x000055c68c692cf2 llvm::FPPassManager::runOnModule(llvm::Module&) (./bin/llc+0x3bbdcf2)
#22 0x000055c68c68b445 llvm::legacy::PassManagerImpl::run(llvm::Module&) (./bin/llc+0x3bb6445)
#23 0x000055c68b1b02f8 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#24 0x000055c68b1adbad main (./bin/llc+0x26d8bad)
#25 0x00007f83f5021d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#26 0x00007f83f5021e40 call_init ./csu/../csu/libc-start.c:128:20
#27 0x00007f83f5021e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#28 0x000055c68b1a9be5 _start (./bin/llc+0x26d4be5)
Aborted (core dumped)

```

reduced test case:

```
target datalayout = "e-m:e-p:32:32:32-a:0-n16:32-i64:64:64-i32:32:32-i16:16:16-i1:8:8-f32:32:32-f64:64:64-v32:32:32-v64:64:64-v512:512:512-v1024:1024:1024-v2048:2048:2048"
target triple = "hexagon-unknown-linux-musl"

define void @_Z7trsolveIfLi4ELi1EEvii(ptr %cmRhs, i32 %0, i64 %retval.sroa.2.0.insert.ext.i) #0 personality ptr null {
entry:
  %1 = call <32 x i32> @llvm.hexagon.V6.valignb.128B(<32 x i32> zeroinitializer, <32 x i32> zeroinitializer, i32 %0)
  call void @llvm.hexagon.V6.vS32b.nqpred.ai.128B(<128 x i1> zeroinitializer, ptr null, <32 x i32> %1)
  %retval.sroa.2.0.insert.ext.i1 = zext i32 %0 to i64
 %retval.sroa.2.0.insert.shift.i = shl i64 %retval.sroa.2.0.insert.ext.i, 32
 %retval.sroa.0.0.insert.insert.i = or i64 %retval.sroa.2.0.insert.shift.i, %retval.sroa.2.0.insert.ext.i1
  store i64 %retval.sroa.0.0.insert.insert.i, ptr %cmRhs, align 8
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(write)
declare void @llvm.hexagon.V6.vS32b.nqpred.ai.128B(<128 x i1>, ptr, <32 x i32>) #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
declare <32 x i32> @llvm.hexagon.V6.valignb.128B(<32 x i32>, <32 x i32>, i32) #2

; uselistorder directives
uselistorder ptr null, { 1, 2, 3, 0 }

attributes #0 = { "target-features"="+hvx-length128b,+hvxv68,+v60,-long-calls" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(write) }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(none) }

```

cc @cantonios 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWUtv47ba_jXMhrBAURfLiyyUTIwOkGnny7T9gLMxKPKVzIYmfUjKcfrrD6hLbClOJu10WSCRKYl83ue98iLmnGw0wDXKbhClkv1RMYsoRdmnK9b6rbHXTAtrdolgV5URz9coJ7_9_HBX3v5U3tzfoZzgp61UgKtWKiF1g1FOQDagEV17cB7R9d4a0XK_8dYZdYCI7_dhXG3NDm-93zuUlIiuEV030itWRdzsEF0rWY1A4y8iJSLlZ4_oUuAKcGOBeSxr_ASYm1YJXEstMMNP7Bl7g2t5xH4rHa6NxX4LmJLoiC0oYA4QvcUoJb3OEcY_Gw_Yb5nvh1gQLQeBgxKYMwdYGHBYG49rJhUW5kk7b4Htop4WysnwR0pEUxwhuq5koK0Ux4tfKF4sdt7KvQKUfNrCkTVGj2IipTAi5QM0mCvmHJYCJSWmBEtxDK0YkfI3LXd7BTvQHgTmZldJzbw0Gpsa23EoomvXVuE2DCXlmbswHIG3YTDzOBAznClE1zsd_PRk7KPbMw6Irtt9r1vH_rBb7K35A7gfbnvvILr-ldkGwtOfenVOrRvpf7WMP4Lt_J2UcZYgGrT4en9XfrvDrq120mOGq7bBFvbG-uCyVwGxbV8CYpA85SOdayEojZkWWGquWgGds7llbosrxh-9ZRyCm755xh-xaHeBESIliRBZfbWmsWyHmW3aYNsg_i97D5EyDmAPrdYhDfbBiYgu163mnYu-hgdfmGYNWESX2Gi8M6JVEHqd4dBlIEovYQ2mxffG7PEDOL4F0SqpmwGvHmUhukQp2fxnOaTc5_pepnf3Mr67O0gZ3pISI5oQTI6EEJJlPC8EqVmSFrgzc1KipHTPrm98tVL7znbBp4Bocepk2dPGjMGSh6SSIZpWGNFiYkREb8gxzWmWpAWiq4FCPKOwFCtyicJDq7_JRjP1E9NCgXWIFu9JoWJFTlLoXFGWx3iCh2jR8b7FTjZS12bjES3D_cFI0TVXwwg3RDTp_nsBySBgWRdJnZGEZZTgjuKQKcci3-TpQkndHheNbvsXPHImynvONKNnjNMpYAGrmuPNZu-3FpjYPEqlNi_VoC8CwQ5670NCn3eLOErKNEVJucwH8Owj4NqD1Uy9C7ssQmaPRsgvwZ6PeRerWJ1jLecGTZc5blzngA6mbyK6jrq7ZydgH8rA3jh5RHRtmXTQAdMlSspR9WKKS8myTjCrQvXpcLzo_dU96nnFQdFh-GoaSHmRF_EbMZitkryIe4-GQJ8kW5XnOcng8lBarWKSwWloPB26zBJSnyXJqdb2918Y30oNdwemWubN8LQB_wDNjfT_L4XfTnJ4DvAAjXQe7APUmBsdZvE8xH_Xxq9K-5gIgSqdaZlxGp9RHUrYjNqOuccJoZFAyL9Wd2sUMdaVnsRb08w5l2RmtiIWxV82G_S306I3dP0cVgBnFrrFzou-x2YTj7rtUXI7VeL2HRaj6rcQJoNLiAqcm0Mmd5f7MhXm-E6Z29dv90zaGdKozYcpJnf9379m6P8-nCnpLDrjtKq_myn_RuO_0fh3o_EjJTObBeVqGpRzoQfppP_Z6BvLNN9-JChX7ydFPpNfZXn1jnzb6jvRwP-10MJ8RvsdeDDxB4Qu50KrWrwvdFh8votaTFEzWhc8zPdMG_28M63Dmu1g2HCtJkkfFviT9f0o9xc9mHXcVlwy-eldp_rJ7d_CglHWzxfITtY1PCY5rxL8JnLYy5xxukhmxuLiQifJk5hXyctCh07WSDwvWCH4GY311yB53ET9EwSqKisEPxGIpwRWlNf0AwS-dDu5qTOGR-8KF7ymJ-F0pn2VptmZcAUN48_DjuxE4_Nur84D8y9SyNM0O1GYLpniitC6wNzs9lLBi5J8y2y3IyqnJen-_vcvt0Z7OI65rhR_HWx0OvPFTFRM4B2T-o3lcC6KiokTydn2hcZhz7jZhP3Uxnlm_YYzpTYdYoDjrn29Txi2IZcGRVuUlFm3tckHkflcJKQEdwOkln4upW8G6EUH3e0jYhoQ6WiE5SXEiRKX-F9ETpahfGQDcDGz7qqCDPeQb9o3rWAIgjLse0CEntxY6M5KYLT97JCLlK8OyfpjlVlH350SYcE8U-zZtB6j5BNGlMIiRA4sQoAk9HRZsBAtCx3n_a3Mw_Z1uCzkpKvsOg2XhQyTaLBzsagn3eoJxGHy7jB9l8Xh-ct1cYgJTbu96cvP4kBJ2rvz9EPpSdf-pGjUczguWrT6UZsnPZwC7Fqn-kGIlAJqqaE7bMDvnt0Ue28xohnfPWxdd9yS0HBPunaehrYFf2AqctawiEYkktqB9REcfST7WpAQvAfrjGZK-mccMHWrFEbLG0RK0N4-967EAS_uFAnhjlFym1B8xJ0T7gLVkP_RoGH0ex4dmJKNrqKYFjdhnpwO-BOsCSkjmZJ_9hu87_c4qdgdj_RMRlO9kv8toVWk_7u3ICImz3jEtAhi4jekjEa4wCnYYBT-Hfv2tvoTjv6FNvYmeKY_QnhrsNvK2keyG-226mOuvMUJvQBLTh3Hnw7X2O_ADiQ6C3xHzc4WzocacQHzAoPRxOex24UKLjosC74_ayMlWn4aqkhyg19OUEvvbXc2q00IgIrxR6xNbQGwNu5Zc6xNq5-kFvhJKmXBt1bjHeyMfUa0eLLSD2cqArhiFn4shAZ9XkfLkGHxP6-CNnqmwQ-m4yXyXboNOtCTDq0DJYO_BVgspAXu5QEcIuXkzSSJljc4Dg3aRWq4EPziW-a9lVXrwfX1qKuVy5tQL_siuqiB-daCC0Uy-RSu9GZ7OC4U6MZvY1pUiN72zw550bcPeSiEC2V0swgmDoMHmVOB8YvAHwuni-D0B8EHR5-MNZt3OQ-u5kx7o6Vx-EpcJ2KVrNgVXMfLlJBiFRN6tb1ekbparXjGV6ngIqGrJK6zVUKWUNCq4PRKXlNCM0Jp-MsIjTKy5JTlNaRpkiWrGKUEdkyqqAssY5ur7ovLdUwLsiyuFKtAueH7YVATtDhtZIZPifa6-2hTtY0LESqddyc4L72Ca0Tp3_m8Ren8-2P3rfCqter6739KGnQ7XNP_BQAA___44Mx4">