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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] Failure to select 64-bit SLI intrinsics with immediate 0
        </td>
    </tr>

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

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

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

<pre>
    The AArch64 backend hits a "cannot select" error for these two AArch64 AdvSIMD intrinsic calls:

```c
#include <arm_neon.h>

uint64_t foo(uint64_t c) { return vslid_n_u64(c, c, 0); }
uint64x1_t bar(uint64x1_t c) { return vsli_n_u64(c, c, 0); }
```

```
$ /work/llvm/build/bin/clang --target=aarch64-none-elf -S test.c -o - -O1
        .file   "test.c"
fatal error: error in backend: Cannot select: t17: v1i64 = AArch64ISD::VSLI t18, t18, Constant:i32<0>
 t18: v1i64 = scalar_to_vector t2
    t2: i64,ch = CopyFromReg t0, Register:i64 %0
      t1: i64 = Register %0
  t18: v1i64 = scalar_to_vector t2
    t2: i64,ch = CopyFromReg t0, Register:i64 %0
      t1: i64 = Register %0
  t7: i32 = Constant<0>
In function: foo
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: /work/llvm/build/bin/clang --target=aarch64-none-elf -S test.c -o - -O1
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'AArch64 Instruction Selection' on function '@foo'
 #0 0x0000556cc8818207 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/build/bin/clang+0x87ae207)
 #1 0x0000556cc8815dfe llvm::sys::RunSignalHandlers() (/work/llvm/build/bin/clang+0x87abdfe)
 #2 0x0000556cc877e158 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
 #3 0x0000556cc877e0ef llvm::CrashRecoveryContext::HandleExit(int) (/work/llvm/build/bin/clang+0x87140ef)
 #4 0x0000556cc88126a7 llvm::sys::Process::Exit(int, bool) (/work/llvm/build/bin/clang+0x87a86a7)
 #5 0x0000556cc5cd3605 (/work/llvm/build/bin/clang+0x5c69605)
 #6 0x0000556cc8786680 llvm::report_fatal_error(llvm::Twine const&, bool) (/work/llvm/build/bin/clang+0x871c680)
 #7 0x0000556cc9c75601 llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/work/llvm/build/bin/clang+0x9c0b601)
 #8 0x0000556cc9c745b2 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/work/llvm/build/bin/clang+0x9c0a5b2)
 #9 0x0000556cc5f90ab7 (anonymous namespace)::AArch64DAGToDAGISel::Select(llvm::SDNode*) AArch64ISelDAGToDAG.cpp:0:0
#10 0x0000556cc9c68e7d llvm::SelectionDAGISel::DoInstructionSelection() (/work/llvm/build/bin/clang+0x9bfee7d)
#11 0x0000556cc9c67e17 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/work/llvm/build/bin/clang+0x9bfde17)
#12 0x0000556cc9c65b2c llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/llvm/build/bin/clang+0x9bfbb2c)
#13 0x0000556cc9c62b01 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x9bf8b01)
#14 0x0000556cc9c60329 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x9bf6329)
#15 0x0000556cc7c49d18 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x7bdfd18)
#16 0x0000556cc81d250b llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x816850b)
#17 0x0000556cc81da341 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/build/bin/clang+0x8170341)
#18 0x0000556cc81d2f1f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/build/bin/clang+0x8168f1f)
#19 0x0000556cc8fbc8de clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/work/llvm/build/bin/clang+0x8f528de)
#20 0x0000556cc8fd1520 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/llvm/build/bin/clang+0x8f67520)
#21 0x0000556ccaa7d717 clang::ParseAST(clang::Sema&, bool, bool) (/work/llvm/build/bin/clang+0xaa13717)
#22 0x0000556cc95e3ad6 clang::FrontendAction::Execute() (/work/llvm/build/bin/clang+0x9579ad6)
#23 0x0000556cc954e5af clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/llvm/build/bin/clang+0x94e45af)
#24 0x0000556cc96e4b20 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/llvm/build/bin/clang+0x967ab20)
#25 0x0000556cc5cd2dd0 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/llvm/build/bin/clang+0x5c68dd0)
#26 0x0000556cc5ccf091 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x0000556cc9395259 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_1>(long) Job.cpp:0:0
#28 0x0000556cc877e08b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/llvm/build/bin/clang+0x871408b)
#29 0x0000556cc93947c0 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/work/llvm/build/bin/clang+0x932a7c0)
#30 0x0000556cc93512d3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/llvm/build/bin/clang+0x92e72d3)
#31 0x0000556cc93515d7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/llvm/build/bin/clang+0x92e75d7)
#32 0x0000556cc9370e09 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/llvm/build/bin/clang+0x9306e09)
#33 0x0000556cc5cce46f clang_main(int, char**, llvm::ToolContext const&) (/work/llvm/build/bin/clang+0x5c6446f)
#34 0x0000556cc5cdfb47 main (/work/llvm/build/bin/clang+0x5c75b47)
#35 0x00007f06f9c29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#36 0x00007f06f9c29e40 call_init ./csu/../csu/libc-start.c:128:20
#37 0x00007f06f9c29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#38 0x0000556cc5ccc8e5 _start (/work/llvm/build/bin/clang+0x5c628e5)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 21.0.0git (git@github.com:llvm/llvm-project.git c3ce5684a8b408220eed983d065edba0e6ed5016)
Target: aarch64-unknown-none-elf
Thread model: posix
InstalledDir: /work/llvm/build/bin
Build config: +assertions
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/test-65c08e.c
clang: note: diagnostic msg: /tmp/test-65c08e.sh
clang: note: diagnostic msg: 

********************
```

Zero is a valid immediate according to https://developer.arm.com/architectures/instruction-sets/intrinsics/vslid_n_u64, and is valid for the SLI instruction.

The signed versions of these intrinsics are also affected, but the `uint64x2_t` and `int64x2_t` versions are not.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWltz46i2_jXKCxUXQlc_5EFx4p5MpSepODOnznlxIViyOS2DNyAn-fe7QLIlOU7nMpfaVXsq07bFYvGt-wJEjRErCXARJJdBcnVGG7tW-kIZS6Wkmp-Vir9cPK4BFYVm6zRGJWU_QHK0FtYgigJCGJVSWWSgBmYDQhBorTSqlEZ2DQaQfVKH6QXfLW6-XyEhrRbSCIYYrWsTREWA_V-K2z_mfpBISFY3HFAQzajeLCUoOVkH0XVL3Qhp03hpUaVUQPLDTxaQKQqyS6TBNlqinakFX8plk8YByVlAZsj_gwMyDaJLFGRXB27P4dKikuoDP__gFMd3GR6EOZLNixajgMyflP4RkHld7zYBmZeNqLn7FDIgc1ZTuULn55bqFdgguqLU6_BcKgnnUFfofIEsGDth6Fyhc3R-Fwa4QN1_k0rUgJCzUEsUEBLgoqKW1q2JgqjobCXk3q7u2Wxk0KhANszcxy4UaYyC6GpvzZvFlTNcVPyxuL1BNsydCrqPmZLOidx8EZEgmuHWan58xMwwWlO9tGq5A2ad15BODEscpXA6nrG1J56p7ctcq80DrJDFbqEHWAljwUnjOZIEH7Rgw46Bn7un7Gn-o7B4HYuIdLz36tsr7kaiqpHMCiUdofN4XNzfXheLa2SaciMsoqhsVkjDVmmLrEJra7c-tMg8IPOVsOumnDC16T3OfZxvtfp_H7pzYUwDJiBzRCVH-9iza0BMU7P2TmI1ZeCE3WrYasXAGODIqEa3j91MaoxiglrgSDcSGabF1k4CXCwsZT8QbzbbNuLxBN1rtdJ0g6heNRuQ1gH-m0IjnLSmCKIZqCqIrtGWagMaUYtcTlMVckET4IJ0lDPFAa1AgqZe8biIupGHRkohV2hLjUEByeadbdC9e_CdSroCHZAMKYk2ijc1OKp9JGZOGfEbrPa58kYaq5uW68IHo4PQsty7gqMPYuzzX-b8KCARRvgZY4yTJGUsz8Oc4Ax5PfpgNS-m_XKvhbTeIo-tTfOeSNOnpTJWA90EJHV2FdL6HEjyjxgnIJf4Oc8oEJy5nNgiC4-QJbyCU8geGrkQK0nrX6jkNWjjV_304iWvoF-cjBbPMgiT3HGkUsmXjWoMknQDZutVMW2BzJzbPwBTO9AvMyUtPNubzbZuR1t0niYguVfQDDXSl1SOauWQTNEpHhO2dRGA_f8tvOgYHoZqoJtTXIYorp-F3YP4rKLCGEPVKyo-shJJ6Rv-46O__TFcf4ZKpeovGCxP6cBbkiGOhPEoxcmnOCYsnaY46TmmYx3naZrjgWRt5lz6ErlsS-QwJh6fhATEXGbuYuJrYoYszXEPKhuCmrIsSXE4AHWI_Kvi280COtdra_T_gl10bdcA5-LqN8UhIMVnoU0ZLlMc9tDyI2hxUpJ3obVPXeacqc3GZazT2AahwtZU7xU7HvmCP08ZpklJeimmIz-qppiW2XuB3-Xgq-Lbozoh3dv6PrRGUO8nHwW7y4N4rNg0h4y_q9grNagIg4Lw6dQ4LSuAjLcacnDCIzgZhNn7Lqg4fANZSH69Efaq-PY1JBzCrEdCjpAkJWEf9Liiri-pEeyyVuyHGVnoUJz74P00zrIkrMcZHeEk5QeCVjfyTn6nbC0k7CGNcL4a-wrQvNyHsAMaHwHFEZn-BOgtrCh7-SfhphGZ9nBHOT9j8ZSHOXpzRddrDbCeBPkn0GUlr7jbzuzRjetHyEmCywG6-b0DtO_9_j5ceZjmCS57XNkRLhrF4Qdwffd96dik3aMvYMpwFA8cLz_WVRUO-5l64GgDdH1zpRv5VyFL8yqsemSjepBXJcs5oJberwQbYS_b7fBdY7eNy_aD4ZnabEUN-sbv0Bh0vcCIwmfGu62zr-nGBzFntZCrB9dyDR_vBSyOuHVQis5bhlNupNWNETt4gGom7b3VQTTrh3dVFx1zUcPixVjYuL0kmSFjeTvSSPGvBpbbo5mu_d8-aWFhud8EDCZxqGhT2yWHGiy8MzG67tZ8LZLb5DYbt036dKuSVwnJORyMSsabnoqHCcE_W3LQOj9qKk3tN3i_S3Fk7WLxuO-2v-B6VZolBPcoR4WW0oxnYTZEee_2o8XicYxhARs66ji_1nlSGkbZoNiScbFNIKI8HaKZayf5wfW6Ph9YY-ErtT7JppSn_fLjGprEkNAK_SzQhgD24ZC_jfcL5SiGOKF9qiDj6plCXI69qgPTI90pRl8De50yPt-bpxkth650vDsinGPEWLjcUDHOnIXW9MWlm2g2brS7uDxuvndK8C8gTFiacz5AmI4RsgpPQ7TX2Cx89C487KM3tK7_8OdubRk4AfcolToeXXiOejuuxQ7068abjDdb0TQhydQLPGC6P1tZaq8zP9r6u09mjoTRui4p-7GspIPZW7pduLP6LHQ7ICr5ceictM0hvSpfN2g9Sqx90Tgk1MOE5ZI9P4dh-6N0PbBLvsJh8iocEbsHS6upsGY_fMSO1rXzYqUH446k6BOPd45W4X5KQOJl6Iny_bHHr6o8of_81SlHXn7olOOhkQtaQf0yUt_PTfWVg5C8b6vI9MhZ4oyNov-_ztify1gRoRnr88H4XHIaJSHh0Zvq9BmTvqo7ex2P0uvRREcwOqb5GGlxdKjzBYkJZIRHvcThscQJzz4r8a-qNG-L-6sqb4WxI3F_llEPdt9S4Uzendd9VEOdc_wFekp434iMj2anUYYBT9_CdDX4Piq_J-ruW_r9B_X0ySof4RRwvx8enwonjEGcdj3Svs7vkfnQL7rAfb9CfrKyx3Hat0XjE-KE8aqMM-TwfJJtlpTxwA32LU1W4bSaMjLlU4yWy1qULsdRbZeu7nrB0cSxMk1A5hP31bwYDlsTkLnc2tqtfWLSZB1ERZIHURGm3ZLp8ZIQY38lvRRS2ONV2q-O9blnPWGOF3EcSVfhDse5I44jIU7hP8k5yqYOcMc4P3IFlkOCWpaftSbJoTsV3zt0fyPc3q1VXSuNWOfaFRU1cPQk7BrBs3DOxAFl2C3dGEDnO2QVMgBIDJrgwxJoB9oIJREJJ3iCV8JjXgkbxHhwMRkVJy4mJ46aRQySNI9pXsY4JwQD8GkecZwmwEuKIQWe4LDbXjx2F4MF2t8MNvKHVE_ycEPoiNYaKEcbxf0BHdoqI579TauxtK6BXwn97mUkLi7dLxdblVi15JfUGNDt5n-gYqncZrlAXNCVVMYKhjamnYKLfex-6c-_XtDdBRePj8XsF_T4yzWa393e3v3PzW_f0Pzm9nqBHu_848vfv6GH6_u7h8fAX8Len7rIzY3LEm9e5h4INCDfQABH1Lb8PiIwmdvN1v0Lxp6nCcM5TNifmGvWH9f0n1f2-L2O_wOtkDCIoh2tBUdiswHuFIYoY0pzIVevb-M57KBWW9ATqjfdpbxzVWGB2Ub7W3jRH_efG7Dto-69Gfdj9FpLe_MuTAeie_0GLW5v0IDPpIX8uAbU3bB0gWmQqrr3dfo1vHlpbRSiVQXMAveFv7GedZDi7g0ZsrRBij2AIMWjZwf2jpVUdnLGLyI-jab0DC7CLM4IIQTnZ-uLMIWqDEkex1UFEa6yFKIsjUNCGOUJhjNxQTBJcBLGYRhhnE84j0sWYqiiPEnCJA9iDBsq6omL04nSqzP_QsNFGE3zbHpW0xJq4191IkTCE_KjASFBcnWmL3zKKZuVCWJcC2NNz8YKW_t3pLrbnSC5QnMq6kZDm_VqYBal8XkpbKfxgwp9xuxdAp81ur74-psZnSy7C_LvAAAA___9gWKA">