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

    <tr>
        <th>Summary</th>
        <td>
            [LoopCacheAnalysis] Cost Value Overflow
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            loopoptim
      </td>
    </tr>

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

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

<pre>
    LoopCacheAnalysis uses int64_t type to represent the cost of reference groups, but the algorithm tends to produce large values that can overflow 64-bit int types. For example:

```
#define M 1024*8
void foo(int N, float A[][N][N][N][N], float B[][N][N][N][N], float C[][N][N][N][N]) {
  for (int i1 = 0; i1 < M; i1++)
    for (int i2 = 0; i2 < M; i2++)
      for (int i3 = 0; i3 < M; i3++)
        for (int i4 = 0; i4 < M; i4++)
          for (int i5 = 0; i5 < M; i5++)
            A[i1][i2][i3][i4][i5] += B[i1][i2][i3][i4][i5] + C[i1][i2][i3][i4][i5];
}
```

```
opt -passes='print<loop-cache-cost>' tmp.simp.ll -disable-output
Loop 'for.body16' has cost = 3458764513820540928
Loop 'for.body' has cost = 0
Loop 'for.body4' has cost = 0
Loop 'for.body8' has cost = 0
Loop 'for.body12' has cost = 0
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVMlu2zAQ_RrqMrAgkVoPOnhJTk1667WgJMpiQIsCSbnN33coOa3c2IADEBwu84aPs9W6fa--aT3uedOL7cDVu5UWJissyMFlyU8H7n0U4DQYMRphxYAnvYBGWwe6w9NOGDE0Ao5GT6MldA_1tOhwddRGuv4ETgyt9UZGo9sJlRU3RwFnriZ8yfXcQcMH0GdhOqV_QZZsauk8hfl5G8KzNiB-89OoBGFbEh1I9DFn0WUsW8pa0clBwAvEEU0I3RbLzVnLFjqtCS284VdPFV_Dt7ck3ZH0gPPrXfFXefcV5f0jyiWQfLdwBCRo4MJQxkDYASLCdst6Dy_LmtDdPMoP1DWOrnB0haM3cNdItkKyFZLdRF5jkxU2WWGTO9hrdLpCpyt0ehcNc9zQGbMr8XOLZBeZXGSKErwFNL_7CmAO3kPaSPSSfPnhdlLeOtSjg83ILRYbciM0Hw16An-usCA3ja_IjS8zwp7wEtxpDK3ESSnYtNLyWomNntw4ucWer2PknaNXwxoLO848rOd2KVb_f5akRZ4lacwKGqVJVNLiNvYTMrqtlzyqWDyqGNN7mv-5L2gr1pas5IGTTokKg_Gpk_lI7r2ZH77TwPdLfwkmo6reOWxX2EvoM44j9qmpDht9wo1S5w-xwY71JhqHW2ktditcpCllLOgr3rK2aXle1GkeFYynCY9YGhdtnNU1K1mgeC2U9cwIpT6qGHKJln0uBbKiEcUoRDQukiwqw4x3tMzQWls3NG47kkTixKUKPY9Qm2NgqplSPR0tXippnf13iYkkj4OYHeHt88n12lT1ifdvejLBTL-auf8B5eel0g">