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

    <tr>
        <th>Summary</th>
        <td>
            MLIR crash in linalg::ReduceOp::verify
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    `ReduceOp` crashes during verification of the following op:
```mlir
module {
 func.func @main(%arg0: tensor<32xi32>, %arg1: tensor<32xi32>) -> i32 {
 %c0_i32 = arith.constant 0 : i32
      %from_elements = tensor.from_elements %c0_i32 : tensor<i32>
      %reduced = linalg.reduce ins(%arg0, %arg1 : tensor<32xi32>, tensor<32xi32>) outs(%from_elements : tensor<i32>) dimensions = [0] 
        (%in0: i32, %in1: i32, %init: i32) {
          %44 = arith.muli %in0, %in1 : i32
          %5 = arith.addi %44, %init : i32
          linalg.yield %5 : i32
        }
 %ext = tensor.extract %reduced[] : tensor<i32>
      return %ext: i32
 }
}
```
This is at line 1656 here:
https://github.com/llvm/llvm-project/blob/fb87e11e7253656ffe99726f45b679e08343bd5f/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp#L1652-L1658

It appears the ODS-generated code for getInputs assumes that the variadic operands (inputs and inits here) are the same sizes. When computing the size of the variadic operand, it foordivs 3 by 2 and returns a range with 1 element. On the other hand the code in [here](https://github.com/llvm/llvm-project/blob/c5e417a812d86226b087346cadb05d3aae9fe1d0/mlir/include/mlir/Interfaces/DestinationStyleOpInterface.td#L85-L89) is correct and returns an init count of 2, and an operand range with the two inputs. That's why here we enter the loop, but `getInputs()[1]` crashes.

One fix for the crash would be to use `getDpsInputs` instead of `getInputs` in the verifier. But this should ideally be patched in ODS I suppose. Thanks for reading.


---
Stack trace

```
cinm-opt: /home/clem/Documents/LLVM/llvm-18.1.6/llvm/include/llvm/ADT/STLExtras.h:1281: ReferenceT llvm::detail::indexed_accessor_range_base<mlir::OperandRange, mlir::OpOperand *, mlir::Value, mlir::Value, mlir::Value>::operator[](size_t) const [DerivedT = mlir::OperandRange, BaseT = mlir::OpOperand *, T = mlir::Value, PointerT = mlir::Value, ReferenceT = mlir::Value]: Assertion `Index < size() && "invalid index for value range"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: cinm-opt sandbox/matmul_tiled.mlir
 #0 0x000055eadabe7a4d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/clem/Documents/LLVM/llvm-18.1.6/llvm/lib/Support/Unix/Signals.inc:723:11
 #1 0x000055eadabe803b PrintStackTraceSignalHandler(void*) /home/clem/Documents/LLVM/llvm-18.1.6/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x000055eadabe5ce3 llvm::sys::RunSignalHandlers() /home/clem/Documents/LLVM/llvm-18.1.6/llvm/lib/Support/Signals.cpp:105:5
 #3 0x000055eadabe8801 SignalHandler(int) /home/clem/Documents/LLVM/llvm-18.1.6/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x00007f5e4b450ae0 (/usr/lib/libc.so.6+0x3cae0)
 #5 0x00007f5e4b4a8e44 (/usr/lib/libc.so.6+0x94e44)
 #6 0x00007f5e4b450a30 raise (/usr/lib/libc.so.6+0x3ca30)
 #7 0x00007f5e4b4384c3 abort (/usr/lib/libc.so.6+0x244c3)
 #8 0x00007f5e4b4383df (/usr/lib/libc.so.6+0x243df)
 #9 0x00007f5e4b448c67 (/usr/lib/libc.so.6+0x34c67)
#10 0x000055ead608a178 llvm::detail::indexed_accessor_range_base<mlir::OperandRange, mlir::OpOperand*, mlir::Value, mlir::Value, mlir::Value>::operator[](unsigned long) const /home/clem/Documents/LLVM/llvm-18.1.6/llvm/include/llvm/ADT/STLExtras.h:0:5
#11 0x000055ead7199ce5 mlir::linalg::ReduceOp::verify() /home/clem/Documents/LLVM/llvm-18.1.6/mlir/lib/Dialect/Linalg/IR/LinalgOps.cpp:1584:32
#12 0x000055ead715bb94 mlir::Op<mlir::linalg::ReduceOp, mlir::OpTrait::OneRegion, mlir::OpTrait::VariadicResults, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::VariadicOperands, mlir::OpTrait::S
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8WFtv2zoS_jXMyyACRer64AenjrEBcpAiyXaBfQkocWRzK5MGSeVyfv2ClHxt0pwttqcoHIscfvxm5pshZeGcWmnEGcmvSL64EINfGzsz5gW_v4leXDRGvs1IQe9RDi3ebUlBobXCrdGBHKzSK3hGqzrVCq-MBtOBXyN0pu_NS5g1W8LnhC4InZOCjv83vbLj0MbIoUcg5dX4DN2g2yR8AMnoRihNWEVYLuyKEj4Hj9oZS_gXzl4VZ4RfE_YFRoP0I4MaLgm_BsXZ0UaE5S19imN8AcIqv05ao50X2gOFgBXWj8bxH2F5Z83mCXvcoPYuLhz3S84mjrCPKE18TiFtDKyMYL3Sol8l4xAo7Y6cP7gJHwfife_N4Cekc_4_kmM1SLVB7ZTRo4ckv6IkX8Ax78A84ClNd4Ea-Smdng8ovx-pj-IPB6Q8y46SsBl6BRP2HvS9fEyL86O1Qko1Ah5t_9HaKdpvCnu5A3rHkJSLg2Tw1R-nHV-9Fa0_yuNYR5_l3aIfrJ4AT3fdb3f4siub8fFxrRwoB8IHDxDSIi9gjRb3dbb2fuvCE1sStlwpvx6apDUbwpZ9_7z7c7m15j_YesKWTW8awpZdU5WYpliynBd50XVY1yUruixvirJGWvGMNzLvCFvGCmbLXoV1CyX6Eeg2hpSw5c39_ulu65J2uyWM36ZFzi7DZzV5Fj9vPIjtFoV1sXXcLR4uV6jRCo8SWiNDN7GwQn-jt4N3IJwbNhiMhY8rnoVVQqoWzBat0DIUYKUmYy0hiMCNIWI1CItxlRMbBKf-RJfAv9aooTWb7eBDz4rT6k_cdbPzDYK4lIfOGCvVswMOzRuwuNeYWQcCrNArhBfl15DCVHMJ3OmIaPwaLazDivAYvVQ61FqkmS8Iq341jW2OWVqKKmWyKhgrGlqVPCtaIRuaSy4E1h2mkh7SqHTbDxIPAzfao-1Eiy6kF51XOrb3B__W4912P514GfJa5Ze3VR2Cqxy0xlps_Wk0dEwCtGbQPkQ1todgIfQuqMcBCzHxLwbGJCbwuBaesNLBy_otJhJeEDCwiKa9MdsA2AweSEH3UolNqib5VRoieji5kmP53WmETr1GkcVcBBt4MUMvoUHwBgaHE-xi6ybkgob-7FHI4M7JpnFq1E08GdEmcDUEqSoHbh2BlUTR929hg63w7RqDSoP04QbcsN0ah9Fr_d1FYhaFVHp1Qnz8vLy8HL88eNF-h9CP8MTqtHu0Sm8uzTY2HcKWa7MJaW97DHpamHaIR0Mo3ttvf-wkllZJmhQH3R30Mg3MF4-ELR8eb69DQ3TJmvB5yqp4FtxjhxZ1i48Qrfmc8LlEL1Q_flda4ivKJ9G26JyxT1EIT41wSPiXqMhodzfq5D7Mhmwfz0xzQNj8dOqb6Af8i0P8enyKgvTGjr2csCr0gicf9B1vCKFMF2jVM8rHeBp8zPFKOPzR5oztucGe4FejgsY_nD8K7XsW-SLEf-4c2ng3IwW9CbEGwr_E_jbWBxBWEFYAYUzpZ9GroMVgFoT3HJDG0iSMEVZCJ1SPclLi19vr-cM1uKHZKA8CmmEFFrfG-lA4_3MHU84NsedMfTvK7KgqG9F-jwpPjjUvh83hkkkTQuuv1qys2ICwq0nQfA476YMTWjbmNbQ74TdD_-SjR4dbKRDGKdBXSinNcxRSNFiKTB4J2L258ctXq7SPPB5j6bHqYGTFy5Nx3qLYxBh_AaX9GPFfrLzxwH0IHcKGgP1Tq-DHg1pp0btE6Zbwecl4qL_04Ex65kxFeQNnzEeMfwgte7SEVc9GySjQ3063rgLdA1t2xjZvkb8X-vtBn5B2ez3_n-jueIbrC5-nNCd8nh948vOoVjSF8zD-LRnPUn4awmyiVnY5Zk2WU4F0vLMvB3e4ufWqaRNnwn5X9JW3Amk4MPcw-SmMqDBc1T-BqTMM9-8jmOIHNpyCFSqcq59z4qecylMwXmUtB9GElvMZGMuylp-AVedgXHZ_AYbL7gSmPoXJqrYoP3cta4tyDxOq9KTnFLQSaVn9_kPz95yZg46_LEjojV4dHZ2_9c5BDwUa4nnS9sq0rlvMjzwYXwCnXrL7fSM-xYvb2y-3k194O-LzNK8ywue7F8HAn53yz5umzk4yeJLqd905S_mjFfF9PDxovMeVMvonNt-mF597dEMf_P3Q8t9ozcMwifFnhjvISXw_M3149wZ7IWdc1rwWFzhLy7RMizpl7GI9E23aMV512HZdU1U1rVmGaZs1NeNZKasLNWOUZTTnaZqzPC2SrmNZXfKc0rQuulyQjOJGqD4J6UyMXV3EC8ms5nXJL3rRYO_iL2WMjSlmJF9c2FnMfjOsHMlor5x3BwCvfI-zP25v7qcrjNLwme4uBtvPfv3uNLJ9nrH_BgAA___pl_i3">