<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/128343>128343</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR]`-test-constant-fold --test-loop-unrolling=unroll-factor=2` triggers Assertion failure `lbCst >= 0 && ubCst >= 0 && stepCst > 0 && "expected positive loop bounds and step"'
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
xisang0
</td>
</tr>
</table>
<pre>
Test on commit: https://github.com/llvm/llvm-project/commit/1d070988d9172965dee227e5629fa886845b815f
steps to reproduce:
```
mlir-opt test.mlir --test-constant-fold --test-loop-unrolling=unroll-factor=2
```
test case:
```
module attributes {llvm.data_layout = "p:32:32:32"} {
func.func @zero_step(%arg0: memref<i64>) {
%c0 = arith.constant 0 : index
%c1 = arith.constant 1 : index
%foldto0 = arith.subi %c1, %c1 : index
scf.for %arg2 = %c0 to %c1 step %foldto0 {
%2 = arith.index_cast %arg2 : index to i64
memref.store %2, %arg0[] : memref<i64>
}
return
}
}
```
crash trace:
```
mlir-opt: /home/workdir/llvm-project-19/mlir/lib/Dialect/SCF/Utils/Utils.cpp:315: std::optional<int64_t> getConstantTripCount(scf::ForOp): Assertion `lbCst >= 0 && ubCst >= 0 && stepCst > 0 && "expected positive loop bounds and step"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ./mlir-opt /home/workdir/test.mlir --test-constant-fold --test-loop-unrolling=unroll-factor=2
#0 0x00005bc4779982b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x10b62b8)
#1 0x00005bc477995dde llvm::sys::RunSignalHandlers() (./mlir-opt+0x10b3dde)
#2 0x00005bc477998cc8 SignalHandler(int) Signals.cpp:0:0
#3 0x00007cd2f834c520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007cd2f83a09fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007cd2f834c476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007cd2f83327f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007cd2f833271b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007cd2f8343e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x00005bc47980c36d (./mlir-opt+0x2f2a36d)
#10 0x00005bc47980acf2 mlir::loopUnrollByFactor(mlir::scf::ForOp, unsigned long, llvm::function_ref<void (unsigned int, mlir::Operation*, mlir::OpBuilder)>) (./mlir-opt+0x2f28cf2)
#11 0x00005bc47a81983d (anonymous namespace)::TestLoopUnrollingPass::runOnOperation() TestLoopUnrolling.cpp:0:0
#12 0x00005bc47ad8e64f mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x44ac64f)
#13 0x00005bc47ad8edd2 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x44acdd2)
#14 0x00005bc47ad9155e mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x44af55e)
#15 0x00005bc47ad8a0ab performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#16 0x00005bc47ad89d03 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
#17 0x00005bc47ae33465 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) (./mlir-opt+0x4551465)
#18 0x00005bc47ad83962 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (./mlir-opt+0x44a1962)
#19 0x00005bc47ad83c13 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x44a1c13)
#20 0x00005bc47ad83e22 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x44a1e22)
#21 0x00005bc4779774d7 main (./mlir-opt+0x10954d7)
#22 0x00007cd2f8333d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#23 0x00007cd2f8333e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#24 0x00005bc477977045 _start (./mlir-opt+0x1095045)
Aborted (core dumped)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzcWF1vIynW_jXkBtmioD4vfOE4sd6WOuqo03NtUUCVeRtDLVA9yf76FVQ5Llfs7vXsrGZ3pW7bAc5zznO--KDOyVYLsQLZPcge7mjv98auXqWjukV3teFvq2_CeWg0ZOZwkB6QNdx73zlA1gBvAd620u_7esnMAeCtUj-OX4vOmv8XzAO8HUXxNuGoQFVZ8iopcJVnXAiMC5HluGpoWeZlmtVlkjUArZ0XnYPeQCs6a3jPRNCI1iBH4z-0PihpF6bz0Avnl-EvuFiE3wtmtPNU-0VjFD8OKmO6Ra-tUUrqFpCH4feiocwbC8gDnuEHKciou6Ta8F4JSL23su69cBAU94H2klNPd4q-md5DQB4gwLgDZE3w5ANjUDwECYDWEDa9ZsvwAUGK_i6s2QXyAJcAZ9S2KPj8IA5WNIBsZJ4C8ghw9S4OIcAZQ1EZtdLvl0f2MAyuodRcvE6WJpeWJpeWBu95M4V2fS0HEIA372gTQceaZWMsHGzHowuCfd6M6wO7M_R3IlEpnqiLsDtGnZ8AjtoCYPDGUXRw0dJ5Y0XEGS2MLoz5DS95ciRbPIRfVvje6jg2jIyfk8gzS90eekt_lpFBEcDbvTkIgLe_G_udSzsrjEVSAbwNEmFC1gBvHyRVQ8m8bEJt_ealcsfvJetiIiVZQHeeB_VkbTovjaYqMNI-T3cekEfYCr8ZQ_vNym5jeu0BLh1rBqmtsV86gKsAtXZO2AACQY5UvQnOJo8hCAgCnAOcw_7iaAjkOH4aBBiL104wLzjsjJNe_hAwlB6sTa-5g1RzOCQ4BriADZVK8CVA6-fPj-uXR-j6-iA9pLDu21D9xvoQ6pu7jnSuF8F7UaPUTPVcQL8XcAhhTdn3GMag-8VT9h3y_tANQUXLIamerWktPUBq2_4gtA8WwOUYt9h7LoX5T-xHEGCCIHpFCKGsZmlRVFWJ6xJG0jGW7s0NP56t1D4y-RbTE5enRZb-vjPOW0EPMVAbKENGVBDgcsoH4Hv0mqA6x3UZ8mOwIJlZkHEuLlnwtdcvstVU_R_VXAnrYhe7qoRwLk5K8JwmYyU8gwO4HK0eho81geL_AYWMKAXjuClJyjIccrN8L7LXMt_l6UJJ3b8uWt0PE2zpzDKPhqU4w-hkVnoOSFHVMNj5vRWU775LpW5Dr_KqYSf0bG5uWuSwdZHerWanRX4Czs-BCS4aAmkdqukmWFwWDTnBFh9gk_pmwKQ-AZYzBxBR5bcBkkpUE-LVNI2qEjGS84sJiBtMSc4HyZDkaCZJWYNhbNAxuUO9_hZL9P5tO9QoLk_T8966gb2OxysOldFtGDhVTNjuQ8vdDXvRDyOjje8SMc03E-VfOmFpkAB4PZ-576XioTqq49HgMtuSNfjE9qymaZlUJYk2UG3028H0Dmp6EK6LnaQadIXD4Od3N0jdPlM3lr7t9Rc9sTLW_Yf1s4INdpyVPeWlyNNmQo8LT6U6Uv1mvnRB55rTLjbJUfVZJKJRH910zYFrTdWbk-6JatoGN25gbYw6i-BPmmWaUpanzcmxZE6Ic3wzoWfZCSW1OCM2LH23M__TGU6FgqpP2nkbN76Q7OufLRg0DxOj7c_UCu0_6cbAuAFGhOtO5HySnem5E6sky8RM95HNxRw4d8ZVpU2WiZPSbBY5imgNO2EbYw_rWK_uF5vq-7HM7akVfNd5C8jmJPFiesvEU2vDmWl0yiyMT58_fd0Y7cWr_-DyJyXtl84_Uak3RjeynWBUcDJ7oc7yGbmKIzLpSJ9NKxlVX4Xrlb_eqa4JhMPlkXuv5d968YH7kzgY-3bfN82Qgu_ruWhor_yOCyW8uC4Tjp-P5310HoHYAeMMo0qFI96u0YBsLrrwn43lv53PybrxBvBVtNJ5-_YxOX6WAMMSgNMdisDlcd_5j4jML9KzOEtPQUiaZxPirlPSrzV_toYJ5462_iVJ919YEj9dMZ178Vbq9qtorg5f6aVZlqR5duql5azdkCrHlxP5f60Mr-01SZVPNrhq7h-WkKv-GTdntqfDNry-NWi_InfdaJaQd6Mxmhst8PWg3mL0H7VO4JNL8eyWWhQpL-CBSn3l_lllKS9O4nh2tSG8uvHmiCteoRMgmQOKFMHdLsjsnKfW747G3aJCpBMV6ZwySjM4gF8ljdKxTNfhNijioZ8ZK-Lzhzjeh46vWnd8RXhFKnonVkmRIpyQEuV3-1Wdi4pnZZ42ec1qwrIqz0pKKMYoawgu7-QKI5whjDEqU4LzZZMVCBeoqJOM4bpkIEXiQKVaxodTY9u7-GazSnC4B94pWgvl4ts0xsM7GQbZw51dxZeeum8dSJGSzrsTgpdexffscIwC2QPI0b_2BJMj6K1sW2Hd5KWsoVL1VvwVL2Z3vVWrP_4aNjr3xwr_IwAA__9Z9TsF">