<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/116042>116042</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR]-affine-loop-fusion triggers Segmentation fault
</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/38fffa630ee80163dc65e759392ad29798905679
steps to reproduce:
```
./mlir-opt test.mlir --affine-loop-fusion
```
test case:
```
#map = affine_map<(d0, d1) -> (d0 + d1)>
module {
spirv.func @test_avgpool2d_pad_right(%arg0: !spirv.array<8192 x f32>) -> !spirv.array<8192 x f32> "None" {
%cst_f32 = spirv.Constant 0.000000e+00 : f32
%0 = builtin.unrealized_conversion_cast %arg0 : !spirv.array<8192 x f32> to tensor<1x32x32x8xf32>
%padded = tensor.pad %0 low[0, 4, 4, 0] high[0, 4, 8193, 0] {
^bb0(%arg1: index, %arg2: index, %arg3: index, %arg4: index):
tensor.yield %cst_f32 : f32
} : tensor<1x32x32x8xf32> to tensor<1x40x8229x8xf32>
%1 = bufferization.to_memref %padded : memref<1x40x8229x8xf32>
%alloc_0 = memref.alloc() {alignment = 64 : i64} : memref<1x32x32x8xf32>
affine.for %arg1 = 0 to 1 {
affine.for %arg2 = 0 to 32 {
affine.for %arg3 = 0 to 32 {
affine.for %arg4 = 0 to 8 {
affine.for %arg5 = 0 to 1 {
affine.for %arg6 = 0 to 1 {
%4 = affine.apply #map(%arg2, %arg5)
%5 = affine.apply #map(%arg3, %arg6)
%6 = affine.load %1[%arg1, %4, %5, %arg4] : memref<1x40x8229x8xf32>
%7 = affine.load %alloc_0[%arg1, %arg2, %arg3, %arg4] : memref<1x32x32x8xf32>
%8 = arith.addf %7, %6 : f32
affine.store %8, %alloc_0[%arg1, %arg2, %arg3, %arg4] : memref<1x32x32x8xf32>
}
}
}
}
}
}
%alloc_1 = memref.alloc() {alignment = 64 : i64} : memref<1x32x32x8xf32>
affine.for %arg1 = 0 to 1 {
affine.for %arg2 = 0 to 32 {
affine.for %arg3 = 0 to 32 {
affine.for %arg4 = 0 to 8 {
%4 = affine.load %alloc_0[%arg1, %arg2, %arg3, %arg4] : memref<1x32x32x8xf32>
}
}
}
}
%2 = bufferization.to_tensor %alloc_1 : memref<1x32x32x8xf32>
%3 = builtin.unrealized_conversion_cast %2 : tensor<1x32x32x8xf32> to !spirv.array<8192 x f32>
spirv.ReturnValue %3 : !spirv.array<8192 x f32>
}
}
```
crash trace:
```
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/test10.mlir --affine-loop-fusion
#0 0x00005ae09bf9b258 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (./mlir-opt+0x1068258)
#1 0x00005ae09bf98d7e llvm::sys::RunSignalHandlers() (./mlir-opt+0x1065d7e)
#2 0x00005ae09bf9bc68 SignalHandler(int) Signals.cpp:0:0
#3 0x000073412f1e5520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00005ae09c0e60a6 mlir::affine::promoteIfSingleIteration(mlir::affine::AffineForOp) (./mlir-opt+0x11b30a6)
#5 0x00005ae09c0e13a5 mlir::affine::fuseLoops(mlir::affine::AffineForOp, mlir::affine::AffineForOp, mlir::affine::ComputationSliceState const&, bool) (./mlir-opt+0x11ae3a5)
#6 0x00005ae09c0b5d15 (anonymous namespace)::GreedyFusion::performFusionsIntoDest(unsigned int, unsigned int) LoopFusion.cpp:0:0
#7 0x00005ae09c0b39f5 (anonymous namespace)::GreedyFusion::fuseProducerConsumerNodes(unsigned int) LoopFusion.cpp:0:0
#8 0x00005ae09c0b3475 void llvm::function_ref<void (mlir::Operation*)>::callback_fn<(anonymous namespace)::LoopFusion::runOnOperation()::$_0>(long, mlir::Operation*) LoopFusion.cpp:0:0
#9 0x00005ae09c0a95be void mlir::detail::walk<mlir::ForwardIterator>(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (./mlir-opt+0x11765be)
#10 0x00005ae09c0b074d (anonymous namespace)::LoopFusion::runOnOperation() LoopFusion.cpp:0:0
#11 0x00005ae09f1ceb1f mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) (./mlir-opt+0x429bb1f)
#12 0x00005ae09f1cf302 mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (./mlir-opt+0x429c302)
#13 0x00005ae09f1d1aae mlir::PassManager::run(mlir::Operation*) (./mlir-opt+0x429eaae)
#14 0x00005ae09f1ca5d2 performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) MlirOptMain.cpp:0:0
#15 0x00005ae09f1ca23b 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
#16 0x00005ae09f273f25 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+0x4340f25)
#17 0x00005ae09f1c5432 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) (./mlir-opt+0x4292432)
#18 0x00005ae09f1c56e3 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x42926e3)
#19 0x00005ae09f1c58f2 mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) (./mlir-opt+0x42928f2)
#20 0x00005ae09bf7a477 main (./mlir-opt+0x1047477)
#21 0x000073412f1ccd90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#22 0x000073412f1cce40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#23 0x00005ae09bf79fe5 _start (./mlir-opt+0x1046fe5)
Segmentation fault (core dumped)
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1T4zrS_jXiRkXKlvx5wUUI5H2pGg4UnNq9TMmW7GjHlrySzMD59VuSTBI7MYHZM7UftSlmiGV199NPf6htiNa8FoxdgfgaxDcXpDdbqa5euSaiDi4KSd-ufmfaQClgKduWG4CXcGtMpwFeArQGaF1zs-2LRSlbgNZN8_L-67JT8m-sNACtB1G0xllVVSTBAWNZECaYlknM0jjHOSIU5Wme5UGcpDkIbkCw1IZ1GhoJFeuUpH3JrFF3CyTB8OMuFwCt24arS9kZaJg2C3sFLy9JVXHBLhspu8uq11yKk_JWBJZEzxoACLekgwDfQK9y05IO4BVAGQ0AWkEaApTDS4BvoVuDAF37RYBvvY5W0r5hEKTX_hpC3XH1sqh6UUIQBRbEhrzUnZQNopuO0I3i9dYAlAEUE1UHlnyAQi9GlCJvAK-yMEfwFVYYWUt7EB9tgwCh36RgAKFDPBACFJfabCqMnK9exUoKbYgwMFgE7sMAug4CaOFYfYfSgZMret4YLha9UIw0_A9GN6UUL0zZCGxKog0cXILnfbIZYJjQUgG8Cl8xsj_Z6-DwofGOUMqoQ-AFFh2hHlUjf4D42oUq2v0XgPgGbnm9Hd3Kwhzv7o7ZiW-LItjFI7TYuaDs1W73a-jEGj6xFh2s5busg-4zYH_jrKHjiBzyDdIbtzJLzYS3KHjNEMpPMxcOYasqpvgfxHApFkZuWtYqVo2oXUK_eF4naRpZbnxCeJmFW3L85ZZZ0vBatEwYtyeJnHqeRO-uHVg6GXVfiotKqoFV70ZgPQ_HoYPHm9F-Mz4sg6ONeGbj7nMkEe0lso80xx_gnVWefELIBSA66FcL0nXNG_R9bJfBaJ-Qsc3DIbNQHJ8VxXvRZC96DCI51NRIX4-hPW-GGvJqouF3fFgi8VEazCfcxGx6yuyQkUfGx0zgjyGczESA4sxbVNxsF4RSVzXpoCo57pUnQqyNVMypekfw6_CmN8dQTiweLU0WRpf7ix328H_VvxOYVuSvz8o_IYzo9MHgz5VxnD-FB6AYf2FEQOePuDMD0c6y3_TETK_EX0jTs3csZ2eqQcWOl_2X8ZBYKqK30CgyP6g-frtdPt9C3RctN5DAoq_tdCuVsa58ebDmWvdMA7SGRFDIRdn0lEGzZdBjKUj53eFZePPPhpTfIe3bbgcwWPgUeFSyVqSFRNW9LUqLA47maoDWW9kygNY_pPpOuQJobWfWMDg3bduzI4DBq50dY8KCvKjywnZM5xVeArzUb9p_eVRcGIfzd0ckyvabFPmxkdooRlqAElsQXBjXTVB2CNWOp69hkGSule6PNRxOQGQ0ZadAPPXimdeCNP9PBG2Y0u9d67SdmKZsZAdNnS2TDI40ApQN2P2yXpSdDUrg_u0U4UFRiqMQVSGLY2QfLTKbCrwAaP2aJZskumy46F8va9H7G-VCy0Xi4EUoRsEIXHQIrgxYEpAEWpe87z6I_nunZCsNu6ueuagbdmeYci0AoOy0wNJ9X0v10M3yFRY4IMkIUjyBFGISz0Cqes2-Sdnpz2FYzaj51KaVbLveOI-fG16yZ0MMg6V9HBryr5CymXeUMExGcxVOxo4WMQ1jK0yEFG-t7DUUpGW6c5mfexT_pxijb2tfTz4sTFVStX5J3wkjb5iFlPXCPc9TXxcrOL7OoSXOS51Ot3QCD-fVT8CzIXr0D-zKPjv2LVO_SWobVfZVRNkUUZTG8EVyelC29gHaxmjjDx93d5QdD90ub5fDE7lbL0nT2Ba5qYR_lv_Izz3SoRn14kEcaM52OwGKNoF7GM8aKepxfk2wnCUgHxNA8rhgnoC9TsoM4Y3__oM03wFe7W-upfpBFPW1a0_R2w-4Wf2TtI5c_Stpvj8oapvdXIWkSVzsW6ft0MEk4EEa0XMp-JnQfEi0NTw6G6qwZEVYzXD80P0uH7pHovWSks6ROpgd8WM3DKzO872_sxSkedNc3xNBakvae3s5ruNTZEYoL4qwGpGJJj5VOEBf9umRd6yxPXEce7t1BzX50508FLKm7oQ2yk0mUh1pHW_wlv2NAfsjUUyYO1HJ9_a9_IDHEgdoxCMe80hDQtjE_LtDJzNhWvQzdhkh42KIJvEjMUVw6P5LV5z6zICkDR1mmy1RjG46Y-fovcSz7FXJ7mvbF0Yn2x78_be7p5UUhr2aI-LvG64eOnNPuFhJUfH6QEcOD-6errl46h_CxUEH-iZrXpLmiem-MfOdaU4AoGznfi_433t25P49a6V6u3aPNyO6KKtI35gNZQ0zbF7GHiW34745DcLceXOSxc-G85f7s0d3w0nDSvPEaq6NejvOj49yYPZE_LeIzPkMHQ1sFUpxhQ4nU9013CwFfVSyZFq_w_2X5N1_YFV8uOPw3rNRXNRPrJpdnmmqOAoqFI-aajppOnGE0el0_m8rxrlzB0V4fN5lU4oShmcpGo7rckv8wbz8aujO-TePO2F4hDuf4s6q-dB-BffPAsyqEbFo8hYkJVGawpZwMfNqIUqjNB1pCMdvBMqS5l98I4BymgcjnWiqk0UB3Gys2EYboszmHeJXrLBobAVPfM8rFkOvf877pGL72n1m9W66g66ArFgpFXNvtBjdW3t_6XZBrzDNcU4u2FWY4jAOcI7wxfYqyYscZSiJS4TjhNCyyPOiKFmEC4xxVV3wKxSgKAxDHOIwi9AiQHmE4jANcVySLIpAFLCW8GZhM2YhVX3hXsZdhWESROiiIQVrtPu7OkIuexAC8c2FunKv8Iq-1iAKGq6N3msw3DTub_F25ALxzYkXatAoXtdMaXhMx0Wvmquff4c4IH-5Qv8IAAD__xCsVWU">