<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/128346>128346</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR]`--test-ir-visitors --mlir-print-assume-verified` triggers Assertion failure `!region.empty() && "unexpected empty region"'
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
xisang0
</td>
</tr>
</table>
<pre>
Test on commit: https://github.com/llvm/llvm-project/commit/d866005f6928a2a97e67866bedb26139d8cc27d9
steps to reproduce:
```
mlir-opt test.mlir --test-ir-visitors --mlir-print-assume-verified
```
test case:
```
#map = affine_map<(d0, d1, d2, d3, d4) -> (d0, d3, d4)>
#map1 = affine_map<(d0, d1, d2, d3, d4) -> (d0, d1, d2)>
module {
func.func @test_fft2d_with_local_bound(%arg0: tensor<1x4x8xf32>, %arg1: tensor<1x4x8xf32>) -> (tensor<1x4x8xf32>, tensor<1x4x8xf32>) {
%cst = arith.constant 8.000000e+00 : f32
%cst_0 = arith.constant 4.000000e+00 : f32
%cst_1 = arith.constant 6.28318548 : f32
%c8 = arith.constant 8 : index
%c4 = arith.constant 4 : index
%cst_2 = arith.constant 0.000000e+00 : f32
%0 = tensor.empty() : tensor<1x4x8xf32>
%1 = linalg.fill ins(%cst_2 : f32) outs(%0 : tensor<1x4x8xf32>) -> tensor<1x4x8xf32>
%2 = tensor.empty() : tensor<1x4x8xf32>
%3 = linalg.fill ins(%cst_2 : f32) outs(%2 : tensor<1x4x8xf32>) -> tensor<1x4x8xf32>
%4:2 = linalg.generic {indexing_maps = [#map, #map, #map1, #map1], iterator_types = ["parallel", "parallel", "parallel", "reduction", "reduction"]} ins(%arg0, %arg1 : tensor<1x4x8xf32>, tensor<1x4x8xf32>) outs(%1, %3 : tensor<1x4x8xf32>, tensor<1x4x8xf32>) {
^bb0(%in: f32, %in_3: f32, %out: f32, %out_4: f32):
%5 = linalg.index 1 : index
%6 = linalg.index 2 : index
%7 = linalg.index 3 : index
%8 = linalg.index 4 : index
%9 = index.mul %7, %5
%10 = index.mul %8, %6
%11 = index.remu %9, %c4
%12 = index.remu %10, %c8
%13 = arith.index_castui %11 : index to i32
%14 = arith.uitofp %13 : i32 to f32
%15 = arith.index_castui %12 : index to i32
%16 = arith.uitofp %15 : i32 to f32
%17 = arith.divf %14, %cst_0 : f32
%18 = arith.divf %16, %cst : f32
%19 = arith.addf %17, %18 : f32
%20 = arith.mulf %19, %cst_1 : f32
%21 = math.cos %20 : f32
%22 = math.sin %20 : f32
%23 = arith.mulf %in, %21 : f32
%24 = arith.mulf %in_3, %22 : f32
%25 = arith.addf %23, %24 : f32
%26 = arith.mulf %in_3, %21 : f32
%27 = arith.mulf %in, %22 : f32
%28 = arith.subf %26, %27 : f32
%29 = arith.addf %out, %25 : f32
%30 = arith.addf %out_4, %28 : f32
linalg.yield %29, %30 : f32, f32
} -> (tensor<1x4x8xf32>, tensor<1x4x8xf32>)
return %4#0, %4#1 : tensor<1x4x8xf32>, tensor<1x4x8xf32>
}
}
```
crash trace:
```
mlir-opt: /home/workdir/llvm-project-19/mlir/include/mlir/IR/OpDefinition.h:897: Block *mlir::OpTrait::SingleBlock<mlir::linalg::GenericOp>::getBody(unsigned int) [ConcreteType = mlir::linalg::GenericOp]: Assertion `!region.empty() && "unexpected empty region"' 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/workdir/test.mlir --test-ir-visitors --mlir-print-assume-verified
#0 0x000060f44a2513e8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x11393e8)
#1 0x000060f44a24ef0e llvm::sys::RunSignalHandlers() (./mlir-opt+0x1136f0e)
#2 0x000060f44a251df8 SignalHandler(int) Signals.cpp:0:0
#3 0x000070761fe61520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x000070761feb59fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#5 0x000070761fe61476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#6 0x000070761fe477f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#7 0x000070761fe4771b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#8 0x000070761fe58e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#9 0x000060f44aaff07b mlir::linalg::detail::LinalgOpTrait<mlir::linalg::GenericOp>::getRegionInputArgs() (./mlir-opt+0x19e707b)
#10 0x000060f44aafeeda mlir::linalg::GenericOp::getAsmBlockArgumentNames(mlir::Region&, llvm::function_ref<void (mlir::Value, llvm::StringRef)>) (./mlir-opt+0x19e6eda)
#11 0x000060f44adbdeae mlir::detail::OpAsmOpInterfaceInterfaceTraits::Model<mlir::linalg::GenericOp>::getAsmBlockArgumentNames(mlir::detail::OpAsmOpInterfaceInterfaceTraits::Concept const*, mlir::Operation*, mlir::Region&, llvm::function_ref<void (mlir::Value, llvm::StringRef)>) (./mlir-opt+0x1ca5eae)
#12 0x000060f44d2233aa mlir::detail::AsmStateImpl::AsmStateImpl(mlir::Operation*, mlir::OpPrintingFlags const&, llvm::DenseMap<mlir::Operation*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, std::pair<unsigned int, unsigned int>>>*) (./mlir-opt+0x410b3aa)
#13 0x000060f44d207fa6 mlir::AsmState::AsmState(mlir::Operation*, mlir::OpPrintingFlags const&, llvm::DenseMap<mlir::Operation*, std::pair<unsigned int, unsigned int>, llvm::DenseMapInfo<mlir::Operation*, void>, llvm::detail::DenseMapPair<mlir::Operation*, std::pair<unsigned int, unsigned int>>>*, mlir::FallbackAsmResourceMap*) (./mlir-opt+0x40effa6)
#14 0x000060f44d213ab5 mlir::Block::printAsOperand(llvm::raw_ostream&, bool) (./mlir-opt+0x40fbab5)
#15 0x000060f44d7a8633 printBlock(mlir::Block*) TestVisitors.cpp:0:0
#16 0x000060f44d7ad1bc void llvm::function_ref<void (mlir::Block*)>::callback_fn<testNoSkipErasureCallbacks(mlir::Operation*)::$_1>(long, mlir::Block*) TestVisitors.cpp:0:0
#17 0x000060f44cc4d25e void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Block*)>, mlir::WalkOrder) (./mlir-opt+0x3b3525e)
#18 0x000060f44cc4d243 void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Block*)>, mlir::WalkOrder) (./mlir-opt+0x3b35243)
#19 0x000060f44d7a8336 (anonymous namespace)::TestIRVisitorsPass::runOnOperation() TestVisitors.cpp:0:0
#20 0x000060f44d15015f mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x403815f)
#21 0x000060f44d1508e2 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x40388e2)
#22 0x000060f44d15306e mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x403b06e)
#23 0x000060f44d14ba1b performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#24 0x000060f44d14b673 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
#25 0x000060f44d1f3de5 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) (./mlir-opt+0x40dbde5)
#26 0x000060f44d1452d2 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (./mlir-opt+0x402d2d2)
#27 0x000060f44d145583 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x402d583)
#28 0x000060f44d145792 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x402d792)
#29 0x000060f44a230607 main (./mlir-opt+0x1118607)
#30 0x000070761fe48d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#31 0x000070761fe48e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#32 0x000060f44a230175 _start (./mlir-opt+0x1118175)
Aborted (core dumped)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWltzozj2_zTkRWUXSFwf8kCc9v-fqs4klXTNProEEkQbEKwkupNvvyUB5mJw2umZmt2pTaXdGM7ldy465wgFS8lyTum15d1Y3u0VbtRLJa7fmMQ8t6-Sirxff6NSgYqDtCpLpiwUgxelammh2IJ7C-5zpl6aZJtWpQX3RfG9_29Ti-qfNFUW3HescE9C37dtL_MjGGKIo4D6Qej7CSUJ9B0UkTBNYUAiy46lorUEqgKC1qIiTUq1Rju2fLv7teOyYGJT1QooKtVWfwObjb7eMLH5ziRTlZBgszF0tWBcbbCUTUk336lgGaNkJlDzghTLBV0WRCWugYVuAc4yxumhxLWFdhYMiW3BHSCO-YTmE5lP14IR2FjoCxiohicW-nKU6_y64CNVJ7isSFNQYAU3lh0DkDU83eoPYLm2tvOQZQqSww-mXg5FleLikFQNJxYMLehhkds61IpyWQkL7Zw39y18yxDUwuEOtDTOGZoB4KqQVc4eNNB6Uqla7wimXrZpxaXCXIFwa5sfasEb2wYaiRZgxx3PwV7icle5jsoOzhKjv4UhckLPDReYwkWAhpBxQt9GpO4iqkVSqQ5wido-Z3lrdevZLS1r9W4iGoH1UB01toYXjOMi32asKADjsk2IHkyrCkagalT3yD4jus-CDxTDXwCNPgUa_jpo10IxHCvPKaeCpTp7TSgZz_ValoZGV1iz1NvVM71yxpferf7GFBVYVeKg3ms6EgFrLHBR0MKCsOX6qTuCkiZVrOIrt7xbK7gdPGfW_7DMzznrzDIe3N0ZaIL1GUlDQQDA8r4kid3KZfwYXSOf8QOa3qkadXLj4A450VZ60P1Y0PPGITVxBM7J8uxo_VNauEYbnNKiNdrwlPa0RHS0kaE1D7ZlUxhVnanelNKxT0nDjtTvyofjjGgELRujoiNK3ZlAuEDs9ImThjNqNCpmhueQYqkadtTb2ae7PjvW1557XDgbpqqsPgqNNbnmyk64vHM64Uc6_WWd3nmdwYiLsO9ZC7_3SteZxjXbCZc4_IFj1nJ6RdGIDRPSsvXBd-aNqq-1475YNkXLFY3gOSuMbWqU2PQieZS1RAoHUsn4WVK0AIfxDg5cw-Iuch1QzwdX-LwFl8Ejl7vC5X-gbQ1lcNa2NYzjbJBN0mLss8HIHCcPXMoCXfU6em9ZC7KX2Q59osKl_OlK0jujBWmV94V9CC_cjaej4Pbzc6Aej1sxgqpG8LbrQtRXGH39qd6khVrBrZbffo4G_VRg-QKUwOd2HFqnBfcvVUktuP9RiVfCxGzjs9GLaq85LLhnPC0aQocbd08W3D_UtzRjnOkuvH2xUBxGgRZ9U1TpK7Cg0adRoPih_iaw2X9ZKH5mPC-oobLQbiBqw9Ne_187jTzU2mBzJ6fqpiJ6tGq42fcRwLgy7dW72VU8FVTRb-81bRfvB1K9W400lpIKDR9oB0FH0FzbMpnhdO76euJoOH2raaooAYYAtNRmJAlAhllByday48evX-LnL0A2SckUwCBpcr0NrITSBffi7SeTsqHSgnuAuTbZRAKoFwraWCc4fTXx1rqfFU5fAWnKuo2-vW0z_1FUucAlwCJvSsqVRgC2XTzNJnQpH35lY6oHQhvYb3rU9-3MdbFudzQExkoTDfku24tHLcNA_2YSF4YDkcA_DpVUguLSastIH3UYjg3Qu4k3x0ERomG7-IBZXxMELs1suoTgqeHPLOe4-H_MSUGFPEZ_UYmf6e1LrwTOzSRZCCbiLBh2qNvbcpvWOkK2-ddKQZ2UwA58J6O-Y5qOhrEvWGLB_VvoH3x3UzDevG1y3rQP0q2str4B5uo-NcBypwITL8pSUKsXQTE5vOqtxkXSIz_K0kG6N4frBj7IpTHvUthu4A-C_algNwgyBHCil89FYmEYZGgQG5yIdZKLBTrJIDCcCvRCGvmXCUQRjUaGR5M0wllmB8lKHSNUYVa011_N_WOBvaSePpkCdsfrRsUiP5vzEQ3soLNeryt7BpZSgj8sur3eWJam-sddNfoNl7rChQP_U1dazYIf1mvWcLPnOwiaWWj3vWK6j4_4fsdFQ6c8z0ownj_RrHu3tG6hTwkeLJyWDpIQiunIwnEIHupYlg_1HVdUZDilxwsTk67E3FeEFpfF52M_XYxCN0paK2Bex1gw1r4at2m9bTeenz35CwKSYo9iOgRkUmYJhAhhvBKQWJbPCit6V9ZLd8YA101-qE1fYjzfFziXvctmHrilXNJ7885zXahUpH1QY02ym04wOzD53o5-pxrueFad1aK9f8I9dksv6bFF8cfhbX8173IsXcdOEB4tLjSNpR1k2B-5vo_W7Nv_4vanxW3swD0uCj1VxrJ8orJqRGocdSa8Ns0y7A_hdafhdRBOvJGCbvQ3QHWoYmkMMa_vz01-SVUV6xiyBCfegMGbYAhw6CMEjLpW_TiZujvGwG9Uqt-7IXc2pmmx_kwscZLURPCSqjjSd6z3aef1Q8YttNPj9m_V8yurvwgsG0F33WN5ZhVE7U0LugfHBDYsKp5Pg3uBqcHY1DR1CfRoa-py1f2Bi-mGbl-JH1iQu-5lcAtpPXs_78CJhf_AxeuDIHrqXk4VlCAPeqPOEp4Y6qK_jaEuGgyN5msCITOzYl7x97JqJOB6xKjNJqzLJp0kd099mjxi2U0SouEPfGRZ-HFGwcnUSBzPdrxsdab6Vj3UWl1McG2c2mmd-Mfg-fkxJua4eJdM3mOOc-24vqjMauNqkUGh42VHh0JnblBI4cUGPbKaFozP-5smPeL0_3ALx0xa1R2XSpgxsxInUqcEreb2QYf9EQvKlW51o9Fy3YkhhYMT4cyJyPbpTHdvzWIOzIrgmtLE9oc1D6cTiOMm2ElATUVWiTI2a1J-0I2OzVa-YEHJoVa65Y7m3LZz5rocTIaQAfn917unXcUVfTudxe8LJh5qdY8Z31U8Y_lIRgRGTxfWmTs3zg_QqOp8rXKW4uKJyqZQ69VojcGC4dH2hrN_NfTE9ntaVuL9psmyNgWP9IRmuCnUgdCC6vlujaebTMa1ch6Btda56MKfjeWfbs-A7pbhgqZmEy6VeD9NjnMJMHR6e9rp_yMi80F6TkczJ0OEjsdDWRdMxZw8iiqlUvZY_5Kk-y9cEmcpVjbia_vzlVpKEkKHURv6s3LjQQKXE_nvtgxX_AMJJKMGF8z944Vo1T9dc05fcNuG40uD9pFx66C9cJgVYTgHHUTrQb0E9GfRBdHIpdOXpRDZvh2AEpvT2qVX9k7o28GR_Xgy0b8NDkl04ct2GJHIHgQ6c4HUtcHhoHkOUmGhDj24S1RQd6QCzk12Ag-0wleNdoJumcZJJRQ1m4u0EtQcEVHSCe-PCK_INSIRivAVvXYC14YOCn3v6uXaoZHjYZsmAXYhiiKauRQ7JLADGxGfwCt2DW3o2RBCO3Rd6G1TP4J-kDip62cEOshybVpiVmx1UmwrkV-Zc61rB4bI9a8KnNBCXrd_I9SeMULLu70S1-Y0LGlyabl2waSSgwTFVGH--FOPUZZ3a_n2pedUvg2UYHlOhRwdBmaYFY2gv3woeNWI4vrzB36db75fw38HAAD__w_fgBQ">