There are a large number of possible compiler optimizations that can be used to improve the efficiency of code. In this project, I implemented five basic optimizations, namely - local constant folding and common sub-expression elimination (using value numbering), unreachable code elimination, global constant propagation, loop invariant code motion and dead code elimination.
All these optimizations were tested on a set of six benchmark programs (5 fortran programs and 1 C program). These are standard benchmark programs which are computation intensive. They are as follows -
I used the SimpleSUIF compiler, developed at Stanford University, CA. The SimpleSUIF front-end outputs an intermediate representation of the code, which serves as the input to my optimizer. The output of the optimizer is used by the compiler back-end to generate the actual machine dependent code. The profiling of the optimized code was done using QPT2 (Quick Profiler and Tracer). I report the actual number of instructions executed by the optimized code as well as the number of SimpleSUIF instructions generated after optimization for each of the benchmarks.