Skip to content

[mlir] --test-memref-dependence-check crashes #119367

Open
@anonymoususer-1

Description

@anonymoususer-1

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    crashPrefer [crash-on-valid] or [crash-on-invalid]mlir:memref

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions