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

    <tr>
        <th>Summary</th>
        <td>
            [RISCV][GISEL] RISCVPostLegalizerCombiner on scalable vector load
        </td>
    </tr>

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

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

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

<pre>
    Running the test file `vec-ld.ll`:
```mlir
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
; RUN: llc -mtriple=riscv32 -mattr=+v -global-isel -stop-after=regbankselect -verify-machineinstrs < %s | FileCheck -check-prefixes=RV32 %s
; RUN: llc -mtriple=riscv64 -mattr=+v -global-isel -stop-after=regbankselect -verify-machineinstrs < %s | FileCheck -check-prefixes=RV64 %s

define <vscale x 4 x i16> @vload_nx4i16_align1(ptr %pa) {
  %va = load <vscale x 4 x i16>, ptr %pa, align 1
  ret <vscale x 4 x i16> %va
}
```

Got:
```
./build/bin/llc -mtriple=riscv32 -mattr=+v -global-isel -stop-after=regbankselect vec-ld.ll
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./build/bin/llc -mtriple=riscv32 -mattr=+v -global-isel -stop-after=regbankselect vec-ld.ll
1.      Running pass 'Function Pass Manager' on module 'vec-ld.ll'.
2.      Running pass 'RISCVPostLegalizerCombiner' on function '@vload_nx4i16_align1'
 #0 0x000055cc1ea3dbbd llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /scratch/jiahan/llvm-dev/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x000055cc1ea3e0ab PrintStackTraceSignalHandler(void*) /scratch/jiahan/llvm-dev/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x000055cc1ea3c0d6 llvm::sys::RunSignalHandlers() /scratch/jiahan/llvm-dev/llvm/lib/Support/Signals.cpp:105:5
 #3 0x000055cc1ea3e8c5 SignalHandler(int) /scratch/jiahan/llvm-dev/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007fd7e4cbf520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #5 0x000055cc1c00099c llvm::MachineInstr::getNumOperands() const /scratch/jiahan/llvm-dev/llvm/include/llvm/CodeGen/MachineInstr.h:572:44
 #6 0x000055cc1c03b302 llvm::MachineInstr::getOperand(unsigned int) /scratch/jiahan/llvm-dev/llvm/include/llvm/CodeGen/MachineInstr.h:584:5
 #7 0x000055cc1f17252c llvm::getDefSrcRegIgnoringCopies(llvm::Register, llvm::MachineRegisterInfo const&) /scratch/jiahan/llvm-dev/llvm/lib/CodeGen/GlobalISel/Utils.cpp:463:35
 #8 0x000055cc1f172675 llvm::getDefIgnoringCopies(llvm::Register, llvm::MachineRegisterInfo const&) /scratch/jiahan/llvm-dev/llvm/lib/CodeGen/GlobalISel/Utils.cpp:483:10
 #9 0x000055cc1c595814 bool llvm::GIMatchTableExecutor::executeMatchTable<(anonymous namespace)::RISCVPostLegalizerCombinerImpl const, llvm::Bitset<0u>, std::optional<llvm::SmallVector<std::function<void (llvm::MachineInstrBuilder&)>, 4u>> ((anonymous namespace)::RISCVPostLegalizerCombinerImpl::*)(llvm::MachineOperand&) const, void ((anonymous namespace)::RISCVPostLegalizerCombinerImpl::*)(llvm::MachineInstrBuilder&, llvm::MachineInstr const&, int) const>((anonymous namespace)::RISCVPostLegalizerCombinerImpl const&, llvm::GIMatchTableExecutor::MatcherState&, llvm::GIMatchTableExecutor::ExecInfoTy<llvm::Bitset<0u>, std::optional<llvm::SmallVector<std::function<void (llvm::MachineInstrBuilder&)>, 4u>> ((anonymous namespace)::RISCVPostLegalizerCombinerImpl::*)(llvm::MachineOperand&) const, void ((anonymous namespace)::RISCVPostLegalizerCombinerImpl::*)(llvm::MachineInstrBuilder&, llvm::MachineInstr const&, int) const> const&, llvm::MachineIRBuilder&, unsigned char const*, llvm::TargetInstrInfo const&, llvm::MachineRegisterInfo&, llvm::TargetRegisterInfo const&, llvm::RegisterBankInfo const&, llvm::Bitset<0u> const&, llvm::CodeGenCoverage*) const /scratch/jiahan/llvm-dev/llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutorImpl.h:180:15
#10 0x000055cc1c594e17 (anonymous namespace)::RISCVPostLegalizerCombinerImpl::tryCombineAll(llvm::MachineInstr&) const /scratch/jiahan/llvm-dev/build/lib/Target/RISCV/RISCVGenPostLegalizeGICombiner.inc:386:7
#11 0x000055cc1f022d56 llvm::Combiner::combineMachineInstrs() /scratch/jiahan/llvm-dev/llvm/lib/CodeGen/GlobalISel/Combiner.cpp:175:18
#12 0x000055cc1c5934c4 (anonymous namespace)::RISCVPostLegalizerCombiner::runOnMachineFunction(llvm::MachineFunction&) /scratch/jiahan/llvm-dev/llvm/lib/Target/RISCV/GISel/RISCVPostLegalizerCombiner.cpp:157:3
#13 0x000055cc1d3ba369 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /scratch/jiahan/llvm-dev/llvm/lib/CodeGen/MachineFunctionPass.cpp:94:8
#14 0x000055cc1dbf5b5c llvm::FPPassManager::runOnFunction(llvm::Function&) /scratch/jiahan/llvm-dev/llvm/lib/IR/LegacyPassManager.cpp:1442:23
#15 0x000055cc1dbfaa02 llvm::FPPassManager::runOnModule(llvm::Module&) /scratch/jiahan/llvm-dev/llvm/lib/IR/LegacyPassManager.cpp:1488:16
#16 0x000055cc1dbf645b (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /scratch/jiahan/llvm-dev/llvm/lib/IR/LegacyPassManager.cpp:1557:23
#17 0x000055cc1dbf5fc4 llvm::legacy::PassManagerImpl::run(llvm::Module&) /scratch/jiahan/llvm-dev/llvm/lib/IR/LegacyPassManager.cpp:542:16
#18 0x000055cc1dbface1 llvm::legacy::PassManager::run(llvm::Module&) /scratch/jiahan/llvm-dev/llvm/lib/IR/LegacyPassManager.cpp:1684:3
#19 0x000055cc1be7d0a1 compileModule(char**, llvm::LLVMContext&) /scratch/jiahan/llvm-dev/llvm/tools/llc/llc.cpp:742:9
#20 0x000055cc1be7b1e3 main /scratch/jiahan/llvm-dev/llvm/tools/llc/llc.cpp:409:13
#21 0x00007fd7e4ca6d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#22 0x00007fd7e4ca6e40 call_init ./csu/../csu/libc-start.c:128:20
#23 0x00007fd7e4ca6e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#24 0x000055cc1be7a935 _start (./build/bin/llc+0x1000935)
Segmentation fault (core dumped)
```

Support for [IRTranslation](https://github.com/llvm/llvm-project/pull/86699) and [Legalization](https://github.com/llvm/llvm-project/pull/84965) are passing.

The issue seems to come from [here](https://github.com/llvm/llvm-project/blob/ce811fb6d94e1d4af1fd1f52fbf109bc34834970/llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutorImpl.h#L179). And I'm just very confused that why would the code even reach this place.

Can you help me to take a look @arsenm @aemerson ? Thanks! Also tagging @michaelmaitland here.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1v27jS_jXMDWGDIvVhXeTCceq8AdrdIsn2NqCokcwNRRkk5cbvrz8gJVuyk5xu22zPWeAAgSNR1MwzMw9nhhS3VtYa4BIlVyi5vuCd27Tm8k_JN1w_S2AJuyjacn9512ktdY3dBrAD63AlFWCUkh2ImSrnSqGUILZE5BqRpb8Of42SZhhiV_i33x8-ILbES2vBONlqizd8B7gA0Jh3rq1Bg-EOSlzsceeksoiuu23JHTw20jx6zY9iA-LJzrf7UfDdH795uUoJPGuckVsFiF0bacWOUTxruHMGsWtEr3Z4Vqu24GomLSg8s67dznjlwD83UBdcP1lQIBye7cDIaj9ruNhIDVJbZyxGbIURTSxG2QqvpYKVh4NnAdVsa6CSz2ARu777wmiY-ZdgpvF_DGYaT2GG3xIqqcEL2VnBFeBnHONnLKMUsQ8YxWSnWl4-6udYRukjV7LWEaKLrTNe1JYjmmOUXfXCsB_bcYzYNfavvSEW0RWeCFjhIBZHByEG3JuAvPwBf3Z9RsGpXTete8nR_naO6LropCr9f6kRXb8vm8Z1EtR9_vhhef8B265opMMcF12NDWxb47Br8ca5rfVI6RrRdS3dpivmom0Cqt3h32xr2j9BOETX0toO_GLBXJdYaqG6EsJiFYbbDS64eHKGC5j36u8dF0-47Jrt0R9kjkj-2bS14Q3mpu4a0M6DwL_YNZEHcsg3W24tRjRbd1r4jIE_-4FPXPMaDKIZbjVu2rLzyYhmoySaDZbS16Td3d6vvnxurfsINVfy_8Gs2qaQ-iiyOqhDNHuL7tnATEQZweSZEEKSRIgIOCuLosQhUmyJ2NLubX_x2Ujtgu8ffDAQXYyTDP_62FpngDeIpn4BSO3CQqJrKwx3YoPous_MBwKUsJtQQhaIru-7rWcRous_tHz2A7LWXNm51AKxZUYZYssoGrFHZ9iB8AKfAe1l_B_XpfIuWuxaWSK6fH90-cKjG8HRM3CClOlrjr3r9AlGi-jiZ9AdYImtXyARSRBbJiMsdu6zhUjwuZP-jvDFETt1UDwgyaoyg1gUVUIJDsYPAp8X6WMaz5TU3fOs1l3_QMxtO08RvSLPMU0oQTQfZSZT6wQhJM_FxOmf-kJz6wtNP1KD-61rft-C4bo8uF602rq_bP2QssaBVVvCDfjJU33zjQ9ERr0r4hFxeoqYFYzQbyEe4CK66HRogsrvXXDfhXkRn1Iom0KuoowmdOrkGtw1VPdG3EF9W-vWSF2v2q30SX6SNO6gltbnVLp6ae_h4a2u2j4cIbF8LyVHq25CQr-9B-X56duzYYHEqaclm5i3ODcvzZIX5v0DDFuE9UZGw_ITqiV5sohiXLStmsC8uf3kMTzwQsGHZxCdawfeQbiD8TFiK0QXXLd637SdxZo3YLehNuSDJ96sVbfNVh3Mn3rpSjoLDrEV6Ya-yrqyf9RufVXjCrHVOP--4Up9ARFQro5zDzXQN12tLPFJfKYEv_K9gQ9VGkAHjXFQHXqzxU8Z2M_pi81rCI7LOD0mHa__gPhv1f3C-le4GuZMSHos6_2Q99bPgTyR_Vc4GMbB3Dvu4Dte83d-wT3sT8jzP7L9k8j2BlkOr9-dyj8WRrHhR7HL01cfuKnBBcVn6fgbifvFnF7SG7l9OvEw5Yrrp38z7ZSZb0waasCq3YHhNQxN7bv1LieF5bW15SMfGoRoQfzvUEJ9X07OKk0MUYbfgWLO7IfBpd8ovcG0Kce_7YnD9rAvrH0kEV0HOIf_N6CnyG5uD9CG3pYtUr8FGB1wsjOpCKVlkp6EbtiyhTvR301N-LFNwBvBO4IdtgRZEoI2oqVn4WKxiH88XMOesNO_68Gkww74tYiNz36gDXoRrZvB5LfRHZyQZD5uow9O9kUlKzhL85dZ4IDWb-Undr5q4E9Z9qIfn2oebMh9Xz4JY3xiQlElRTLty9ef_buH84e_E_ztHaJr73mxn6g8eD6O_R6ITnyfnAHn_GQP9BbwT-Hw5JRUw9D7g16E7X06gk7PQKdxUnxr0Xz6L7AkCcyfuj87500l4on7VZA0nAKN8sasbDr9S6AngTjTGCzOiSMg-jbyX4s6SsP-eeLvk31YAVlJeIRF22ylgiMTfN8SSvpZ0_Lx45dPq1Y7eP7enaNr2_BRQinR_w4As-DW_IiPkjN8RQQMN1zqn1YVE78QotEXNDo9BOJpmRP8-KhkIR6t48Y9Cq7UY9A-R3QtbIfoeu4v7d6WsPVq9Nap4XDo_KXhBOOUN5Sea4WY4PCO1NKdK-ovvfRZkD73JT-iXiglo1D2mtATU16z4lXhLMvHIxcvOz4LCc9ZgnupPue8eswdjsgiQkjOkuMh2T3UDWjHwwlxxTsV3hetgXCkDuVx5qtfIYYzPly1BqPk6vbuwXBtVRCHkmtEF999_r_tfCu3XqRpnns6c1160UPhfg_JcZ4mQbKBcIwudT2fGvWwARy-QmAL0FjsfFveAK5M23goGzDwgxAK1foEIWARRVWRlr4TLmNeRVUZVQmtiioieSFYvGBxnpF3bcwp-xhl3qVzvNQlvkU0a_CfnXV4B2bv2-Oqs1Bit-EOf93s8de2U2X_5aUtAcMONDbAxQa7jbR4q8aPMP3vimu8bzu8AbXFDXjHOf4EmGPVtk8YxYQbC7oJV9CAsa3GiK3xw4brJ4tohJfK-pfqWuraT2uk2HBQDZdOeSZ43w86L8pLVuYs5xdwGWU0ytI8z9jF5jITAoqME1IwwipfCVKeJjTJaCwYodGFvKSExiTz-YamEZszxkS5oMBpXqSkilBMoOFSzb2z562pLwIfLiNCaBRfKF6AsuFDM6UavvZsQZSi5PrCXIaYF11tUUyUtM6OYpx0Knyh7hvU5BolVze39x8-ouQav92k4lZjK7jyUcW7cOIQvj9edEZd_vgXtsGc3SX9VwAAAP__w9LAqw">