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

    <tr>
        <th>Summary</th>
        <td>
            [mlir][sparse] Disassemble doesn't work with SortedCOO + SOA in libgen path
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          yinying-lisa-li
      </td>
    </tr>
</table>

<pre>
    Example IR for sparse_tensor.disassemble of SortedCOO + SOA:
`%ret_values, %ret_levels:3, %val_len, %lvl_lens:3 = sparse_tensor.disassemble %1 : tensor<64x64xf32, #SortedCOO_SOA> outs(%arg4, %arg5, %arg6, %arg7 : tensor<?xf32>, tensor<?xindex>, tensor<?xindex>, tensor<?xindex>) -> tensor<?xf32>, (tensor<?xindex>, tensor<?xindex>, tensor<?xindex>), index, (index, index, index)`

The number of results should be 8, but currently there are only 3 push_backs for retVal and retLen. Therefore, there'll always be a mismatch that causes the error below:

# executed command: /usr/local/google/home/yinyingli/llvm-project/build/bin/mlir-opt /usr/local/google/home/yinyingli/llvm-project/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_pack.mlir --sparsifier=enable-runtime-library=true
# .---command stderr------------
# | mlir-opt: /usr/local/google/home/yinyingli/llvm-project/mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorConversion.cpp:822: virtual LogicalResult (anonymous namespace)::SparseTensorDisassembleConverter::matchAndRewrite(DisassembleOp, OpAdaptor, ConversionPatternRewriter &) const: Assertion `retVal.size() + retLen.size() == op.getNumResults()' failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
# | Stack dump:
# | 0.  Program arguments: /usr/local/google/home/yinyingli/llvm-project/build/bin/mlir-opt /usr/local/google/home/yinyingli/llvm-project/mlir/test/Integration/Dialect/SparseTensor/CPU/sparse_pack.mlir --sparsifier=enable-runtime-library=true
# | Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
# | 0  mlir-opt 0x000055ade2b1d551 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 65
# | 1  mlir-opt  0x000055ade2b1da4b
# | 2  mlir-opt 0x000055ade2b1ba46 llvm::sys::RunSignalHandlers() + 134
# | 3  mlir-opt 0x000055ade2b1e1e5
# | 4  libc.so.6 0x00007f7c08c5a510
# | 5  libc.so.6 0x00007f7c08ca80fc
# | 6  libc.so.6 0x00007f7c08c5a472 gsignal + 18
# | 7  libc.so.6 0x00007f7c08c444b2 abort + 211
# | 8  libc.so.6 0x00007f7c08c443d5
# | 9  libc.so.6 0x00007f7c08c533a2
# | 10 mlir-opt 0x000055ade5b71894
# | 11 mlir-opt  0x000055ade5b4fd5f
# | 12 mlir-opt 0x000055ade7e16e58 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 440
# | 13 mlir-opt 0x000055adebd7ba36
# | 14 mlir-opt  0x000055adebd7b875
# | 15 mlir-opt 0x000055ade2b43a29
# | 16 mlir-opt  0x000055adebd7d285
# | 17 mlir-opt 0x000055adebd79df7 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) + 1463
# | 18 mlir-opt  0x000055ade7e1f164
# | 19 mlir-opt  0x000055ade7e1754a
# | 20 mlir-opt  0x000055ade7e16ebf mlir::OperationConverter::convert(mlir::ConversionPatternRewriter&, mlir::Operation*) + 47
# | 21 mlir-opt  0x000055ade7e17862 mlir::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>) + 402
# | 22 mlir-opt  0x000055ade7e1c479 mlir::applyPartialConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) + 105
# | 23 mlir-opt  0x000055ade7e1c5aa mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) + 138
# | 24 mlir-opt  0x000055ade5a4984e
# | 25 mlir-opt  0x000055ade7d43fbb
# | 26 mlir-opt  0x000055ade7d43f55
# | 27 mlir-opt  0x000055ade2b43a29
# | 28 mlir-opt  0x000055ade7d46ca5
# | 29 mlir-opt  0x000055ade7d3f683 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 851
# | 30 mlir-opt 0x000055ade7d3fc04 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 388
# | 31 mlir-opt  0x000055ade7d43f31
# | 32 mlir-opt 0x000055ade7d43ca5
# | 33 mlir-opt  0x000055ade5aa38a9
# | 34 mlir-opt 0x000055ade5aa3705
# | 35 mlir-opt  0x000055ade5aa3518
# | 36 mlir-opt 0x000055ade7d43fbb
# | 37 mlir-opt  0x000055ade7d43f55
# | 38 mlir-opt 0x000055ade2b43a29
# | 39 mlir-opt  0x000055ade7d46ca5
# | 40 mlir-opt 0x000055ade7d3f683 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 851
# | 41 mlir-opt  0x000055ade7d3fc04 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 388
# | 42 mlir-opt  0x000055ade7d41759 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) + 105
# | 43 mlir-opt  0x000055ade7d41682 mlir::PassManager::run(mlir::Operation*) + 1138
# | 44 mlir-opt 0x000055ade7d35f62
# | 45 mlir-opt  0x000055ade7d35ba1
# | 46 mlir-opt 0x000055ade7d35998
# | 47 mlir-opt  0x000055ade7d35932
# | 48 mlir-opt 0x000055ade7eaf53e
# | 49 mlir-opt  0x000055ade7eaeb5d 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) + 141
# | 50 mlir-opt  0x000055ade7d32861 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) + 337
# | 51 mlir-opt  0x000055ade7d32b05 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) + 581
# | 52 mlir-opt  0x000055ade7d32cd8 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) + 264
# | 53 mlir-opt  0x000055ade2a958e1 main + 161
# | 54 libc.so.6 0x00007f7c08c456ca
# | 55 libc.so.6 0x00007f7c08c45785 __libc_start_main + 133
# | 56 mlir-opt  0x000055ade2a95531 _start + 33
# `-----------------------------

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV9v47gR_zTKC2FDJkX9eciD14lxC-w2QZIe0L4YI4my2aVIlaSy8X36gpIS27SZS3cPVxS4PMSSOBzO398MSTCGbyVj1xH9FGEMoG3Jv0UYR_TmCnq7U_p6z-Wey-1McAMzwa9KVe-vb1-g7QRDnx9QozQyHWjDNpZJo_S85gaMYW0pGFINelTasnp1d4ci_Ak93i0jsozimyheRmkcYaqZ3TyD6JmJ8ApNHwR7ZsJEZEmmj88gNoLJ6U08D28DAYrIzTsSRJguUESWaByLyCpNXtLkpSF4ZEbeBNwMwt0i1VsT4TzCFPQ2mZYEvaWHx_TwmJ1yj8h64E1uHcnJZy5r9vKDAwWaOdECy0Q4_-NWcmPj68j57dl_KJwDR08O_592DMm-LZl2ftfM9MIaZHaqFzUqGcrd3LK3qOq1ZtKKPbI7phkCzZCSYo8I6nqz25RQfTNDZGlmfwWBQNbu8QuTc_TkpjRKs0EH9xLhTAgE4jvsjVsHUMtNC7baIbsDiyroDTOOFjGtlUYlE-r7IQzH_5gg9sKq3rIaVaptQdbOsRFe90ZHeC1UBSLC661SW8EivN6p1v1MCSK4oxHP7azT6l-sshFelz0XtfvlMsLrVnA9U539KZaOSYTXlhn39llattVguXIL3HAQI9XjkA5Po4PxenX_9wivpxzpoPo2d2zQbDZ84g1nOiI3TEIp2Ez30vKWzQQvNeh9RG6s7tnBSPPZbDbZBxlbM61nR38HuihboVeVf9aQk9aCl--p-aRBmkbp1nhjKyWfmTZcyXnVdRFZ5hg7kZ65tj0I9EVteQXiYYhYF_Igldy3qjdIQstMBxVz4U4cdh0zvjkAzbiGdZZ0VEP4LWX9wL5rblmE8yPau87F7l23rKGzTvQVOoh4D9YyLaeJGkU4delfKWkGOy6NYdp5HEVpPObH3PDf2IBYxQCyU6ocfyU3DiZVN98y-7e-HVUdUa6IcIYa4ILV81P33X-5XT7eItOXLbcIUNlvkWad0hZZhXbWdg6BI7x23uR215fzSrWT-869yI0ZUH495DOXlehrNqRlpcHskEt7q6FinhiPFqpvqO7b7pCz01A8j-LiXquthhaB3vYtk9b8lbcX8vbUkug7tzvVW2T2banEGOcu9Jk0vWZor3q0g2eGBj1GIv4b04hLN6bR_fLpF-RqP7MjsspnrpV09kfPoF1wfvny69fN4z--frr78vmftw8bNyVKYxc7neJyCCJup8Q6dSt6gw4Uv8RxHFMKNcPloqZ0Mcg0ppnZm_HhXnNpB_We9JCt-YFIw_eNMlYzaIdkcgXMvuZKSk-XXhwt7a8NSXlKjINylpCkl-R86OUj30oQv4CsBdPmKG0XJDllT4Ls2YJ5cicICV5Wc6Pm6UScNVkV5xUFuohPiWmQGPK4qU6J03c4JxlGWzMoNKqQn87NgnOTJCkxgtKBiZuJF4vTqfk7U0ntaV-EZSQEsOfi-KJZaZkt8sJzwWJxORxomTQ1bTxifJFxxhYpo_kwNkbBGdqHisZhyl3HXgFj6UL4MOIVjON6MVg2STzvL8hFMcs6K4GkHm1yWX9HnGd-7tBAvCYEcOHRpkHGNc59xllI4qJusnNbLLtO8Apcbf2DDbs6Suqml5WbuNGsiciqVMolQX7GYKrdg1-m3jvI5Fnx-qeZHCafdTa_z3fCoiQlng_yyw7L2KJZpH7aFEHijCbgoWgcJE5Z2aALvvK6rWp8PdEv2FFNfgxFwKh_knkyBnDAKZSn-OMyvg2bkxq11Br2D573TgQ7-CaJPUDDOChclWTFkXDQdWJ_D9pyEAcD_YAkq4to9gR6y-xRSB2TrbX6jb16YfLJY5D6wHSlZMO3b4EZe9iASVh5CvAR5T8CBn-uksSrozgAwxSSIk-8Lg_TgEXqhDSl38IEcHggpr6ts1BzdAHhcQgw6iStwOccAoyaNGlOjmxWMwtcvLrrSd1192DM61ZqbPh66UGdMWcODbt6KUHsDTdfQcKWDdszh-3ut5fDiVl93EHm1OtcyOX-wqlSxcl_rco975jg0q9ajvRNwncR7Yd0Oy2ExnyWxuphe-W2JmeV8phgXHkcmGS_B82k_Swb9ZoJb0hLci_WSQhqXUQS39aBlqtOyFmMkQBSUACSgxe9JLncJAKQzIcgEkg4R0z9lpikQYnPkpME8u1icpL8490XCabbhdxMwvH8_5aaSTC2_srNj-RmEuo06mSR0cJb9lWRN2uBMcx8sOCeWSNQ_5NQ_a-TRZrj3xHpHWGm9c5qcXIZGbKa0Cb1OrMkWIoJLcEPzhAyEFoUvhBBZCC0IL4Ul5EhY9BQ4jUPSbBzB1bS-sicphPcLmV9r1XFjPnUN41zU25sPRL0kv-7Z5vO6oisDg3mV9YqvX8lX6E3-po10Au7qZlgloXnkNuf2AD9L6TzD6DON3DnR1SvmT_-vm7KvIihoZ1TTXCeLo6c9VVwfdfZr8Dl75yN_XkGOkg3nYA-sC03Vu_PMPNI-rFRPt61jkhFvA0bDSM9LmMaNM0EsNUORihdnjrq0Wout257FP78vl6jvDT3XRlEVoKrOv9D5P2IYNjfytMAvmIoaM4WqAUux-hMfZWS4AkeTSvvEIDSMHGWU7TZuOGNsaDt5rAm8U4paGA746SlZIFGBlPIHE1N49l7fyPlVX1N6oIUcMWuF1lcpBlNYnq1u84S0uA0SdK8qOo8LqtFlkNNoCriIm4wueLXOMZJTGKKFzSO6XwBKYuLNGZFWtdZEkdJzFrgYu5cN1d6ezXcllznSZwlVwJKJsx0TT9eJQx39Pp6OJ4v-62JklhwY82BgeVWDFf7wwR6E9FP41VCRG_Q0W0UqhUzMsKZRd-V_jbcDJzf2iMunYO2TKIO7O6q1-L6x2-ABrX-EwAA___3lMq3">