Abstract:
This paper describes the design and implementation of an optimizing compiler that automatically generates profile information to assist classic code optimizations. This compiler contains two new components, an execution profiler and a profile-based code optimizer, which are not commonly found in traditional optimizing compilers. The execution profiler inserts probes into the input program, executes the input program for several inputs, accumulates profile information, and supplies this information to the optimizer. The profile-based code optimizer uses the profile information to expose new optimization opportunities that are not visible to traditional global optimization methods. Experimental results show that the profile-based code optimizer significantly improves the performance of production C programs that have already been optimized by a high-quality global code optimizer.
Citations
|
597
|
Trace scheduling : A technique for global microcode compaction
– Fisher
- 1981
|
|
271
|
Bulldog: A Compiler for VLIW Architectures
– Ellis
- 1985
|
|
240
|
Profile guided code positioning
– Pettis, Hansen
- 1990
|
|
238
|
gprof: a call graph execution profiler
– Graham, Kessler, et al.
- 1982
|
|
223
|
Partitioning and scheduling parallel programs for multi-processors
– Sarkar
- 1989
|
|
176
|
Global Register Allocation at Link Time
– Wall
- 1986
|
|
147
|
Achieving High Instruction Cache Performance with an Optimizing Compiler
– Hwu, Chang
- 1989
|
|
92
|
A catalogue of optimizing transformations
– Allen, Cocke
- 1972
|
|
84
|
Determining Average Program Execution Times and Their Variance
– Sarkar
- 1989
|
|
66
|
Trace selection for compiling large C application programs to microcode
– Chang, Hwu
- 1988
|
|
58
|
An Execution Profiler for Modular Programs
– Graham, Kessler, et al.
- 1983
|
|
53
|
Comparing software and hardware schemes for reducing the cost of branches
– Hwu, Conte, et al.
- 1989
|
|
34
|
Register Windows vs. Register Allocation
– Wall
- 1988
|
|
32
|
Inline Function Expansion for Compiling Realistic C Programs
– Hwu, Chang
- 1989
|
|
25
|
Pro le guided code positioning
– Pettis, Hansen
- 1990
|
|
25
|
Using pro le information to assist classic code optimizations
– Chang, Mahlke, et al.
- 1991
|
|
12
|
An execution pro ler for modular programs
– Graham, Kessler, et al.
- 1983
|
|
6
|
Control Flow Optimization for Supercomputer Scalar Processing
– Chang, Hwu
- 1989
|
|
5
|
gprof: A Call Graph Execution Pro ler
– Graham, Kessler, et al.
- 1982
|
|
3
|
Reducing the Cost of Branches", The
– McFarling, Hennessy
- 1986
|
|
1
|
Editor), Design and Optimization of Compilers
– Rustin
- 1972
|