Issue |
149325
|
Summary |
[MLIR] crash in `-convert-vector-to-llvm` pass with assertion failure
|
Labels |
mlir
|
Assignees |
|
Reporter |
sweead
|
test commit: [66da9f38f](https://github.com/llvm/llvm-project/commit/66da9f38f374e786b2f1c0ecdab0b651c94c4f27)
Step to reproduce:
```
mlir-opt test.mlir --convert-vector-to-llvm
```
test case:
```
module {
llvm.func @malloc(i64) -> !llvm.ptr
func.func @main(%arg0: tensor<14x62x54xi8>, %arg1: tensor<f32>) {
%cst = arith.constant dense<false> : vector<128xi1>
%0 = llvm.mlir.poison : vector<128xi8>
%1 = llvm.mlir.constant(0 : i32) : i32
%2 = llvm.mlir.poison : vector<128xi32>
%3 = llvm.mlir.zero : !llvm.ptr
%4 = llvm.mlir.constant(62 : index) : i64
%cst_0 = arith.constant dense_resource<__elided__> : vector<128xi32>
%5 = llvm.mlir.constant(dense<1> : vector<128xi8>) : vector<128xi8>
affine.for %arg2 = 0 to 54 {
affine.for %arg3 = 0 to 62 step 128 {
%6 = builtin.unrealized_conversion_cast %arg3 : index to i32
%7 = builtin.unrealized_conversion_cast %arg3 : index to i64
%8 = spirv.ISub %1, %6 : i32
%9 = llvm.insertelement %8, %2[%1 : i32] : vector<128xi32>
%10 = vector.extract_strided_slice %9 {offsets = [0], sizes = [4], strides = [1]} : vector<128xi32> to vector<4xi32>
%11 = vector.extract_strided_slice %cst_0 {offsets = [0], sizes = [4], strides = [1]} : vector<128xi32> to vector<4xi32>
%12 = spirv.SGreaterThan %10, %11 : vector<4xi32>
%13 = vector.insert_strided_slice %12, %cst {offsets = [0], strides = [1]} : vector<4xi1> into vector<128xi1>
%14 = llvm.getelementptr %3[%4] : (!llvm.ptr, i64) -> !llvm.ptr, i8
llvm.intr.masked.store %5, %14, %13 {alignment = 1 : i32} : vector<128xi8>, vector<128xi1> into !llvm.ptr
}
}
return
}
}
```
Crash backtrace:
```
mlir-opt: /home/workdir/llvm-project/llvm/include/llvm/Support/Casting.h:572: decltype(auto) llvm::cast(From &) [To = mlir::DenseElementsAttr, From = mlir::Attribute]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: mlir-opt test.mlir --convert-vector-to-llvm
#0 0x00005557036b9138 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x18bf138)
#1 0x00005557036b67b5 llvm::sys::RunSignalHandlers() (/home/workdir/llvm-project/build/bin/mlir-opt+0x18bc7b5)
#2 0x00005557036ba251 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007f5fd1325520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f5fd13799fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x00007f5fd1325476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x00007f5fd130b7f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x00007f5fd130b71b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x00007f5fd131ce96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x00005557068305d4 (/home/workdir/llvm-project/build/bin/mlir-opt+0x4a365d4)
#10 0x000055570683009e mlir::vector::ShuffleOp::fold(mlir::vector::ShuffleOpGenericAdaptor<llvm::ArrayRef<mlir::Attribute>>) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4a3609e)
#11 0x00005557068ec165 llvm::LogicalResult mlir::Op<mlir::vector::ShuffleOp, mlir::OpTrait::ZeroRegions, mlir::OpTrait::OneResult, mlir::OpTrait::OneTypedResult<mlir::VectorType>::Impl, mlir::OpTrait::ZeroSuccessors, mlir::OpTrait::NOperands<2u>::Impl, mlir::OpTrait::OpInvariants, mlir::BytecodeOpInterface::Trait, mlir::ConditionallySpeculatable::Trait, mlir::OpTrait::AlwaysSpeculatableImplTrait, mlir::MemoryEffectOpInterface::Trait, mlir::InferTypeOpInterface::Trait, mlir::OpTrait::InferTypeOpAdaptor>::foldSingleResultHook<mlir::vector::ShuffleOp>(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4af2165)
#12 0x00005557068eaea5 mlir::RegisteredOperationName::Model<mlir::vector::ShuffleOp>::foldHook(mlir::Operation*, llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x4af0ea5)
#13 0x00005557070f90dd mlir::Operation::fold(llvm::ArrayRef<mlir::Attribute>, llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x52ff0dd)
#14 0x00005557070f9473 mlir::Operation::fold(llvm::SmallVectorImpl<mlir::OpFoldResult>&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x52ff473)
#15 0x0000555706fd72e4 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#16 0x0000555706fd4393 mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x51da393)
#17 0x0000555706eb85f1 (anonymous namespace)::ConvertVectorToLLVMPass::runOnOperation() ConvertVectorToLLVMPass.cpp:0:0
#18 0x0000555706f561a3 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/home/workdir/llvm-project/build/bin/mlir-opt+0x515c1a3)
#19 0x0000555706f56a42 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x515ca42)
#20 0x0000555706f5921e mlir::PassManager::run(mlir::Operation*) (/home/workdir/llvm-project/build/bin/mlir-opt+0x515f21e)
#21 0x0000555706f5118b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#22 0x0000555706f50de4 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
#23 0x0000555707000ce5 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) (/home/workdir/llvm-project/build/bin/mlir-opt+0x5206ce5)
#24 0x0000555706f49fd2 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x514ffd2)
#25 0x0000555706f4a288 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x5150288)
#26 0x0000555706f4a4a2 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/home/workdir/llvm-project/build/bin/mlir-opt+0x51504a2)
#27 0x0000555703697b07 main (/home/workdir/llvm-project/build/bin/mlir-opt+0x189db07)
#28 0x00007f5fd130cd90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#29 0x00007f5fd130ce40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#30 0x00005557036975a5 _start (/home/workdir/llvm-project/build/bin/mlir-opt+0x189d5a5)
Aborted (core dumped)
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs