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

    <tr>
        <th>Summary</th>
        <td>
            [MLIR]Error in Lowering tosa to linalg
        </td>
    </tr>

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

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

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

<pre>
    Hello, I am trying to lower [release/15.x/mlir/test/Dialect/Tosa/ops.mlir](https://github.com/llvm/llvm-project/blob/release/15.x/mlir/test/Dialect/Tosa/ops.mlir), but the execution crashed with the following crash backtrace:
```
mlir-opt: /home/data/mlir/lib/IR/Types.cpp:94: 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.
Stack dump:
0.      Program arguments: ./mlir-opt /home/ty/ops_69.mlir -pass-pipeline=builtin.module(func.func(tosa-to-linalg))
 #0 0x0000564dff8886ea llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x1a76ea)
 #1 0x0000564dff885cfc SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f50cc999980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
 #3 0x00007f50cba91e87 raise /build/glibc-CVJwZb/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
 #4 0x00007f50cba937f1 abort /build/glibc-CVJwZb/glibc-2.27/stdlib/abort.c:81:0
 #5 0x00007f50cba833fa __assert_fail_base /build/glibc-CVJwZb/glibc-2.27/assert/assert.c:89:0
 #6 0x00007f50cba83472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
 #7 0x0000564e010aa372 mlir::Type::getIntOrFloatBitWidth() const (./mlir-opt+0x19c9372)
 #8 0x0000564e00b27352 (anonymous namespace)::RescaleConverter::matchAndRewrite(mlir::tosa::RescaleOp, mlir::PatternRewriter&) const::'lambda0'(mlir::OpBuilder&, mlir::Location, mlir::ValueRange)::operator()(mlir::OpBuilder&, mlir::Location, mlir::ValueRange) const TosaToLinalg.cpp:0:0
 #9 0x0000564dffd43f9c buildGenericRegion(mlir::OpBuilder&, mlir::Location, mlir::Region&, mlir::ValueRange, mlir::ValueRange, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location, mlir::ValueRange)>) LinalgOps.cpp:0:0
#10 0x0000564dffd6470a mlir::linalg::GenericOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::TypeRange, mlir::ValueRange, mlir::ValueRange, llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<mlir::utils::IteratorType>, llvm::StringRef, llvm::StringRef, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location, mlir::ValueRange)>, llvm::ArrayRef<mlir::NamedAttribute>) (./mlir-opt+0x68370a)
#11 0x0000564dffd6487a mlir::linalg::GenericOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::TypeRange, mlir::ValueRange, mlir::ValueRange, llvm::ArrayRef<mlir::AffineMap>, llvm::ArrayRef<mlir::utils::IteratorType>, llvm::function_ref<void (mlir::OpBuilder&, mlir::Location, mlir::ValueRange)>, llvm::ArrayRef<mlir::NamedAttribute>) (./mlir-opt+0x68387a)
#12 0x0000564e00b485ba (anonymous namespace)::RescaleConverter::matchAndRewrite(mlir::tosa::RescaleOp, mlir::PatternRewriter&) const TosaToLinalg.cpp:0:0
#13 0x0000564e00b1ef76 mlir::detail::OpOrInterfaceRewritePatternBase<mlir::tosa::RescaleOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (./mlir-opt+0x143df76)
#14 0x0000564e012d12cd 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&)>) (./mlir-opt+0x1bf02cd)
#15 0x0000564e00f89d17 (anonymous namespace)::OperationLegalizer::legalize(mlir::Operation*, mlir::ConversionPatternRewriter&) DialectConversion.cpp:0:0
#16 0x0000564e00f8a70f (anonymous namespace)::OperationConverter::convertOperations(llvm::ArrayRef<mlir::Operation*>, llvm::function_ref<void (mlir::Diagnostic&)>) DialectConversion.cpp:0:0
#17 0x0000564e00f8e31f mlir::applyFullConversion(mlir::Operation*, mlir::ConversionTarget&, mlir::FrozenRewritePatternSet const&) (./mlir-opt+0x18ad31f)
#18 0x0000564e00b14d7b (anonymous namespace)::TosaToLinalg::runOnOperation() TosaToLinalgPass.cpp:0:0
#19 0x0000564e00f14319 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x1833319)
#20 0x0000564e00f14620 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x1833620)
#21 0x0000564e00f14960 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const Pass.cpp:0:0
#22 0x0000564e00f13465 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) (./mlir-opt+0x1832465)
#23 0x0000564e00f14282 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x1833282)
#24 0x0000564e00f150a9 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (.constprop.489) Pass.cpp:0:0
#25 0x0000564e00f157dd mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x18347dd)
#26 0x0000564e00f0758b performActions(llvm::raw_ostream&, bool, bool, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, bool, bool) (.constprop.273) MlirOptMain.cpp:0:0
#27 0x0000564e00f07c88 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, bool, bool, bool, bool, bool, bool, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, llvm::ThreadPool*) MlirOptMain.cpp:0:0
#28 0x0000564e00f0808f mlir::LogicalResult llvm::function_ref<mlir::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>>, llvm::function_ref<mlir::LogicalResult (mlir::PassManager&)>, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) MlirOptMain.cpp:0:0
#29 0x0000564e00fc93b0 mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) (./mlir-opt+0x18e83b0)
#30 0x0000564e00f06446 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::PassPipelineCLParser const&, mlir::DialectRegistry&, bool, bool, bool, bool, bool, bool, bool, bool) (./mlir-opt+0x1825446)
#31 0x0000564e00f084cb mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&, bool) (./mlir-opt+0x18274cb)
#32 0x0000564dff855360 main (./mlir-opt+0x174360)
#33 0x00007f50cba74c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#34 0x0000564dff867dea _start (./mlir-opt+0x186dea)
Aborted (core dumped)
```
You can use cmd ```mlir-opt -pass-pipeline="builtin.module(func.func(tosa-to-linalg))"```  on following IR to reproduce the issue:
```
func.func @test_rescale(%arg0: tensor<13x21x3x!quant.uniform<u8:f32, 0.015655439347028732:127>>) -> tensor<13x21x3x!quant.uniform<i8:f32, 0.015655439347028732:-1>> {
    %0 = "tosa.rescale"(%arg0) {double_round = false, input_zp = 127 : i32, multiplier = [1073741824 : i32], output_zp = -1 : i32, per_channel = false, scale32 = true, shift = [30 : i32]} : (tensor<13x21x3x!quant.uniform<u8:f32, 0.015655439347028732:127>>) -> tensor<13x21x3x!quant.uniform<i8:f32, 0.015655439347028732:-1>>
    return %0 : tensor<13x21x3x!quant.uniform<i8:f32, 0.015655439347028732:-1>>
}
```
commit: [902614d2](https://github.com/llvm/llvm-project/commit/902614d2542d0aba4b6a5829eb7ea5dd8056fcb0)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWl1z2zaX_jXwDcYaEuDnhS9kO9p6J157nEx3tjcaEAAlbCGABcDY6q9_ByAlkbQUy2napu-8mSQSSeB8POfBAQ51iLVipTi_Auk1SG8vSOvW2lxdcyJ_4c16ay4qzbZXP3EpNUA38A6SDXRmK9QKOg2lfuYGgvTacMmJ5QAt4nT2AtBiI4UBaOG4dQAtbgWRnPpvn7UlAC10Y2dhSHoLULF2rrEAzwFaALRYCbduqxnVG4AWUn7ZfVw2Rv9_J6WSugJo8c1aUemdqVoH3ZpD_sJp64RWkBpi15zBZ-HW4VGtpdTP3tvwCFaE_uoModxbG92CaA6yqP8bLr34S904gOcQoMVab7x5jDhyME8Kb_zdkzds23A7o00D8LxM_KRWhYgwKJSDYQKeAzz3A7tvK-7ulHswC6mJuxbufwVza4AKgEpItbJB9dxaboJLIIuEPUzoBwKUAZRBgJBWcut18RU3FhLFYO3HWbgmXzgksBLuudOAAMphTYTkbNY5-_jxw_zTB2jbaiOcH9uuoOGNNs6T491RFda23AK0CGYIRWXLeAjDBPxe_SdH6K-QtZtmH41oBqLy0eiVIRtIzKrdcOW8EXDW4--DM4iM23a8WGZloAa8bIi1l41ouBSKA3xbtUI6oWYbzVrJASrqVtGZ_w-gwmlLLp2-lEIRuQq8KjtLIEA4gtFLFEVRmiWsrouiyDiBwfcQSbu13ZdHI5QL3nwO3ELFYZAhz0ttneFkE4J244PVhbAY-gTQdfQSkzzjZGRDPLEhpTWFn8RKEfkTUUxyA1DRi-xu7_gYhX97QagXlNdpRGlZlmURweXScOu04UvjUS327H4psmWWeFzal8uVarsHjVsbTtjM6lnUGYzKIhrZi4dqKlLGvMihIcJyHzUfDObZJEVFL29-_u_nX6r9JZqhHKCFDV4AtJh5fOzWMt54VrVKvHQ3vgRrVOsvg-gZBXiexmOHk4klOK9jSCodPD3PEsc6NMKsoKSYKEnHSgqMawKXSxLW79KvtmVFzve9m7f_0qksxyqzqcokR2fEjvqoZSFqOEpyNIpafmAZj-KIEJyjb8tex3ld0hJPVBZDlVGFcpwGN4jSarvRrYWKbLhtwoIqO-1P3FIi-Y1WX7hxvLduQxxdzxV74s9GOL_8Dpb7BT6a-9D4NXgY8Eic40b1c01Yo4dEHNJfLsmmYiQCPkQD2Q_NtQ9pP2ko9KOmxGfv8d2fiWz5E1Grg0O64YY4bToEv5_0PhZ-3_ysP4bkdjwrlKP0whJclxQGpv4XV9wI-sRXQdUfsGwnIjtt8On7h0zqU7YXvjS8BvjmixYMfs94fPC4dVg9NEeSqE_G4x2BZUkekYHEfhsJ33v8Hprusl_9Z5n7EFghtPrkiOfz5LFfjW_i9jaec2PI9ilgeRg8r2uh-D1pAh5vDm-dkP0meOc6Kne5YjL5kzNCrfzsc27_BZF-07P_IRvO5s4ZUbWO9-w4ltuyAufRYc_2LImnLCny_7DkDJb80-Je5OO4o_GWlhRpRX6sLe2NHcE7gcdOxLzOs4Fwxh0RcheOB3OnHDc1obxX1yu_9nXdENdjVuMPb3u7ZzlA8_PdPHoISTCr82wUsWR07kEsRpS9VjFvGilo2Ke_s71fYX-ltRyzvxfQH06Cu-9fQt8gZLjKVoIS-cRtK915ck8UOlUdIcpGsUhHxKuLksX5W6tnj_ZHviJS_L5bP7K_PDM03eqzQqvjpOrfRByGHV862cQDkkf12R5MMgDtLveP7aiqPJq6Rv69mxi3gqyUtk7QUfTOdD2fuM5xXA8AJk0jt4tWyoOcd4fmMzEr7l5l_oXRv3M1zj6fuBsS8TgFC8JwXI8oOKlJ4oTl1VsBHGbUvuRv1YMaeBSKo-GwR2JPnC_LMYxx4m-dSr6f9UPjRc0Zafa5ybRqsi6tfQXqabjnisitFfaeKLLy_L-BPhH5z-GbrdOgYozjcggqiqY-ZSh6t0-Puxc6Y9b4oXtTT52Pvt3Jcfq29k5ZZ8I7KV-yvcrvwwGd5u5Bb_sjMVy5O1XrHTnnX8MxQ9EIx3iKY5m9H8cBMed2q-jdppEAFZ375aTinRa830_FQ_N474HYpZo3auE_S3F_Wji5HhGaYI6TLP3OmJ-KP0qydBR_PI0_KtA_LTegAo18SiY-pRF5f777N88N4boxupklhc-sX6FrOoUzZ2xixc6vo4QYw3IyjEnORkc3NDn4RHlaVLDhptZmM6evjy-vX4rvMN59Wse6oXZNDGfLxhmAbwZvDnRrKL9fGYA_DLb6Ieb3H--ebrRy_MX18fijJ9wxn3bn5rHp05ihHPub91KYh8bdE3H8AIXyKYS0KGBjNOXWXrd1Hd7zfw3BPWKtEr-1_BVi93yjzXYnajCe8Zq00i0Zl9xXvKfm-GrtiMNvf_45sI9Orv6I-sRXwjqzfVVYfQ4_WjwGa-ZnBaOYBKOIihqesvZb3PvrgnWaMuW-_qZEyorQX5e1Gpk9wOmHId_fQ6b3Uv5r56kfJvaokFqt_q7wvTLp7WU5qY5oiavhCdg2Uri5Yo-TrPljk_OHwP7NEce3uddnA17galS24En5F2VJMnyf-CPmmHG-2B3Rbj4-EmO5OXHc-J6J4y2UUZokoxeZOJ7uWAmtTqLcn1_pmnQn1flXfpU5z8GThuYJrUaGonE_Q5piX8USoY5LyBOcjfk0aTDIE1rkcLmUoqJL64hxy17aWT-4U9vuOg26r-FhkBN-fMdJMspBOBnbn-WME9gpPoFBxgYtHfNKG8fDqzeqDQ_dL3xwmB53I_2fbiElCraWQ7phcP943wnzqt0FIPT-jheE9pIh1GrQNnX3BJ2GhjdGs5Z23TyhzwecaKDa64IgiRy3bmm69_2hrE-JWfmkDh1X1pdwNzF-QfELfgEo_q0lys1aJXzZAPBNW_hEipGnWTSL4jRL0wSXOMkjVOQYATyPUb5btiW89LXAOYLF24Iv404uBPl1_2s5hBCgNIIA30KAkAdytvcNDdzzqyG_ZrqtJF8a3SoW5tREWt41ADWtW_7ehLsxyqEHRHTmbFrpRCMFN52e9DqOcpwncYGS_bj01g_VrRvIuYyHYhpulnRNlOJyrDuYi1G46Uzb3VuL2u3U4WioJr-FXSdc8U8J2CFYhrvWqF3MzqPcuxWB_PboMqB6sxFdF2F6XUYoixOGvrFbspeFFjs5aYJYRCqSVBlJC1TyKuckZayI0qymg_33gl1hVuKSXPCrOMtxgrOkSC_WV5xUPE8JZWWVIlLiOMtYliUoq-qyxKi6EFcoQjiK_R9UROksRgRxFtGEM4xSRkAS8Q0RcuaNnWmzughp4SotS1RcSFJxaUNXKkKKP_c5A3kILsxVcLBqVxYkkRTW2YMUJ5wM7ay-fAfp7QdjtIFCwY_6mZuub9WS0LwaMthFa-TVt7cqBnP_FQAA__9kJSgI">