Bitwidth assertion in CGGI materialization
- Dominant language
- MLIR
- Stars
- 906
- Forks
- 171
- Avg merge
- 4d 12h
- Merged PRs (30d)
- 32
Description
**Test commit**
[a413796feb31eb6a1e70160308defe4d0250d09e](https://github.com/google/heir/commit/a413796feb31eb6a1e70160308defe4d0250d09e)
**Description**
The `--arith-to-cggi` pass crashes when attempting to materialize a target conversion for a tensor type.
**Steps to reproduce**
- Minimal MLIR program (test.mlir)
```
"builtin.module"() ({
"func.func"() <{
arg_attrs = [{secret.secret}, {secret.secret}],
function_type = (tensor<4xi16>, tensor<4xi16>) -> tensor<4xi16>,
sym_name = "add"
}> ({
^bb0(%arg0: tensor<4xi16>, %arg1: tensor<4xi16>):
%0 = "arith.addi"(%arg0, %arg1) : (tensor<4xi16>, tensor<4xi16>) -> tensor<4xi16>
%1 = "arith.constant"() <{value = 1 : index}> : () -> index
%2 = "tensor_ext.rotate"(%0, %1) : (tensor<4xi16>, index) -> tensor<4xi16>
"func.return"(%2) : (tensor<4xi16>) -> ()
}) : () -> ()
}) : () -> ()
```
**Command**
```
heir-opt --tensor-linalg-to-affine-loops --arith-to-cggi test.mlir
```
**Output**
```
heir-opt: external/llvm-project/mlir/lib/IR/Types.cpp:123: unsigned int mlir::Type::getIntOrFloatBitWidth() const: Assertion `isIntOrFloat() && "only integers and floats have a bitwidth"' 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: /workdir/heir/bin/heir-opt --tensor-linalg-to-affine-loops --arith-to-cggi test.mlir
#0 0x00005637a9f799c6 ___interceptor_backtrace (/workdir/heir/bin/heir-opt+0x5b549c6)
#1 0x00005637b57321c2 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /proc/self/cwd/external/llvm-project/llvm/lib/Support/Unix/Signals.inc:838:8
#2 0x00005637b5733001 llvm::sys::RunSignalHandlers() /proc/self/cwd/external/llvm-project/llvm/lib/Support/Signals.cpp:105:18
#3 0x00005637b5733001 SignalHandler(int, siginfo_t*, void*) /proc/self/cwd/external/llvm-project/llvm/lib/Support/Unix/Signals.inc:409:3
#4 0x00007fe6f98f0520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#5 0x00007fe6f99449fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#6 0x00007fe6f98f0476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#7 0x00007fe6f98d67f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#8 0x00007fe6f98d671b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#9 0x00007fe6f98e7e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#10 0x00005637b4ec388e decltype(auto) llvm::cast(mlir::Type const&) /proc/self/cwd/external/llvm-project/llvm/include/llvm/Support/Casting.h:566:3
#11 0x00005637b4ec388e mlir::Type::getIntOrFloatBitWidth() const /proc/self/cwd/external/llvm-project/mlir/lib/IR/Types.cpp:126:10
#12 0x00005637aa68c9ec mlir::heir::arith::materializeTarget(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location) /proc/self/cwd/lib/Dialect/Arith/Conversions/ArithToCGGI/ArithToCGGI.cpp:162:9
#13 0x00005637aa0f9c39 std::enable_if, std::function (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)> >::type mlir::TypeConverter::wrapTargetMaterialization, std::function (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)> >::type mlir::TypeConverter::wrapTargetMaterialization(mlir::Value (&)(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location)) const::'lambda'(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location, mlir::Type)>(mlir::Value (&)(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location)) const::'lambda'(mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)::operator()(mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type) const /proc/self/cwd/external/llvm-project/mlir/include/mlir/Transforms/DialectConversion.h:0:0
#14 0x00005637aa0f9985 std::_Function_handler (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type), std::enable_if, std::function (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)> >::type mlir::TypeConverter::wrapTargetMaterialization, std::function (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)> >::type mlir::TypeConverter::wrapTargetMaterialization(mlir::Value (&)(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location)) const::'lambda'(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location, mlir::Type)>(mlir::Value (&)(mlir::OpBuilder&, mlir::Type, mlir::ValueRange, mlir::Location)) const::'lambda'(mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)>::_M_invoke(std::_Any_data const&, mlir::OpBuilder&, mlir::TypeRange&&, mlir::ValueRange&&, mlir::Location&&, mlir::Type&&) /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:290:2
#15 0x00005637b41b041b std::function (mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type)>::operator()(mlir::OpBuilder&, mlir::TypeRange, mlir::ValueRange, mlir::Location, mlir::Type) const /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:590:9
#16 0x00005637b41b041b mlir::TypeConverter::materializeTargetConversion(mlir::OpBuilder&, mlir::Location, mlir::TypeRange, mlir::ValueRange, mlir::Type) const /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:3691:9
#17 0x00005637b41ab18a legalizeUnresolvedMaterialization(mlir::RewriterBase&, mlir::UnrealizedConversionCastOp, (anonymous namespace)::UnresolvedMaterializationInfo const&) /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:3329:39
#18 0x00005637b41ab18a mlir::OperationConverter::convertOperations(llvm::ArrayRef) /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:3423:18
#19 0x00005637b41c95af applyConversion(llvm::ArrayRef, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig, (anonymous namespace)::OpConversionMode)::$_0::operator()() const /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:4107:9
#20 0x00005637b41c95af void llvm::function_ref::callback_fn, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig, (anonymous namespace)::OpConversionMode)::$_0>(long) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#21 0x00005637b41b6633 applyConversion(llvm::ArrayRef, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig, (anonymous namespace)::OpConversionMode) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#22 0x00005637b41b695a mlir::applyPartialConversion(llvm::ArrayRef, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:4120:10
#23 0x00005637b41b695a mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget const&, mlir::FrozenRewritePatternSet const&, mlir::ConversionConfig) /proc/self/cwd/external/llvm-project/mlir/lib/Transforms/Utils/DialectConversion.cpp:4127:10
#24 0x00005637aa690034 mlir::heir::arith::ArithToCGGI::runOnOperation() /proc/self/cwd/lib/Dialect/Arith/Conversions/ArithToCGGI/ArithToCGGI.cpp:729:16
#25 0x00005637b4a59537 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::$_3::operator()() const /proc/self/cwd/external/llvm-project/mlir/lib/Pass/Pass.cpp:610:22
#26 0x00005637b4a59537 void llvm::function_ref::callback_fn(long) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#27 0x00005637b4a47270 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /proc/self/cwd/external/llvm-project/mlir/lib/Pass/Pass.cpp:603:3
#28 0x00005637b4a48d95 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /proc/self/cwd/external/llvm-project/mlir/lib/Pass/Pass.cpp:682:9
#29 0x00005637b4a56b06 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /proc/self/cwd/external/llvm-project/mlir/lib/Pass/Pass.cpp:1117:10
#30 0x00005637b4a55263 mlir::PassManager::run(mlir::Operation*) /proc/self/cwd/external/llvm-project/mlir/lib/Pass/Pass.cpp:0:60
#31 0x00005637adb374b1 performActions(llvm::raw_ostream&, std::shared_ptr const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:568:7
#32 0x00005637adb3578e processBuffer(llvm::raw_ostream&, std::unique_ptr >, llvm::MemoryBufferRef, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, mlir::SourceMgrDiagnosticVerifierHandler*, llvm::ThreadPoolInterface*) /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:0:12
#33 0x00005637adb3578e mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0::operator()(std::unique_ptr >, llvm::MemoryBufferRef, llvm::raw_ostream&) const /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:733:12
#34 0x00005637adb3578e llvm::LogicalResult llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::callback_fn >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::$_0>(long, std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#35 0x00005637b4ef8a79 llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>::operator()(std::unique_ptr >, llvm::MemoryBufferRef const&, llvm::raw_ostream&) const /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:69:0
#36 0x00005637b4ef8a79 mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0::operator()(llvm::StringRef) const /proc/self/cwd/external/llvm-project/mlir/lib/Support/ToolUtilities.cpp:94:13
#37 0x00005637b4ef7cef void llvm::interleave >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, void llvm::interleave, mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, llvm::raw_ostream, llvm::StringRef>(llvm::SmallVector const&, llvm::raw_ostream&, mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, llvm::StringRef const&)::'lambda'(), void>(llvm::SmallVector, llvm::SmallVector, mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, llvm::raw_ostream) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2179:16
#38 0x00005637b4ef7cef void llvm::interleave, mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, llvm::raw_ostream, llvm::StringRef>(llvm::SmallVector const&, llvm::raw_ostream&, mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef)::$_0, llvm::StringRef const&) /proc/self/cwd/external/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2199:3
#39 0x00005637b4ef7cef mlir::splitAndProcessBuffer(std::unique_ptr >, llvm::function_ref >, llvm::MemoryBufferRef const&, llvm::raw_ostream&)>, llvm::raw_ostream&, llvm::StringRef, llvm::StringRef) /proc/self/cwd/external/llvm-project/mlir/lib/Support/ToolUtilities.cpp:97:3
#40 0x00005637adb2dfff mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr >, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:738:26
#41 0x00005637adb2eb99 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:784:0
#42 0x00005637adb2f3ce mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /proc/self/cwd/external/llvm-project/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:800:10
#43 0x00005637aa015be1 mlir::asMainReturnCode(llvm::LogicalResult) /proc/self/cwd/external/llvm-project/mlir/include/mlir/Tools/mlir-opt/MlirOptMain.h:0:0
#44 0x00005637aa015be1 main /proc/self/cwd/tools/heir-opt.cpp:463:10
#45 0x00007fe6f98d7d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#46 0x00007fe6f98d7e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#47 0x00005637a9f33025 _start (/workdir/heir/bin/heir-opt+0x5b0e025)
Aborted
```
Contributor guide
Assessment
This issue has not been assessed yet.