The initial objective of this research is to develop techniques that significantly reduce the performance cost incurred by program profiling. Compiler techniques will be developed that exploit program semantics and features found in existing architectures to reduce the cost of profiling. New architecture techniques will be developed that support low-cost profiling. The high cost of existing profiling approaches precludes on-line profiling. However, on-line profiling is highly desirable because it could provide more accurate characterization of a program's behavior. A specific goal of this work is to reduce the cost of program profiling so that on-line profiling becomes feasible. On- line profiling is the enabling technology for adaptive code- optimizations, which will also be studied in this project. Code optimizations that adapt to changing patterns in program behavior can potentially provide significant performance improvement compared with the traditional static compile-time optimizations. An additional objective of this project is to develop new low- cost program profiling approaches that can more completely characterize program behavior, including profiling of multiple- basic-block traces and accurate characterization of data cache behavior.