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

    <tr>
        <th>Summary</th>
        <td>
            [Hexagon] Cannot select `mulhu` for v4i8 and v2i16
        </td>
    </tr>

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

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

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

<pre>
    ## Description

When targeting `hexagon`, the following code crashes the backend with error `Cannot select: t17: v4i8 = mulhu t5, t29`.

The same problem exists for `urem`, `udiv`, `srem`, `sdiv`.
The problem only occurs for v4i8 and v2i16 and doesn't occur when using v2i8, v8i8, v4i16. 
The problem doesn't occur when targeting `x86_64` or `aarch64`.

## Minimal Reproduction

https://godbolt.org/z/eb35c5W5K

### Code

```ll
define void @f(ptr %0) {
BB:
  %L = load <4 x i8>, ptr %0
  %B = urem <4 x i8> %L, <i8 42, i8 42, i8 42, i8 42>
  store <4 x i8> %B, ptr %0
  ret void
}
```

### Stack Trace

```console
LLVM ERROR: Cannot select: t20: v4i8 = mulhu t41, t31
  t41: v4i8 = truncate t40
    t40: v4i16 = HexagonISD::VLSR t39, Constant:i32<1>
      t39: v4i16 = zero_extend t5
        t5: v4i8,ch = load<(load (s32) from %ir.0)> t0, t2, undef:i32
          t2: i32,ch = CopyFromReg t0, Register:i32 %0
            t1: i32 = Register %0
          t4: i32 = undef
      t36: i32 = Constant<1>
  t31: v4i8 = splat_vector Constant:i32<49>
    t35: i32 = Constant<49>
In function: f
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./llvm-project/build-debug/bin/llc -mtriple=hexagon ./crash-reports/dagisel-hexagon/3.ll
1.      Running pass 'Function Pass Manager' on module './crash-reports/dagisel-hexagon/3.ll'.
2.      Running pass 'Hexagon DAG->DAG Pattern Instruction Selection' on function '@f'
 #0 0x00000000047c438a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:569:11
 #1 0x00000000047c453b PrintStackTraceSignalHandler(void*) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:636:1
 #2 0x00000000047c2b76 llvm::sys::RunSignalHandlers() /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Signals.cpp:104:5
 #3 0x00000000047c4c65 SignalHandler(int) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007f12f0f0f980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #5 0x00007f12efdffe87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #6 0x00007f12efe017f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #7 0x00000000046ec004 llvm::report_fatal_error(llvm::Twine const&, bool) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Support/ErrorHandling.cpp:125:5
 #8 0x0000000004538a0b /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3779:3
 #9 0x0000000004535fa2 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3681:9
#10 0x0000000001db4759 llvm::HexagonDAGToDAGISel::SelectCode(llvm::SDNode*) /home/henry/aflplusplus-isel/llvm-project/build-debug/lib/Target/Hexagon/HexagonGenDAGISel.inc:90373:1
#11 0x0000000001dc3819 llvm::HexagonDAGToDAGISel::Select(llvm::SDNode*) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.cpp:916:1
#12 0x0000000004529aa9 llvm::SelectionDAGISel::DoInstructionSelection() /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1165:5
#13 0x0000000004528afa llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:936:3
#14 0x00000000045274cd llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:688:1
#15 0x0000000004526f6b llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1603:11
#16 0x0000000004524516 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:467:3
#17 0x0000000001dcd8be llvm::HexagonDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/Target/Hexagon/HexagonISelDAGToDAG.h:44:23
#18 0x0000000003585535 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
#19 0x0000000003c6cde6 llvm::FPPassManager::runOnFunction(llvm::Function&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1430:23
#20 0x0000000003c71c12 llvm::FPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1476:16
#21 0x0000000003c6d6b9 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1545:23
#22 0x0000000003c6d22d llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:535:16
#23 0x0000000003c71ef1 llvm::legacy::PassManager::run(llvm::Module&) /home/henry/aflplusplus-isel/llvm-project/llvm/lib/IR/LegacyPassManager.cpp:1672:3
#24 0x0000000000d1edec compileModule(char**, llvm::LLVMContext&) /home/henry/aflplusplus-isel/llvm-project/llvm/tools/llc/llc.cpp:737:41
#25 0x0000000000d1d192 main /home/henry/aflplusplus-isel/llvm-project/llvm/tools/llc/llc.cpp:418:13
#26 0x00007f12efde2c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#27 0x0000000000d1c99a _start (./llvm-project/build-debug/bin/llc+0xd1c99a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNWd9z4zYO_mucF449EvX7wQ-JnXTTS66ZJLeduRcPRdG2Wkn0iFTi7F9_ACXZouLMZnvppm3WpkQK-D4ABCA6ldnLfEI9-CNLoXid73Quq4mznDjn7efvW1ERzeqN0Hm1IZPQ2Yo928Ci0JnQBdFbQdayKOQzTnOZCcJrprZCmamU8T9FlZHnXG-JqGtZo4gFqyqpiRKF4HrinRPtRvj15OcxmXhLUjbFtiE6MBpoAo_MhqAeQbJipSC7WqaFKInY50orAGLEN7UoO3h4leVPxytlzal2bnYU20uUVfFCJOdN3Yo10BgweaK5G5pRJoWqJjTS7TryjKZqFNoBFsWo4inuvn14aEZeqzkpwzL3Pg5XoQ8D0pJjrOZbc8MySefF27zKS1aQewEasoaP3bnVeqfA1BN6BX8bmaWy0DNZb-DqG_wTqRfw4PfgX69lo_gF-NeaAUuav6Job2RinVeCPMk8IxPfWU9ovNOAmwZg8oRMoot23cUFgjBDgrM3xu2FZPCYt_DJnoDhvEu03eH54-oLsxrdbK02goxnvQV4y6c4fmsAwjuBSstavBJ0cUp3LbTh1rGPliMznLbag4ZdQB5rxk8bj8tKyaKbu7n5eksu7-9_u8cd8XqnUOfUTvFds1U8t0eKd4brdN1UnGkBEwc2xFy0qyCmcdmXdnNfPyzRP97515uHexCboPQFwNSsQhi5BwZcuAMjGmmwzpL2TdRyJfYaMwBs5sFSgtcdPpDNtwf_g1wImjYSaKxAEcTNupYlOiKvZxhH6CLdph_j0aaCuOtgWUoILgA1OHHQspC7lysQeC82nRQYQf4QdSvC8vhAkttJMkL6R04u1v5waYvOslM4nD_a1bIoOnPoQbUrmF49QRxAInjlCz-xnKG94A0Vg4XXFVlDVJgcAYs7jHc3l-cPl0Q1aZlrwkjabCDud7LWREsySiCQ1pt0xmUJF0Xx1H9NIfv8gRFLr3KlGqFgYHJmXvGigRqBtcHUCVMhNG6NLp21myVryt0hQ2CmS-5qualZSSA3NqWoNIIgs9f60iYvsmkmADZe5ZVZwsm01FDeYJd5y66CmacNiGnLD1FmDPwqimlf5eiVN-uTm4s47puqwtS8Y0qB86OrzoLkDm_csoptIJBoBBWElJCCC4GrfkAVLjbq6Cl13QYly_NfpuBI-ALFGgKxItfg47pN-eTBJAx0bIuk9zOKaPNy1AULJCiHOHun_8-PuO_FjBhvmhygXlQ7uKvzShv_tLkMtulhUc2eVxL0CwYxEJo0C-GGKZ9ebWUp8EtU9Qt8s3WxKxqF_6ZogNc-7CMpT-HzodmhxWD0nyrf4418U7FCzSCWQHEQYtJx3SMdd0wn8FIywt7K-AIhWaC3YpPU6fnPABya3T_AS0d4aRqFp8wPoWDBhhiKPxhwj5TvcPe5Duax4IjUG1uWhwEZm_In-d13ItuMfgcuWrt07cD_SeyQ1aoWpr6vIH0Ze3XS27ZqWuRVs59uqqad2OktRHA2UxLrzIWzdylIwYpzUBMM1Ih1tl6LOCI1A0Kkzz6YGEEYny6-_vr83_RwSWew6-iVMjxgMMOsAO7NxA7zQdPShBtPBg0gg28jemYiHeuBc0QSWkiE48KAsFQapu9DorPWGuYpoyQeKYksl4eCw-cgONtstlozzYqV6e-trPD4jN0g9je6ywqplMUHh8clqjXxB4myD10a2KEbWzwCyHBO-v-DwH74F4Gp-5BwISOPLq_hooPlRRFmK--IKxnhCtaMDuw7ljO8i8oXsiwxyQ9s_rD8N3bpmMywM8JoExnhW1b3jrBnPmq__rAtQhNryaFbdq065GapHwXJwBZd6QMpj_INc7xliL9Gz24lWpaP5t0MBl8OVbsbAfeeYJuhEseLvGOOQoauzZB7sfsDDD-WneW8t2khiB5Q57nEDW1adgULaMJY8t0gXspBwzLoVz6mpv1oNLpuOMgYSMobkYrZmn2XVKf2vMouoXs2Gj-HT2K6DO9Ixx_RiXyevTPRXDCV84tC8j-tCMwLeANa5dB7Mqiw8GoxnsqEZnknqQL8K2mOl5S1dBAE5oWubgR-r6HSm4HpzNqTgMM9s6i99w-D05a38FNcHsaxvS2DkcvDdZi-0-XnRXH0urLcfnjhOZb1z9ivoeMN-n6kG47o-oEbfpdu3VS_VbeMb6FR6ZlZdF_NfQ5fP4zs_RyNSkkWp-I9peSzCL-zwmyRK7520AFXq3nzgjiAPom8iRhfxAdcT5L8-9x5AsyhbGJ_fWRltX4eD3kmhvF6dYfP9gcKP5nP9T183IgN4y8DFP3e8z3H9hB1bC6Ry136Di635oDEDr_u1k_hEZlGJjzycEc-ycIUUcSsktVLKRtFKlYKtTPHH0mH-J9JLvCDkZPomBylwxagMJLa8UDedbk7po7PYhOY88yhp7xxxAl4-_0umU8n4oYRtRI5tRozJ3NFJjjU1nKXF-IQQvj6Znr9c7vpwV8LFrLSYv8BlVhD86LMJW8_O8yRh7XHP5ZaGowwZ25CScny6u9Q77umrxmYzD75yATlcURWKzzaWCnNar3qsbznFIQrPP0xhzHt0EwaOeZIxDP1yDmqj0bseZIw0irGXPH-Q2lzxNQ-fzhjOvwqdCbmbhjGoQevW_5ZNveyxEvYmc51IeaT4KKvo8HS_pUIfyQ0vwrhb4avf7o8a-pi_tdP8YPE8f2z7ZwnmU-dEKyROqFIE8-JYiflNHaFn4ZBclawVBQKgU4orcQzMSJgDIDP8jl1KHXhpYtSaNT8WSTACF7M4c0RHo7FxHcE-LCYIQ78ffKsnhtIYEEFk9jQq-MkbDM8zDB2Qfms0VtZz7-wby8AfXtmdM8N9v8B7YRlOw">