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->pot.atoms can be modified inside the loop.
Note however, as commented by Groo, that if
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.