<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/156421>156421</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[MLIR][Affine] Missed sibling fusion opportunity
</td>
</tr>
<tr>
<th>Labels</th>
<td>
mlir:affine
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
bondhugula
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
bondhugula
</td>
</tr>
</table>
<pre>
Fusion of nests like these is being missed. There is reuse on %0 here, and sibling fusion is supposed to fuse this.
```
func.func @disjoint_stores(%0: memref<8xf32>) {
%alloc_1 = memref.alloc() : memref<16xf32>
affine.for %arg2 = 0 to 8 {
%2 = affine.load %0[%arg2] : memref<8xf32>
affine.store %2, %alloc_1[%arg2] : memref<16xf32>
}
affine.for %arg2 = 0 to 8 {
%2 = affine.load %0[%arg2] : memref<8xf32>
%3 = arith.negf %2 : f32
affine.store %3, %alloc_1[%arg2 + 8] : memref<16xf32>
}
return
}
```
```
$ bin/mlir-opt -affine-loop-fusion='mode=sibling' sib.mlir
func.func @disjoint_stores(%arg0: memref<8xf32>) {
%alloc = memref.alloc() : memref<16xf32>
affine.for %arg1 = 0 to 8 {
%0 = affine.load %arg0[%arg1] : memref<8xf32>
affine.store %0, %alloc[%arg1] : memref<16xf32>
}
affine.for %arg1 = 0 to 8 {
%0 = affine.load %arg0[%arg1] : memref<8xf32>
%1 = arith.negf %0 : f32
affine.store %1, %alloc[%arg1 + 8] : memref<16xf32>
}
return
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VU2PqzYU_TWXjRVkbCCwYEEejVSpb1N1_2TCBfxqMLLNqPPvKxsymcmkM6OqqmTl48bn3HN8T7CwVg4zYgXZCRhr9dyN67AqAYxB1kRidaM21a0etbp7rs6rlXomuiczWmeJkn8icSNaJNKSFuU8kElai11M_hjRhLLB1SLRMwGWUeKrwL4RMXfEylZ5SL_RSkvsuizaYkec9lVPLm0MtPYrp_uidb_Ol9i_EEhpJ-1PLWf3wzpt0AIrfCfgNZlwMtgD_1b81XMG_BdgJYHjCWhNvByhlL78SAjwZt8bh1KgKMkbiiS_cniw6Hs5Y9xrE3jMwAIJ9cKLlxahyfbLDlBadOEgwsEHIGQNeSyW1ldYcBbI_NndlH_A8lYvHJv_VfdGwTcKI90Yzzj0V9qa-J3btnuH_J8cEmAnUnzNp0G3mtmHJnx_HZ03n1lKWjkDO09KmoNeHDlseg5K6-WwBRN4A-w46Q6BN3tmgR19fGOPC40_T6Qww-ehvMXyX4TywXiTx-Ml25_xwYCDyuuZJ5_N-P346OvxfUB0r_wa0C96-K_kA8uSByGldyF97zN57PNLIX0f02vlJZxRV_Gu5KWIsEqOWV7QhNM0GqtUiC4XCV5yzEsURcF42aZdkouC9vmxjGTFKMtoSRktWJKmMaYtFv0R24ynJeYFpBQnIVWs1NMUazNE0toVqyTLU5ZESrSo7H4xhHjzejO_3w2m8sBDuw4WUqqkdfZG5aRT4Vb5_tuvv0PWQHaqN3DWkO_harh_7Otl0cats3TP0WpUNTq3WOA1sDOw8yDduLbxRU_Azr7N_nZYjP6JFwfsHORbYOfdwVPF_g4AAP__2J71QQ">