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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Crash when using --linalg-inline-scalar-operands
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    I have the following MLIR program:
test.mlir:
```
#map = affine_map<(d0, d1, d2) -> ()>
#map1 = affine_map<(d0, d1, d2) -> (d0, d1, d2)>
module {
  func.func @func1(%arg0: tensor<?x?x?xf32>, %arg1: index, %arg2: index) -> (tensor<?x?x?xf32>) {
    %c1_i64 = arith.constant 1 : i64
    %c0_i64 = arith.constant 0 : i64
    %cst = arith.constant 0.000000e+00 : f32
    %0 = linalg.generic {indexing_maps = [#map, #map1], iterator_types = ["parallel", "parallel", "parallel"]} ins(%cst : f32) outs(%arg0 : tensor<?x?x?xf32>) {
    ^bb0(%in: f32, %out: f32):
 linalg.yield %in : f32
    } -> tensor<?x?x?xf32>
    return %0 : tensor<?x?x?xf32>
  }
}
```
The above MLIR program will cause a crash when using the following command:
```
mlir-opt --linalg-inline-scalar-operands test.mlir
```
And the crash backtrace is:
```
mlir-opt: /data/tmp/v1005/llvm-project/llvm/include/llvm/Support/Casting.h:566: decltype(auto) llvm::cast(const From&) [with To = mlir::TensorType; From = mlir::Type]: 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: /data/tmp/v1005/llvm-project/build/bin/mlir-opt --linalg-inline-scalar-operands test.mlir
 #0 0x000056428212843f llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x158443f)
 #1 0x00005642821254a4 SignalHandler(int) Signals.cpp:0:0
 #2 0x00007f14b4c7c420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #3 0x00007f14b474900b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #4 0x00007f14b4728859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #5 0x00007f14b4728729 (/lib/x86_64-linux-gnu/libc.so.6+0x22729)
 #6 0x00007f14b4739fd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
 #7 0x0000564282362e9b decltype(auto) llvm::cast<mlir::TensorType, mlir::Type>(mlir::Type const&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x17bee9b)
 #8 0x00005642842be308 mlir::tensor::ExtractOp::build(mlir::OpBuilder&, mlir::OperationState&, mlir::Value, mlir::ValueRange) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x371a308)
 #9 0x0000564282edb2a6 (anonymous namespace)::InlineScalarOperands::matchAndRewrite(mlir::linalg::GenericOp, mlir::PatternRewriter&) const InlineScalarOperands.cpp:0:0
#10 0x0000564282a52f2f mlir::detail::OpOrInterfaceRewritePatternBase<mlir::linalg::GenericOp>::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&) const (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x1eaef2f)
#11 0x00005642885f3dc0 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&)>) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x7a4fdc0)
#12 0x000056428546c018 (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#13 0x000056428546ee6b mlir::applyPatternsAndFoldGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig, bool*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48cae6b)
#14 0x0000564282ed9bca (anonymous namespace)::LinalgInlineScalarOperandsPass::runOnOperation() InlineScalarOperands.cpp:0:0
#15 0x00005642853b74f1 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48134f1)
#16 0x00005642853b79ca mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x48139ca)
#17 0x00005642853b8514 mlir::PassManager::run(mlir::Operation*) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4814514)
#18 0x00005642853a9a1b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#19 0x00005642853aa3e4 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPoolInterface*) MlirOptMain.cpp:0:0
#20 0x00005642853aa594 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&)::'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
#21 0x00005642854b304e 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) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x490f04e)
#22 0x00005642853a1e39 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x47fde39)
#23 0x00005642853aa701 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4806701)
#24 0x00005642853aabc6 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x4806bc6)
#25 0x000056428203facb main (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x149bacb)
#26 0x00007f14b472a083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#27 0x00005642820fb62e _start (/data/tmp/v1005/llvm-project/build/bin/mlir-opt+0x155762e)
Aborted (core dumped)
```
My git version is bf895c714e1f8a51c1e565a75acf60bf7197be51.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcWltT4zgW_jXmRUVKlnx94CEEMktVU1BAzT6mZPvY0bQieSWZy_76LclOsEPS0D2p2dmlGhJLR-f2nfNJtpsZwxsJcBHEl0F8dcY6u1b64oXJ5k3J5o-QnRWqeru4QWv2DMiuAdVKCPXCZYNuv908oFarRrNNQOcBvgrw3IKxs43gejcSJHj4118SumEtCugVYnXNJaw2rA3oIiBZhQOyQFXo_5KA5Og8oNcoIFlA8oBejxWEP6nhw8xO30ZVnQAUpJf9NUJ1J8uZ-4OCCLvP0LsQM93ggM6RBWmUdhbp8nX7W1PiVJIF6iVDJ8llBa_vY2Q09u7aD9XlY8eQ01OGK55Effia2_WsVNJYJi1yOZkjnkRTeXxMHh-WN_ag8Az7HwjIJe5XOh_HK7FfJ7hkopk1IEHz0rnvI-aycTgZL-PKzcPY58YDGsRX7opb0MwqvbJvLYykScs0EwJEQEi_6pOR-CpIrxCXpgevD6t3muRIdda8o4o-hXUfh_i6KHCvgMudXg-06uy7oV0bbPPyxkFUyC87kMT0qi-LH_myk9ZgOy23mf9xAMOiIL0aumj3ZdqeT2tArFDPMGlv9MKFQCXrDCCGSs3MGr2sQaLOOCaY8kKpNhsmq2ME4MjhXLUWnZ_3KTnnUnAJ56Zkgrkp0ExWBr1TySE1c1l5u70zBSu_W81KQNx8ZtilKiDLilkWkKXdtAFZPocYxwFZCvG8OW-1-gNKO1wGZMllKboK3gceu7ZV2kksmLFcNrN1QOdxkjjdFZTCFW9AMtZZ5WrHL6PzgM5LZmxAMt9WaKnVJiCJr6748oXbNXpSvuS3DErnTx7UJ6ePXvoV-wJuKr5ylufGgLZcSRQkmBsW0MWT8uWb_c6EN-OsJa5VvCN08fTWz7tJpptuA9IiVSMuS7VpmeWFANRHE_o-S1HNuIBq1if1_tv1_PEama7YcIsYKroGaXDJQVahtbWtx4MsA7JsuF13xax0QW8zuZdwbkwHJiBLxGSFhrwfwnkw_2hZ-R1V3abdoY5nyP_cD6W7jcr8BO5Fx0XlPrkMyPJXK9YxG0b41dFmnEQkIyHJIlqPysG8mf7LvebS-mieXHgByd6FNHtZKWM1sL5aFohL26OZ_amAHJW_hnEWRbR2XLXzOtzzOo5YhB55I5n4B5OVAB2QbHCiHzazsnUYYP-7U0QGRWkdRkVUpmVEMFqtNBirNKy0HWIQvAjI8jVLVknkkty9njey6ydau9bAqplRM9x7HEUET_ylEzNplGNcIM24gS_oL53mxGuOKMbFRHM01UyyLM4dQX7J85FmQrI4n2iO9zWnO0S_rDMlU53JVCfN6yr5OZ2U1lUy0ZlOaoEmBPLiCxxHFwc5jCz2qcvTz3QMeXrcMuNJijwtAPIptNk4sIgUQHE2cm67m7rv16-OdOxd218OhkZe37WXbsz1RTKN8c6Rg-PkR8ssfJj-nYkODgw9MNnAycKnacgozibh5xNcoSoI87XCpJJvG9UZJNkGTOvZKO9du_G89-hp725gvX5mw2y5nsvqAV40d3GOktOTZv_9t_5YeNdOY75n1oKWw2o9QN_vkoeMfmQbx1pTsmUxqUk9MlKBZVxsYbnTN9KCrlkJg9nBiUtmYFK-h_2n159HvgM_IPOvB3yaigcGNXmndZefCa1ncU2rEn_0ad62gpfuDH7qABcjknD3VW7hSkMd0EWhlEAT1YOCMRcMN1hHlTwrXv1pJe8T31TDSyYewHTCfk3vifo1ZVFdlXgCHhmDF0dJicPss379TQNUb1MorjR_hiGMVqsSjPmn0t8F9wdTF8LxVYfbju55BpAUo0pgbSu22sxcVkslKm-Ci7dJUh-g8ZW0R5FLrf4Nctqjj2BHuR9L984P0gsla944AVdfvkZPhFCUlQySYoJQtMeoeVGyzxD65rnlEMXdMzNwq-7knRx1mgfp66wYT-ChRRrV4VFWfFJ3rbM8r1i7YwDdyb3qN-ZDwx-ngrlk4s1wc8skaxwVbOFYoE76B1DVSU-0URbSqA4n2CT7SchL9tNJuOctuKzvUaAT3cV2bPv_9axMWdWYG2ms9rc0Sh-g3bFAb7mfGHy_ZxqkvZG12jbQKZsipHnJJolP9xKfxWG05-82AwdrbZrA0zkaxWE0cTSbOspyFhaoBV0rvZn7DcJ8cldmbDXc1a2ZhmrVWj3ZTx5Vp0u4bXRAr4-w1-23m4eFkhZe7QdobwXXd629ZVz2vDY5Jo9mD9NAvhcfoxChYQO47Ora39N9KbxO8n918CG8W9go_bZVNZKvoGadsKsKBFg4vsadqK6_HvNY7oozAaV1O4ix-u3DaePJ30LeKyV2h76hnj7LG8H7eYvzCB07JPzKqeKvy-txdPPdcbZkQhSs_L6q5eQQPMrT37BODuP_xd7pRQKSCrYpKhaQ9O-ECsmEks1fm9gfuPR5w4TT42BBcQQjKEwruJ3L6n6Pev4b0f0PNukPJcZzj1Zz2TxAfXT4VJtpjmscwXgzJWSPNEOg-eF2_H8jkxPlNK0roPkkp3R_I0pxeDSnw8mxXLP-jDj_2eL4LCEnO4nhJMWTszqJ9gMtyuQkgf5lERVlMolocgtGMK1ZWaAN4_JEz3qivGDl5GaU7D0KJgxnFK1Wghflylim7Wpk_6sPnCOc0YmV6cNhXBcJAdTrP9XbiThNyDu5zAulLfinPKXS4F_9QPXu0_SV3-0barhFz6ANVxJxg4o6y-MyDSMI64zFYRlCnMQsjVlZJ7io0zBPC4jD2Vl1Qauc5uwMLsKUZGGYRzQ5W19AXidpnSY4S2lYsbRM07BIEhoRSFkB0Rm_IJhELlKch5gms6zAELE0i1hapISQIMKwYVzMXBpmSjdn_rXXRRiGJKJnghUgzEX_1tuXrH-bfaYvfNqKrjFBhAU31rxrsNwK_984_IL4Ci32X9J-8vLqrNPi4tff1w2-P1-Q_wQAAP__BZpbbw">