Yes it is a very common optimisation called Loop invariant code motion, also called hoisting or scalar promotion, often performed as a side effect of Common subexpression elimination.
It is valid to compute sys->pot.atoms
just once before the loop if the compiler can ascertain that neither sys
nor sys->pot.atoms
can be modified inside the loop.
Note however, as commented by Groo, that if sys
or sys->pot
or sys->pot.atoms
are specified as volatile
, then it would be incorrect to compute it only once if the expression sys->pot.atoms
is evaluated multiple times in the loop body or expressions.
CLICK HERE to find out more related problems solutions.