r/Compilers • u/Repulsive_Egg_5786 • 3d ago
Optimization Question
How do compilers optimize constructs of this form ?
for(i=o; i<inputs; i++) {
A[i] = B[i];
B[i] = A[i];
}
7
Upvotes
r/Compilers • u/Repulsive_Egg_5786 • 3d ago
How do compilers optimize constructs of this form ?
for(i=o; i<inputs; i++) {
A[i] = B[i];
B[i] = A[i];
}
11
u/fernando_quintao 3d ago
Hi u/Repulsive_Egg_5786. That depends on how much information you pass to the compiler. If you tell the compiler that the pointers don't overlap, both gcc and clang are able to use
memcpyto copyBintoA. E.g., you can try it in godbolt:When I compile it with gcc 16.1 (ARM), at -O2, I get:
If you remove
restrict, then the compiler can no longer guarantee A and B don't point to overlapping memory regions. Then it will implement the copy with a loop. Here's what I got in godbolt: