<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62319>62319</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR]`convert-linalg-to-loops` pass leads to Assertion `linalgOp.hasBufferSemantics() && "expected linalg op with buffer semantics"'
</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 on LLVM 16
Steps to reproduce:
```
mlir-opt test.mlir -convert-linalg-to-loops
```
Test case:
```
#map = affine_map<() -> ()>
module {
func.func @main(%arg0: tensor<f32>) -> tensor<f32> {
%0 = tensor.empty() : tensor<f32>
%1 = linalg.generic {indexing_maps = [#map, #map], iterator_types = []} ins(%arg0 : tensor<f32>) outs(%0 : tensor<f32>) {
^bb0(%in: f32, %out: f32):
%2 = math.log %in : f32
linalg.yield %2 : f32
} -> tensor<f32>
return %1 : tensor<f32>
}
}
```
Crash trace:
```
mlir-opt: /home/ty/llvm-project-16/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp:219: FailureOr<mlir::linalg::LinalgLoops> linalgOpToLoopsImpl(mlir::PatternRewriter &, mlir::linalg::LinalgOp) [LoopTy = mlir::scf::ForOp]: Assertion `linalgOp.hasBufferSemantics() && "expected linalg op with buffer semantics"' 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-16/mlir/build/bin/mlir-opt test.mlir -convert-linalg-to-loops
#0 0x00000000004822dd llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/ty/llvm-project-16/llvm/lib/Support/Unix/Signals.inc:567:11
#1 0x000000000048276b PrintStackTraceSignalHandler(void*) /home/ty/llvm-project-16/llvm/lib/Support/Unix/Signals.inc:641:1
#2 0x0000000000480b06 llvm::sys::RunSignalHandlers() /home/ty/llvm-project-16/llvm/lib/Support/Signals.cpp:104:5
#3 0x0000000000482e95 SignalHandler(int) /home/ty/llvm-project-16/llvm/lib/Support/Unix/Signals.inc:412:1
#4 0x00007f5c5d502980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
#5 0x00007f5c5bfabe87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
#6 0x00007f5c5bfad7f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
#7 0x00007f5c5bf9d3fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
#8 0x00007f5c5bf9d472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
#9 0x000000000120f7a2 mlir::FailureOr<llvm::SmallVector<mlir::Operation*, 4u>> linalgOpToLoopsImpl<mlir::scf::ForOp>(mlir::PatternRewriter&, mlir::linalg::LinalgOp) /home/ty/llvm-project-16/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp:221:47
#10 0x0000000001210ba0 (anonymous namespace)::LinalgRewritePattern<mlir::scf::ForOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /home/ty/llvm-project-16/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp:266:16
#11 0x0000000004a58400 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&)>) /home/ty/llvm-project-16/mlir/lib/Rewrite/PatternApplicator.cpp:200:25
#12 0x0000000003b53c83 (anonymous namespace)::GreedyPatternRewriteDriver::simplify(llvm::MutableArrayRef<mlir::Region>) /home/ty/llvm-project-16/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:292:19
#13 0x0000000003b5311e mlir::applyPatternsAndFoldGreedily(llvm::MutableArrayRef<mlir::Region>, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig) /home/ty/llvm-project-16/mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:452:8
#14 0x000000000063ddf5 mlir::applyPatternsAndFoldGreedily(mlir::Operation*, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig) /home/ty/llvm-project-16/mlir/include/mlir/Transforms/GreedyPatternRewriteDriver.h:86:10
#15 0x0000000001210498 void (anonymous namespace)::lowerLinalgToLoopsImpl<mlir::scf::ForOp>(mlir::func::FuncOp) /home/ty/llvm-project-16/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp:320:9
#16 0x0000000001210202 (anonymous namespace)::LowerToLoops::runOnOperation() /home/ty/llvm-project-16/mlir/lib/Dialect/Linalg/Transforms/Loops.cpp:339:3
#17 0x0000000003a6d5f7 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:471:21
#18 0x0000000003a6dc0d mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:534:16
#19 0x0000000003a73078 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:754:36
#20 0x0000000003a72ce9 mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /home/ty/llvm-project-16/mlir/include/mlir/IR/Threading.h:46:18
#21 0x0000000003a6eeb3 mlir::LogicalResult mlir::failableParallelForEach<std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&>(mlir::MLIRContext*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_14&) /home/ty/llvm-project-16/mlir/include/mlir/IR/Threading.h:92:10
#22 0x0000000003a6e757 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:764:14
#23 0x0000000003a6d8c7 mlir::detail::OpToOpPassAdaptor::runOnOperation(bool) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:655:5
#24 0x0000000003a6d5e8 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:468:5
#25 0x0000000003a6dc0d mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:534:16
#26 0x0000000003a6f54c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:839:10
#27 0x0000000003a6f471 mlir::PassManager::run(mlir::Operation*) /home/ty/llvm-project-16/mlir/lib/Pass/Pass.cpp:819:60
#28 0x0000000003a65dd2 performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:91:17
#29 0x0000000003a65a2f processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:139:12
#30 0x0000000003a657e8 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:181:12
#31 0x0000000003a656dd 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>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/ty/llvm-project-16/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:12
#32 0x0000000003b978e9 llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/ty/llvm-project-16/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#33 0x0000000003b96ec5 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-16/mlir/lib/Support/ToolUtilities.cpp:28:12
#34 0x0000000003a64713 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:186:10
#35 0x0000000003a648af mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:209:10
#36 0x0000000003a654f1 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) /home/ty/llvm-project-16/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:306:14
#37 0x0000000000411a39 main /home/ty/llvm-project-16/mlir/tools/mlir-opt/mlir-opt.cpp:271:7
#38 0x00007f5c5bf8ec87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#39 0x000000000041170a _start (/home/ty/llvm-project-16/mlir/build/bin/mlir-opt+0x41170a)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW0tz2zgS_jXwBWUVCfB58EGxrd1s2WWX7ZnDXFQgCUrYgQAuACbW_votgKT4UGTLryQzm1TKIik8ur9u9EtNojVbCUrPQPgJhBcnpDZrqc4-UcL_oNV6q04yWWzPHqg2UAp4dfX7NfQj4F0Ab978vTe00tBIqGilZFHnFOD2KxB57X93u-FMncrKQEO1mdk7eJpL8YUqc8qZIHx1auQpl7LS35zviMiJPrgBQHhDKgjwBSRlyQRdbkgF8DlACUApPAX4EjbXAF-2NMmi5hSC-FNzD2FZi3xm_0AQeBvChJsRErXyAJ5DQ4WWCuDzEiO7Srfu5PlwRQgBCj1HVjNqRjeV2bZUfWvR4UTfTWzwma2ooIrldnUmCvrIxMryqN0YK0KHAEDnsL0KL-wNM1QRI9XSbCvaDw4vQHwBmdA9i98kB6VQ1qYddXDImOPwMsu8ZgYTdoYd6OgKZW12D9KdLCFsGUaOvg0x6xmXK-gWgN2EwdAWki2jvOjmTQZZ9r4lnXaEoqZWogP5oBhAfNHq1-5irHfniug1NIo8r_t2G4AWa7mhAC2sEiw4_7I5rZT8N83NqR8BtLCD7RcsA2hxwQinuQFoceUYBmjxoIjQpVQbbZ_a8zLLqwrgOfItnnBBGK8VvbGsuLXwHOB5g1dz3Szlplp4mq9uqgfpHn3eVBygpJ96S4yhStzRr8qqEgQosrJ8au2byulE-Mmu-LBtZLobr_OyuVhIdeO0FM_hXGuqDJMCgsjrSJqtif5UlyVV93RDhGG57g6OJSKCACH6WNHc0KLlA8oKfmVmDTM3D-p-IgIohiVhnBazRjC3V5fz-0uo62zDDCQwq1fWkkllrE1bG2MRmgO0AGixYmZdZ7NcblqxTaQH0IJpXVMrFkhEAZnIeV1QaNYU5k5JMpL_6RRl1llPkv8Ji3pT7TTHmwEvvVVypcgGErWqN1QY_RLFyWrGC_tpjdfixWbX2g4Peo_e7l-QIFQU0LHcyG-rW81QTBjHxINTf5T0gxT5upTaKEo2rcIwYRrJPcNHh607APd1ZcUB0OI3wR7tA7YShOsZEznA8zCKAZ77fk-7P6U9jjI4IbRZ459EFJwqgJIvkhUAzd-duijwLXU9cWhCnJd50beAvavFiMZe619HXUdWYyh8L7DQ9WThKWY0DeEUpI8QX-CjMUBBS0lchnlYhB5KEw8ul4pqIxVdKtO48Hb1xyRaRoHV4_rxdCXq5ovKrBUlxUzLmQfQJ-_Rt6tYb7PbJhxuk5Uko0kMFWGawsEJWnGW5afnv__r6x_Z7hbNUAzQQjs-AFrMZvZuqwta2ZNfN2zqrf7iqBG1vXVLz5zCWo3wekqiCSVFXPqQZNJxehwlpmjQcLPcJslkk3i8SVrgksDlkjiTu7QWcZmR43lv5u0umi3T8ZbJdMsgRkfILrdSi5zUsBfEaCS1dKimPvLKmKCBWxk6vv5M3W8I57_T3MixQ7ypbFTEpHAH_xwGtXX6B9zhcOLEe9nw57CzPN5XflxYgKw2BPEuSva9MY6-lxHPyoYIKbYbWWsoyIbqypn0dEhry1bL5DOwuLsNMfl6Lop25girqQieRjGFuRTafCRSUWStUdQjNXImAQmTwPP2yZxXFWc5cRr2vjyfD5yDzUrsxKWiJcDnmZQcfkv1GpgayJx2PrGIdXxvXqSffCVXLCf8juqam-PWfanm7zBd7IHfSdGzqRoKeymOvC7OQpwn-Dl9_4eitNiOZXKh2BfaqTvbVJyV21HMc10bknE6V4ps7ybY3NGVlfpreB4p7G-Gcft5mMAOh9T51rTHAU9x8H06UEBSVbxbUM9FsZC8cLsw_io2h8q9UPK_VIzNxz01A3UYjm54a0efS1Gy1fdCLQgtakkPWjCKjSJcFGV4PGjHHPzvik2blPQPRjA9Ac_awuLsY19v8cOpJwnSBHZG5anjxeVXqhqL_Do_a21Q-3Ut8o_2oRhZmzI4StGUceShZ12o5bnlts2RanEjBopxXIz_ei6wpQT3XMQjg0CiIizjgaoV1BDGO_V9kDfVLdF6XpBq5-pULSZmXus9BT-s-nNB-FYzfU0EWVmfdw6tX7OftXC1yeLotHEES0OH--gOduy7GknPfTLlPveKF3N_yyrKmZg6eTt0x1T07nCM4watPwttlCsVSPWNwGI4oNm5-aKl_ZYoKsxnUcrO5hyXCj-DeIiDSTiVjhGPsRcnL0Z8cGLmeivytl7VANUeNYCCpR8017Jqyp9t7Xcop_fb8Ka6vbYAviFS3QcwDi0LuAcQeRMAUU5TeCj-GhhLwrj12LdEEc4pX0h1SfI1wOfL5UrUy_zxsRm4XAqpNoQvu5rxyCJ_BFxOV7Upmudf9vO0j9h0sCPhXObfg1OXXO7FRe-u8iiaesrrq89351IY-mhauH8J_UcI_Rfqf7-j9pbA-_OdjdVcqZKJlYuvAxdf98kH8ichCqUZfpO9__8R_zTq-iGW9hfcP_Fpa-ojfTaL0PS0xeHL06GnWXp7TBi5oDroqcbTNCbJ30T1OxIbhWH_Q5OlNdhLOOnLE4C_SsIZJWPmw1_55vfNN1E0QbwMg3xCaMf6Dl-iNdVHVu728Hs7E4mr0Qyt0rRIUwax_wwTT5D_DhS6NpNB1xWaFlLCokCwoqqUajN3vxToZ1oDOq3rPndeTK-JosWyMpMf9WStcnq9UgBfHqiT7jvjt_6AMT5h3c8iY9JfXKSW0tWldx1CaHHNmbqpzDVhokU8dV0E_Q94KJ0CTlAJKyVzqtt2mWfw3uFbC_afmu7he003Um27pQbjC1qSmptlQTk19PCcXfw9lexznx8jpH5EWy-9oyumjdru_crWhAi3jppXHJej5Ok3ZxztBIq9qUDjkV8cLPHTCPbHCOql6rQXSXrN5V5R8EcANxXf6-qGx6mcawkZqtw0tQyjojiYWr5G2D8Fors-hJxwnpH8z2U5blv4dbTe82jZfJhLsfpReO2fqGPb1fqEsX0wv3gAaHH_cLVoZUD45aNRRDeVmnBynCY9Bmmc0PRvcGz-2nbydbJ1edtQtpO-iTSi-bAFQFecmbkobicB2M9tMH4KQT474q3xdd9_at3kb4ZxZhjdNXxNJT2tTwSxj3_FYe_nLD4mtJl0peBpoSVISPmTS3Eska5Qcn51S5Sm6kCK-56i-VARIW9S1MDTykwYlP5BEbUlqHxNmmLTJJu_N4qJ1R0tj0fnQ7jEXjQuzeJ43Ffv-wSncEOYOHp7s79xd9lh6_pa-uLAtPM6oXkSw-WSsyxfakOUWXYUHNPrneu6a3JvLt2Xbh3X942DoG_8ttunU55jj8Bm47b_-w1vsbjG8GbNXWf45I2rk-IMFylOyQk986MEoTCJvOhkfZZkNMl8TP0Ml0mGShwmKS7TIA-yMIrz_ISdIQ9hL0DYDzyMohkN8qgIi5ikJKKFh0Hg0Q1hfGapnkm1OnEv_JxFCPvpCScZ5bp7lVKdOdayeqVB4HGmje6nGWa4e-ny-urzHQgvQOQdeicn8mBFtIacksK9aPmd3pM6qRU_e_0LUA6S_wUAAP__ZQUMtg">