-
Notifications
You must be signed in to change notification settings - Fork 409
Open
Labels
Description
Hi, all! Let's look at this example on Verilog:
module comb_assert(
input wire clk,
input wire resetn
);
always @* begin
if (resetn) begin
assert (0);
end
end
endmodule
When we process this using circt-verilog and arcilator:
circt-verilog test.v | arcilator
we get the following internal MLIR assertion failure:
arcilator: /home/circt/llvm/mlir/lib/Transforms/Utils/DialectConversion.cpp:2230: void mlir::ConversionPatternRewriter::replaceUsesWithIf(mlir::Value, mlir::ValueRange, mlir::function_ref<bool(mlir::OpOperand&)>, bool*): Assertion `!allUsesReplaced && "allUsesReplaced is not supported in a dialect conversion"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and instructions to reproduce the bug.
Stack dump:
0. Program arguments: ./build/bin/arcilator comb_assert.mlir --state-file comb_assert.json -o comb_assert.ll
#0 0x00005888f6a8a262 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./build/bin/arcilator+0x3ac262)
#1 0x00005888f6a86f5f llvm::sys::RunSignalHandlers() (./build/bin/arcilator+0x3a8f5f)
#2 0x00005888f6a870ac SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x0000732c30c45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x0000732c30c9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x0000732c30c9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x0000732c30c9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x0000732c30c4527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x0000732c30c288ff abort ./stdlib/abort.c:81:7
#9 0x0000732c30c2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x0000732c30c3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x00005888fab6c9c5 (./build/bin/arcilator+0x448e9c5)
#12 0x00005888fab899b7 mlir::ConversionPatternRewriter::replaceUsesWithIf(mlir::Value, mlir::Value, llvm::function_ref<bool (mlir::OpOperand&)>, bool*) (./build/bin/arcilator+0x44ab9b7)
#13 0x00005888fb6bd3f5 mlir::RewriterBase::replaceUsesWithIf(mlir::ValueRange, mlir::ValueRange, llvm::function_ref<bool (mlir::OpOperand&)>, bool*) (./build/bin/arcilator+0x4fdf3f5)
#14 0x00005888fabb5c21 mlir::makeRegionIsolatedFromAbove(mlir::RewriterBase&, mlir::Region&, llvm::function_ref<bool (mlir::Operation*)>) (./build/bin/arcilator+0x44d7c21)
#15 0x00005888f71de7a5 convert(circt::llhd::CombinationalOp, circt::llhd::CombinationalOpAdaptor, mlir::ConversionPatternRewriter&, mlir::TypeConverter const&) /home/circt/lib/Conversion/ConvertToArcs/ConvertToArcs.cpp:537:24
#16 0x00005888f71e40f0 circt::ConversionPatternSet& circt::ConversionPatternSet::add<circt::llhd::CombinationalOp>(llvm::LogicalResult (*)(circt::llhd::CombinationalOp, circt::llhd::CombinationalOp::Adaptor, mlir::ConversionPatternRewriter&, mlir::TypeConverter const&))::FnPattern::matchAndRewrite(circt::llhd::CombinationalOp, circt::llhd::CombinationalOpAdaptor, mlir::ConversionPatternRewriter&) const /home/circt/include/circt/Support/ConversionPatternSet.h:72:16
#17 0x00005888f71f331f llvm::LogicalResult mlir::ConversionPattern::dispatchTo1To1<mlir::OpConversionPattern<circt::llhd::CombinationalOp>, circt::llhd::CombinationalOp>(mlir::OpConversionPattern<circt::llhd::CombinationalOp> const&, circt::llhd::CombinationalOp, circt::llhd::CombinationalOp::GenericAdaptor<llvm::ArrayRef<mlir::ValueRange>>, mlir::ConversionPatternRewriter&) /home/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:1069:30
#18 0x00005888f71f2c46 mlir::OpConversionPattern<circt::llhd::CombinationalOp>::matchAndRewrite(circt::llhd::CombinationalOp, circt::llhd::CombinationalOpGenericAdaptor<llvm::ArrayRef<mlir::ValueRange>>, mlir::ConversionPatternRewriter&) const /home/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:727:26
#19 0x00005888f71f2bb4 mlir::OpConversionPattern<circt::llhd::CombinationalOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::ValueRange>, mlir::ConversionPatternRewriter&) const /home/circt/llvm/mlir/include/mlir/Transforms/DialectConversion.h:713:27
#20 0x00005888fab9169e mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (./build/bin/arcilator+0x44b369e)
#21 0x00005888fabd8ef3 mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>)::'lambda'()::operator()() const PatternApplicator.cpp:0:0
#22 0x00005888fabda49f mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern const&)>) (./build/bin/arcilator+0x44fc49f)
#23 0x00005888fab8bf7c (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*) DialectConversion.cpp:0:0
#24 0x00005888fab8c444 mlir::OperationConverter::convert(mlir::Operation*, bool) (./build/bin/arcilator+0x44ae444)
#25 0x00005888fab95df6 mlir::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>) (./build/bin/arcilator+0x44b7df6)
#26 0x00005888fab9861b applyConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig, (anonymous namespace)::OpConversionMode) DialectConversion.cpp:0:0
#27 0x00005888fab987bf mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) (./build/bin/arcilator+0x44ba7bf)
#28 0x00005888f71dee91 (anonymous namespace)::ConvertToArcsPass::runOnOperation() /home/circt/lib/Conversion/ConvertToArcs/ConvertToArcs.cpp:594:13
#29 0x00005888fac4e13e mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./build/bin/arcilator+0x457013e)
#30 0x00005888fac4e5be mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./build/bin/arcilator+0x45705be)
#31 0x00005888fac4ed32 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) (./build/bin/arcilator+0x4570d32)
#32 0x00005888fac4ff50 mlir::PassManager::run(mlir::Operation*) (./build/bin/arcilator+0x4571f50)
#33 0x00005888f699ef42 processBuffer(mlir::MLIRContext&, mlir::TimingScope&, llvm::SourceMgr&, std::optional<std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>>&) /home/circt/tools/arcilator/arcilator.cpp:330:13
#34 0x00005888f69a0525 processInputSplit(mlir::MLIRContext&, mlir::TimingScope&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, std::optional<std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>>&) /home/circt/tools/arcilator/arcilator.cpp:546:25
#35 0x00005888f69a06ee processInput(mlir::MLIRContext&, mlir::TimingScope&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, std::optional<std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>>&) /home/circt/tools/arcilator/arcilator.cpp:562:29
#36 0x00005888f69a0a6e executeArcilator(mlir::MLIRContext&) /home/circt/tools/arcilator/arcilator.cpp:629:13
#37 0x00005888f69a0ce7 main /home/circt/tools/arcilator/arcilator.cpp:692:33
#38 0x0000732c30c2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#39 0x0000732c30c2a28b call_init ./csu/../csu/libc-start.c:128:20
#40 0x0000732c30c2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#41 0x00005888f699e505 _start (./build/bin/arcilator+0x2c0505)