<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">