<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/60199>60199</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Convert-scf-to-spirv crashed with UNREACHABLE " invalid bitwidth to getCapabilities" on unsupported_float_type
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Colloportus0
      </td>
    </tr>
</table>

<pre>
    MLIR built at commit https://github.com/llvm/llvm-project/commit/97a1c98f
Reproduced with: 
`mlir-opt --convert-scf-to-spirv temp.mlir`

temp.mlir:
``` milr 
func.func @unsupported_float_type(%arg0 : f80) {
 return
}
```
 
trace:
```console  
invalid bitwidth to getCapabilities
UNREACHABLE executed at /Users/haoyu/workspace/mlir-fuzz/mlir/lib/Dialect/SPIRV/IR/SPIRVTypes.cpp:704!
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 --convert-scf-to-spirv temp.mlir
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  mlir-opt 0x000000010487f8c4 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  mlir-opt                 0x000000010487e92c llvm::sys::RunSignalHandlers() + 112
2  mlir-opt 0x000000010487ff5c SignalHandler(int) + 344
3  libsystem_platform.dylib 0x00000001aad414c4 _sigtramp + 56
4  libsystem_pthread.dylib 0x00000001aad29ee0 pthread_kill + 288
5  libsystem_c.dylib 0x00000001aac64340 abort + 168
6  mlir-opt 0x0000000104846628 llvm::install_out_of_memory_new_handler() + 0
7 mlir-opt                 0x000000010570d2a4 mlir::spirv::ScalarType::getCapabilities(llvm::SmallVectorImpl<llvm::ArrayRef<mlir::spirv::Capability>>&, std::__1::optional<mlir::spirv::StorageClass>) + 1420
8  mlir-opt 0x0000000105719fc4 convertScalarType(mlir::spirv::TargetEnv const&, mlir::SPIRVConversionOptions const&, mlir::spirv::ScalarType, std::__1::optional<mlir::spirv::StorageClass>) + 144
9  mlir-opt 0x000000010571a73c std::__1::__function::__func<std::__1::enable_if<std::is_invocable_v<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3, mlir::FloatType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::FloatType, std::__1::enable_if<std::is_invocable_v<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3, mlir::FloatType>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::FloatType, mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3&&)::'lambda'(mlir::FloatType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>), std::__1::allocator<std::__1::enable_if<std::is_invocable_v<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3, mlir::FloatType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::FloatType, std::__1::enable_if<std::is_invocable_v<mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3, mlir::FloatType>, std::__1::function<std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>>::type mlir::TypeConverter::wrapCallback<mlir::FloatType, mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3&&)::'lambda'(mlir::FloatType, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>(mlir::SPIRVTypeConverter::SPIRVTypeConverter(mlir::spirv::TargetEnvAttr, mlir::SPIRVConversionOptions const&)::$_3&&)::'lambda'(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>, std::__1::optional<mlir::LogicalResult> (mlir::Type, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>)>::operator()(mlir::Type&&, llvm::SmallVectorImpl<mlir::Type>&, llvm::ArrayRef<mlir::Type>&&) + 176
10 mlir-opt                 0x0000000105f2e8b8 mlir::TypeConverter::convertType(mlir::Type, llvm::SmallVectorImpl<mlir::Type>&) + 764
11 mlir-opt 0x0000000105f32db8 mlir::TypeConverter::convertType(mlir::Type) + 64
12 mlir-opt                 0x000000010571c69c (anonymous namespace)::FuncOpConversion::matchAndRewrite(mlir::func::FuncOp, mlir::func::FuncOpAdaptor, mlir::ConversionPatternRewriter&) const + 204
13 mlir-opt                 0x000000010571c4d8 mlir::OpConversionPattern<mlir::func::FuncOp>::matchAndRewrite(mlir::Operation*, llvm::ArrayRef<mlir::Value>, mlir::ConversionPatternRewriter&) const + 168
14 mlir-opt                 0x0000000105f32af8 mlir::ConversionPattern::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const + 200
15 mlir-opt 0x000000010619b53c mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<mlir::LogicalResult (mlir::Pattern const&)>) + 1420
16 mlir-opt                 0x0000000105f3dba4 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) + 1948
17 mlir-opt 0x0000000105f367e8 (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) + 936
18 mlir-opt 0x0000000105f388d8 mlir::applyPartialConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&, llvm::DenseSet<mlir::Operation*, llvm::DenseMapInfo<mlir::Operation*, void>>*) + 80
19 mlir-opt                 0x0000000105b5f790 (anonymous namespace)::SCFToSPIRVPass::runOnOperation() + 340
20 mlir-opt 0x0000000105efb518 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) + 428
21 mlir-opt                 0x0000000105efba48 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) + 320
22 mlir-opt                 0x0000000105efd3c4 mlir::PassManager::run(mlir::Operation*) + 1148
23 mlir-opt 0x0000000105ef6788 performActions(llvm::raw_ostream&, bool, bool, std::__1::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) + 504
24 mlir-opt                 0x0000000105ef6358 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::$_0>(long, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) + 704
25 mlir-opt                 0x0000000105f6104c mlir::splitAndProcessBuffer(std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) + 656
26 mlir-opt 0x0000000105ef4780 mlir::MlirOptMain(llvm::raw_ostream&, std::__1::unique_ptr<llvm::MemoryBuffer, std::__1::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool) + 216
27 mlir-opt                 0x0000000105ef4c74 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) + 1208
28 mlir-opt 0x0000000104721cf0 main + 108
29 dyld 0x00000001098c1088 start + 516

```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWttP4zoa_2vCiwVKnDSXBx5KoRokWFDLGWn3JXIcp_WOY2dtB6bz16_sJG3SplDmzI44exiNaBt__i6_7-bYRkrRFSfk0plcOZPrM1TrtZCXM8GYqITUtXLPMpFvLu_vbhcgqynTAGmARVlSDdZaV8rxpw6cO3C-onpdZxdYlA6cM_bcfZxXUvybYO3AeTPPgfMkQh5O4sJxrx13uiCVFHmNSQ5eqF47_hQ0A07olozKc1FpcH6OBX8mUp8rXJxrca4qKp-BJmV1YYic0G0n2b-75_50y6z5D0rKZCuhqDm-MH-AE7g1V3VlzCZ5WjCBdKo3FXFg7MAJkisXGM2K2HVgApzoquEAJNG15K2M6HpPWEvUKiURJocKYcGVYAS0VJQ_I0ZzkFH9QnO9BlqAFdEzVKGMMqopUQ3hH_9Y3ExnX6ZXdzeAfCe41iQ37nHg_A9FpHLgfI3Epnbg_EXIb6oy0uHcQlrUP360342faObA-TVFrHHU8vF28dWB89tF9-NpUxF1gavK8aeRGzjQa3R4vLuZLm-AqjMTEQhk9QpIYkA0ar87QqhSNTGKA8RzQDlmdU6AXhOAJVJrkCH8zaJ40YhfaoS_gbwuqy2s7oXjJo9SrCQqAZKruiRcGyXA6bG0x9uGpag1UJsyEwxwVBIFHBgTrmpJwEbUYI2eCbDWNET0B5GAcjMmweP06QsQEiiirTGEP1MpuNEMPCMJnNC9u_t6ny7_eX_1cHf7r5tFaqaYYNUCVIJyC6fJnWRnKNhZ5H53m3-eG8RREePA6mJo_anaqObLo6RcW7OebCTCeEck0UsqlJYElQ4MHTgDlGsb6fAKTMJGpNcTuf9vqAJJIB5TYVHzJV1xxL4gnjMbpHEnxfNgIwYet6yYYDBg4MC4p6gfBA0LHwBGM7VRmpRpxZAuhCwv8g2jWY8lQnngBTgAqaIrLVFZDcwNBkz0WhKUj_GACSEuaAnSb5QxywbGccNn0ueDRzjgMPADF6DM5I2FImynhsegCMIQxj2EKVcaMZaKWqeiSEtSCrlJOXlJ11ugOpTaqhSd5MxJ5OYQBaArpv7UZkvzdYkRQ9IUh-b3fp3qR9iyRIx9JVgLeVtWzPFnu7GplGizIIXjz0blbJluHP_G_G9CVOm8GU9Tr_kiKk0FR-wYo6UWEq3IjCGlLJ829ALYghKPAz6JvKTAAWgLR89uGI8KekJyRfQNfzZTlG4V3pHaqjqz3BQV_MHqrY4QjyP-awFoEyc5aj-KfDwiME1N_zRC-78df3ZISjjKGElp0R-lKqX8WWA79DxQe9t5Gpw0Of78LS9MtZbvdEDS0DkwSP3h1LlZHHQueC3Ad1OaFOni9o3A74gN_ZiPd4CPgDwaAHdiRTFiC6Jqph3_BgwA-w2mGDStQfapWVeBIdGei18kqmaIMdPwBwwH2P8dQuwzCN4Igg_pTGNt_CE1Mw_6zyKGyixHDowGon9XjWti4q-N1e-BabQKIMYERlrIz4b72XA_G-5nw_1suB9Ns8-G-xdtuMcKwYfO9UZBIu2awG75jCgSHrD-9eq0nmx2F6JuA9E9bc-pgCTO4teLVbsVc7AJ8_NYN8pGYbsV4nnjWyGFD_M_p1wjaCsHnrgR5-EwwSawEBd8U4paNVvRzcZ-mzTzmuOHapdxzdMSabye8nxBXiTVQ52a_Zrd3GEC749Oc1TZ2OoT7cQ9Iq2J5K0c2eJq073ZFHU7q_2TrQ7yPtp941ppA48emNOlxWsYPNiUMXDB6QlR_hWxulsp_AwK2_1dLzgxIXyIivg1We-3cTfyttPa3VFvMpoSoZdkEx8fcpxWFaPt-8mvVa_vom5llkrrpkwINiy_LYNh17l5lcmzoPmfZnKkPZzGd39n2gtPDZU8Q8FbZWKL9h1ZIXta1Txn7c8TXfNWyFsTkqCL9uhYRQ0jEp-s8nit3Q4Pjx1G83dg0Lsj4ZqiFRdKU3zgrsTvOl18zNQ4HpQzVFVs84ikpoj1qvZ74W-WYAcnB3MpfpDOKa2LlkQPzhl2ll8TrsiS6ONYHZLfo-qWF-LVKQbC7v162kEVd3GdnBbX2aSIEvetIFnO5k_CLjof7QmHeSZr_sB7OsW748JWB-iOe4sU2cTreysnGlHWWfkkHiojpuuJnbS9_FbqwHHHXTrliG0UVfeIoxWxfdYUNPNZc3tdI-8fzQawzS3onQYjKTIUvN-kR1oRRvl-XTCkW03DX27jsAsodcuVlvZE36xADtpEnwDtjqQ63R-RJFybaO3ifxuMfldl4YmLMVLkPg72pHf2jMbBEI7uyLsrjdA_FoFhFMegIrIQspziwwJ3eHLfYdl9Hr7CqDWSJE8rLQfHsEtRS0zuV9K8wIwfRd7f3S5mgmvyXR_Ug5_rfsMA6nrq0Ib2GkK3doQnrppIEfqTfqwPFfkZzQ-xrDn9T00OsLy3J_BXdVE0AX44MScFqplOc8KIJscnbzcmj_t89-6H2-2btBiuiu8ZlQ-VvkeUvxE9H8PCXxlLg87NCNYLsqJKy82RfDnts7dx4TZbKkzw1cdB8CBGmrfbbQ5NTlxOhp4b4MFlBEb1lOePUmCiVKf9B8mM_4tMfpVivDaG3aUlGB5rJEEUu-CzIvwPK0Lzsux1njjxghUpAhwFRz3TLoTwGjVLnr2mu9SS8pV5wTnZrnbtAd1u7TH-rhJE0MOFC0pEeTNjOyEB-YblfeIkxp4bx0Bp1N5hm3Q47F13Pcsv_TzxE3RGLr0wCvwggXBytr4McAwjP4pwnMQkx3GeFWGCAuKSooiKKDujl9CFvutB6HquCycXxPWSSQKjSV4EkRdOnMAlJaLswsBzIeTqzF4ovQxdL0nOGMoIU_auM4ScvAA76EDoTK7P5KW9vJnVK-UELqNKqx0XTTWzl6QtvpNrMBu7P2qvqLaXmEH_cq4DITjlVi-EQHAwfg35rJbs8ufv01oE_hsAAP__tmIKIw">