The IMPACT-I C compiler obtains, analyzes, and applies program control flow information to guide various code
improving techniques. To obtain program control flow information, a system independent profiler has been
integrated into the compiler front end. The control flow information obtained is converted into a data structure
called a weighted control graph. Function inline expansion, trace based optimizations, software branch prediction
technique, and instruction memory layout optimization can be applied to the weighted control graph. Function
inline expansion drastically reduces the number of function calls in the program execution. The software branch
prediction technique greatly reduces the cost of branch instructions for highly pipelined processors. Trace selection
heuristics group basic blocks which tend to execute in a sequence into a trace. Conventional global code compaction
techniques can be applied on traces. Finally, we show that instruction placement can lead to better instruction
cache performance.