GCC 4.4.0 was released on April 21st. Notable changes include fascinating new optimizations for loops. Particularly, they include the ability for the compiler to automatically rewrite loops to take into account memory layout of the system. I recall distinctly in my Intro to Data Structures CS class the teacher using the example of a two dimensional loop which iterated the “wrong way” (causing many disparate memory look ups and cache-misses) as a classic performance killer. Example (from GCC’s website), GCC is now able to perform the following optimization:
-floop-interchange performs loop interchange transformations on loops. Interchanging two nested loops switches the inner and outer loops. For example, given a loop like: ` DO J = 1, M DO I = 1, N A(J, I) = A(J, I) * C ENDDO ENDDO
loop interchange will transform the loop as if the user had written:
DO I = 1, N DO J = 1, M A(J, I) = A(J, I) * C ENDDO ENDDO`
Also, GCC 4.4.0 includes many enhancements to its implementation of the C++0x draft standard.