<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/89912>89912</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: Redundant array assignment
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ZY546
</td>
</tr>
</table>
<pre>
The following reduced code makes the same assignment to array `a` twice, the second time being redundant.
https://godbolt.org/z/8Kods3soK
```cpp
int a[1024];
int b[1024];
void func()
{
for (int i = 0; i < 1024; i+=1) {
a[i] = b[i] * 2;
}
for (int i = 0; i < 1024; i+=1) {
a[i] = b[i] * 2;
}
}
```
Clang:
```asm
func: # @func
xor edx, edx
lea rax, [rip + b]
lea rcx, [rip + a]
.LBB0_1: # =>This Inner Loop Header: Depth=1
movdqa xmm0, xmmword ptr [rax + 4*rdx]
movdqa xmm1, xmmword ptr [rax + 4*rdx + 16]
movdqa xmm2, xmmword ptr [rax + 4*rdx + 32]
movdqa xmm3, xmmword ptr [rax + 4*rdx + 48]
paddd xmm0, xmm0
paddd xmm1, xmm1
movdqa xmmword ptr [rcx + 4*rdx], xmm0
movdqa xmmword ptr [rcx + 4*rdx + 16], xmm1
paddd xmm2, xmm2
paddd xmm3, xmm3
movdqa xmmword ptr [rcx + 4*rdx + 32], xmm2
movdqa xmmword ptr [rcx + 4*rdx + 48], xmm3
add rdx, 16
cmp rdx, 1024
jne .LBB0_1
xor edx, edx
.LBB0_3: # =>This Inner Loop Header: Depth=1
movdqa xmm0, xmmword ptr [rax + 4*rdx]
movdqa xmm1, xmmword ptr [rax + 4*rdx + 16]
movdqa xmm2, xmmword ptr [rax + 4*rdx + 32]
movdqa xmm3, xmmword ptr [rax + 4*rdx + 48]
paddd xmm0, xmm0
paddd xmm1, xmm1
movdqa xmmword ptr [rcx + 4*rdx], xmm0
movdqa xmmword ptr [rcx + 4*rdx + 16], xmm1
paddd xmm2, xmm2
paddd xmm3, xmm3
movdqa xmmword ptr [rcx + 4*rdx + 32], xmm2
movdqa xmmword ptr [rcx + 4*rdx + 48], xmm3
add rdx, 16
cmp rdx, 1024
jne .LBB0_3
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUVk2TozYQ_TXNpWtdQgLbHDiYIa6kdnNJ7SW5pGTUY2sDiEjyjHd_fUrCHsN87Eeyk0ooFwL166enlp_d0jm974lKyCvI60Qe_cHY8rdf82yZ7Iz6WL4_EN6atjX3ut-jJXVsSGFjFGEn_yCH_kDoZEc4cnXUe_QGpbXyI8KSSVgy9Pe6IeA3I5oa0yv0uiPc0YW2V7L3C2A1sM14P3g_OBAb4Fvg271RO9P6hbF74NtPwLfrt0Y54czbaRIs2fhphmGc0b1HCXmVMp5BXoOorvO7Z-bH-53RCm-PfQN8Dbw4h1ZnDCLirbEIfB1oNIKokYGo4uMNRs7wBrwCUafAC5wlhyuI0pDXMXn38MI3yB_EBBys6qmyf2_t68IPD5fqTgXdtLLfh3OaQ6TrxplYRbFB4AIhY_F1JuZkbBxJncJ3JAyzeEsyjlbGOOSV1QMCr4Lys7IrqHkMkg-gxbuqYr-nQcwXrqhV1CB-eH_QDn_qe7L4zpgBfySpyAaKmgZ_iBWeqe3MnfpTIp66jgUlp667N1bh4G1UJU9RVQZ8Y9XpuoGn6emX0-NzuryyTNL5V6YL_jkR4itZsvUTlkEqpXBWCfYi4rLZl6s5U9A8qeKzC5zTP589KeKzGiYqLzXlZ8QkdCmU-DsbmBzEfIFvZxkP4lktUim0o8nS5TzUdMNon3M4_IjMAB96iuPFQ2PwJeuOKPHfdNo_tNjT1f_fTvs-Fns9j80Qr2a07-ewqY0uLvtGez1iteQf_bkmqhSqEIVMqExXqSjyfL3Mk0PZsCwXtCIheFOsl2uSKmW3oiElZJYXeaJLznjGMp6lLE9ZvlixYsXTVSEES1cyk5Ax6qRuF21714V2K9HOHalcF0XKk1buqHWxX-S8p3uMQeChooktQ86b3XHvIGOtdt5dWbz2LZU_a-dIoRm87vQn6bXpg8N_uXSA58bx2kwmR9uWj1pB7Q_H3aIxHfBt4D8PbwZrPlDjgW-jKheaxKD6rwAAAP__v_XvlA">