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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV] `clang` encounters a fatal error in `getCopyFromParts()` when referencing an array element in inline assembly for `Zilsd` and `Zclsd` instructions
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    This happens even when you have an invalid combination (`Zilsd` paired with `c.ld`). I'll document a single example:

```bash
$ cat << EOF > test.c
#include <stdint.h>

int fn(void *arg1, int arg2, int arg3, int arg4, int arg5) {
        uint32_t val[2];

        asm volatile ("c.ld %0, 0(%1)"
                      : "=R" (val[0])
                      : "r" (arg1)
        );

        return val[1] + arg2 + arg3 + arg4 + arg5;
}
EOF
$ clang -march=rv32i_zclsd -c test.c
fatal error: error in backend: Unknown mismatch in getCopyFromParts!
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 -march=rv32i_zclsd -c test.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@fn'
 #0 0x00000000016f8c1b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x16f8c1b)
 #1 0x00000000016f6a44 llvm::sys::CleanupOnSignal(unsigned long) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x16f6a44)
 #2 0x00000000016441b2 llvm::CrashRecoveryContext::HandleExit(int) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x16441b2)
 #3 0x00000000016edf0e llvm::sys::Process::Exit(int, bool) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x16edf0e)
 #4 0x000000000056f897 LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
 #5 0x000000000164c71c llvm::report_fatal_error(llvm::Twine const&, bool) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x164c71c)
 #6 0x000000000164c878 (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x164c878)
 #7 0x0000000002919ec1 getCopyFromParts(llvm::SelectionDAG&, llvm::SDLoc const&, llvm::SDValue const*, unsigned int, llvm::MVT, llvm::EVT, llvm::Value const*, llvm::SDValue, std::optional<unsigned int>, std::optional<llvm::ISD::NodeType>) (.isra.0) SelectionDAGBuilder.cpp:0:0
 #8 0x000000000291de37 llvm::RegsForValue::getCopyFromRegs(llvm::SelectionDAG&, llvm::FunctionLoweringInfo&, llvm::SDLoc const&, llvm::SDValue&, llvm::SDValue*, llvm::Value const*) const (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x291de37)
 #9 0x0000000002947f32 llvm::SelectionDAGBuilder::visitInlineAsm(llvm::CallBase const&, llvm::BasicBlock const*) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2947f32)
#10 0x000000000297eb80 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x297eb80)
#11 0x0000000002a0270c llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2a0270c)
#12 0x0000000002a03bc7 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2a03bc7)
#13 0x0000000002a05b08 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2a05b08)
#14 0x00000000029f4319 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x29f4319)
#15 0x0000000000b40813 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#16 0x000000000115b689 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x115b689)
#17 0x000000000115b82c llvm::FPPassManager::runOnModule(llvm::Module&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x115b82c)
#18 0x000000000115aa54 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x115aa54)
#19 0x00000000019a47be 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*) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x19a47be)
#20 0x000000000202b6f4 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x202b6f4)
#21 0x0000000003aa6edc clang::ParseAST(clang::Sema&, bool, bool) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x3aa6edc)
#22 0x00000000023647fa clang::FrontendAction::Execute() (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x23647fa)
#23 0x00000000022e21be clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x22e21be)
#24 0x000000000243a247 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x243a247)
#25 0x00000000005714f6 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x5714f6)
#26 0x0000000000569f13 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x00000000020a0989 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::'lambda'()>(long) Job.cpp:0:0
#28 0x00000000016440c3 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x16440c3)
#29 0x00000000020a10d4 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (.part.0) Job.cpp:0:0
#30 0x000000000206253b clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x206253b)
#31 0x0000000002063502 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2063502)
#32 0x0000000002077e3c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x2077e3c)
#33 0x000000000056e47e clang_main(int, char**, llvm::ToolContext const&) (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x56e47e)
#34 0x000000000043fb73 main (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x43fb73)
#35 0x00007fb6b26115f5 __libc_start_call_main (/lib64/libc.so.6+0x35f5)
#36 0x00007fb6b26116a8 __libc_start_main@GLIBC_2.2.5 (/lib64/libc.so.6+0x36a8)
#37 0x0000000000569965 _start (/home/thebigclub/riscv/llvm/rv32ec/bin/clang-21+0x569965)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 21.0.0git (https://github.com/llvm/llvm-project.git 913dcf1aa36f3ea2d67a0d2b05b9d1375987e553)
Target: riscv32-unknown-unknown-elf
Thread model: posix
InstalledDir: /home/thebigclub/riscv/llvm/rv32ec/bin
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-f5e115.c
clang: note: diagnostic msg: /tmp/test-f5e115.sh
clang: note: diagnostic msg: 

********************
$ clang -v
clang version 21.0.0git (https://github.com/llvm/llvm-project.git 913dcf1aa36f3ea2d67a0d2b05b9d1375987e553)
Target: riscv32-unknown-unknown-elf
```

[test-f5e115.c.txt](https://github.com/user-attachments/files/19949915/test-f5e115.c.txt)
[test-f5e115.sh.txt](https://github.com/user-attachments/files/19949914/test-f5e115.sh.txt)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWl1T4ziz_jXiRkXKlj9zwUUIZJYtZqGAnVN1blKy3E50RpZyJDnA-fWnJDvxBzDL7GbferdeihkcWR9PP91qtTpNjeEbCXCBkkuUXJ3Rxm6VvrBbKPiGiaY4K1T5evG05QZv6W4H0mDYg8TPW5D4VTV4S_eAqcRc7qngJWaqLrikliuJEclRGvw3F6ZEaYB3lGso8TO3W4zSgM2Ea0ZkPsM3iGRC4FKxpgZpMcWGy40ADC-03glA0QIF_jcN2t-Cmq37TGLMqMUoWqJoia_vVhhF19iCsTPm30dcMtGU4LoYW3JpZ1sUXbfTcWlxJRHJ94qXGJEF1ZsQkSV2L6jekMFzNHiOB88JInOMsksULHD303BpI7K2eE8FSi4JSq5QdNkueehDTY33SlDLBXimCHGMYESSwM0e-LYkRGSOCBkMHP-gaIHd--jqARHiJmrXDNyaZP5H43Q3qJV72N19mmLWYBstO6lClFxhRC49T4eH6PAQHx6SbpbsCgWL67vVQWmCyg0-r6lmWxRd6X1E-Pr_mDAlPme9_ipqqcCgtdIOsX_AXOKCsu8gS9f2u_wu1bPENTc1tWzrXm_ALtXudaVVfU-1NYiEKFjc314vHq-xaYqaOxsrmg3WsFPaYqvw1tqdcYZGVoisNtxum2LGVI3ISoj94c_5Tqv_AWYRWXFjGjCIrDCVJT6Ymd0CZpqarcdoNWXg1LnTsNOKgTFQYqMa3Ta7kdQYxTi1UGLdSGyY5js7Q8Hi0VL2HZdNvWvtP5ihYH6v1UbT2lHr94qD_Fk2QzcBipagKrdLdlQb0JhaDLLEqsIVF4CCBXHdlqoEvAEJ2m9mFCwi1_zQSMnlBu-oMRiRbNVI5jf7vWv4SiXdgEYkw0riWpWNN-6sQ0AyJ1b83jwPN4_L82_4avHlHEXXV4sv-J5aC1riG2msbtpFHkGAf-pWqA6rI5KhOHBbOXP2ikgU4OAlOPyEaZWzsMBekdECRQvzatqHe82l9Uw_tbrK-06aPq-VsRpojUja7Xm_3d3eXG1VDYisem-JyEpzw_a9yThNAENkVXCJyMrr6ZyEiFwGLx2obtshEoUTyCmN4_cgLwVQ2ezu5CPfSCoQyRvp_XiJhZKbUwJ0EHqAZAwwjsOCDAAundk_AFN70K9LJS282PbNL1SWAq5fuEUkPy2HHkQPMRpDhLIK4H21-83YfhgCW-JCKXFCgB5CDzAeAgyStMrnGb69_fb12vm2lijdnUiILBwgtqUaMyWN7RoOCBkL1zXlcsZ2zkUE_l-7TDJRFctCNuChdXtr717XrXsdGv7TM5dwWDL9G0jxeHpS0inaPMtPt1Se5f1S2XApMg_nwMJ3zosBGUenc7X40rExeHl1q9iIqeG7b1Q0MFLdcad2xtb3_vrtadxwPW14O9ubtVyjsWXbpnYONRUoWo6Wja4_6tbPd_N41T78pkp4et2BH-X1P-NG05kL3PCQmsuGixL0O7aYTygvIcoG0B9gY1ZKt_h9y0Ad7uXntXE4jW7VM2guNzeyUn9GZR-3L36sknn7fBrb7ajqbXc-JjLOqmjof9_RRvtizw23N1JwCQtTj-hcUiEuqYEP-LikhrNLodj3kZAnEs8L0Irnjr9gLF4GRR58WryRVMOYoRfsZLg9sh736NwmNCBZwD7AffMIYtja8zvCzwU3ds2tC76UXj-vC-4CveW0RwmW8m5CqUpYt3t53HVAhlNuRYWB0UN71Cyx1a0DeU_9ndM4jvF927Z_KOz2RDuhWbSK782CTMwiKlj2SbNY-E3ZyTD2f8eA-_R23ULsBYgmAiRFkP-hALqRd_IrZVsu4YB1JMCbdyeVwGHsJYjHHqWKo3D-AwluYUPZ67-BHC3SXo5RNBcUcZCHEf4QiruKDYR4F_1b2LMd1bY91t-Zb3KsO1DjoC1MijQfkru6d-MON8KfhnOC0K-F1LOYTQHnhH0C8Fd_jR3rvms6LdicDLxHPgFLaTK8DIqBqQ5g39S7fh_-_ZAdqB7yKDwJ5zTOCmhTEy0EqLm9bBM3d43dNe7MHrxeqnrHBWjn-KlkhyBs1KOELyDvutPiTZBmXcz3ANUksO4kX0xm66AsjkfM8OyxujF8Dw9QLaW9t3p0NO2rbn-tuIDHV2OhngbVjeT_28B6Nxmp6fN696y5hfUhrzAYVEJFG-HORwEW_mBgdN2t-VakpZKmqd018nTRWqfPo7bJOFoLSJFW8Y-wDBIBT5pKI3xe6XfJJ2aweHw65A5O6VJbgD38UdAWUZpCyYbw76k2sHh8GoN7hJqObsQnvhl3QHqY4yAiSuOsokOYK-24Olpxl84A1ljwgE5FX7tyj2scGxAg4Xivv9nMQ2SHLZd_LMgpVd-i67GPo4I4oiTOhtg7lL0Ie8XoW8Rv_dUJ70Ytqh7zOAJIsjCu0mP-Z-ToF1rTV-cEo-U4cdR5i2ky6ZhoOhH0FluPPJ0kvOZVGOEDxcvwyW-f4QW_pkJ8A2ZVd5q9I8bE8bs5Op8xCotLzfdvMhIO0zgJFNBgns89EYNJD7nltfZcdt8Q-eDSuV7XhVEhCsq-ryvpYPam0S7cmckyXKq6prKc7s53dfbjtEx_xB3d_3HAes1eXsKw_VC464M7KrjD5CkcdXYNa6tpe0HzryfTUSGc2Ss9eO-6DDKQfcKjHYJIJmhdlBSRrKeK5Ies9K-qeEcZ-TSrHLDoU1nlh0Y-0grE64jLH-vtlInngEW9mc8nJhUG5eg4_I8zicmd4l3dR5MgIiVJVHzImve39M05d6By5JwnA12HUYrrc10Xk-z3KZN7rbBHAxp_-0OCNEoC8rNU_KoK8zEPv6rilhv7Uerzjd896n1HuVN5l7L-LHWdcfyNBDqKegLHoVKQZRCxj8BeDZ5Hx_075_xHxP8LCTxZEOxJ6SmLJmczxFkXxR3iigNk7ywWb_LfH528p4kkPJ4e7firsziqiizCDudplmsn7Jc7hFxZVaQFScMwqRK8XgteOC9KtV278389ACB4kcbtXzYzapa2MX1SJf2s6XTWlObjWT3zcfDl9uZyuSYzMkt-PH1K-4zX-OstF23N0wS3E59KKW7KdsGDIfcFGm0hQtXF8ph1Jl1RLg6lP_DCna2UgLPAQWoM4PM9tgobAMwHwfZxCbwHbbiSmISzYBZsuJfl5wo2Zm7UPIxKVoWURmkVASVlmtGgJEWQFPMyjLJknmeQJJ0RPFG9ARdrYM9PRM6bttbk-BdE5fptNdAS16r0SVC8U4a_oMBnsKkQUF5x3dbb_DT5A46lsu4WhUtON1IZyxmujX_jVf8Xfn2NT1ccs3h6Wix_wU-_XOPV3e3t3X_d_PYFr25urx_x051vvvz9C364vr97eEK-KuX-vcqW3Dgv8GF1y7GDBuxDCigxte18nxGYrGy9c_-DsedVAmGY-AKXPzvW15J9kum_TnZf_rT_h1j4seyuIyC5HDE_sy_W15v9CHFjQJ9TaynbtnVLZFVx4Quowvk8ns_DZKpRP2_r2sYrmu2JlozfGEK35ll5EZXzaE7P4CLM4iTPwyiIzrYX86wowzlhaZbRJIxylmSQBzGDaD6vQsrO-AUJSBLEJCdREMbRjARhASwrnEKCpCxQHEBNuZg55c2U3pz5SrKLMMoykp4JWoAwviKTkNYmCUHJ1Zm-8Noumo1BcSC4saafwnIrfBnnw83j8psvzUuDdnQaYJBMNdKCNpjiQU0ddkdXGrxT_uBoT4O2zlNDBRok43KDqcTU3UwwCPClmlxi7r9Zdjsd6kK84kppPCz8dG7AfWbdZ95_s2fOGi0u_nzpXcfZ_oL8fwAAAP___RbdeA">