Issue |
89912
|
Summary |
Missed optimization: Redundant array assignment
|
Labels |
new issue
|
Assignees |
|
Reporter |
ZY546
|
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
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs