<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62323>62323</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR]Crashes on affine loop optimization passes: Assertion `llvm::all_of(ifOp.getOperands(), [](Value v) { return isTopLevelValue(v) || isAffineForInductionVar(v); }) && "operands not composed"'
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</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/67205f907a1fb40eeeaa519920b6d95646f65d8e
Steps to reproduce:
```
mlir-opt test.mlir "-affine-loop-tile=tile-size=32 separate" -affine-parallelize -test-affine-loop-unswitch
```
Test case:
```
module {
func.func @main(%arg0: memref<35xf32>) -> memref<35xf32> {
%0 = llvm.mlir.constant(1.000000e+00 : f32) : f32
%alloc = memref.alloc() {alignment = 64 : i64} : memref<35xf32>
affine.for %arg1 = 0 to 35 {
%1 = affine.load %arg0[%arg1] : memref<35xf32>
%2 = llvm.fdiv %0, %1 : f32
affine.store %2, %alloc[%arg1] : memref<35xf32>
}
return %alloc : memref<35xf32>
}
}
```
Crash trace:
```
mlir-opt: /home/ty/llvm-project/mlir/lib/Dialect/Affine/Utils/Utils.cpp:438: mlir::LogicalResult mlir::affine::hoistAffineIfOp(mlir::affine::AffineIfOp, bool*): Assertion `llvm::all_of(ifOp.getOperands(), [](Value v) { return isTopLevelValue(v) || isAffineForInductionVar(v); }) && "operands not composed"' 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 "-affine-loop-tile=tile-size=32 separate" -affine-parallelize -test-affine-loop-unswitch
#0 0x000055aad00e4f1a llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/ty/llvm-project/build/bin/mlir-opt+0xd61f1a)
#1 0x000055aad00e208c SignalHandler(int) Signals.cpp:0:0
#2 0x00007f667e900980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#3 0x00007f667d5b1e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
#4 0x00007f667d5b37f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
#5 0x00007f667d5a33fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
#6 0x00007f667d5a3472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
#7 0x000055aad0259d50 mlir::affine::hoistAffineIfOp(mlir::affine::AffineIfOp, bool*) (/home/ty/llvm-project/build/bin/mlir-opt+0xed6d50)
#8 0x000055aad1adcb91 _ZN4llvm12function_refIFN4mlir10WalkResultEPNS1_9OperationEEE11callback_fnIZNS1_6detail4walkILNS1_9WalkOrderE1ENS1_15ForwardIteratorERZN12_GLOBAL__N_125TestAffineLoopUnswitching14runOnOperationEvEUlNS1_6affine10AffineIfOpEE_SF_S2_EENSt9enable_ifIXaantsrSt11disjunctionIJSt7is_sameIT2_S4_ESK_ISL_PNS1_6RegionEESK_ISL_PNS1_5BlockEEEE5valuesrSK_IT3_S2_E5valueESU_E4typeES4_OT1_EUlS4_E_EES2_lS4_ TestAffineLoopUnswitching.cpp:0:0
#9 0x000055aad1adc5fe mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (.constprop.76) TestAffineLoopUnswitching.cpp:0:0
#10 0x000055aad1adc5fe mlir::WalkResult mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<mlir::WalkResult (mlir::Operation*)>, mlir::WalkOrder) (.constprop.76) TestAffineLoopUnswitching.cpp:0:0
#11 0x000055aad1adc9ea (anonymous namespace)::TestAffineLoopUnswitching::runOnOperation() TestAffineLoopUnswitching.cpp:0:0
#12 0x000055aad1f8ab2e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c07b2e)
#13 0x000055aad1f8b983 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
#14 0x000055aad1f8c00d mlir::PassManager::run(mlir::Operation*) (/home/ty/llvm-project/build/bin/mlir-opt+0x2c0900d)
#15 0x000055aad1f7ded7 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#16 0x000055aad1f7e654 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
#17 0x000055aad1f7f441 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
#18 0x000055aad205e9f0 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+0x2cdb9f0)
#19 0x000055aad1f784c9 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+0x2bf54c9)
#20 0x000055aad1f7d0a0 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (/home/ty/llvm-project/build/bin/mlir-opt+0x2bfa0a0)
#21 0x000055aad00a7a30 main (/home/ty/llvm-project/build/bin/mlir-opt+0xd24a30)
#22 0x00007f667d594c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#23 0x000055aad00ba6da _start (/home/ty/llvm-project/build/bin/mlir-opt+0xd376da)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV9z4ygS_zTkhYoLof8PeXAc-c57mUlqnNm7mhcVEshmB4MOUCbZT38Fkm3Jk0wym7ndva1LzVgImv7z66ZpATGGbyRjFyC-BPHVGensVumLS0bEJ9ZuH_VZpejjxR0zFtZqt-MWhHO4tbY1IJwDvAR4ueF221WzWu0AXgpxv3-ct1r9wmoL8HKYipdJilHc5CglQVNFiDFGSBzkOUZVQvM4iZImiWnGALoCaN7_ri1rDbQKatZqRbuaOdE9QYKGf_51J7g-V62Flhk7c28QYHxOmoZLdi6Uas8tFwyEV-5xbvivrh1iaFhLNLEMYAz35K5HCCb4rwyeO4YTPp00X7itt0_q0cNFzPOKKtoJBkF62b9D2HSynrkfCCK0I1wCnAEcE71BDvEd22nWgHARxg9NiEFYAJzDcxAWTwyN-UIIcIwgCK-g84kHZVYraSyRFuAsmCH_xwC-RI5uDh0TnB-aPSOnixCq9px6kTPf4fXMnUgi-EbumLSeJok8B55EIL2Cz9jQ8-5xnTVKw97kwHNAzudhPLXG29OPD9OEIhTuoYovBw4gfkHonhc-YtNQfu_hAnjRizkBwf8NYo1VmnkGA3WPxncpANKr44tmttNyDPS3Jh-mHhvTEFtoYrbQavLycnGSAF5u1Y4BvLSPX69fR-l6eQXw8ooT0XfPPRQALz9aLsz-OavbFoTzKMy8CW5qOAfh_FpteE3EB2Y6YUf9PaB9e6u4sT3bVXPTApw9TTcmWcBKKQHwHODcSZwbw7TlSkKQIJ-P-ulClKoBOOPNTTvbMHvTMk0kNX0Eey_6JAhw9jMRHYP3Q2DvXcPNnWqv2T0TfhzgbKBYgHQBuemVWiq9krSrnQY_Ez1QgfDS-8zR4wTgxGUmNWgApfLptVWGUYAxwClsCBeMznpP3V4X83UBTVftuIUEVt3GZUOlrVsj352OuTEdc_6CRFLIZS06yqDdMlj7qKlI_dlHzmyfgUn9GdJu1x5CCc0Aym-12miyg0RvOrfwzcuRVHVcUPd0GW75hyVsCHCIIHpwqS-OCaEIsagJCDzGi3k0feNWc2k9BHd-NeHsSKTJl1IZqxnZebcuIHdp1Tk5-y1AuCz8QJOgCYgLmoOuwYmuGGU1XPONJOLvRFLBXJwNovvu_TJE_v-BER4YpU2SpCxHKM8QLEvNfD4rtR0075f6Q5aUSXQuuOwezjey6wdau9WM0JlRM-QVDnCeoYm-4VgMjauAZSnUhBuXMg-2bwSv6vPFzz99-VQdXvEMpwAvjbcC4OVs5t4eDWWtC9lO8oe-495rIzv36lnPahDO42BqcHSiSZg2ASSV8pa-ThNLezT8LC8kOxEST4WQMGwILEviM1HplnJZkdfb3s87NHqR-VRkcioySvErfFc7ryXeayGKUjzxWjqJMhznNEb_pUT9pgXCaELjacBlY9UDQusqD2D56X3kuAbYVVYuIZeaNavl-8ixC9A_ifjcb0fF7ft1UOZ-S3B0RVEEQU2EcKmwbOTqkxtPKLOEi-gLEZ9X136GY3GjKdNFULiOIF4q_YVourKOldLFh0_vA1z-7frmcn5dlu_LAMeuPuyBuVaq_ThkJi43QaQ7eSOPatwXH4WX3GMaoCOeRVGul-Ual0Xxfm1zJkklWMmb1b8IkdbotQ0Cys0vg-Wrn9Y25aY0ZMdWd7hcR2Wx_ke5Wl-X3vbkA9t4w8ed8aVQ9eeiKIr43m15RrvRu9CL7buK9ceyiOxjy4p1VN7cBWXxUTjmZVGscema8Fl7n85R-akv44aNwvDotVFn75m-7dwDwsVx8MQlvnoexesBbh-ai9EeMA6bCceRDt9glXtJixPdfbgMS6AvxVut2lmauL7vgMptC-j_UL0WquAUqpwRx5dIJR93qjNQkh0zrd_i816HZ0UMu_9ksQ5fQt-pFp6o1WSkwuwZZ920d-qmvSXGzClpvXcGLSbAOoLBPc877jgyl0Q8Gm7eEUk2Du19ml7ATvrTAfojihpco7TC7JC0ne3hie1VnoXfbfstb5nwnyGT4HKkB5OSHw7GeJITtZLGal8EK_0V1ylBL7kfGHS_JZpJu5KNgj7Kj3vkKOrjwG150DF7OpSiEzhrhOiJFnu7ngyckxX5VnfnCNGJu-OpfillNIUt043Su7lPHuaF4tpYOhTnW6IZLVurQbg4zlirTtfs3cblrT2SJ75_d736sFDSsgf7lZ_eCa5vWvuOcLlQsuGbEY8cjkafxj85sY8lcQRbrWpmzGXXNL5If5V5neT_7thX5r1jO6Uf96xG9JQ1pBO2pEwwy56fExZfpdlv2TymG776XZVgrH4cxo9y7vw3we2xwHsRrvQEriaKgmePC16x0UwnAJz9fnA-71S_r_mRUTU5UXuE058wPJ52-yuXTE8CcCrIrqIEuI-bP49XcCaU3Py-wH5DpZcXzOQbB6OY5c3488y0gtu5pLcnGeePsO5_cJF-k-JYBvTPt26OtMobNNkc85NsmEV1_vQ6-6tlibdBWTVxVOdjKDE6rTMQQc9COVRz9Zb0ddvJZ83aai43H1jzGoN_SGxUDUFkEhv45PSPpCREcEe4fNsxI45IOBWEp4dKeVRnKSxLwau6NJZoWw5SX3WMVZtuf37XN_2g5-OPtMIomiQ4HE7trEhCCewFv83SME3o8UD1cA1yRi9Cmoc5OWMXQZK5EjWOkrPtRZKipgrjKKaMoZiRBiUxxRgRTKoGB8EZv8AIhyjCEYpjjJNZFdcBzZqEoAYFSUxAhNiOcDHzN0tKb878oftF4sw8E6RiwuwvXfWFN6XqNgZESHBjzXGa5Vb461lXuIL4yt_rMAOVHG6ioFCqhaq1fMd_9eU7bIkxzPxl7kLOOi0ufvslh4f8PwEAAP__dNaCcg">