Open AzizZayed opened 2 months ago
@llvm/issue-subscribers-mlir
Author: Abd-El-Aziz Zayed (AzizZayed)
Clarification:
When I remove the function declarations at the top (and their uses)
func.func private @printF64(f64)
func.func private @printNewline()
It does not crash, so perhaps the pass has an issue with private functions.
Update:
The following command also fails:
~/dev/lib/llvm/build/bin/mlir-opt --remove-dead-values ./res/linalg/linalg_transpose.mlir
On this MLIR code:
func.func @transpose() -> tensor<2x3xf64> {
%cst_2 = arith.constant dense<[[1., 2., 3.], [4., 5., 6.]]> : tensor<2x3xf64>
%cst_3 = arith.constant dense<0.> : tensor<3x2xf64>
%transposed = linalg.transpose ins(%cst_2 : tensor<2x3xf64>) outs(%cst_3 : tensor<3x2xf64>) permutation = [1, 0]
%cst_4 = arith.constant dense<[[1., 2., 3.], [4., 5., 6.]]> : tensor<2x3xf64>
%cst_5 = arith.constant dense<0.> : tensor<3x2xf64>
%transposed_6 = linalg.transpose ins(%cst_4 : tensor<2x3xf64>) outs(%cst_5 : tensor<3x2xf64>) permutation = [1, 0]
%cst_7 = arith.constant dense<[[1., 2., 3.], [4., 5., 6.]]> : tensor<2x3xf64>
%transposed_8 = linalg.transpose ins(%transposed_6 : tensor<3x2xf64>) outs(%cst_7 : tensor<2x3xf64>) permutation = [1, 0]
return %transposed_8 : tensor<2x3xf64>
}
Stack dump:
0. Program arguments: /Users/aziz/dev/lib/llvm/build/bin/mlir-opt --remove-dead-values ../res/linalg/linalg_transpose_extracted.mlir
#0 0x0000000101201e6c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f5e6c)
#1 0x0000000101202490 PrintStackTraceSignalHandler(void*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f6490)
#2 0x00000001011fff64 llvm::sys::RunSignalHandlers() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f3f64)
#3 0x0000000101203de8 SignalHandler(int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002f7de8)
#4 0x0000000183df7584 (/usr/lib/system/libsystem_platform.dylib+0x180477584)
#5 0x0000000100f0e6d4 llvm::detail::PunnedPointer<mlir::Type>::operator long() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1000026d4)
#6 0x0000000100f0e674 llvm::PointerIntPair<mlir::Type, 3u, mlir::detail::ValueImpl::Kind, llvm::PointerLikeTypeTraits<mlir::Type>, llvm::PointerIntPairInfo<mlir::Type, 3u, llvm::PointerLikeTypeTraits<mlir::Type>>>::getPointer() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100002674)
#7 0x0000000100f0dd90 mlir::detail::ValueImpl::getType() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100001d90)
#8 0x0000000101209f08 mlir::Value::getType() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1002fdf08)
#9 0x00000001025374dc getGenericEffectsImpl(llvm::SmallVectorImpl<mlir::SideEffects::EffectInstance<mlir::MemoryEffects::Effect>>&, mlir::ValueRange, mlir::ValueRange, mlir::ValueRange) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10162b4dc)
#10 0x000000010253d3c4 mlir::linalg::TransposeOp::getEffects(llvm::SmallVectorImpl<mlir::SideEffects::EffectInstance<mlir::MemoryEffects::Effect>>&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1016313c4)
#11 0x0000000102934cb8 mlir::detail::MemoryEffectOpInterfaceInterfaceTraits::Model<mlir::linalg::TransposeOp>::getEffects(mlir::detail::MemoryEffectOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*, llvm::SmallVectorImpl<mlir::SideEffects::EffectInstance<mlir::MemoryEffects::Effect>>&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x101a28cb8)
#12 0x000000010b293180 mlir::MemoryEffectOpInterface::getEffects(llvm::SmallVectorImpl<mlir::SideEffects::EffectInstance<mlir::MemoryEffects::Effect>>&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10a387180)
#13 0x00000001012bcf00 mlir::MemoryEffectOpInterface::hasNoEffect() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1003b0f00)
#14 0x000000010b2944d4 mlir::isMemoryEffectFree(mlir::Operation*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x10a3884d4)
#15 0x0000000106d6f490 (anonymous namespace)::cleanSimpleOp(mlir::Operation*, mlir::dataflow::RunLivenessAnalysis&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e63490)
#16 0x0000000106d6e830 (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1::operator()(mlir::Operation*) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62830)
#17 0x0000000106d6e72c void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1>(long, mlir::Operation*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e6272c)
#18 0x000000010137dd28 llvm::function_ref<void (mlir::Operation*)>::operator()(mlir::Operation*) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471d28)
#19 0x000000010137dcac void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471cac)
#20 0x000000010137dc58 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471c58)
#21 0x000000010137dc58 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100471c58)
#22 0x0000000106d6e688 std::__1::enable_if<llvm::is_one_of<mlir::Operation*, mlir::Operation*, mlir::Region*, mlir::Block*>::value, void>::type mlir::detail::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1, mlir::Operation*, void>(mlir::Operation*, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1&&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62688)
#23 0x0000000106d6e120 std::__1::enable_if<llvm::function_traits<__decay((anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1)>::num_args == 1, void>::type mlir::Operation::walk<(mlir::WalkOrder)1, mlir::ForwardIterator, (anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1, void>((anonymous namespace)::RemoveDeadValues::runOnOperation()::$_1&&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e62120)
#24 0x0000000106d6df64 (anonymous namespace)::RemoveDeadValues::runOnOperation() (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105e61f64)
#25 0x0000000106cc4884 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7::operator()() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105db8884)
#26 0x0000000106cc4808 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_7>(long) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105db8808)
#27 0x00000001011a3e9c llvm::function_ref<void ()>::operator()() const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x100297e9c)
#28 0x0000000106cb6fb0 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105daafb0)
#29 0x0000000106cb6cbc mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105daacbc)
#30 0x0000000106cb7438 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dab438)
#31 0x0000000106cb988c mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dad88c)
#32 0x0000000106cb9640 mlir::PassManager::run(mlir::Operation*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105dad640)
#33 0x0000000106ca835c performActions(llvm::raw_ostream&, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9c35c)
#34 0x0000000106ca7ec8 processBuffer(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bec8)
#35 0x0000000106ca7cac mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_2::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bcac)
#36 0x0000000106ca7c34 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_2>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d9bc34)
#37 0x0000000106e70150 llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105f64150)
#38 0x0000000106e6fc40 mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105f63c40)
#39 0x0000000106c99d18 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8dd18)
#40 0x0000000106c99fdc mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8dfdc)
#41 0x0000000106c9a260 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x105d8e260)
#42 0x0000000100f0e2a8 main (/Users/aziz/dev/lib/llvm/build/bin/mlir-opt+0x1000022a8)
#43 0x0000000183a3e0e0
[1] 85234 segmentation fault ~/dev/lib/llvm/build/bin/mlir-opt --remove-dead-values
I'm trying to remove dead values in the following code (as an example) with the
--remove-dead-values
pass.With this command:
And I get the following stack dump after it crashes:
I noticed that if I remove the function calls and declarations, it does not crash. Can anyone provide insight on what is going on here? Thank you.
Extra info: LLVM version: 18.1.4 LLVM build: DEBUG build with assertions. System: Apple M1 Pro OS: MacOS 14.5