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

    <tr>
        <th>Summary</th>
        <td>
            --convert-linalg-to-affine-loops crashed with assertion failure "RHS constant has to be positive"
        </td>
    </tr>

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

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

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

<pre>
    git version: fe5370dd50e48f827aaee9f5fa80e751b1759a25

system: `Ubuntu 20.04.6 LTS (Focal Fossa)`

reproduced with:
`mlir-opt --convert-linalg-to-affine-loops a.mlir`

a.mlir:
```
#map7 = affine_map<() -> (0)>
#map8 = affine_map<(d0)[s0] -> (d0 * s0)>
#map9 = affine_map<() -> (15)>
#map10 = affine_map<(d0)[s0] -> (d0 mod s0)>
#map11 = affine_map<(d0)[s0] -> (d0 floordiv s0)>
module {
 func.func nested @func2(%arg0: tensor<?x?xf32>, %arg1: i32) {
    %cst_0 = arith.constant dense<1.82040346E+9> : vector<f32>
    %c0 = arith.constant 0 : index
    %idx0 = index.constant 0
    %cst_20 = arith.constant 0x4BDF80DE : f32
    %false = arith.constant false
    %c3 = arith.constant 3 : index
    %c31 = arith.constant 31 : index
 %alloc_26 = memref.alloc(%c3) : memref<?xi32>
    %1 = memref.alloca_scope -> (memref<?x17xf32>) {
      %alloc_35 = memref.alloc(%c0, %c0) : memref<?x?xf32>
      %alloc_36 = memref.alloc(%c0) : memref<?xf32>
 %18 = scf.if %false -> (f32) {
        %19 = affine.load %alloc_35[%c31, %c31] : memref<?x?xf32>
        %alloc_39 = memref.alloc(%idx0, %idx0) : memref<?x?x15xf32>
        %20 = affine.apply #map7()
        %21 = affine.apply #map7()
        %22 = affine.apply #map8(%20)[%21]
 %23 = affine.apply #map9()
        %24 = affine.apply #map8(%22)[%23]
 affine.for %arg2 = 0 to %24 {
          %25 = affine.apply #map10(%arg2)[%23]
          %26 = affine.apply #map11(%arg2)[%23]
 %27 = affine.apply #map10(%26)[%21]
          %28 = affine.apply #map11(%26)[%21]
          %29 = affine.load %alloc_35[%28, %27] : memref<?x?xf32>
          affine.store %29, %alloc_39[%28, %27, %25] : memref<?x?x15xf32>
        }
        scf.yield %19 : f32
      } else {
        vector.transfer_write %cst_0, %alloc_36[%idx0] : vector<f32>, memref<?xf32>
        scf.yield %cst_20 : f32
      }
 %alloc_37 = memref.alloc(%idx0) : memref<?x17xf32>
 memref.alloca_scope.return %alloc_37 : memref<?x17xf32>
    }
    %2 = bufferization.to_tensor %alloc_26 : memref<?xi32>
    return
 }
}
```

trace:
```
mlir-opt: /data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/mlir/lib/IR/AffineExpr.cpp:1328: void mlir::SimpleAffineExprFlattener::visitDivExpr(mlir::AffineBinaryOpExpr, bool): Assertion `rhsConst > 0 && "RHS constant has to be positive"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt --convert-linalg-to-affine-loops a.mlir
 #0 0x0000564b880796ff llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x14096ff)
 #1 0x0000564b88076984 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f3d6fa9d420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f3d6f53a00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f3d6f519859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f3d6f519729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f3d6f52afd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x0000564b8a983e83 (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3d13e83)
 #8 0x0000564b8a987f38 mlir::simplifyAffineExpr(mlir::AffineExpr, unsigned int, unsigned int) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3d17f38)
 #9 0x0000564b8a98f56f mlir::simplifyAffineMap(mlir::AffineMap) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3d1f56f)
#10 0x0000564b88167ba8 composeAffineMapAndOperands(mlir::AffineMap*, llvm::SmallVectorImpl<mlir::Value>*) (.part.0) AffineOps.cpp:0:0
#11 0x0000564b88168c95 (anonymous namespace)::SimplifyAffineOp<mlir::affine::AffineApplyOp>::matchAndRewrite(mlir::affine::AffineApplyOp, mlir::PatternRewriter&) const AffineOps.cpp:0:0
#12 0x0000564b8d4ec1e8 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&)>) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x687c1e8)
#13 0x0000564b8a9434d7 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#14 0x0000564b8a94771b mlir::applyPatternsAndFoldGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3cd771b)
#15 0x0000564b88b818bc void (anonymous namespace)::lowerLinalgToLoopsImpl<mlir::affine::AffineForOp>(mlir::Operation*) Loops.cpp:0:0
#16 0x0000564b8a8a413e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3c3413e)
#17 0x0000564b8a8a461a mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3c3461a)
#18 0x0000564b8a8a4e21 mlir::PassManager::run(mlir::Operation*) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3c34e21)
#19 0x0000564b8a8952cb performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#20 0x0000564b8a896784 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
#21 0x0000564b8a896934 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
#22 0x0000564b8a97cff4 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) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3d0cff4)
#23 0x0000564b8a88fd57 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3c1fd57)
#24 0x0000564b8a896c5b mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x3c26c5b)
#25 0x0000564b87fb47db main (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x13447db)
#26 0x00007f3d6f51b083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#27 0x0000564b8804b29e _start (/data/chenyaosuo/exp/newest-llvm-reproduce/llvm-project/build/bin/mlir-opt+0x13db29e)
Aborted (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWltz27gV_jX0C8YaEOD1wQ_yRd3MxBNPnG4fNSABSmhAgAVAx95f3wFISSRFRfZ2q912JnYkEuc75zsH50LQxBi-kYzdBPFtEN9fkdZulb4hUsm3WrXm8e75qlD07WbDLXhh2nAlA7wEFYtxCimNIYuyKkMpIYzlVVyRDLI0DoswjXOC4gDeB3DZ_TZvxrLaSQcJ_HvRStsCBBcwWiTg87dnEKBspUoiwEoZQwKUBwkcymvWaEXbklHwg9ttgPvrQQJrwfW1aiy4vi6VfGHaXgsuidhcW3VNqopLdi2UagwgC7d2gtxfHAD2_7qvCNekSUGA70GHta5JE-C7AGUBysF1gB-c8dCZjB-GQtmsEPUr41sDg_h-L04hCNASmBmY_KzuMD6WCuHHtNeKzmoPw4_hVEIpTfnLBKxWtBUMBOlt9x1UrSwX7heQzFhGQRBB9xV5bjHRG-g2i2XSKO104tWr-6kwcqDoDnSrQreKY-T8cUAHwN0ujV33btDcbhelksYSaQFl0rAA34WLDMEI4ih5CNBt7lngJXhhpfVKe2UjzFlA6OW4pOx1tJrT1269vzVYf2Qnmsd9jW7vVxm87wxz9gwFKyIMm5PzN8Y68Nw6fMLuEoezy8Oj9S4KQqhyjRIvUbNas2rhr3WhLLGPDV729_pg8mPfhkcIZG1K1bD9BhshhOl-N0xiDw5m4fiUWbDfRO7DjH2DzTaLe5LuPNwIynHtqoMpqwWvDrHcEa1mdvTOS8OCsBCK0CFbV8p9_HbscOgy9J30hgTzEwTdnu7Bu48nnBfGpxSgYW1akKYRb6Cvs11lO5YIPyyBTklkHQ3UVzCPHsT3h9AgfEo0P6UsOqcMHZThg7JeoFK6r2ad0RBYtYOdboBOX3xKXwj39XNe5QgmOQkTnoFxX9NzRqBk1sUjE7JzJrwH5B0Z4bDuOrM_lA9gB2us0qzTtus-fZ4cK-g_xCc1ncqNdELPlYc3zgTdJ_6kCXgZwHwbmG6Vro0trCbSVEyvf2hu2b4vjkkkHQmf0L3R0y6I7n5S0ebs3be1OZun7QOnPy03MzXmUP47qJm-sdDMtlpOtJzBmcbBRdLbVrRVxTT_jViu5MKqdTecTFrgmTbXWbRjv9Nz-DCZPv1vq0nJTg2ou-nXj9ZoRYklAVqVWybfiDKtCtCKvTYBWkn2gxl7LcRLfb2fpgO08hcarf7JShuglR-G0UrwIkCrT18DtFr6BHh4bfSibJoAL0OMMr9DFKdgNzzj5TOvG8EOq1eCWMsk62-_cMPtPX9xt1wr38t1ErdcEv32pelu34FCKeEnyCVYGsO0c7p7dtBbc-fmEeA6pZuak8D5HaGvvzyD_aSyJcYV0YKBRhlu-QsLXA1OQUW4YHTR-e7p88Py-QGYtqi5BQQU7QZo1ihtnfDW2sY4E9EqQKsNt9u2WJSq7n127DpuTMtMgFaASAq4LEVLGbBbBkpNzBYUpPzuY9mrf7ak_A5oWzf74MJFlyFPWm00qQHRm7Zm0po_KrxFywV1_3PZB_tDj067rMUQwFcIIYyTqMgymOZJVQHvFh9T82a6D0-aS-uJfvO7GGWHRZr8WCtjNSO1D-Md4NL6XHeZ_9_iGqBb-BpG0Fl8aOYBwuGEUpJnEXjmG0nEL0RSwdy27S3sLps-IaD_2QOhHiitME0qktMIQbBea-Z7yFrbnmCXY69Zsk4i5_f29Xoj2-5GY7eaEbowagF7i6NuZNmrwSM1MSYQFkAT7nrBWfzSISceOcIQFiPkaIwc5lmcA1Kod1k-QEYoi_MRcjxFTvfhfjdmisaYyRgTkYomH8PEuKLJCDMd7gWSZ5hl-ALbEtPQaRqZkk1MSSucDaqucVWXV2-HujtTXHdFtZX-xId2iTb9fonEwzR0BEYM8wnDKk6qkwwfSTND0F-9kP3OvL39rm6Ma2GYpAXJQKnqRhm2N28p6ZeGaSKpOWX_0oXkUB6fayLEr34K-1Q3IsB3B6lfiWiZn8qWPe9FQ7Rd-FGpg_zSzJQnZ244MTcr89gh7M_9gCQ1M40v1_mgt-9j8KUZGdM1iiGdpRvk3aqH7mpNbLldSvqV-SF05IDT0m7i3C97csOElj2C9g0j7xr-OcJoSJhGrAxZdozstPKS-Jn3nM0-km4i6YP2czOHQa1aWTrBdTciuikHjKB7gI5Zx7Kfvk-C-DnsPwU5CH9WG14S8ZWZVtj34V4i85IsdYEbZR4eV44IRzQ9t5X_phmjb-M43Wv-sptTG61KZsw_lP4uuGPpz1pPS83vuWhiWZqGxWCb-CfdHs0sJV0pQb0KLt5GHv_KNn6bJeNtttLqN7azo8d5ZnYQmOHqzvh-9Z2SFd8cRuzlhQpnSZ0PRuGLR5WoyMKsKMFuN_8shkL9YPqzn1S_qc9uQD2qkMdlZaV0V5JOZ3IOPNh8SJNRSDMShZgNnEyZJVzsUL-pL80TMWZJSbMvKbqVk3Qy5qiCnK4tS0nEm-HmkUiyYYOnpD-lkZfYOWAUz3TqoSQkH_bQE2-YcKEbh8kt3RNP_nCXjWu4MZ-ksdo_eik9U-SHCzrN3Y3e9ieimbSfZKV2GXmxLMPO6aOoZNOoMBROyOzcM7tLpylyGRYMhSMW4yExy2NUFqBhulK6XvpGZs48XBpL-4FySzSj68bqAN8N5i3V6pI9bnSAH04U0sfPn77eKWnZqz3aFI-C6y-NfSRcdiV22CXB4O5sdUFwwi9Jswj0vejWnzy9l14r-b9adkTvkdVKv-2gBuspq0gr7JoywSw7LeOGuYf3cx6uu-dEsNK6Zmasfjuair75h92nQz86665w6q4cR-DUDPN7hp7LufN0UPP9AF0SIQpSfl9XcmT2wE9_we0xH_Z3pky3JECpIHVBSYDSv1JUUCaU3FzWsT8x6XzCoPFAmpZVNUwY0whul5I-TSrOn8HufzBJf7riMHP0h9oXOaeALsLDForGT0tZVtE4nc_G_7dacpGZJXT-HDk8mjapMi5OOrwfQ8st6QbO6WmQ1VxuvrLqvFsuQxc5NiO6o8e5tCqilBagJlxe4kAfR07dyJ7JwXBYwAyD9VrwolwbS7RdD4x77_FzBAfns05LOn5tEBUoZ6DDvwhv6hTuLVoWSvs_p0JZqTTzb5cYPRi8e3l4RW8wzXFOrthNmORhiCOE4NX2BmISpZCEOY5olmVZkqRhGqd5ljKIWQSv-A2CCMMMRjDFEMFF5hxchDQleZ5EVRpEkNWEi4VjsVB6c-VfjN0kUQSzK0EKJoz_k0OEJPsB_M0AoSC-v9I3nnnRbkwQQcGNNQcUy61gN2ffVPl3bf2fCQKyf3VYES5a_wb_HW8Kr1otbn7_-z_P9N8BAAD__4bZYsM">