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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]crashed on `-test-linalg-elementwise-fusion-patterns` pass: Assertion Failure `indexingMap.isProjectedPermutation() && "expected indexing map to be projected permutation"
        </td>
    </tr>

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

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

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

<pre>
    test commit: [bbd1bb4](https://github.com/llvm/llvm-project/commit/bbd1bb40573dd5a36dc04af4ad307d6e16456f89)

step to reproduce:
```
mlir-opt test.mlir --test-linalg-elementwise-fusion-patterns=collapse-dimensions-control=2,3 
```

test case:
```
#map = affine_map<(d0, d1, d2, d3) -> ()>
#map1 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2, d3)>
#map2 = affine_map<(d0, d1, d2, d3, d4, d5) -> (d0, d1 * 2 + d4, d2 * 2 + d5, d3)>
#map3 = affine_map<(d0, d1, d2, d3, d4, d5) -> (d4, d5)>
#map4 = affine_map<(d0, d1, d2, d3, d4, d5) -> (d0, d1, d2, d3)>
module attributes {llvm.data_layout = ""} {
  func.func private @main(%arg0: tensor<1x28x28x3xf32>) -> tensor<1x14x14x3xf32> {
    %0 = llvm.mlir.constant(-3.40282347E+38 : f32) : f32
    %1 = tensor.empty() : tensor<1x14x14x3xf32>
    %2 = linalg.generic {indexing_maps = [#map, #map1], iterator_types = ["parallel", "parallel", "parallel", "parallel"]} ins(%0 : f32) outs(%1 : tensor<1x14x14x3xf32>) {
    ^bb0(%in: f32, %out: f32):
      linalg.yield %in : f32
    } -> tensor<1x14x14x3xf32>
    %3 = tensor.empty() : tensor<2x2xf32>
    %4 = linalg.generic {indexing_maps = [#map2, #map3, #map4], iterator_types = ["parallel", "parallel", "parallel", "parallel", "reduction", "reduction"]} ins(%arg0, %3 : tensor<1x28x28x3xf32>, tensor<2x2xf32>) outs(%2 : tensor<1x14x14x3xf32>) {
    ^bb0(%in: f32, %in_0: f32, %out: f32):
      %5 = llvm.intr.maximum(%out, %in) : (f32, f32) -> f32
 linalg.yield %5 : f32
    } -> tensor<1x14x14x3xf32>
    return %4 : tensor<1x14x14x3xf32>
  }
}
```

Crash backtrace:
```
mlir-opt: /home/workdir/llvm-project/mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1238: bool mlir::linalg::isDimSequencePreserved(AffineMap, ReassociationIndicesRef): Assertion `indexingMap.isProjectedPermutation() && "expected indexing map to be projected permutation"' 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/workdir/llvm-project/build/bin/./mlir-opt test.mlir --test-linalg-elementwise-fusion-patterns=collapse-dimensions-control=2,3
 #0 0x000055911ea0c158 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x12d3158)
 #1 0x000055911ea09c7e llvm::sys::RunSignalHandlers() (/home/workdir/llvm-project/build/bin/./mlir-opt+0x12d0c7e)
 #2 0x000055911ea0cb61 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007f47768c3520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x00007f47769179fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #5 0x00007f47768c3476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #6 0x00007f47768a97f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #7 0x00007f47768a971b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #8 0x00007f47768bae96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #9 0x000055911f8eb1fc mlir::linalg::isDimSequencePreserved(mlir::AffineMap, llvm::ArrayRef<long>) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x21b21fc)
#10 0x000055911f8f3d68 bool __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>::operator()<mlir::AffineMap const*>(mlir::AffineMap const*) ElementwiseOpFusion.cpp:0:0
#11 0x000055911f8eb310 mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x21b2310)
#12 0x000055911f8fefb9 (anonymous namespace)::CollapseLinalgDimensions<mlir::linalg::GenericOp>::matchAndRewrite(mlir::linalg::GenericOp, mlir::PatternRewriter&) const ElementwiseOpFusion.cpp:0:0
#13 0x00005591242b5622 void llvm::function_ref<void ()>::callback_fn<mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>)::$_0>(long) PatternApplicator.cpp:0:0
#14 0x00005591242b231f mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x6b7931f)
#15 0x0000559121b8301a (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#16 0x0000559121b7f863 mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x4446863)
#17 0x0000559121ce2460 (anonymous namespace)::TestLinalgElementwiseFusion::runOnOperation() TestLinalgElementwiseFusion.cpp:0:0
#18 0x0000559121b058a3 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43cc8a3)
#19 0x0000559121b06142 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43cd142)
#20 0x0000559121b0c58e auto void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_0&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)::operator()<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&>(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&) const Pass.cpp:0:0
#21 0x0000559121b0799b mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43ce99b)
#22 0x0000559121b059fc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43cc9fc)
#23 0x0000559121b06142 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43cd142)
#24 0x0000559121b0891e mlir::PassManager::run(mlir::Operation*) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43cf91e)
#25 0x0000559121b00e9b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#26 0x0000559121b00af3 llvm::LogicalResult llvm::function_ref<llvm::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&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#27 0x0000559121bac065 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x4473065)
#28 0x0000559121afa752 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43c1752)
#29 0x0000559121afaa03 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43c1a03)
#30 0x0000559121afac12 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/./mlir-opt+0x43c1c12)
#31 0x000055911e9eb8df main (/home/workdir/llvm-project/build/bin/./mlir-opt+0x12b28df)
#32 0x00007f47768aad90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#33 0x00007f47768aae40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#34 0x000055911e9eb435 _start (/home/workdir/llvm-project/build/bin/./mlir-opt+0x12b2435)
Aborted (core dumped)

```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsW1tv27qT_zTMCxFDInV9yINjx2cLNGiQFruPBiWNHG4lSoek2mQ__YKkbF3iNHHrtud_0MJ1FImc229mOBwxTCm-EwBXKLxG4fqCdfqhkVfqKwArLrKmeLrSoDTOm7rmGtElRuF1lhV-lgUoXCOSPGjdKkSXiGwQ2ey4fuiyRd7UiGyq6sv-x2Urm_-FXCOy6UmRTU_GC2NaFCGjUZF7ASsDVlAvLiLwoyCMyiRFJEXeEnlLpaHFusESWtkUXQ6GrbdEkdd_vGVdcXnZtBobqRfmN3x5aa4vKy5YtbuECmoQ-itXcFl2ijfismVagxQK0XXeVBVrFVwWvAZhnqrLvBFaNhWia4LIiuIZR-QtnYWYOiIPIrRmLUZ0jVlZcgHbmrWIrhBJCg-RFS58-03sN0UkxZeI3mBEEqM2vTnQ8L-LyAvPx4TJCYRXuAjsd3iMCUZkiQlG5Ho_jIxvhUfZ0x9nP9wbEw7OptdR49VN0VWAmdaSZ50GhVF8bVx9UTDNthV7ajptRUCEmE-8NiOQt8S47ES-MF-4lfwL04BR4NWMCwt7yOTOM6GmQahGIrryH0liPvSxpMSw3ws5GuEH5rMfcWCFMSKhZ-WwwpmQWOSNUJoJjUhySReBRxJCg_gGkWuaYMPZECHp4fJAyDmh47qAutVPzlHxTNypMMN852suFBc7ECB5bkTlooBHLnYGJ-WMFl47GI3Z-wiwCWeFuQbJdCO3-qmF0WjSMsmqCiprcDPr5Dvh2sDEhXJAeGNjNJ3ub_uvqGvsMZg_vMkyz03k4kDPsA6bTg8MXPLA9l9voScOVYHtxDkW8foVDxiMTt8EGnkkz2YGp8NFBrzocBn8fOjcHQlFl2veiBduzQC2keawoHNQ5yG3OmqriWOQczkGF1vvja6CSBgO4c2FlouaPfK6qx1pM3FPdA86IklPufdt60q9d819L_xe15OgOyn2fvRafkDx2qRu9z1dX1eSqQecsfyzluxbq77TbfPQ1IDI5msjPxdcPq9AzHBzl2eIbNacVe72e6s4IptPkglVNrJWiGxuhoLhQ7uxFcMib1tElz6hieGYNU2FLU26RHTp7OeuuVrz-iP83YHI4U6CAvkFCkSSpV2Wbl16uwemVJNzZrz0nSh4DuoeSgc0XioF0jzBKPL2kXfL2gVXd04lKO5A1p1mzstdbJMIkcj4Pzy2dgzez8WmItENzgC3ewK4HVMgiMS4ZLyCYoG85d37m-XHG6y6rOYaM5x1O1ODNVIbMicXgFypDoxpMRNGqrzqCsD6AXA-Bdrw_qhZ_hkXXd062L0F8tI72ewkqzGTu86Ao94IfNbxqjA_TShsFr0r_Nx60Tg3ItTD3qPneV4Ypr4PzMv9MLEh6xxFPSl3cSe50FbpT9bXSTIMkuzrtlFaAqstvCvMzRqeumrxB7RH5Np79ElB_TBx1bYR2Z-JnOYxHBP5vhMf-U6w6r-YKCqQ6uCC55HKy2MYpCJzQ2aRjyf8EUmsXVZY8R0XZbPViCzN718aXtjLtJ-h-lD27H_HgPYM4jKI4yjJaUi8XheXMR6TaBsFxkG6x8ud6NyDfKGaRWRlDkhIvEHiYEIw9eO0zHGrHySwYvuZV9Vp1NMoLfOBejgXN4gjvFNWvVPFDuJoIBxNCbM0LilmmYn6k8iSJC7pQDZ-RtbPTiboZwPBZEowY5BGpxGkKaQjxdOxh5UJZH6Zn5rfh-GTTD9Ez1JK9mSSPF1Vjdjtq4NzhAzxM-LvXcTEsTdVqKRFlLhVa7vdiW6bPz46obbbpu2DevtOg9wK2DENiK6Oq88kjPRXYwMc1fSYVVxpddwwh5sfa1ZV_w25tvWDNRhZYdKZ2dZybhgigambbtxvTeuKzf1e-hh7bLdCJicYMsdgG0aQFL9cDOwziLG3P3cgA8E_3YLn8z3qe4PvkZnvQZlZVkw04qluOoUFq0G1dq3rYVz1q6oryNaHpfVFP_zLbU0-tAfsa6bzh6Uo7uGr5Bom0B6fSVYjiO7cEt_Plna1TZ0nvNEH6EhvEpAsjAix688IqLITdmOylRYs-3Ro_NghOasqUw9tSzHRvhdw2bYVz62Tv6r2BxsOtr5bvq7t6mU5beaYkO4J7EMl6jX4FpG9sj9EZHjwvtnxnFX3oLpKv43uPGeQxEVFip8Z9wi-wQxfQv3yuUn_4PMD-JwnI0VZnFK_HDJSOEbOzxLq-ey1jPSXBCiepjisJf8CvQ6tbHJQ6n8a-bniRgtbAL8864hDRVOx4jKJ6MgHWNtWe1LKEubV08SO97CzzhNNnWcjm_-DPfeewEfQI3OPRzuR-9GrRpTcrhPGpfol8CygBEEQJREdQIkn2udAgsh7DZRPoLRbIkYp2SXkfr_UiQ9iFFYWlG_MOoJKMkXFCxM2RqUAzXi1j99PzYf2jim1LFh7CHnZiZm7K_Uswl-O_aVg1ZPi6pYJtjOxvwdjhTth390UZ90FBjTPEzZCJp1ZIPIDcrIF7ngLFRfzhGeGHhSLzm6SaQ5V6p1QWtqGgSkKnyXZ8QDH2T3oZb9jEoR-J8pmUhKey-qFH5CD1Yk3s3oeJoBZpxtXQwxi71ugm0besPwB0dWzml40smbVdt97ndQRb4NvFEVL9STyd3VbIZI4q6cHNG-NcXrDKl24-1_2NefPZTriyKqqyX-Fpq50dmvgz2A0Kk0G8rfv392vGqHhcd_V-AP47wD8j9X_XWFm--Wje3HF6qxgiMSIJH_A_vVgT_D4Ri_nZ2geuaz7B_bfBnvfbDGEn5flxJ-VR3GaZmfODWcr7CBNs6GwI_MNRTppLv87NxTpqBtN6J8NxW_YUAQzqyepDzNh9-of9bKp9c4nZZn6MEg56814HqQZbkGWjayXtrOkXnkjekhd6oFJKLatltM-eNPJHG53EtGbF3ogzyvs0bOKyw-tvmVcuO7IuG2FR0-PJK1orhwrKX6pRfY9PbWD7p3gf3fwTPdbqBv5dN2VpXPyw_gCStZVeltABfZ1zwtzDmXYywi83roeGemtWP50fQbp-uMg97DjSsun587xLQd4tm3bv2f5RyDzintOW3AZy70oHCmu2orrpSjuXKtzL-tvcbr_wJD45ojxs49acrGzx39euH22HmxMvSgcku-018lKFofkuOf_2-L2bKuZH4ejNTedG5R59EWD9gVG_sBcKbE81S1es8YZtWTe0CCm3lzL3H_ZbU7R8pepk_sDaLNTTylkSVHimnFxrvNMGUmK4XXU4TzT_jwMK9ITjxuRtEiHN-7z80uMQeDh7dbM2SrNpN6OtHkzCwhGLIK5jQIaYkf8fFYKaJ-bllkjNdi3kXkjwR4GhOLwVyGHg6AXxRUtUpqyC7jy44B4JE2i4OLhKkvLJAkY-JCVWRRAGRexDwTyEGiSAlzwK-KR0KN-6KW-7wWLvCyD0JCCLA7DrESBBzXj1cIesm3k7sIeYrzyqR8E9KJiGVTqyh1ldqdLCQrXF_LKqp11O4UCr-JKq4GC5rqyf3dj6k0Uru3hRyiwO-j55kOIkYdbswOcnBTdMF51En7hidGLTlZX338UtDfklyvy_wEAAP__6XkTKw">