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

    <tr>
        <th>Summary</th>
        <td>
            [RISC-V] Cannot select `t21: i64,ch = store<(store (s32) into %ir.a), trunc to i32, <post-inc>> t0, Constant:i64<0>, t2, t10` with xcvmem and zimop
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          patrick-rivos
      </td>
    </tr>
</table>

<pre>
    C Testcase:
```c
int a[1];
int b, d;
char c;
void e() {
  a[0] = d;
  b = a[c];
}
```

Command:
```
/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/bin/clang -march=rv64ixcvmem_zimop -O1 -S -o /dev/null
```

Reduced LLVM IR:
```llvm ir
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux-gnu"

define void @e(ptr %a, i64 %idxprom) #0 {
entry:
  store i32 0, ptr %a, align 4
  %arrayidx = getelementptr [0 x i32], ptr %a, i64 0, i64 %idxprom
  %0 = load i32, ptr %arrayidx, align 4
  store i32 %0, ptr null, align 4
  ret void
}

attributes #0 = { "target-features"="+64bit,+relax,+xcvmem,+zimop,-a,-b,-c,-d,-e,-experimental-smmpm,-experimental-smnpm,-experimental-ssnpm,-experimental-sspm,-experimental-ssqosid,-experimental-supm,-experimental-zacas,-experimental-zalasr,-experimental-zicfilp,-experimental-zicfiss,-f,-h,-m,-shcounterenw,-shgatpa,-shtvala,-shvsatpa,-shvstvala,-shvstvecd,-smaia,-smcdeleg,-smcsrind,-smepmp,-smstateen,-ssaia,-ssccfg,-ssccptr,-sscofpmf,-sscounterenw,-sscsrind,-ssstateen,-ssstrict,-sstc,-sstvala,-sstvecd,-ssu64xl,-svade,-svadu,-svbare,-svinval,-svnapot,-svpbmt,-v,-xcvalu,-xcvbi,-xcvbitmanip,-xcvelw,-xcvmac,-xcvsimd,-xsfcease,-xsfvcp,-xsfvfnrclipxfqf,-xsfvfwmaccqqq,-xsfvqmaccdod,-xsfvqmaccqoq,-xsifivecdiscarddlone,-xsifivecflushdlone,-xtheadba,-xtheadbb,-xtheadbs,-xtheadcmo,-xtheadcondmov,-xtheadfmemidx,-xtheadmac,-xtheadmemidx,-xtheadmempair,-xtheadsync,-xtheadvdot,-xventanacondops,-xwchc,-za128rs,-za64rs,-zaamo,-zabha,-zalrsc,-zama16b,-zawrs,-zba,-zbb,-zbc,-zbkb,-zbkc,-zbkx,-zbs,-zca,-zcb,-zcd,-zce,-zcf,-zcmop,-zcmp,-zcmt,-zdinx,-zfa,-zfbfmin,-zfh,-zfhmin,-zfinx,-zhinx,-zhinxmin,-zic64b,-zicbom,-zicbop,-zicboz,-ziccamoa,-ziccif,-zicclsm,-ziccrse,-zicntr,-zicond,-zicsr,-zifencei,-zihintntl,-zihintpause,-zihpm,-zk,-zkn,-zknd,-zkne,-zknh,-zkr,-zks,-zksed,-zksh,-zkt,-zmmul,-ztso,-zvbb,-zvbc,-zve32f,-zve32x,-zve64d,-zve64f,-zve64x,-zvfbfmin,-zvfbfwma,-zvfh,-zvfhmin,-zvkb,-zvkg,-zvkn,-zvknc,-zvkned,-zvkng,-zvknha,-zvknhb,-zvks,-zvksc,-zvksed,-zvksg,-zvksh,-zvkt,-zvl1024b,-zvl128b,-zvl16384b,-zvl2048b,-zvl256b,-zvl32768b,-zvl32b,-zvl4096b,-zvl512b,-zvl64b,-zvl65536b,-zvl8192b" }

```

Command/backtrace:
```
> /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc reduced.ll
LLVM ERROR: Cannot select: t21: i64,ch = store<(store (s32) into %ir.a), trunc to i32, <post-inc>> t0, Constant:i64<0>, t2, t10
  t6: i64 = Constant<0>
  t2: i64,ch = CopyFromReg t0, Register:i64 %0
 t1: i64 = Register %0
  t10: i64 = shl t4, Constant:i64<2>
    t4: i64,ch = CopyFromReg t0, Register:i64 %1
      t3: i64 = Register %1
 t9: i64 = Constant<2>
In function: e
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc reduced.ll
1.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
2.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@e'
 #0 0x000055e0a689bcd0 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1dcecd0)
 #1 0x000055e0a68990ef llvm::sys::RunSignalHandlers() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1dcc0ef)
 #2 0x000055e0a6899245 SignalHandler(int) Signals.cpp:0:0
 #3 0x00007c485c042520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007c485c0969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x00007c485c0969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x00007c485c0969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x00007c485c042476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x00007c485c0287f3 abort ./stdlib/abort.c:81:7
 #9 0x000055e0a4ff2c5c llvm::UniqueStringSaver::save(llvm::StringRef) (.cold) StringSaver.cpp:0:0
#10 0x000055e0a6625ddb llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b58ddb)
#11 0x000055e0a662be59 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b5ee59)
#12 0x000055e0a51de5b7 llvm::RISCVDAGToDAGISel::Select(llvm::SDNode*) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x7115b7)
#13 0x000055e0a6622504 llvm::SelectionDAGISel::DoInstructionSelection() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b55504)
#14 0x000055e0a66318e0 llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b648e0)
#15 0x000055e0a6634da6 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b67da6)
#16 0x000055e0a66366f8 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b696f8)
#17 0x000055e0a6627519 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1b5a519)
#18 0x000055e0a57b3fd7 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#19 0x000055e0a5dd26d6 llvm::FPPassManager::runOnFunction(llvm::Function&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x13056d6)
#20 0x000055e0a5dd2929 llvm::FPPassManager::runOnModule(llvm::Module&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1305929)
#21 0x000055e0a5dd3285 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x1306285)
#22 0x000055e0a50b6516 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#23 0x000055e0a4ffaaee main (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x52daee)
#24 0x00007c485c029d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#25 0x00007c485c029e40 call_init ./csu/../csu/libc-start.c:128:20
#26 0x00007c485c029e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#27 0x000055e0a50acde5 _start (/scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc+0x5dfde5)
zsh: IOT instruction (core dumped) /scratch/tc-testing/tc-compiler-fuzz-trunk/build-gcv/build-llvm-linux/bin/llc
```

Found via fuzzer.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWt1u27qyfhrlhrAhUb--yIVj1z0F2tMi6SlwrgKKpGzuUJRCUorjp9_gj2TJcdu118bKWkArfhxyhvORQ2ooBynF9oLS2yC9C9LtDer0oZG3LdKS4aeFZH2jbsqGvN5uwHeqNEaKBvE6CLdBuA6y0P3Drs6EBihI76Ig3Qbx3VlYBnADyCjCByQBHqt9wwigASwCuAJB7qXAmgqDdAuCeDvRBqC0EtOMpyMF-fbCL1-1z01T10iQt877KtwpLJHGhwDuNF5oqjQTe1fBTd0yTuWi6k6nhZadeArgruwYJ4s97g1mIoA7zJHYg0WNJD4E8Vb2WcKOuK9p_XhiddOCxdcILB7AogEB3BFqNEXH-S_cvqekw5SAz59_fAGf7t-6z3lfAyadVCO5pxoQpBFHr02n7UwFENJFHcRrumiDeJ0l9rFgI4hgEcTrCBYLEUMnezAyCGdmtWQtp4NJyRTus2TRiSfRvIgFZ6I7LvaiG9Xck9CKCQrsKgdJaBa61RIEMEUmLFiWGMzIsZVNbUMAxuE5DqjQ8nWkDYDSjaSAxRCERn1qCnG2FyAZehqxlOiVkaP1eU815bSmQlul9C4ER2PIxNCFJeNUeMW7s-XQmuQNItbERN8PecWhs-vGwKBjA-BtZ0m1nbPL2LZPpLVkZaep8rNlliS_M8vi1mpRUaQ7SZVZjHhrnvAuS0qmA7gJ4J2kHB0ddAHqsI3SAG4WZhYWZtsusHkQ86D2cWypZGYSEV-oum7rK1JxTaquS68KnxvFyFt5d6XzCWGkrkg5UvKtmOGK8fa6XFkzlXkczMOOpQ646YSmkooXV98j3SIHdY-4h706i3s1a9A9xZaMqhFz0hoTyuneYyWZ8B1oW7cOKY00pcJW1KCnMK72A2q19LCp2roa8MxbNTGuZiaVOeG1wxr7cnR74rTqsuTILewRoQPoHCiR9CImeuS7CdQ2znTflrVFvXkccY9451HJRqBrJFjrq5S_eFQj7JFitXXmqCpMzSvI4R63A6qExJy1x-q5GkUvNcL4-fl5EDybOmnIrP7c-HZWMcOZKYwkIbwRdCqveKcOZ6k-UERKNMHlBKszxnUzqTSC1E1_FlQ1rd1Z4QUDZVe5bKR1i5g8C9SrmHTviZv0Y2-CWiAzWtM6X17wwfY8oQgWUjmYJQNCzssTKg_IAS6VV6hRlJUOvvj-jvjJcT6VrmP55KtPQ_3oSqeDnQ52nVxsnTB1ReUKf_iccD2UltCJMOFsVc5IVVY1Ew4efDEKhr6HKRhaGc6S0qOyqUfUjujkEUZ1gwbMqgFxNShh6eLwxLBwO_HEzJR7pLyoogJT5vCBCS00P1da1A1GDu5sOz25p_AF8SX1paP75Iw_KV9Q3035Zjdtdd25sbRyy9v7Fev9kvU0htWIjh5lCRlRNSLfOpl6g19q5PFhKMdmHw_9096Xg1zgAXi_-ycx9vEBaNCgr4Zy0FOjnhr0PPPeU-95FEK_0j2PYDHCLC5GOQyTsQGm2QBjmGfFuTKgJFyNXdJoFGejuSxN47FHEa1MFwguXt2_TE7hrkT4SUuEr2TZvhp_AP9tsmqxSRxd0jbmr5xjIF3CuRyyUpt4fri__2pyT7BBQjQaKMop1kagYWQKk0vCDT7YTMTmOUG8CWDhUh4DTJK0AkzoxiZUcokCuDJ5j_EQA90MeVQQb9pG6QUTOIg_GLra5kqbRiiNhBnVZq6b0DQbA1ZNR-GQOunMu2S9Oes5jaETfOP3pmlfd7Kp7-nej3lP90xpKt2YLm1z-jqajjH0m_awHk36qAMHOrnKBE78AqbTn_EsOlsAQMc_c2_oplc_maSzM58EqDqBNWuE6Uud9NvnD-uHD0B1Zc00QKDs9kDStpHaLOJB61aZ2IW7AO72TB-6conNSbszAeeLRSubf5kIgjumVGfS1B1AggAmMO8IBfpAAZZIHcC4IZZu-AeN8BMgXd2OOyRcOtLfZLOXqAZI7juT2Bk_3nWvRN6R-04IJvagRcok6PnOzyL4ZgRfkEB7KgOYg0aAuiGduVTBfGIN5p4t_InF-08Pm8UPsF1_XATxh-36I_iGtKZSgE9Cadm54R7sNjXL58YaVtNYcFex3EeDvUWExzAMwzSlIcqKVYlJCOyaxesgXqtX5cA3yYS2q_DdnlOwOHeS6OWxUVpSVAcwsxcood2drvgLFyKAd-ExIphiEppTZeQUXXBahbS6xum-Ew9sLxD_HyQIpybNKd7PbRzSauY2vHQbJimYORjAws-sE6slbs2GCO3_0VDsDeU4KVIcJjCFoSfFWRnA3bHIHrNkenc3DXipmmVm3bMqM-eSuc1VtqoweHxs9UFSRB6fGOePrG7dTRvZcFsGcCdak_jspt2WOIjXiTnt8uxsP_0j9s0dRyD-S8u5_agxmY3smuWp2i_NFasLc_nl5CZ5BvbKroe15GAAd0tbe1WEmnR81zaKmUCQiClqbcM8iNeTOSjmpmGRVzFApTljrSlN3PJZkfPOvI8mu3k1DaGkqiBO8STy_0-w544-aMnE_gH19j1iNgTq5xva9bi38WkCZ4kbTmzYnVXfhp7ZefPjJIMpIeXEgfFo2q4_fnqg3EldevH_VLvmuSvb_23M9XP9XhuzTAtCyjH2DanoglRJ09VvSTnppiHUpHnmML7OagM6Yb_GEuC-kJp38mXLO56nZUppuprxnx1MaURoWuYT_uat9GO7_vi9uTIBf-ti5lGUlvmMS3yxljANk9-u5baZvF8nr9d3e1uUaZqGyYxIMicSRwUNf7_TGkI_UrEW5EPN9Hb98T05ZElBwxmH9IJDQlD2BzfWmvM7pBi-4w02V8VJlI15l99K2fsxzAnKZgyzC4ZZVhW_ZSg78VV8QfjABB3IzBi-aXtHiqusKmYU84sdlafRr07Hz3SP8Os_n2iK0mh-DBazYzAv44pMj8ELX03SP2F5ld5bXssWSb00uwRcsXf9nTt76aeEwIxMd9Hum1Edrh__sUd_-UzHYZqR2a6B4SWjFVz9AUZf7KVqHkBe9J5sVnAWNzC6YBPDIp2w4ZMNMeH1qW7Px8HfzSmDRTrjNE8JwjJLowz4scZlMPmMfdnbZOZM4PPnH182jdD0OJzOnOOrsQ3ji4QWIUpBjZh4D-IpJIjSGe-LaxBckVUIHh_N7elRaST1I0acP1oPTc6OVff2JuDvGteUlocgXqf2CpOdR00vR6VJCKwOE0xfDuSgsb6w1u1Nwf3YCydTm10zOqNyjcVV43Fubknp2XY-Dw-ECU2Bs_ouC0cqQs8Be1JmVsGnr98Bm3wnMRHaSGq_KlHiNtNf59fPPwPvmk4Q0DMEjGUqlzfkNiareIVu6G2UQwjzVZ7mN4fbjK7yIizjJCEUZxWmaUhQFiUxpFGaJfSG3cIQJmEOV9EqhHGyzFZVUdG4RCjNsgKtgiSkNWJ8abxcNnJ_Y7_E3UZhFGb5DUcl5cr-WQiEgr4A2xpAGKTbG3lrqZXdXgVJyJnS6mxGM83t35O4b1RBup1_NQZBFv6jvhpnIXhh-gDcD-H2M6T9Hfymk_z2z3_P9BPZ38J_BwAA__810t-O">