This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Compile-time performance and Lengauer/Tarjan dominators computation
- To: gcc-patches at gcc dot gnu dot org
- Subject: Compile-time performance and Lengauer/Tarjan dominators computation
- From: Brad Lucier <lucier at math dot purdue dot edu>
- Date: Tue, 7 Nov 2000 10:27:54 -0500 (EST)
- Cc: lucier at math dot purdue dot edu, matzmich at cs dot tu-berlin dot de
This is just a note to point out the performance benefits of this patch
http://gcc.gnu.org/ml/gcc-patches/2000-10/msg00076.html
on large routines with many jumps (e.g., implementations of finite-state
machines using gcc's computed goto).
Without this patch, I get with the CVS sources on a large file of this type:
Execution times (seconds)
garbage collection : 1.11 ( 0%) usr 0.00 ( 0%) sys 1.13 ( 0%) wall
preprocessing : 0.61 ( 0%) usr 0.13 ( 7%) sys 0.75 ( 0%) wall
lexical analysis : 0.71 ( 0%) usr 0.29 (15%) sys 1.01 ( 0%) wall
parser : 2.72 ( 1%) usr 0.32 (17%) sys 3.04 ( 1%) wall
varconst : 0.10 ( 0%) usr 0.00 ( 0%) sys 0.10 ( 0%) wall
integration : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall
jump : 13.58 ( 5%) usr 0.83 (43%) sys 14.47 ( 5%) wall
CSE : 1.93 ( 1%) usr 0.00 ( 0%) sys 1.93 ( 1%) wall
global CSE : 3.22 ( 1%) usr 0.02 ( 1%) sys 3.25 ( 1%) wall
loop analysis : 0.16 ( 0%) usr 0.00 ( 0%) sys 0.16 ( 0%) wall
CSE 2 : 1.71 ( 1%) usr 0.00 ( 0%) sys 1.72 ( 1%) wall
flow analysis : 62.60 (22%) usr 0.04 ( 2%) sys 62.69 (21%) wall
combiner : 1.24 ( 0%) usr 0.00 ( 0%) sys 1.24 ( 0%) wall
if-conversion : 70.20 (24%) usr 0.06 ( 3%) sys 70.34 (24%) wall
regmove : 0.45 ( 0%) usr 0.00 ( 0%) sys 0.45 ( 0%) wall
scheduling : 9.82 ( 3%) usr 0.03 ( 2%) sys 9.85 ( 3%) wall
local alloc : 12.52 ( 4%) usr 0.00 ( 0%) sys 12.52 ( 4%) wall
global alloc : 2.52 ( 1%) usr 0.08 ( 5%) sys 2.61 ( 1%) wall
reload CSE regs : 14.65 ( 5%) usr 0.00 ( 0%) sys 14.66 ( 5%) wall
flow 2 : 12.96 ( 4%) usr 0.00 ( 0%) sys 12.97 ( 4%) wall
if-conversion 2 : 61.24 (21%) usr 0.03 ( 2%) sys 61.33 (21%) wall
peephole 2 : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
scheduling 2 : 10.21 ( 4%) usr 0.00 ( 0%) sys 10.21 ( 3%) wall
reorder blocks : 1.75 ( 1%) usr 0.00 ( 0%) sys 1.75 ( 1%) wall
shorten branches : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
final : 3.11 ( 1%) usr 0.03 ( 2%) sys 3.15 ( 1%) wall
symout : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
rest of compilation : 0.70 ( 0%) usr 0.00 ( 0%) sys 0.70 ( 0%) wall
TOTAL : 290.21 1.95 292.44
With this patch, I get
Execution times (seconds)
garbage collection : 1.14 ( 1%) usr 0.00 ( 0%) sys 1.15 ( 1%) wall
preprocessing : 0.59 ( 1%) usr 0.13 ( 8%) sys 0.73 ( 1%) wall
lexical analysis : 0.75 ( 1%) usr 0.28 (16%) sys 1.03 ( 1%) wall
parser : 2.71 ( 2%) usr 0.30 (17%) sys 3.01 ( 3%) wall
varconst : 0.10 ( 0%) usr 0.00 ( 0%) sys 0.14 ( 0%) wall
integration : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall
jump : 13.59 (12%) usr 0.75 (43%) sys 14.37 (12%) wall
CSE : 1.90 ( 2%) usr 0.00 ( 0%) sys 1.92 ( 2%) wall
global CSE : 3.20 ( 3%) usr 0.01 ( 1%) sys 3.21 ( 3%) wall
loop analysis : 0.17 ( 0%) usr 0.00 ( 0%) sys 0.17 ( 0%) wall
CSE 2 : 1.61 ( 1%) usr 0.00 ( 0%) sys 1.61 ( 1%) wall
flow analysis : 16.32 (14%) usr 0.02 ( 2%) sys 16.40 (14%) wall
combiner : 1.26 ( 1%) usr 0.00 ( 0%) sys 1.26 ( 1%) wall
if-conversion : 4.81 ( 4%) usr 0.04 ( 2%) sys 4.86 ( 4%) wall
regmove : 0.47 ( 0%) usr 0.00 ( 0%) sys 0.47 ( 0%) wall
scheduling : 10.05 ( 9%) usr 0.02 ( 2%) sys 10.08 ( 9%) wall
local alloc : 11.69 (10%) usr 0.00 ( 0%) sys 11.71 (10%) wall
global alloc : 2.55 ( 2%) usr 0.09 ( 5%) sys 2.66 ( 2%) wall
reload CSE regs : 12.93 (11%) usr 0.00 ( 0%) sys 12.94 (11%) wall
flow 2 : 12.76 (11%) usr 0.00 ( 0%) sys 12.82 (11%) wall
if-conversion 2 : 1.57 ( 1%) usr 0.01 ( 1%) sys 1.58 ( 1%) wall
peephole 2 : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
scheduling 2 : 8.86 ( 8%) usr 0.00 ( 0%) sys 8.88 ( 8%) wall
reorder blocks : 1.74 ( 2%) usr 0.00 ( 0%) sys 1.74 ( 1%) wall
shorten branches : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
final : 3.18 ( 3%) usr 0.02 ( 2%) sys 3.21 ( 3%) wall
symout : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
rest of compilation : 0.73 ( 1%) usr 0.00 ( 0%) sys 0.74 ( 1%) wall
TOTAL : 115.06 1.77 117.36
This is on a dual processor 500 MHz Alpha 21264 running linux.
The system I'm compiling has about 40 files like this, so this one
patch makes a big difference in compile times, i.e., it cuts the
user time by about an hour, the wall time by about half that much.
Brad Lucier