Open
Description
git version: 953838d
system: Ubuntu 18.04.6 LTS
reproduce with: mlir-opt --test-memref-dependence-check a.mlir
tosa.mlir:
llvm.func @malloc(i64) -> !llvm.ptr
llvm.mlir.global private constant @__constant_31x29xf32(dense<-3.802000e+03> : tensor<31x29xf32>) {addr_space = 0 : i32, alignment = 64 : i64} : !llvm.array<31 x array<29 x f32>>
func.func @main() {
%0 = llvm.mlir.undef : !llvm.struct<(i64, ptr)>
%3 = llvm.mlir.constant(64 : index) : i64
%4 = llvm.mlir.constant(0 : index) : i64
%5 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%10 = llvm.mlir.constant(0.000000e+00 : f32) : f32
%13 = llvm.mlir.constant(29 : index) : i64
%14 = llvm.mlir.constant(1 : index) : i64
%15 = llvm.mlir.zero : !llvm.ptr
%44 = llvm.getelementptr %15[29] : (!llvm.ptr) -> !llvm.ptr, f32
%45 = llvm.ptrtoint %44 : !llvm.ptr to i64
%46 = llvm.add %45, %3 : i64
%47 = llvm.call @malloc(%46) : (i64) -> !llvm.ptr
%48 = llvm.ptrtoint %47 : !llvm.ptr to i64
%49 = llvm.sub %3, %14 : i64
%50 = llvm.add %48, %49 : i64
%51 = llvm.urem %50, %3 : i64
%52 = llvm.sub %50, %51 : i64
%53 = llvm.inttoptr %52 : i64 to !llvm.ptr
%54 = llvm.insertvalue %47, %5[0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%55 = llvm.insertvalue %53, %54[1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%56 = llvm.insertvalue %4, %55[2] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%57 = llvm.insertvalue %14, %56[3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%58 = llvm.insertvalue %13, %57[3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%59 = llvm.insertvalue %13, %58[4, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%60 = llvm.insertvalue %14, %59[4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%61 = builtin.unrealized_conversion_cast %60 : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> to memref<1x29xf32>
%64 = llvm.getelementptr %15[1] : (!llvm.ptr) -> !llvm.ptr, f32
%65 = llvm.ptrtoint %64 : !llvm.ptr to i64
%66 = llvm.add %65, %3 : i64
%67 = llvm.call @malloc(%66) : (i64) -> !llvm.ptr
%68 = llvm.ptrtoint %67 : !llvm.ptr to i64
%69 = llvm.sub %3, %14 : i64
%70 = llvm.add %68, %69 : i64
%71 = llvm.urem %70, %3 : i64
%72 = llvm.sub %70, %71 : i64
%73 = llvm.inttoptr %72 : i64 to !llvm.ptr
%74 = llvm.insertvalue %67, %5[0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%75 = llvm.insertvalue %73, %74[1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%76 = llvm.insertvalue %4, %75[2] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%77 = llvm.insertvalue %14, %76[3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%78 = llvm.insertvalue %14, %77[3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%79 = llvm.insertvalue %14, %78[4, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%80 = llvm.insertvalue %14, %79[4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
%81 = builtin.unrealized_conversion_cast %80 : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)> to memref<1x1xf32>
%collapse_shape_0 = memref.collapse_shape %81 [[0, 1]] : memref<1x1xf32> into memref<1xf32>
%collapse_shape_1 = memref.collapse_shape %collapse_shape_0 [] : memref<1xf32> into memref<f32>
affine.store %10, %collapse_shape_1[] : memref<f32>
%collapse_shape_2 = memref.collapse_shape %61 [[0, 1]] : memref<1x29xf32> into memref<29xf32>
%collapse_shape_3 = memref.collapse_shape %collapse_shape_0 [] : memref<1xf32> into memref<f32>
affine.for %arg0 = 0 to 29 {
%216 = affine.load %collapse_shape_2[%arg0] : memref<29xf32>
%217 = affine.load %collapse_shape_3[] : memref<f32>
%218 = llvm.fadd %216, %217 : f32
affine.store %218, %collapse_shape_3[] : memref<f32>
}
%expand_shape = memref.expand_shape %81 [[0], [1, 2]] output_shape [1, 1, 1] : memref<1x1xf32> into memref<1x1x1xf32>
return
}
stack trace:
mlir-opt: /data/szy/MLIR/llvm-release/llvm-project/mlir/lib/Analysis/Presburger/IntegerRelation.cpp:1316: void mlir::presburger::IntegerRelation::mergeAndAlignSymbols(IntegerRelation &): Assertion `space.isUsingIds() && other.space.isUsingIds() && "both relations need to have identifers to merge and align"' 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/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt tosa.mlir --test-memref-dependence-check
#0 0x000055f24f8d4158 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1136158)
#1 0x000055f24f8d1c6e llvm::sys::RunSignalHandlers() (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1133c6e)
#2 0x000055f24f8d4aed SignalHandler(int) Signals.cpp:0:0
#3 0x00007f68fb871420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f68faeae00b raise /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#5 0x00007f68fae8d859 abort /build/glibc-LcI20x/glibc-2.31/stdlib/abort.c:81:7
#6 0x00007f68fae8d729 get_sysdep_segment_value /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:509:8
#7 0x00007f68fae8d729 _nl_load_domain /build/glibc-LcI20x/glibc-2.31/intl/loadmsgcat.c:970:34
#8 0x00007f68fae9efd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#9 0x000055f2558e7711 (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x7149711)
#10 0x000055f252caea1b mlir::affine::MemRefAccess::getAccessRelation(mlir::presburger::IntegerRelation&) const (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4510a1b)
#11 0x000055f252cada7c mlir::affine::checkMemrefAccessDependence(mlir::affine::MemRefAccess const&, mlir::affine::MemRefAccess const&, unsigned int, mlir::affine::FlatAffineValueConstraints*, llvm::SmallVector<mlir::affine::DependenceComponent, 2u>*, bool) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x450fa7c)
#12 0x000055f2527c7fb7 (anonymous namespace)::TestMemRefDependenceCheck::runOnOperation() TestMemRefDependenceCheck.cpp:0:0
#13 0x000055f252d152b6 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x45772b6)
#14 0x000055f252d15be0 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x4577be0)
#15 0x000055f252d181b2 mlir::PassManager::run(mlir::Operation*) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x457a1b2)
#16 0x000055f252d10a5a performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#17 0x000055f252d106ad 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&)::$_0>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#18 0x000055f252dbcb25 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/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x461eb25)
#19 0x000055f252d0a695 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456c695)
#20 0x000055f252d0a93f mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456c93f)
#21 0x000055f252d0ac6e mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x456cc6e)
#22 0x000055f24f8b4c47 main (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x1116c47)
#23 0x00007f68fae8f083 __libc_start_main /build/glibc-LcI20x/glibc-2.31/csu/../csu/libc-start.c:342:3
#24 0x000055f24f8b47be _start (/data/szy/MLIR/llvm-release/llvm-project/build/bin/mlir-opt+0x11167be)