Major part of his work is related to loop optimizations. He implemented new data structure to hold natural loop tree and modified natural loop discovery code originally contributed by Michael Hayes to produce it. On the top of it he implemented loop unswitching, loop unrolling and loop peeling algorithms, one of the most successful new optimizations in our project.
He also made numerous contributions to the control flow graph handling code, most importantly he changed the basic block representation from linearly ordered array to double linked list avoiding quadratical complexity of many important algorithms in new CFG aware code. This required many changes of code in compiler that uses basic blocks.
He also found and fixed many latent bugs in the compiler and our new improved CFG manipulation code.
Predating the official start of project, he implemented first prototype of working basic block profiler, extended branch prediction pass and modified few passes to use the information. Since the information was not maintained only register allocation used the information. He also implemented bare bones of future cfg-cleanup pass.
In later stages of project he implemented few new optimization passes (tracer, webizer, register coalescing), but continued to concentrate on GCC cleanups and infrastructural changes and later on mid-level RTL implementation. He also reviewed majority of contributions of other participants before integrating to the source tree.
Pavel has also reimplemented the interface between profile instrumentation generated by compiler and the libgcc runtime in cleaner and more extensible way.
Last his major contribution is new data structure to hold dominance information that allows fast dynamical updates and is necessary for Zdenek's new loop optimizer code.
Most important contribution is probably the new variable tracking pass fixing the aged defect of GCC debugging information output code allowing us to enable more optimizations at default level.
Josef has also reviewed lots of code done by Jan Hubicka and provided useful comments and fixed important bugs.
Following people has contributed to our project:
Jan Hubicka 2003-05-04