Memref access dependence fails on checkMemrefAccessDependence in --convert-affine-to-pipeline
@mikeurbach is already working on this.
Since Mar 13, 2023.
- Dominant language
- C++
- Stars
- 2.2k
- Forks
- 524
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 46
Description
I'd like to convert some scf/affine MLIR to verilog, and while I am sure there are multiple problems with my input MLIR (I'm figuring out which additional passes I need to run to get it into a suitable form), I'm running into some mlir-opt crashes and thought it might be worthwhile to submit them as bug reports.
I'm struggling a bit to minimize the example to a small reproduction, in part because I don't understand what section of the input mlir-opt is unable to handle. I would appreciate some advice on what part to extract to make this bug simpler to triage.
Command (named txt so GitHub would let me attach it to this issue):
bin/circt-opt --convert-affine-to-pipeline /usr/home/jkun/repro.mlir.txt
Error logs:
circt-opt: /usr/home/jkun/circt/llvm/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:643: mlir::DependenceResult mlir::checkMemrefAccessDependence(const mlir::MemRefAccess &, const mlir::MemRefAccess &, unsigned int, mlir::FlatAffineValueConstraints *, SmallVector<mlir::DependenceComponent, 2> *, bool): Assertion `loopDepth <= numCommonLoops + 1' failed.
PLEASE submit a bug report to https://github.com/llvm/circt and include the crash backtrace.
Stack dump:
0. Program arguments: bin/circt-opt --convert-affine-to-pipeline /usr/home/jkun/repro.mlir
#0 0x000055a086e1d467 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (bin/circt-opt+0x1305467)
#1 0x000055a086e1b31e llvm::sys::RunSignalHandlers() (bin/circt-opt+0x130331e)
#2 0x000055a086e1ddaa SignalHandler(int) Signals.cpp:0:0
#3 0x00007f27a8c3af90 (/lib/x86_64-linux-gnu/libc.so.6+0x3bf90)
#4 0x00007f27a8c89ccc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007f27a8c3aef2 raise ./signal/../sysdeps/posix/raise.c:27:6
#6 0x00007f27a8c25472 abort ./stdlib/abort.c:81:7
#7 0x00007f27a8c25395 _nl_load_domain ./intl/loadmsgcat.c:1177:9
#8 0x00007f27a8c33df2 (/lib/x86_64-linux-gnu/libc.so.6+0x34df2)
#9 0x000055a0887fbe8c mlir::checkMemrefAccessDependence(mlir::MemRefAccess const&, mlir::MemRefAccess const&, unsigned int, mlir::FlatAffineValueConstraints*, llvm::SmallVector<mlir::DependenceComponent, 2u>*, bool) (bin/circt-opt+0x2ce3e8c)
#10 0x000055a0886bb1be checkMemrefDependence(llvm::SmallVectorImpl<mlir::Operation*>&, unsigned int, llvm::DenseMap<mlir::Operation*, llvm::SmallVector<circt::analysis::MemoryDependence, 1u>, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, llvm::SmallVector<circt::analysis::MemoryDependence, 1u>>>&) /usr/home/jkun/circt/lib/Analysis/DependenceAnalysis.cpp:46:33
#11 0x000055a0886bafcf circt::analysis::MemoryDependenceAnalysis::MemoryDependenceAnalysis(mlir::Operation*) /usr/home/jkun/circt/lib/Analysis/DependenceAnalysis.cpp:142:65
#12 0x000055a086e2a7a4 mlir::detail::AnalysisModel<circt::analysis::MemoryDependenceAnalysis>::AnalysisModel<mlir::func::FuncOp&>(mlir::func::FuncOp&) /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/AnalysisManager.h:120:48
#13 0x000055a086e2a71e std::__detail::_MakeUniq<mlir::detail::AnalysisModel<circt::analysis::MemoryDependenceAnalysis>>::__single_object std::make_unique<mlir::detail::AnalysisModel<circt::analysis::MemoryDependenceAnalysis>, mlir::func::FuncOp&>(mlir::func::FuncOp&) /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../include/c++/12/bits/unique_ptr.h:1065:34
#14 0x000055a086e272d7 auto mlir::detail::AnalysisMap::constructAnalysis<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp, (void*)0>(mlir::AnalysisManager&, mlir::func::FuncOp) /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/AnalysisManager.h:233:12
#15 0x000055a086e26dc6 circt::analysis::MemoryDependenceAnalysis& mlir::detail::AnalysisMap::getAnalysisImpl<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp>(mlir::PassInstrumentor*, mlir::func::FuncOp, mlir::AnalysisManager&) /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/AnalysisManager.h:211:27
#16 0x000055a086e26ca5 std::enable_if<std::is_constructible<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp>::value || std::is_constructible<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp, mlir::AnalysisManager&>::value, circt::analysis::MemoryDependenceAnalysis&>::type mlir::detail::AnalysisMap::getAnalysis<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp>(mlir::PassInstrumentor*, mlir::AnalysisManager&) /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/AnalysisManager.h:167:5
#17 0x000055a086e26af4 circt::analysis::MemoryDependenceAnalysis& mlir::AnalysisManager::getAnalysis<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp>() /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/AnalysisManager.h:326:5
#18 0x000055a086e26a82 circt::analysis::MemoryDependenceAnalysis& mlir::Pass::getAnalysis<circt::analysis::MemoryDependenceAnalysis, mlir::func::FuncOp>() /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/Pass.h:225:5
#19 0x000055a086e26535 circt::analysis::MemoryDependenceAnalysis& mlir::OperationPass<mlir::func::FuncOp>::getAnalysis<circt::analysis::MemoryDependenceAnalysis>() /usr/home/jkun/circt/llvm/mlir/include/mlir/Pass/Pass.h:373:5
#20 0x000055a086e1f5bf (anonymous namespace)::AffineToPipeline::runOnOperation() /usr/home/jkun/circt/lib/Conversion/AffineToPipeline/AffineToPipeline.cpp:103:29
#21 0x000055a088e2c764 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (bin/circt-opt+0x3314764)
#22 0x000055a088e2ce81 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (bin/circt-opt+0x3314e81)
#23 0x000055a088e2e708 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (bin/circt-opt+0x3316708)
#24 0x000055a088e2c87e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (bin/circt-opt+0x331487e)
#25 0x000055a088e2ce81 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (bin/circt-opt+0x3314e81)
#26 0x000055a088e2f65c mlir::PassManager::run(mlir::Operation*) (bin/circt-opt+0x331765c)
#27 0x000055a08862a9a4 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#28 0x000055a08862a6a6 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&)::$_1>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#29 0x000055a08864bae8 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) (bin/circt-opt+0x2b33ae8)
#30 0x000055a0886287d3 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (bin/circt-opt+0x2b107d3)
#31 0x000055a088628e70 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (bin/circt-opt+0x2b10e70)
#32 0x000055a086d3bc5f main /usr/home/jkun/circt/tools/circt-opt/circt-opt.cpp:70:23
#33 0x00007f27a8c2618a __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#34 0x00007f27a8c26245 call_init ./csu/../csu/libc-start.c:128:20
#35 0x00007f27a8c26245 __libc_start_main ./csu/../csu/libc-start.c:368:5
#36 0x000055a086d3ba81 _start (bin/circt-opt+0x1223a81)
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.