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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]`test-match-reduction` pass triggers Assertion Failure `Index < this->size() && "Invalid index!"'
        </td>
    </tr>

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

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

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

<pre>
    Test on commit: https://github.com/llvm/llvm-project/commit/258b5424edcf72063561ef7bb2ba6e5fbf24181a

Steps to reproduce:

```
mlir-opt test.mlir -pass-pipeline=builtin.module(func.func(test-match-reduction))
```
Test case:
```
func.func @main(%arg0 : tensor<16x8xi16>, %arg1: tensor<8x32xi64>, %arg2: tensor<16x32xf32>) -> tensor<16x32xf32> {
  %0 = linalg.matmul ins(%arg0, %arg1: tensor<16x8xi16>, tensor<8x32xi64>)
 outs(%arg2: tensor<16x32xf32>) -> tensor<16x32xf32>
  return %0: tensor<16x32xf32>
}
```
crash trace:
```
test.mlir:3:1: remark: Testing function
func.func @main(%arg0 : tensor<16x8xi16>, %arg1: tensor<8x32xi64>, %arg2: tensor<16x32xf32>) -> tensor<16x32xf32> {
^
test.mlir:3:1: note: see current operation: 
func.func @main(%arg0: tensor<16x8xi16>, %arg1: tensor<8x32xi64>, %arg2: tensor<16x32xf32>) -> tensor<16x32xf32> {
  %0 = linalg.matmul ins(%arg0, %arg1 : tensor<16x8xi16>, tensor<8x32xi64>) outs(%arg2 : tensor<16x32xf32>) -> tensor<16x32xf32>
  return %0 : tensor<16x32xf32>
}
test.mlir:4:8: remark: Reduction NOT found in output #0!
  %0 = linalg.matmul ins(%arg0, %arg1: tensor<16x8xi16>, tensor<8x32xi64>)
       ^
test.mlir:4:8: note: see current operation: %0 = linalg.matmul ins(%arg0, %arg1 : tensor<16x8xi16>, tensor<8x32xi64>) outs(%arg2 : tensor<16x32xf32>) -> tensor<16x32xf32>
mlir-opt: /home/ty/llvm-project/llvm/include/llvm/ADT/ArrayRef.h:441: T& llvm::MutableArrayRef<T>::operator[](size_t) const [with T = mlir::OpOperand; size_t = long unsigned int]: Assertion `Index < this->size() && "Invalid index!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/ty/llvm-project/build/bin/mlir-opt test.mlir -pass-pipeline=builtin.module(func.func(test-match-reduction))
 #0 0x000055b9fe49945a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ty/llvm-project/build/bin/mlir-opt+0x22845a)
 #1 0x000055b9fe4966ec SignalHandler(int) Signals.cpp:0:0
 #2 0x00007eff1cea2980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007eff1bb53e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007eff1bb557f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007eff1bb453fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007eff1bb45472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x000055b9ffd5eb23 mlir::matchReduction(llvm::ArrayRef<mlir::BlockArgument>, unsigned int, llvm::SmallVectorImpl<mlir::Operation*>&) (/home/ty/llvm-project/build/bin/mlir-opt+0x1aedb23)
 #8 0x000055b9ffa4dc5a void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::TestMatchReductionPass::runOnOperation()::'lambda'(mlir::Operation*)>(long, mlir::Operation*) TestMatchReduction.cpp:0:0
 #9 0x000055b9ffa4b7df void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (.constprop.115) TestMatchReduction.cpp:0:0
#10 0x000055b9ffa4cb65 (anonymous namespace)::TestMatchReductionPass::runOnOperation() TestMatchReduction.cpp:0:0
#11 0x000055b9ffd966de mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b256de)
#12 0x000055b9ffd96a1a mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b25a1a)
#13 0x000055b9ffd96e02 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#14 0x000055b9ffd95e25 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b24e25)
#15 0x000055b9ffd96622 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b25622)
#16 0x000055b9ffd97533 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.510) Pass.cpp:0:0
#17 0x000055b9ffd97bbd mlir::PassManager::run(mlir::Operation*) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b26bbd)
#18 0x000055b9ffd8bb33 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#19 0x000055b9ffd8c201 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#20 0x000055b9ffd8c3f1 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#21 0x000055b9ffe58d40 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1be7d40)
#22 0x000055b9ffd87513 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b16513)
#23 0x000055b9ffd89d3e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b18d3e)
#24 0x000055b9fe465450 main (/home/ty/llvm-project/build/bin/mlir-opt+0x1f4450)
#25 0x00007eff1bb36c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#26 0x000055b9fe4782aa _start (/home/ty/llvm-project/build/bin/mlir-opt+0x2072aa)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1T47wV_jXiRkPGlvx5wYUJZEpnKQzLvJ15bzKyLTsqsuRK8hL66zuS82GbBLIL3e52usOCHUnn43mOzjmyQ7RmtaD0AoSXILw6I51ZSXVxSQn_k7arF3WWy_Ll4pFqA6WAhWwaZgDO4MqYVgOcAbQAaFEzs-ryWSEbgBacf9v-OW-V_ActDECLzVK0QGGShwEKaFlUMfIiHEY-reI8RzmJaFjlFQr8xCfAuwJe1v_-amiroZFQ0VbJsiuoVT2YACJv8-NuG87UuWwNNFSbmb2D5y3R-rxlLeVMUICv8o5xw8SskWXHKUBJ1YliZn8BlNh15w0xxepc0bIrDJMCoNT-HNLn8CmIHpg1nrCTDUHgNYQJgBKAQqJqD1o4DRVaKoDnfrRO1syPAL4GaA77Of5oSrLGaM2iYDQFTaVgtK4wcnNSeA7w9eFRCOLL3kRoJVlrriBngvB61hDTdBwyoffWHjNqYvdhYzfgQdmZvcgftXxrtaKmU8IZf1xSz0l8dZCcQhG9gkaR4ih_uzgCOMMAZ855RRuinuyV5Z-JGlqGXaj8LqSD8PoNB4U0FhGoKYVFpxQVBsqWKuJ8xBl8189fxM3vju03-TkS3JOwfiXix-P6DVHjwB6yGACcJeMwfdimMvi3u0dYyU6UkAlrd9sZCBD2APJ_ejbo_x2MxJ0P70fib8bvtkL1ti9WsqEALczL68K5KadMFLwr6f6D7OrR_laKvDzQaraycAWOhkeAIuhm4Qzg7LYzJOd0OxPg-aM1w431GErVl3-AEs3-RZfGelBIoQ0E4eUzMyv46MDd0AJwdtfe2aWiBPgS9ot6-KWoYSdcV2GDy1ixOIOZ1lS50AORdyNKuoYAz6FZMW2hshIctCkEKLL2A4RuxDfCmZVS0rWNTIQAimFFGKflrMfx_st19vUa6i5vmIEE5l1tmwSpjG0XvrtLYVp3VAO0gMTtDYc5NCsK-yKRk-LJFYrZtjEhxRMsu6bdVQ5vBrz0XslakQYSVXcNFUa_z7PtR0r71-bPxX-8g3HbHXprz_O8MMzTigZpGoRkEDj6RfcX94oJ41x9dEUSJftJijwvpTaKksYxN3ekOx6TH3EYoEtvjVAShGRkqz-xNYpoAb-yWhD-FyJKThVAyUZ1_7GeFa2lxXP_d4LQRlBMq8ovKEFp4sHlUlFtpKJLZTaWc5YDtFgn0TIKzjkT3fq8Fl0_0JqVoqScaTnznMG-lTKyFw_V5HmIaRJDRZimcOB7zVlenM__-Ovzn_nuFs1QDNBCOy8AWsxm9u5Fl7S1odkJtu4_-OasEZ29daJnBcBZ6I8dDiaWhHHlQ5JL5-lplpiyR8OtckqSiZJwrCQIcUXgcknctl_aLbvMyem-9-t2F73KdKwymqoMYnQCd4VlLXKsYS-I0Yi1eBhlVRnSHOFB1nP76WG_nQb7YJBe9_MvuSyesk0O2FSXUXJE88F--9oQzv-ghZHqpmn5SNLdrtihzAmKPrrHfELLHOGR-8nIfRKURUjgN8nKgZXbHnepnLNuFKDkiKko3dWagnBu8-eyEgDPAUqIkOKlkZ2GgjRUty61pP1k21HfjtC-J3qTjlQn7sRAS7JbBVDMSZOXBNgoetsmlNhaZRk4Og2-tuJwTkknuOVxWfW47WWX1BDG--tnwp9G9C6keiaqvDGbcuzsO2bX_INsjFz-O-FPd6q06dPF08zV_VbJdub74akg2ATtTUAo8iiEn0zzycb4442cRlFJj5Bx1z7Ku9bqzUrSOvQ36kdAOsN6-I8Tsx_JBOEvmulbIkht0Z3DXEr-OgN8cBfnKIxKun8wgbCPpr4Tn3y37_fbPmMcTHbqzqXo08EYLrKqboQ2ymVPqV5JHU_YHgXswMb2e2IPCjeikn03u9nVH8Wb-GSEN57iTT303XgPQj3TL6JwFQAlPUzvpbfPU3HX3t9awPoCMzkk9Jn2ZyjenD6ssMP7O5hgHlIUfjLmH42TgKJwFCfhq5yEvj9OfpechNDI92jiexxi_P-cNMpJg8ob-vYw8Ub4x1M487ycWLH162DgTBudD9Id5Xk5onvcSJZJnmMMW6oqqZrMlW39zilSm3JzCl0RRctlaxTA80GzLDtV0Nva9kpbJCfc3365eZhLYejavOLpljN115pbwsRciorVAxkpHIwexj-d-Fcgz4etkgXV-rKrKncaPcm9TrB_dvSVe7e0keplK2owv6QV6bhZlpRTQ4-vsV339ek-D-ddMcJpYR5ozbRRL5vxvZ5Hd_i9d5slOwUu5E3hwpU_UPhF1qwg_IHqjpvjze2xBQAlPw_O46QeO-kcJOAXDI_DtJ-4ZQ42KL8MK_uz3i9h0vsbZnx8oWFSBt6ACt1yZjJR3k8yzn_Du99wk745Y98GfE4fSOMy8IbFEU3OZ0kc-vjwPvtfyxIfhNKPQh-PoJwcvZK0xPQolJturliRvm-bPEr5ahQT9QOtTnH4c2LDT0o8OrujYPyYOwqD0IMNYeJjmqogCMdBOHlgi6MiieFyyVleLLUhyiw3Wk96Xlvobvugur90g06Oe3aLg2Cc4KKxn3GCCIG94o-9OfBiRMjr72mclRe4THFKzuiFH8VpiuM09M5WFzit8iqlKMCBR_0gChIvKfKc5kkUxBVOztgF8hD2MIr9GIWhN8NhVMQkp0VaJEWBIhB4tCGMz6yVM6nqM_cW6SLyYxyecZJTrt33axAS9Bm6QYAQCK_O1IXzLO9qDQKPM230Xophhrsv5tg-FoRXIPIOvtSJPNgSraFRrK6p0oN3bQvCeKfoh9-5nXWKX_z4yzSHxL8DAAD__476GEA">