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