| Issue |
181610
|
| Summary |
[MLIR] A crash bug in isDimSequencePreserved when collapsing dimensions with control=2,3
|
| Labels |
mlir
|
| Assignees |
|
| Reporter |
LynnBroe
|
Hi, I found a crash bug. See the code example below.
```llvm
func.func @conv_parallel(%arg0: tensor<1x5x5x1xf32>, %arg1: tensor<2x2x1x1xf32>) -> tensor<1x4x4x1xf32> {
%cst = arith.constant dense<0.0> : tensor<1x4x4x1xf32>
%0 = linalg.generic {
indexing_maps = [affine_map<(d0, d1, d2, d3, d4, d5) -> (d0, d1 + d4, d2 + d5, d3)>,
affine_map<(d0, d1, d2, d3, d4, d5) -> (d4, d5, d3, 0)>,
affine_map<(d0, d1, d2, d3, d4, d5) -> (d0, d1, d2, d3)>],
iterator_types = ["parallel", "parallel", "parallel", "parallel", "reduction", "reduction"]
} ins(%arg0, %arg1 : tensor<1x5x5x1xf32>, tensor<2x2x1x1xf32>) outs(%cst : tensor<1x4x4x1xf32>) {
^bb0(%in: f32, %w: f32, %out: f32):
%mul = arith.mulf %in, %w : f32
%add = arith.addf %out, %mul : f32
linalg.yield %add : f32
} -> tensor<1x4x4x1xf32>
return %0 : tensor<1x4x4x1xf32>
}
```
```bash
mlir-opt: /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1312: bool mlir::linalg::isDimSequencePreserved(AffineMap, ReassociationIndicesRef): Assertion `indexingMap.isProjectedPermutation() && "expected indexing map to be projected permutation"' 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: mlir-opt test.mlir --test-linalg-elementwise-fusion-patterns=collapse-dimensions-control=2,3 --convert-gpu-to-nvvm
#0 0x000064d7565e387d llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /llvm/lib/Support/Unix/Signals.inc:842:11
#1 0x000064d7565e3dab PrintStackTraceSignalHandler(void*) /llvm/lib/Support/Unix/Signals.inc:924:1
#2 0x000064d7565e1c64 llvm::sys::RunSignalHandlers() /llvm/lib/Support/Signals.cpp:108:5
#3 0x000064d7565e4449 SignalHandler(int, siginfo_t*, void*) /llvm/lib/Support/Unix/Signals.inc:429:38
#4 0x00007891c4c45330 (/lib/x86_64-linux-gnu/libc.so.6+0x45330)
#5 0x00007891c4c9eb2c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#6 0x00007891c4c9eb2c __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#7 0x00007891c4c9eb2c pthread_kill ./nptl/pthread_kill.c:89:10
#8 0x00007891c4c4527e raise ./signal/../sysdeps/posix/raise.c:27:6
#9 0x00007891c4c288ff abort ./stdlib/abort.c:81:7
#10 0x00007891c4c2881b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#11 0x00007891c4c3b517 (/lib/x86_64-linux-gnu/libc.so.6+0x3b517)
#12 0x000064d7611e7279 mlir::linalg::isDimSequencePreserved(mlir::AffineMap, llvm::ArrayRef<long>) /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1314:36
#13 0x000064d7611ef043 mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)::operator()(llvm::ArrayRef<long>) const /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1352:7
#14 0x000064d7611eeff6 bool __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>::operator()<llvm::SmallVector<long, 2u> const*>(llvm::SmallVector<long, 2u> const*) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/predefined_ops.h:395:11
#15 0x000064d7611eef57 llvm::SmallVector<long, 2u> const* std::__find_if<llvm::SmallVector<long, 2u> const*, __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>>(llvm::SmallVector<long, 2u> const*, llvm::SmallVector<long, 2u> const*, __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>, std::random_access_iterator_tag) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algobase.h:2102:8
#16 0x000064d7611eed92 llvm::SmallVector<long, 2u> const* std::__find_if_not<llvm::SmallVector<long, 2u> const*, __gnu_cxx::__ops::_Iter_pred<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>>(llvm::SmallVector<long, 2u> const*, llvm::SmallVector<long, 2u> const*, __gnu_cxx::__ops::_Iter_pred<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:112:7
#17 0x000064d7611eed3a llvm::SmallVector<long, 2u> const* std::find_if_not<llvm::SmallVector<long, 2u> const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>(llvm::SmallVector<long, 2u> const*, llvm::SmallVector<long, 2u> const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:519:7
#18 0x000064d7611eecd5 bool std::all_of<llvm::SmallVector<long, 2u> const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>(llvm::SmallVector<long, 2u> const*, llvm::SmallVector<long, 2u> const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:459:24
#19 0x000064d7611eec8e bool llvm::all_of<llvm::ArrayRef<llvm::SmallVector<long, 2u>>&, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)>(llvm::ArrayRef<llvm::SmallVector<long, 2u>>&, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const::'lambda'(llvm::ArrayRef<long>)) /llvm/include/llvm/ADT/STLExtras.h:1738:3
#20 0x000064d7611eec48 mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0::operator()(mlir::AffineMap) const /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1351:5
#21 0x000064d7611eec08 bool __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>::operator()<mlir::AffineMap const*>(mlir::AffineMap const*) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/predefined_ops.h:395:11
#22 0x000064d7611eeb25 mlir::AffineMap const* std::__find_if<mlir::AffineMap const*, __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>>(mlir::AffineMap const*, mlir::AffineMap const*, __gnu_cxx::__ops::_Iter_negate<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>, std::random_access_iterator_tag) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algobase.h:2092:8
#23 0x000064d7611ee9b2 mlir::AffineMap const* std::__find_if_not<mlir::AffineMap const*, __gnu_cxx::__ops::_Iter_pred<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>>(mlir::AffineMap const*, mlir::AffineMap const*, __gnu_cxx::__ops::_Iter_pred<mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:112:7
#24 0x000064d7611ee95a mlir::AffineMap const* std::find_if_not<mlir::AffineMap const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>(mlir::AffineMap const*, mlir::AffineMap const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:519:7
#25 0x000064d7611ee8f5 bool std::all_of<mlir::AffineMap const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>(mlir::AffineMap const*, mlir::AffineMap const*, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0) /usr/lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/bits/stl_algo.h:459:24
#26 0x000064d7611e75ce bool llvm::all_of<llvm::ArrayRef<mlir::AffineMap>&, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0>(llvm::ArrayRef<mlir::AffineMap>&, mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>)::$_0) /llvm/include/llvm/ADT/STLExtras.h:1738:3
#27 0x000064d7611e757d mlir::linalg::areDimSequencesPreserved(llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<llvm::SmallVector<long, 2u>>) /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:1350:3
#28 0x000064d761206336 (anonymous namespace)::CollapseLinalgDimensions<mlir::linalg::GenericOp>::matchAndRewrite(mlir::linalg::GenericOp, mlir::PatternRewriter&) const /mlir/lib/Dialect/Linalg/Transforms/ElementwiseOpFusion.cpp:2210:9
#29 0x000064d7567f4eab mlir::detail::OpOrInterfaceRewritePatternBase<mlir::linalg::GenericOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const /mlir/include/mlir/IR/PatternMatch.h:299:12
#30 0x000064d76499c228 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&)>)::$_0::operator()() const /mlir/lib/Rewrite/PatternApplicator.cpp:223:31
#31 0x000064d76499bed5 void llvm::function_ref<void ()>::callback_fn<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&)>)::$_0>(long) /llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#32 0x000064d756609a19 llvm::function_ref<void ()>::operator()() const /llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#33 0x000064d76499da2b void mlir::MLIRContext::executeAction<mlir::ApplyPatternAction, mlir::Pattern const&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pattern const&) /mlir/include/mlir/IR/MLIRContext.h:291:3
#34 0x000064d76499a2ba 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&)>) /mlir/lib/Rewrite/PatternApplicator.cpp:242:9
#35 0x000064d764952de5 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() /mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:619:17
#36 0x000064d7649520f7 (anonymous namespace)::RegionPatternRewriteDriver::simplify(bool*) &&::$_2::operator()() const /mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:889:31
#37 0x000064d764952065 void llvm::function_ref<void ()>::callback_fn<(anonymous namespace)::RegionPatternRewriteDriver::simplify(bool*) &&::$_2>(long) /llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#38 0x000064d756609a19 llvm::function_ref<void ()>::operator()() const /llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#39 0x000064d76495175b void mlir::MLIRContext::executeAction<(anonymous namespace)::GreedyPatternRewriteIteration, long&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, long&) /mlir/include/mlir/IR/MLIRContext.h:291:3
#40 0x000064d76494f92e (anonymous namespace)::RegionPatternRewriteDriver::simplify(bool*) && /mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:902:3
#41 0x000064d76494f524 mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) /mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp:934:47
#42 0x000064d7567e7c98 (anonymous namespace)::TestLinalgElementwiseFusion::runOnOperation() /mlir/test/lib/Dialect/Linalg/TestLinalgElementwiseFusion.cpp:273:18
#43 0x000064d764a5ce74 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_3::operator()() const /mlir/lib/Pass/Pass.cpp:0:19
#44 0x000064d764a5ce15 void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_3>(long) /llvm/include/llvm/ADT/STLFunctionalExtras.h:46:5
#45 0x000064d756609a19 llvm::function_ref<void ()>::operator()() const /llvm/include/llvm/ADT/STLFunctionalExtras.h:69:5
#46 0x000064d764a6031b void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /mlir/include/mlir/IR/MLIRContext.h:291:3
#47 0x000064d764a542be mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /mlir/lib/Pass/Pass.cpp:619:17
#48 0x000064d764a549da mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /mlir/lib/Pass/Pass.cpp:688:16
#49 0x000064d764a5ec88 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_12::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /mlir/lib/Pass/Pass.cpp:1001:36
#50 0x000064d764a5eb20 auto void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_12>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncI<truncated>Please see the issue for the entire body.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs