| Issue |
177816
|
| Summary |
mlir-opt --convert-to-llvm crashes on extremely high-rank memref due to stride size overflow
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
Subway2023
|
# Description
Running mlir-opt --convert-to-llvm on a module containing an extremely high-rank memref.global causes an assertion failure in makeCanonicalStridedLayoutExpr
# Reproduce
mlir-opt version: 22.1.0-rc1
location: If the **memref.global** operation is commented out, the crash no longer occurs.
```mlir
module {
memref.global "private" constant @__constant_2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x : memref<2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2x2xi32>
}
```
```
mlir-opt --convert-to-llvm test.mlir
```
```
mlir-opt: /mnt/sdd1/sbw/mlir/tool/llvm-project-llvmorg-22.1.0-rc1/mlir/lib/IR/BuiltinTypes.cpp:879: mlir::AffineExpr mlir::makeCanonicalStridedLayoutExpr(llvm::ArrayRef<long int>, llvm::ArrayRef<AffineExpr>, MLIRContext*): Assertion `runningSize > 0 && "integer overflow in size computation"' 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: /mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt --convert-to-llvm /mnt/sdd1/sbw/mlir/data/genProgram_0123_night/241115_756f/mlir_steps/241115_756f_2.mlir
#0 0x000061be2622ce32 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x252fe32)
#1 0x000061be262295af llvm::sys::RunSignalHandlers() (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x252c5af)
#2 0x000061be262296fc SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x000079166ba45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#4 0x000079166ba9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x000079166ba9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x000079166ba9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x000079166ba4527e raise ./signal/../sysdeps/posix/raise.c:27:6
#8 0x000079166ba288ff abort ./stdlib/abort.c:81:7
#9 0x000079166ba2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000079166ba3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#11 0x000061be2ddcaaaf (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0xa0cdaaf)
#12 0x000061be2ddcabbd mlir::makeCanonicalStridedLayoutExpr(llvm::ArrayRef<long>, mlir::MLIRContext*) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0xa0cdbbd)
#13 0x000061be2dd7b9d1 mlir::detail::getAffineMapStridesAndOffset(mlir::AffineMap, llvm::ArrayRef<long>, llvm::SmallVectorImpl<long>&, long&) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0xa07e9d1)
#14 0x000061be2ddca5d9 mlir::MemRefType::isStrided() (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0xa0cd5d9)
#15 0x000061be2b8dc624 mlir::LLVMTypeConverter::getMemRefDescriptorFields(mlir::MemRefType, bool) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x7bdf624)
#16 0x000061be2b8ddc90 std::_Function_handler<std::optional<llvm::LogicalResult> (llvm::PointerUnion<mlir::Type, mlir::Value>, llvm::SmallVectorImpl<mlir::Type>&), std::enable_if<is_invocable_v<mlir::LLVMTypeConverter::LLVMTypeConverter(mlir::MLIRContext*, mlir::LowerToLLVMOptions const&, mlir::DataLayoutAnalysis const*)::'lambda'(mlir::MemRefType), mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&> && is_base_of_v<mlir::Type, mlir::MemRefType>, std::function<std::optional<llvm::LogicalResult> (llvm::PointerUnion<mlir::Type, mlir::Value>, llvm::SmallVectorImpl<mlir::Type>&)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, std::enable_if<is_invocable_v<mlir::LLVMTypeConverter::LLVMTypeConverter(mlir::MLIRContext*, mlir::LowerToLLVMOptions const&, mlir::DataLayoutAnalysis const*)::'lambda'(mlir::MemRefType), mlir::MemRefType>, std::function<std::optional<llvm::LogicalResult> (llvm::PointerUnion<mlir::Type, mlir::Value>, llvm::SmallVectorImpl<mlir::Type>&)>>::type mlir::TypeConverter::wrapCallback<mlir::MemRefType, mlir::LLVMTypeConverter::LLVMTypeConverter(mlir::MLIRContext*, mlir::LowerToLLVMOptions const&, mlir::DataLayoutAnalysis const*)::'lambda'(mlir::MemRefType)>(mlir::LLVMTypeConverter::LLVMTypeConverter(mlir::MLIRContext*, mlir::LowerToLLVMOptions const&, mlir::DataLayoutAnalysis const*)::'lambda'(mlir::MemRefType)&&)::'lambda'(mlir::MemRefType, llvm::SmallVectorImpl<mlir::Type>&)>(mlir::LLVMTypeConverter::LLVMTypeConverter(mlir::MLIRContext*, mlir::LowerToLLVMOptions const&, mlir::DataLayoutAnalysis const*)::'lambda'(mlir::MemRefType)&&) const::'lambda'(llvm::PointerUnion<mlir::Type, mlir::Value>, llvm::SmallVectorImpl<mlir::Type>&)>::_M_invoke(std::_Any_data const&, llvm::PointerUnion<mlir::Type, mlir::Value>&&, llvm::SmallVectorImpl<mlir::Type>&) TypeConverter.cpp:0:0
#17 0x000061be2d9f9f0f mlir::TypeConverter::convertTypeImpl(llvm::PointerUnion<mlir::Type, mlir::Value>, llvm::SmallVectorImpl<mlir::Type>&) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9cfcf0f)
#18 0x000061be2d9face7 mlir::TypeConverter::convertType(mlir::Type) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9cfdce7)
#19 0x000061be2b8d1951 mlir::ConvertToLLVMPattern::isConvertibleAndHasIdentityMaps(mlir::MemRefType) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x7bd4951)
#20 0x000061be2a43c480 (anonymous namespace)::GlobalMemrefOpLowering::matchAndRewrite(mlir::memref::GlobalOp, mlir::memref::GlobalOpAdaptor, mlir::ConversionPatternRewriter&) const MemRefToLLVM.cpp:0:0
#21 0x000061be2a44655c llvm::LogicalResult mlir::ConversionPattern::dispatchTo1To1<mlir::ConvertOpToLLVMPattern<mlir::memref::GlobalOp, false>, mlir::memref::GlobalOp>(mlir::ConvertOpToLLVMPattern<mlir::memref::GlobalOp, false> const&, mlir::memref::GlobalOp, mlir::memref::GlobalOp::GenericAdaptor<llvm::ArrayRef<mlir::ValueRange>>, mlir::ConversionPatternRewriter&) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x674955c)
#22 0x000061be2a4466ae mlir::ConvertOpToLLVMPattern<mlir::memref::GlobalOp, false>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::ValueRange>, mlir::ConversionPatternRewriter&) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x67496ae)
#23 0x000061be2da0a32e mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9d0d32e)
#24 0x000061be2da57e03 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
#25 0x000061be2da593af 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&)>) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9d5c3af)
#26 0x000061be2da0547c (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*) DialectConversion.cpp:0:0
#27 0x000061be2da05944 mlir::OperationConverter::convert(mlir::Operation*, bool) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9d08944)
#28 0x000061be2da0eb16 mlir::OperationConverter::applyConversion(llvm::ArrayRef<mlir::Operation*>) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9d11b16)
#29 0x000061be2da112ab applyConversion(llvm::ArrayRef<mlir::Operation*>, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig, (anonymous namespace)::OpConversionMode) DialectConversion.cpp:0:0
#30 0x000061be2da1144f mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9d1444f)
#31 0x000061be27b549c7 (anonymous namespace)::StaticConvertToLLVM::transform(mlir::Operation*, mlir::AnalysisManager) const ConvertToLLVMPass.cpp:0:0
#32 0x000061be27b54c2a (anonymous namespace)::ConvertToLLVMPass::runOnOperation() ConvertToLLVMPass.cpp:0:0
#33 0x000061be2dacc756 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9dcf756)
#34 0x000061be2dacca8e mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9dcfa8e)
#35 0x000061be2dacd1e2 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9dd01e2)
#36 0x000061be2dace400 mlir::PassManager::run(mlir::Operation*) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x9dd1400)
#37 0x000061be262f3767 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#38 0x000061be262f44ea llvm::LogicalResult llvm::function_ref<llvm::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, 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::MemoryBufferRef, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::MemoryBufferRef const&, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#39 0x000061be2de9c731 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::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0xa19f731)
#40 0x000061be262eb8d0 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (.part.0) MlirOptMain.cpp:0:0
#41 0x000061be262f4b70 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x25f7b70)
#42 0x000061be262f4da9 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x25f7da9)
#43 0x000061be26126023 main (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x2429023)
#44 0x000079166ba2a1ca __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#45 0x000079166ba2a28b call_init ./csu/../csu/libc-start.c:128:20
#46 0x000079166ba2a28b __libc_start_main ./csu/../csu/libc-start.c:347:5
#47 0x000061be2620b405 _start (/mnt/sdd1/sbw/mlir/tool/llvmorg-22.1.0-install/bin/mlir-opt+0x250e405)
Aborted (core dumped)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs