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

    <tr>
        <th>Summary</th>
        <td>
            [MemCpyOpt or GVN] Load source from memcpy
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:optimizations,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    The following IR can be transformed from `load i24, ptr %dest` to `load i24, ptr %src` so that we can know `%arg` equals `%arg2`.

```llvm
define noundef i1 @wombat(ptr align 4 %src) {
bb:
  %dest = alloca [3 x i8], align 4
 %arg = load i24, ptr %src, align 4
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(3) %dest, ptr noundef nonnull align 4 dereferenceable(3) %src, i64 3, i1 false)
  %arg2 = load i24, ptr %dest, align 4
  %select = icmp eq i24 %arg, %arg2
  call void @snork(ptr nonnull %dest)
  ret i1 %select
}

declare void @snork(ptr)

declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVFtvqzgQ_jXmZdQIBkjggYe0UVYr7UVarfbdlyHx1tjUNs1mf_2RgaQ9Om2lI1lKBN_Md_EwPAR9skQdqx8ZotLcvjwzRFYfMj7Fs_Pd8iwTTl27v88EvTPGXbQ9wa9_geQWBEH03Ibe-YEU9N4NwLa5cVyBxorhE4zRA8NaUYhsm0N0nwCCl-l9cBDPPMKFZoJn6y6pgGHN_SkB6GXiJrw9Q7bNNyzfp7PNl2PM68DyvaJeWwLrJquoB10Aq_KLGwSPDJvEy40-Wahu_NgC2z2yfC8EK1NHuEkHVh6AG-MkB1Y_lvAf6IbVh2RgbZLgi6QZ_InF7_EguTHw6rRK0pLszUCDHK-bMU9Hb6tV6c2EddZOxtyVK_LUkycriQtDDJtytrEmvpL_fPWqVW8rKOc_BfTcBGLY3nJJ4X9m9Ub-3mvqSobkEqaWwwj0kurWZgl_u9MfsgnW-ed7FouLO88iyVOc7_hGkyZid1hGQ5E03NNH7ZbyDzBfXwc3mge4eB3JWXMFycc4eQoMG-vsnNM9_AXriasvoHPzOWg9DHMc7fuZzlRXqrZseUZdsavqtizbosjOHQqsZS8aJXJFRSOVanoudgXfiUJVkme6wxzrvMK2KMumLDayrmS7k9jWW2xyIViV08C12cyOnT9lOoSJuqLcNUWeGS7IhHVNzJ9WuXdj1IP-n0ftbEhLA58Y4qBDIPXw_uW6UHyXCh_EdAopWR1ieGOLOpp5Df1Ow9N4_XOM4Dz88s8frD7Ab2m4gpu8pGW_LDeSTd505xjHkL5UPDI8nnQ8T2Ij3cDwOOtcfh5G7_5N84DH2VdgeFytvXb4LQAA__9OHY0G">