<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149507>149507</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Mlir][affine] --affine-loop-fusion pass failed
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
MasLiang
</td>
</tr>
</table>
<pre>
I tried to apply affine-loop-fusion pass on an .mlir, the following info was dumped:
`
hls-opt: ~/llvm-project/mlir/lib/Analysis/Presburger/Utils.cpp:292: void mlir::presburger::mergeLocalVars(IntegerRelation&, IntegerRelation&, llvm::function_ref<bool(unsigned int, unsigned int)>): Assertion `relA.getSpace().isCompatible(relB.getSpace()) && "Spaces should be compatible."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: ../build/verihls-opt --affine-loop-fusion test1.mlir -o test2.mlir -debug
#0 0x0000647f0d0fb29b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (../build/verihls-opt+0x55ec29b)
#1 0x0000647f0d0f84fb llvm::sys::RunSignalHandlers() (../build/verihls-opt+0x55e94fb)
#2 0x0000647f0d0f8621 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007e49e6c42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007e49e6c969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007e49e6c969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007e49e6c969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007e49e6c42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007e49e6c287f3 abort ./stdlib/abort.c:81:7
#9 0x00007e49e6c2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x00007e49e6c39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x0000647f0cff97cd (../build/verihls-opt+0x54ea7cd)
#12 0x0000647f0cfa6db8 mlir::presburger::IntegerRelation::mergeLocalVars(mlir::presburger::IntegerRelation&) (../build/verihls-opt+0x5497db8)
#13 0x0000647f0cd435e7 mlir::affine::MemRefAccess::getAccessRelation(mlir::presburger::IntegerRelation&) const (../build/verihls-opt+0x52345e7)
#14 0x0000647f0cd45429 mlir::affine::checkMemrefAccessDependence(mlir::affine::MemRefAccess const&, mlir::affine::MemRefAccess const&, unsigned int, mlir::affine::FlatAffineValueConstraints*, llvm::SmallVector<mlir::affine::DependenceComponent, 2u>*, bool) (.constprop.0) AffineAnalysis.cpp:0:0
#15 0x0000647f0cd463ff mlir::affine::getDependenceComponents(mlir::affine::AffineForOp, unsigned int, std::vector<llvm::SmallVector<mlir::affine::DependenceComponent, 2u>, std::allocator<llvm::SmallVector<mlir::affine::DependenceComponent, 2u>>>*) (../build/verihls-opt+0x52373ff)
#16 0x0000647f07ff722a mlir::affine::sinkSequentialLoops(mlir::affine::AffineForOp) (../build/verihls-opt+0x4e822a)
#17 0x0000647f07fb863c (anonymous namespace)::GreedyFusion::performFusionsIntoDest(unsigned int, unsigned int) LoopFusion.cpp:0:0
#18 0x0000647f07fbad70 (anonymous namespace)::GreedyFusion::fuseProducerConsumerNodes(unsigned int) LoopFusion.cpp:0:0
#19 0x0000647f07fbd476 (anonymous namespace)::LoopFusion::runOnBlock(mlir::Block*) LoopFusion.cpp:0:0
#20 0x0000647f07fbdae2 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (.constprop.0) LoopFusion.cpp:0:0
#21 0x0000647f07fbd964 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (.constprop.0) LoopFusion.cpp:0:0
#22 0x0000647f07fbdb5b (anonymous namespace)::LoopFusion::runOnOperation() LoopFusion.cpp:0:0
#23 0x0000647f0cf198b6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (../build/verihls-opt+0x540a8b6)
#24 0x0000647f0cf19d48 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (../build/verihls-opt+0x540ad48)
#25 0x0000647f0cf1aba9 mlir::PassManager::run(mlir::Operation*) (../build/verihls-opt+0x540bba9)
#26 0x0000647f0a3a24f7 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#27 0x0000647f0a3a2dd3 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) MlirOptMain.cpp:0:0
#28 0x0000647f0a3a2f89 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&)::'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
#29 0x0000647f0d024ac6 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) (../build/verihls-opt+0x5515ac6)
#30 0x0000647f0a39a64c mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (../build/verihls-opt+0x288b64c)
#31 0x0000647f0a3a30c0 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (../build/verihls-opt+0x28940c0)
#32 0x0000647f0a3a3595 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (../build/verihls-opt+0x2894595)
#33 0x0000647f07e3bdb6 main (../build/verihls-opt+0x32cdb6)
#34 0x00007e49e6c29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#35 0x00007e49e6c29e40 call_init ./csu/../csu/libc-start.c:128:20
#36 0x00007e49e6c29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#37 0x0000647f07f2b302 _start (../build/verihls-opt+0x41c302)
`
The .mlir is :
`
affine.for %arg1 = 0 to 64 {
affine.for %arg2 = 0 to 8 {
affine.for %arg3 = 0 to 16 {
affine.for %arg4 = 0 to 128 {
%12 = affine.load %0[%arg1, %arg4] : memref<64x128xf32>
%13 = affine.linearize_index disjoint [%arg2, %arg3] by (8, 16) : index
%14 = affine.load %7[%13, %arg4] : memref<128x128xf32>
%15 = affine.linearize_index disjoint [%arg2, %arg3] by (8, 16) : index
%16 = affine.load %alloc[%arg1, %15] : memref<64x128xf32>
%17 = arith.mulf %12, %14 : f32
%18 = arith.addf %16, %17 : f32
%19 = affine.linearize_index disjoint [%arg2, %arg3] by (8, 16) : index
affine.store %18, %alloc[%arg1, %19] : memref<64x128xf32>
}
}
}
}
`
I noticed that this issue asserts when checking for dependence at depth: 1 between:
`%16 = affine.load %alloc[%arg1, %15] : memref<64x128xf32>`
and
`affine.store %18, %alloc[%arg1, %19] : memref<64x128xf32>`
What should I do now?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWt1u47iSfhrmhoghUf8XuVCS9m6AznaQ7p25NCixJHNCkxqS6iR7sc9-QEqObMWOk0FmzpxzjO5AP6yPXxWrikWK1BjeSoALlFyi5PqM9nat9MUtNV85le1ZpdjzxQ22mgPDVmHadeIZ06bhEs6FUt150xuuJO6oMVhJTCVebATXiFxhuwbcKCHUI5ct5rJR-JEazPpNBwxFJQpKlAYoKNfCnKvOoqjE_4_IUoifm_NOq9-gtogsB7il4BUiy1JS8Wy4QWR5p8FUvW7Bvf1fy4VZ1F2HopIUxEH9VJxhLxyVKCq7qbm_34Bu4auqqfiFaoNIfiMttKDvQVDLlUQkdUocfuooDjBNL2v3YqWhQdFVpZRAJO-ltyvDXFrXfv--QNEX_7fEpTGgnTxGaaBBlIsW7PeO1oBIjkix4OZKbTpqeSXcIw3ictYEkQJ7WilGhPgXBpu16gXDFeD6RXyBCEEkww3lAtgCBeXd1y_l9y_Y9NWGW0xx1bdYQ6e0dYO9trYzTkuyRGTZcrvuq0WtNuMQvR4pbkwPbmgwlU7VWvQMvBvUmpo1rmj9YDWtwfX93dL6wTvD4ArBAvvfnVatphtMddtvQFrHAC8WiCyrnguGyPInaD66DD4_P-CMFowNvRvic-XvyHjHoOpbFJQYkSjAwVMQBEEaZ03AgqYiRbUzsObZDBd3mkvr2f7Qg9GnRpo-rpSxGuhm9IxhgDEi-THOiFwGT0kCNSkqN3wDm3DGJo-bg2zue_mdt5KK_6aSCfCe-84Oi7jZ6ZDMO0xJiPegEclH9zW8deG7soiU7t6Flr8sRolt6AX-_9BBNHaQQVxAWsckIQH2bMdYfsrTVRqfCy77p_NW9sOLemHUIvWcvcjEON4HLNKiqfFq1dm1BspWD1yIFd90Apzb-GjFziKyswKR5W6zRY2iMo5RVGbpCJ68B1xa0JKKN2GzHEVluDVCegh2V-ZNrLzYxcrmBo2zFLfGD4CHGS4RWXpPMM-GQefCsVOGPyGy1JQb8MAkQ1G5VT3fxyV51kSYVi4LeBzLhvHyjwZeoVN0FC9eiYcVXkmxEoqyFVMbyoeB4NJr6R5vTFvTASsMM0fGDbILg2AfLSqgSD_mNV5k8BoHuBdYddMUWc1OR0sMNKvZhEL2UWjKqvyNyWU-axyecd4v73LLO2I8LjJW5RPraI81i6MEsh3WQ-ocrm9hcw9NWddgxkzTgh1uJxYfZlwraexp3iSKE8gm3vGMdxKT4gjveg31wy1s9Jb8NXQgGUifqU_rOlAck_cHm89n-cPiS0Ft6e9_oaKHKwegKXcz25BNpyz_fUOF-AVqqzSKrg7DTfq5wkBJGPomvS8qPOBQhAz-4vl2WnULl0nxQGRbRc2ytjN9MjN9GjXNEcVasAfImKNmH_peKv2tO2Q9Y9nQ7ufWAJ9pmB18KoSq6ad3MfwbZsV3eHwWNc3k8emu2bOmyQihR8xuuHz4Dr_3IC2n4qtS3TtNfppWDDkhdGKV7bOq8jSqHQiVSj5vVG-wpBswQy1aDF3-lwZgz0tfiY2pAnSj9GZ4ZG6kVdfgYuhUlYydboPUAUfNZ9woy4KPc2t6A3dasb4G7SKz34D-H8VcFZt_iE4xo8Pc5HyCzgQ4VpO9_CYvhaof9gZ0fFKe4kCCOQcKZL4MYmApF8P1IxUPe76-VPqRanZjQQ_x8WWPyLfOPffZvXxzFeT7fEO0GENyev8rFQ_fNHNF58G89abe4VzvIo3_E_Qmc72rpPpDPrfDMj_Z635R0YRFXqVHDP2t-6G-dXfUmJLRzlt27HPPSK7BaNrjRp_ebGevWyqpX_1vZ7zXGeR0xRTQvJqqRRLPlWNx_mHl7ngHwuXgfU9wTV84p5-u7a6Q6-rG1Rl-Ca30K9T9BjtF6pb7HdUg7Y1s1Lbked_EFgeUxVMJSpKZQWlFixmPrWYHfWMWQO8hUFW0mAjszaw0oiRuMjxOSaUPXnNiSf9SOJg11cBWnZ1VDqrXNdy2Lm8cKSdvv97cXylp4cm-GopbwfW3zt5SLq-UbHi7g1HgnbcHYjGbK8dYhDutXKl62TeNX8S_S7de8t97eKXbLWyUft5C7bRn0NBe2BUDARaOy4xV0XsV3m13zamA2t5Dy43Vz6-23n741fKdUsItPnTj01x52mj53GhNXuzAflUtr6m4B9MLezzXHxNAJP_rjHp8aP1UM6yQqBAVrR9Wjdyb9HaM9Dd0ksOD_86oGZogkgm6qRhFJPs7jQrJhZLtX2vYNyidiJZif5-QxLTene5NJ7gtJbubJZ1_hmr_ghH6Zou9rQGruWzvoTn6-D17wGFC66na2d8Cp1FB07g-HGP_bhnipK1InldpXE-2CmezRhTUwVFbjQVZvaZD6TXf5zk5mKcUfY8CRRzUwaQAmSuQFMmnKPAZTJMimZjurTAyiCrmVhiUy5NQEanZTjk__2RAClYEeLUSvKpXxlJtV252XL1sUdemf719Pu7OHxJarFFUJn7HPx27TOZdQhxgL8Alt_NehksHfe6hhy1x4hDJmIHn3xAGxD0lDvE_iBxlbm5MRuDZ9g6pooDgAfL0VlFYRwEZLe2_4qKg_LGG4fMv5gajnS-84yfjRaM0RiShug0xiq5xgK3CaYxRdula-d-rpmRqmm9bvmoUTY3CdA_vIGa805y8oCKShENvo4BQ1C3okwAllyNv5_EjBkqunZZ447efUXSVxk8hyZ-aiLhstUsAe-xoD5tLoJr_H6y4ZPCEGTe_KS4tfumLTH1Frq_q2Q1L7p6GQ2RFJfbCW_LxIfLZABhGb1F3vN_knvzZ3NND3P1e7Svjh8mHTZ8N6Jrb9WLTi2YY6y1e7MGc8GvJfEeSMjZIplvJbFfSPSj-TDvhVy5trNIw8NwiHTZZ8QGToex65373broerl5C_wZLZXkNDNs1tdiuucH-PACm_oiDwY9rkNh_ruGyxS4U2ct2OqbW3VmXTnGIK7CPAHLKIJ_sHp40lQwP8J9tyq1NfnWWGE9i3GCmsFSPKFqioDxjFxErooKewUWYJSSPwyjLz9YXDa1ZELM8zJIE6pC5mqwK8hSgyYDQ-IxfkIAkQRbmISEkSReQRhBlQc4IC5s4ilEcwIZysXCz9ULp9swPw0UYF0mQnQlagTD-vA8hw9EagpLrM33hD3NUfWtQHAhurJkQLLfCnxFyRQJKrlFyOX5lSK4PH8Hw54GGgyZnvRYXf_wsycj75wX5RwAAAP__4fAYwA">