Loop-Invariant Code Motion
Principles
Loop-invariant code motion recognizes computations within a loop that produce the same result each time the loop is executed and moves them outside the loop body. This can effectively reduce the number of computations in the loop and speed up the code running. The compiler can optimize some code without changing the code. If an expression has a pointer or reference, the compiler does not automatically optimize the expression.
Modification Method
Before:
void fun(int arrayA [], int *p) {
for (int i = 0; i < ARRAYLEN; ++i) {
arrayA [i] = *p + *p + i;
}
}
After:
void fun(int arrayA [], int *p) {
int tmp = *p + *p;
for (int i = 0; i < ARRAYLEN; ++i) {
arrayA [i] = tmp + i;
}
}
Parent topic: Optimization of Hot Functions