<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/111244>111244</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[mlir] Crash when using --lower-vector-multi-reduction
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wangyongj1a
</td>
</tr>
</table>
<pre>
I have the following MLIR program:
test.mlir:
```
module {
func.func @func1(%arg0: tensor<?x?x?xf32>, %arg1: index) {
%0 = bufferization.to_memref %arg0 : memref<?x?x?xf32, strided<[?, ?, ?], offset: ?>>
%c1 = arith.constant 1 : index
%subview = memref.subview %0[0, 0, 0] [1, %arg1, 1] [1, 1, 1] : memref<?x?x?xf32, strided<[?, ?, ?], offset: ?>> to memref<1x?xf32, strided<[?, ?], offset: ?>>
%dim = memref.dim %subview, %c1 : memref<1x?xf32, strided<[?, ?], offset: ?>>
vector.print %dim : index
return
}
}
```
The above MLIR program will cause a crash when using the following command:
```
mlir-opt --lower-vector-multi-reduction test.mlir
```
And the crash backtrace is:
```
mlir-opt: /data/tmp/v1005/llvm-project/mlir/lib/Dialect/MemRef/IR/MemRefOps.cpp:1070: mlir::OpFoldResult mlir::memref::DimOp::fold(mlir::memref::DimOp::FoldAdaptor): Assertion `subview.isDynamicSize(sourceIndex) && "expected dynamic subview size"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /data/tmp/v1005/llvm-project/build/bin/mlir-opt --lower-vector-multi-reduction test.mlir
#0 0x000055d19a82f43f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x158443f)
#1 0x000055d19a82c4a4 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f952fcde420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#3 0x00007f952f7ab00b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
#4 0x00007f952f78a859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
#5 0x00007f952f78a729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
#6 0x00007f952f79bfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#7 0x000055d19bde5431 mlir::memref::DimOp::fold(mlir::memref::DimOpGenericAdaptor<llvm::ArrayRef<mlir::Attribute>>) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x2b3a431)
#8 0x000055d19bd6f62a llvm::LogicalResult llvm::detail::UniqueFunctionBase<llvm::LogicalResult, mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&>::CallImpl<mlir::Op<mlir::memref::DimOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<mlir::IndexType>::Impl, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::NOperands<2u>::Impl, mlir::OpTrait::OpInvariants, mlir::OpAsmOpInterface::Trait, mlir::OpTrait::MemRefsNormalizable, mlir::ConditionallySpeculatable::Trait, mlir::MemoryEffectOpInterface::Trait, mlir::ShapedDimOpInterface::Trait, mlir::InferTypeOpInterface::Trait>::getFoldHookFn()::'lambda'(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) const>(void*, mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x2ac462a)
#9 0x000055d19bd7d966 mlir::RegisteredOperationName::Model<mlir::memref::DimOp>::foldHook(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x2ad2966)
#10 0x000055d19dce4124 mlir::Operation::fold(llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4a39124)
#11 0x000055d19dce44b8 mlir::Operation::fold(llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4a394b8)
#12 0x000055d19db72d7e (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#13 0x000055d19db75e6b mlir::applyPatternsAndFoldGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48cae6b)
#14 0x000055d19cd9326c (anonymous namespace)::LowerVectorMultiReductionPass::runOnOperation() LowerVectorMultiReduction.cpp:0:0
#15 0x000055d19dabe4f1 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48134f1)
#16 0x000055d19dabe9ca mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48139ca)
#17 0x000055d19dabed5e mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#18 0x000055d19dabda38 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4812a38)
#19 0x000055d19dabe276 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4813276)
#20 0x000055d19dabe9ca mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48139ca)
#21 0x000055d19dabf514 mlir::PassManager::run(mlir::Operation*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4814514)
#22 0x000055d19dab0a1b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#23 0x000055d19dab13e4 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
#24 0x000055d19dab1594 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
#25 0x000055d19dbba04e 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) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x490f04e)
#26 0x000055d19daa8e39 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x47fde39)
#27 0x000055d19dab1701 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4806701)
#28 0x000055d19dab1bc6 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4806bc6)
#29 0x000055d19a746acb main (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x149bacb)
#30 0x00007f952f78c083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#31 0x000055d19a80262e _start (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x155762e)
Aborted (core dumped)
```
My git version is bf895c714e1f8a51c1e565a75acf60bf7197be51.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl9T47iy_zTmRUXKlv8_8BBgskvVsFAw996q-5KSrXaiHVnylWQg8-lvSXYSK8AAe3JmZrfO1AC21Gp1__qPWrKI1mwlAM6C9DxIL09Ib9ZSnT0SsdpIsfozIieVpJuzK7QmD4DMGlAjOZePTKzQ9eerO9QpuVKkDeJ5EF4G4dyANrOWM7VrCbJw_O9eW0l7DijIz4d31PSintlfKEhC-zcKcBHglKhVGMRzZEBoqYL4IogXT9ufJsZB_CnAF2igjCwlExSeAlyiCXeELEWIgvgSVX3TgGLfiGFSzIxcttAqaEYWlmaOhqYXZsMXSBvFKFDbmZ4H8cJNv_-TXton2TQajGVl2-JP9v9UlDpyshDFzHpWS6ENEQZFaK_AlFr31QODRzdkEG22a8JpGKTnoZ10_JVeoiA9j6aw4AsUTdsnLf8mbZGRe77Rezi-DzjK2ikM7nUH0KhyHflqHWX6B6iNVLNOMWH2gjyzlgLTK4G2DUF-Ofr_7sEPhC9rQKSSD-AFEnpknKOa9BoQQbUieo0e1yBQr23M-RFYy7Ylgr4aapypU9kZdHrK5SOo00GT07bnhp0qoH1tIwHtY_YlLnNB3bSDLBWpvxpFakBMvzWvAxMvKDEkwAvTdgFePERhmAZ4wflDe9op-SfUJsALNztecFYFeHHJCB-ar6G9gybAi6u73dtNp2d11wXxPApzlyG26Sae33QLyekd6J6bSfPWH-zzJWtvuuGxkZwGuHiTzvKcU9IZqQJc2hnnWoNy2AVZOLrgjOnLjSAtq-_ZNwhwoWWvarjaJqUAZwHOUIAxPHVQG6CIDvRoG9LaDcQBzlFDGAc6GwC9_fxpfv_JkrXMIIKqfoUUdFIZG2xrYzpnC7wI8GLFzLqvZrVsR5Sfg8207kEHeIGIoIiJmvcUXrLxOP29IfVXRPu221k8nCH373b0WqJWfQvC6A_YvOqZxX9RMTF6wF9wVhTgOEThUxiGYZrSqCQFbpK4QU51Zz690cPDrY1gp8wXq12Aiz2RIo9LqY0C0jpDXSAmzGC24l_SJ8Dn4VOUFkkSN9Z7dlJHB1LXCUnQPVsJwn8ngnJQAS5GIYbmrd-H7mfHCI-M8qZMcVNTSHCIlksF2kgFS2VGHYbgeiqyZZaccib6p9OV6IeOzqwVEDrTchYOEicJDj15Y2-anFRhWCFFmIZ38K8t58xxTuIwrDzOic-5IEVa2tT4LsknnDEu0tLjnB5yzncWfTfPHPs8M59nWTU0-xjPOG5o5vHMp75QUUiTODpG_voNBChWb5NXfLF3-LlSZHPnVsk9g7kxilW9gXEBPJb_4yomSRx5Ohe-zlmTYTKJ2s9yxWrCx1y-b6dgCOPD838J9n89LHrhUsM50eCp6LGwIT1dKEC5MjDAc9vzEVw88vuWcP7fLlVdtR33Rk1XIzcwc7DargvC-Qv03utzqx-o8EURZoaX_wUl72DFpNDfoboR8DIYPs2XTQc7sScCuaXMdu7UcCp8X6r7vq5Ba6m-J9gfzh6C6iC-wP172d90V-KBKEbsunNANtet7TagGpvqXesw9HV-Q32h_5CqJZx9IxUHn_pCCsqs1xDON_cd1D0nxpG9xv8aWqk2n5oGavMeee7XpAPqrP028ZVoQFl7vEK8hXEFxjri71J-XQgXz-XQEeCck7aiJMC5l0h-VnjgErktkXstHiSjowC_hGjHSYWkTjJMvFRY-qkwp2WWTVS2ga0NKKA75f8g7Wjqa0mBv5E3to7QjF7wq9j6SIBSXGb79dSWVl5FSGtIIpy86EPTdfTvpnhC4jLCiad4dKh4UhUfUPwnapJUhacJ9jSpckxzV2gSIcWmlb1GgrSgO1fIj_nsNwVAN7fEGFDiDh4VM3Cp2AOMKnRK2rXof6T6ypk2QypEr496Xm9byeIDyVLIqgnGpOv4lpueC2pRc1MwvvECb1ivx93Gvnmh5DfYyjHyuQczJsZD6kH4kfpCioatLEElJXfxfCwLFTWBrPIslExxqGkZ46x-y0Kf7dZucLBru7G72-7rboked2mqFzdikpScjV4d97KJUs9EpIKkmdbT0xrypvsibzo7_a5KHqXwjOXke2stmiQLQfhGM31NBFnZndzWJBeoF-7MlR51g5kUUZw0kWef7BCEsiYfBuGWdcCZgIMlw5LudMuOjsp0kJ3qSmij3AGDVM-4-gST9LaV_ZYoEOZKNHIbRMcMjCgua-IBnx8CT1P4MPCTGJjrjaiHWrgY8HqrfjveFDfd7bVFbkj3Q5t0o6wlXMr-ERMPhkOW2csRXxxgTklcHBnzozkMJrG_1pWHDoPz7B-frnDu1Ww4_E-6-inpCkcHwDdplBzIu0XgRV_zATyeoEkaecUtxgeChiSqUAeqkaqdu2pAv3Gmqw0duvSaKKDLzviHYvfuyP56pYL40ysF1_Xnq7sLKQw8mWemveZM3XTmmjAxlGITHiWa9L6Yw3B8oF8UQ4LGmvXcfbt8r3q9Oxh7pt5wGrFlNaGn0JCemyUFDgZeHzOeCr5X5ynd-FFn2Muqzdi_n-eLO4C-lZLvzzIGf3oTt-QQt7RM3nGS2IznhsvhW-FrAwJc_DhcX7duudvF14TzitRfl43wNmgTnH5BP3nZ_u-MnRfLnV_GKrjgUqx-LLDfEentgPG3R1VFwmRaoOqOMzMX9PYg9fwM7f6GQfpdCu_cyCgmVu4D9yvNx1pMy7AJE_AW04PdISkgLl8Ox39aMjkSpnlDIS49TA83flEeRq9iOlaO9ZoMNeL8o87xFiBHq8TCLA-9owV8uNuKqjo7iqI_TKOq9ncf3haM5ElG6gq1hIkjXQBIyorU3vnZ7trC9uN0HRYxWi45q-qlNkSZ5WT-936uTsIi9mY5uGYQ4gwDGvgf625Dmmd4n1zmlVQGqGVeSwXu3gjQvUz-XaHrDVoxgx5AaSYFYhpVTVGmdR4lEDUFSaM6gjRLSZ6SusnCqsmjMq8gjWYn9CymZVySEziLclxEUVlE8cn6rCiyPK3qBuMEEhJlTRnnZUTKJgeaJSk-YWc4xInVNCyjLI1nZdnEZVqHWRwmeRnGQRJCSxifWRhmUq1O3J2ZsyiKcJKccFIB1-7SJMbD1SUcpJcn6szBVvUrHSQhZ9roPQfDDHcXLd2A9BJdHF7u-v7Nl5Ne8bO_ftdnFP3hDP9_AAAA__-3SM9q">