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

    <tr>
        <th>Summary</th>
        <td>
            AffineDataCopyGeneration generated Memory buf copy is not right if the buffer access is stride
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    AffineDataCopyGeneration seems to copy the buffer from the beginning to the end. In case buffer is stride, the result is not right.

TestCase

```
func @test(%arg0: memref<32xf32>) -> memref<32xf32> {
  %cst = arith.constant 0.000000e+00 : f32
  affine.for %arg1 = 0 to 16 {
    affine.store %cst, %arg0[%arg1 * 2] : memref<32xf32>
  }
  return %arg0 : memref<32xf32>
}
```
Command:
```
mlir-opt datacopystride.mlir -split-input-file -affine-data-copy-generate="generate-dma=false fast-mem-space=3"
```

Result IR
```
  func @test(%arg0: memref<32xf32>) -> memref<32xf32> {
    %c31 = arith.constant 31 : index
    %c0 = arith.constant 0 : index
    %c0_0 = arith.constant 0 : index
    %cst = arith.constant 0.000000e+00 : f32
    %0 = memref.alloc() : memref<31xf32, 3>
    affine.for %arg1 = 0 to 16 {
      affine.store %cst, %0[%arg1 * 2] : memref<31xf32, 3>
    }
    affine.for %arg1 = 0 to 31 {
      %1 = affine.load %0[%arg1] : memref<31xf32, 3>
      affine.store %1, %arg0[%arg1] : memref<32xf32>
    }
    memref.dealloc %0 : memref<31xf32, 3>
    return %arg0 : memref<32xf32>
  }

```

some discussions here: https://discourse.llvm.org/t/affinedatacopygeneration-issue-with-generating-wrong-buffer-size/61893


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VcFu4zYQ_Rr5MpAgUZI3Oujg2E2xh14WvRcUOZK5kEiDpJqkX98hZXmdrJMmBdYwJHH4OHwz88jpjHxud32vNB6453tzev4dNVruldHgECcH3oAgO_gjQjf3PVrorZmWMQ5Ka6WHgAoG1DKDrxoEdxe0cuC8VRITto8gi24efbBr48Gq4eizJD8k-W55_onO78nBtS3Z5ud_HPazFpBUuSdowu4SVnM75Em5gwkni31S7kv21JcsKX9LWAMpvW9MQfLlfnEIQD6E85CUB-BW-WMmjHaeaw95lscfBXCf5xB2CcvP63hMX9YbCwuNIvrIQ0qK7fUOF6zzxuJ5w5CUlX59f_HAdsCS-gBvhLRy_nJYPy362erV1bvrLqteJXVvpolrSUtvTk-jsqk5eZAklSCJpapZsEPqTqPyqdKn2ae9GhHSJdg0oNMAT4dFWkjpSRhbR6mcOFl6PpJkeu58SrzJHRcBWBLyJpvl-W2R0tdvNzEAv0Ani1LK4pZSonUHSkt8eonPbwrrTfRfn8P_H93Glcs2S8AZH0cjYpaaV_opYh5IqeWV-D4n_ffE_wHlv8Hg6gC8TydU5iUdgpxruCwbDZevyHyYxs_BFTfP9X-f6FchnSsjMdZmrdgHGH3iOrja8p2T5syEIJUTs3PUHBwc0WJwe_T-5MKdwR7oHxBmto7yOf49ZcYOZKQ6PywJWq-O4dJlUuXcjOkjKXe9IKifpI_W0HPpIKlT_5CGH7bFXVNec9rItpRN2fCNV37EtzvZetdI-AMnY59Da1q62nUTAtVfdzkuBDr3o31tZju2L6MdiPXc0YmbaBACPr_SkzXfUYS4Y3iOPuqqaarNsa2bgtf13bZjW1Gzuw5Zh30lc7LKYltVm5F3OLo2qoZpfIToItyD9WGjWpYzllcsL4oqL8tM8JLXfSOkqITsu54uO5y4Gi_539g2UurmwdHkqJx3PyY5VXPQiHE78s9nfzS2FUdK_xMVYhM3byP5fwF2Yl0V">