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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]`-test-loop-unrolling` pass: `mlir::loopUnrollByFactor` leads to  assertion  `upperBoundUnrolledCst <= ubCst' 
        </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 commit: https://github.com/llvm/llvm-project/commit/c3440e213ca02c2fcd91f3f8cf65774a2b1a9e6f

Steps to reproduce:
```
mlir-opt test.mlir -test-loop-unrolling=unroll-factor=2
```
Test case:
```
#map = affine_map<(d0)[s0] -> (2, -d0 + s0)>
module {
  func.func @main(%arg0: memref<i64>) {
    %c1 = arith.constant 1 : index
    %c2 = arith.constant 2 : index
    %c4 = arith.constant 4 : index
    scf.for %arg1 = %c1 to %c4 step %c2 {
      %0 = affine.min #map(%arg1)[%c4]
 }
    return
  }
}
```
crash trace:
```
mlir-opt: /home/ty/llvm-project/mlir/lib/Dialect/SCF/Utils/Utils.cpp:498: mlir::LogicalResult mlir::loopUnrollByFactor(mlir::scf::ForOp, uint64_t, mlir::function_ref<void(unsigned int, mlir::Operation*, mlir::OpBuilder)>): Assertion `upperBoundUnrolledCst <= ubCst' 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 "-test-loop-unrolling=unroll-factor=2 "
 #0 0x000055b9d54880da llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ty/llvm-project/build/bin/mlir-opt+0x22b0da)
 #1 0x000055b9d548536c SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f12c455d980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007f12c320ee87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007f12c32107f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007f12c32003fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007f12c3200472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x000055b9d603824f mlir::loopUnrollByFactor(mlir::scf::ForOp, unsigned long, llvm::function_ref<void (unsigned int, mlir::Operation*, mlir::OpBuilder)>) (/home/ty/llvm-project/build/bin/mlir-opt+0xddb24f)
 #8 0x000055b9d6a14e8f (anonymous namespace)::TestLoopUnrollingPass::runOnOperation() TestLoopUnrolling.cpp:0:0
 #9 0x000055b9d6da2bee mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b45bee)
#10 0x000055b9d6da3a43 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
#11 0x000055b9d6da40cd mlir::PassManager::run(mlir::Operation*) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b470cd)
#12 0x000055b9d6d98043 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#13 0x000055b9d6d98711 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
#14 0x000055b9d6d98901 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
#15 0x000055b9d6e6a810 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+0x1c0d810)
#16 0x000055b9d6d93a23 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+0x1b36a23)
#17 0x000055b9d6d9624e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x1b3924e)
#18 0x000055b9d54540c0 main (/home/ty/llvm-project/build/bin/mlir-opt+0x1f70c0)
#19 0x00007f12c31f1c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#20 0x000055b9d5466f2a _start (/home/ty/llvm-project/build/bin/mlir-opt+0x209f2a)
Aborted (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWVtz2yz6_zTkhrEGgY4XuVDsev79TzPJNH334r3xIEAy-0qgBdQm334H5JMcp3U3nd3uziQ2Eg_P4fcceMDUWtkqIW5BegfS1Q0d3Vab2ztBuz_FsH0xN7XmL7dfhHWQ6b6XDpAKbp0bLCAVwGuA161027GOmO4BXnfd1_3XYjD674I5gNe7pXjNSJIggWPCKMIMN4yXcUOagjVZmucJxXVMS5E1AK0AqqbPJycGC52GRgxG85EJL3oiyNDuLzz2nTQLPTjohHWRf4ILP1x0Wg-LURnddVK1gKym8aKhzGkDyApf5DeZTe2bAgEmPR0gICtIm0YqsenpAMgS4IIjgEuQ3lkE0hVcAPIBAlxggJdwwREE-A7aQEI-7JTXfOwEBPnd9AxhMyoW-Q8IEtRTqQAuAE6paZH3Qi96IxpAljJLPBdcni6GEOCUxZNuRrptxLSyjioH_csKSsXF85waX6LGb1Enl6iTS9SWNVGjDZyUn3SatHN6x8o6Mex1ODUiiEInCEe9VHDC_QBHPEEdOIF0tVsN8tWRjxFuNGr_fJg6DuaOZYbaLXSG_jjYvL0Ar7e6FwCv3cvr6PeU_q2sAV6vJO2m109Lnz1_ONnZ_XfEhgGQKimL4GC_jlSAVJ90KxntPgs7du7kvY_rP0Io372sp1jGxXHasmYarLV5GHzojVK5LNk4Pz7S-RhzUqvNFE9fteQAF6MKtYFDqc7oHwZhqF8AcHU-czfKjguzi2z_WcHKWmE8PQQZGodBmDs9Kj5pLvjSOuiThqzgWC-tAziHDZWd4NEE9eOnD9XTB2jHupcOUliPrS8G2jgfQD9djaS1o_CYQ6q8dawbuYBuK-Dk9pqyv4Lro30BouwvyMd-OMQCigAqH41uDe0hNe3YC-Xsj0Oh9uj4b5_M6wv1CmB8bcnytPtQxwRB9IwQQmlalzxNigJxCoP9Uyi82GnwaKRywaIvIbpxcSQy9NtGW2cE7QHOvGeD60sYMu3n7QL4Dj1jXCNOfSQcdI3PdE1JxuCTbBXt_o8q3vnwKXaip9f7zEDh_8AI7xjlTYxZkqa8LBDcbIywThuxMW6n-ZR6z0W2yZJFJ9X4vGjVOE0MbmsE5ZHVEQoKx7gs0ExfciqGYCREkUNDpRXwxPa2kzVbLP_2_9_-rA-POMI5wGsbrAB4HUX-6cVyMfgIHJV8nl58Ddqo0T8G1hEDpErjucHJXJPYDyCtdbD0Ok0cn9AIq4KQ4kxIemYuIg2Fmw0NWbzxmbmp6fW2T-sOg0lkOReZnYtMcnyF75j3Wha8RvySmdfy0yjLEClw0ryrdu7rYadV618cE-dCAYW_rIK-K_s4r3HSzHApZrjQOBFF42VQpdVLr0cLFe2FHUJ1KCetfCf06QCYVO0jtbuCYkb1oE7sKbzKr-gv5285U4VTXAtxggUXjspuj8sX_TB4sRWnQyiBO-kztwW9XmP6FtqVot2LlfaeKtp6zJew1rqbufsX1MC4TtJaiIMbfA1EZ7YTmpCftv1RDqKTSswwmEgPJmW_HIzTRV7UR2WdCVugT6LqewST5Glip_sjNUK5j6rRMLSRgUPAe2orB6OHKI19SYae2etQ8nDGZ3AmiPEzLfZ2XQycOSzvdneOGJ-5G8_1KwuUEDgI02jTV6F42B_sxdbxXWnaUiP4ZnAGkOVxxZMeDRP3rfFnjR2SZ76___Tx81IrJ57dKz_dd9I8DO6eSrXUqpHtCY8Snsxexp-c25fHMRyMZsLau7Fpwp5-lXmjkv8YxSvz7kWvzcue1Qk9Fw0dO7fhohNOvL2GfAj19FqbT-l2Tftn0UrrzMtu_ijnS2ghHkOyVFfBlZzDVaL4zYb_zY3mrQUAF_8-ON92atjAwgyjXefb6k2jZmqf4PQbhsdlt1-ZMhMJwHlH-9o3wPnv5BVc7LuY30KlHydMOksYkdEiRieusEMnXaX441nF-U9Y91-YpN-lOLYB0_c7N0eGeBGj2eaYnVVDQjG5nGf_a1XinX0GySgmMyjzMygznIg3odx1c2xLp76tmgfCkzNStZ9Fc43BvyQ2alLiZN4nF_PLgjRBDMGehlvAd0hqcsTmQVjOzqBxE7Mih5uNP2ZurKPGbXZSrzr1Mjvuj_vTMEwGPuEETJJkVuDw2QVOljWYwknw--5fUNng4_1L5Y_9IhxPmTYiXGuJk1Z1f8l5w28JL0lJb8RtnBUozsosTW-2tzVL07ggosZ5k2RlgkTSYCySsigZLer6Rt5ihAkiBKEyyUkaoZIlDW9IhjwPmoMEiZ7KLvJGRNq0N-FG7jaLC4JvOlqLzoYfJDBW4hsMkwBjkK5uzG0wvB5bCxLUSevskYuTrgu_ZPg2F6QrkKGLd2kZgsN0fIUgQ9-9EcgQ7ATl4ecHSA_XmNffY96Mprv9128oAyT_DAAA___rJ9IL">