22
At the bottom of Demystifying the Restrict Keyword is this curious advice:
Due to the order in which scheduling is done in GCC, it is always better to simplify expressions. Do not mix memory access with calculations. The code can be re-written as follows:
then there is an example which is essentially transforming this
velocity_x[i] += acceleration_x[i] * time_step;
into this
const float ax = acceleration_x[i]; // Then the same follows for y, z
const float vx = velocity_x[i]; // etc for y, z
const float nvx = vx + ( ax * time_step ); // etc
velocity_x[i] = nvx; // ...
Really? I would have thought this sort of transformation was trivial compared to other stuff optimising compilers have to do, such as lambda arguments to std::foreach and so on.
Is this just stale, silly advice? Or is there a good reason why GCC can't or won't do this? (It makes me worry about writing the above as velocity += acceleration * time_step using my Vector3f class!