  A compiler processes the code written in a high level language and produces
machine executable code. The compiler writers often face the challenge of
keeping the compilation times reasonable. That is because aggressive
optimization passes which potentially will give rise to high performance are
often expensive in terms of running time and memory footprint. Consequently the
compiler designers arrive at a compromise where they either simplify the
optimization algorithm which may decrease the performance of the produced code,
or they will restrict the optimization to the subset of the overall input
program in which case large parts of the input application will go
un-optimized.
  The problem we address in this paper is that of keeping the compilation times
reasonable, and at the same time optimizing the input program to the fullest
extent possible. Consequently, the performance of the produced code will match
the performance when all the aggressive optimization passes are applied over
the entire input program.
