This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Extreme PRE compile times
- From: law at redhat dot com
- To: dberlin at dberlin dot org
- Cc: gcc at gcc dot gnu dot org
- Date: Wed, 12 Nov 2003 21:42:32 -0700
- Subject: Extreme PRE compile times
- Reply-to: law at redhat dot com
Compiling g++.dg/eh/cleanup1.C without PRE we get:
Execution times (seconds)
garbage collection : 1.56 ( 1%) usr 0.02 ( 2%) sys 1.56 ( 1%) wall
callgraph construction: 0.12 ( 0%) usr 0.02 ( 2%) sys 0.14 ( 0%) wall
cfg construction : 0.55 ( 0%) usr 0.00 ( 0%) sys 0.52 ( 0%) wall
cfg cleanup : 0.64 ( 1%) usr 0.00 ( 0%) sys 0.64 ( 1%) wall
trivially dead code : 0.30 ( 0%) usr 0.00 ( 0%) sys 0.31 ( 0%) wall
life analysis : 3.36 ( 3%) usr 0.01 ( 1%) sys 3.36 ( 3%) wall
life info update : 2.65 ( 2%) usr 0.00 ( 0%) sys 2.62 ( 2%) wall
alias analysis : 0.53 ( 0%) usr 0.00 ( 0%) sys 0.53 ( 0%) wall
register scan : 0.20 ( 0%) usr 0.00 ( 0%) sys 0.22 ( 0%) wall
rebuild jump labels : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall
preprocessing : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall
parser : 1.97 ( 2%) usr 0.06 ( 6%) sys 2.00 ( 2%) wall
name lookup : 0.01 ( 0%) usr 0.02 ( 2%) sys 0.04 ( 0%) wall
integration : 2.04 ( 2%) usr 0.03 ( 3%) sys 2.08 ( 2%) wall
tree gimplify : 0.32 ( 0%) usr 0.00 ( 0%) sys 0.33 ( 0%) wall
tree eh : 0.14 ( 0%) usr 0.01 ( 1%) sys 0.16 ( 0%) wall
tree CFG construction : 0.61 ( 1%) usr 0.03 ( 3%) sys 0.66 ( 1%) wall
tree CFG cleanup : 0.66 ( 1%) usr 0.00 ( 0%) sys 0.69 ( 1%) wall
tree must-alias : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
tree PHI insertion : 12.46 (11%) usr 0.01 ( 1%) sys 12.47 (11%) wall
tree SSA rewrite : 0.09 ( 0%) usr 0.01 ( 1%) sys 0.11 ( 0%) wall
tree SSA other : 0.24 ( 0%) usr 0.02 ( 2%) sys 0.26 ( 0%) wall
tree thread jumps : 0.25 ( 0%) usr 0.03 ( 3%) sys 0.27 ( 0%) wall
dominator optimization: 0.58 ( 1%) usr 0.03 ( 3%) sys 0.61 ( 1%) wall
tree CCP : 0.22 ( 0%) usr 0.01 ( 1%) sys 0.22 ( 0%) wall
tree COPYPROP : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
tree DCE : 0.20 ( 0%) usr 0.01 ( 1%) sys 0.20 ( 0%) wall
tree SSA to normal : 0.26 ( 0%) usr 0.01 ( 1%) sys 0.28 ( 0%) wall
dominance frontiers : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
expand : 0.55 ( 0%) usr 0.03 ( 3%) sys 0.53 ( 0%) wall
jump : 2.81 ( 3%) usr 0.02 ( 2%) sys 2.88 ( 3%) wall
CSE : 1.15 ( 1%) usr 0.00 ( 0%) sys 1.19 ( 1%) wall
global CSE : 4.24 ( 4%) usr 0.41 (42%) sys 4.63 ( 4%) wall
loop analysis : 0.05 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
bypass jumps : 0.63 ( 1%) usr 0.06 ( 6%) sys 0.69 ( 1%) wall
CSE 2 : 0.34 ( 0%) usr 0.00 ( 0%) sys 0.35 ( 0%) wall
branch prediction : 1.72 ( 2%) usr 0.00 ( 0%) sys 1.72 ( 2%) wall
flow analysis : 0.06 ( 0%) usr 0.00 ( 0%) sys 0.08 ( 0%) wall
combiner : 9.35 ( 8%) usr 0.00 ( 0%) sys 9.35 ( 8%) wall
if-conversion : 3.03 ( 3%) usr 0.01 ( 1%) sys 3.03 ( 3%) wall
regmove : 0.16 ( 0%) usr 0.00 ( 0%) sys 0.17 ( 0%) wall
mode switching : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall
local alloc : 0.36 ( 0%) usr 0.01 ( 1%) sys 0.37 ( 0%) wall
global alloc : 17.18 (15%) usr 0.01 ( 1%) sys 17.18 (15%) wall
reload CSE regs : 1.95 ( 2%) usr 0.01 ( 1%) sys 1.96 ( 2%) wall
flow 2 : 0.29 ( 0%) usr 0.00 ( 0%) sys 0.29 ( 0%) wall
if-conversion 2 : 1.24 ( 1%) usr 0.00 ( 0%) sys 1.23 ( 1%) wall
peephole 2 : 0.10 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall
rename registers : 3.73 ( 3%) usr 0.04 ( 4%) sys 3.77 ( 3%) wall
scheduling 2 : 31.25 (28%) usr 0.00 ( 0%) sys 31.27 (28%) wall
reorder blocks : 0.18 ( 0%) usr 0.00 ( 0%) sys 0.17 ( 0%) wall
shorten branches : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
final : 0.20 ( 0%) usr 0.04 ( 4%) sys 0.24 ( 0%) wall
rest of compilation : 0.72 ( 1%) usr 0.01 ( 1%) sys 0.70 ( 1%) wall
TOTAL : 111.58 0.98 112.56
If I turn on tree-pre, then it looks like this:
Execution times (seconds)
garbage collection : 269.10 (29%) usr 0.18 ( 5%) sys 268.95 (28%) wall
callgraph construction: 0.14 ( 0%) usr 0.00 ( 0%) sys 0.15 ( 0%) wall
cfg construction : 0.55 ( 0%) usr 0.00 ( 0%) sys 0.54 ( 0%) wall
cfg cleanup : 0.62 ( 0%) usr 0.00 ( 0%) sys 0.65 ( 0%) wall
trivially dead code : 0.31 ( 0%) usr 0.00 ( 0%) sys 0.33 ( 0%) wall
life analysis : 3.36 ( 0%) usr 0.00 ( 0%) sys 3.35 ( 0%) wall
life info update : 2.65 ( 0%) usr 0.00 ( 0%) sys 2.63 ( 0%) wall
alias analysis : 0.50 ( 0%) usr 0.00 ( 0%) sys 0.50 ( 0%) wall
register scan : 0.20 ( 0%) usr 0.00 ( 0%) sys 0.20 ( 0%) wall
rebuild jump labels : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall
preprocessing : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
parser : 1.98 ( 0%) usr 0.06 ( 2%) sys 2.05 ( 0%) wall
name lookup : 0.07 ( 0%) usr 0.01 ( 0%) sys 0.05 ( 0%) wall
integration : 2.17 ( 0%) usr 0.01 ( 0%) sys 2.18 ( 0%) wall
tree gimplify : 0.33 ( 0%) usr 0.00 ( 0%) sys 0.34 ( 0%) wall
tree eh : 0.15 ( 0%) usr 0.01 ( 0%) sys 0.15 ( 0%) wall
tree CFG construction : 0.61 ( 0%) usr 0.00 ( 0%) sys 0.61 ( 0%) wall
tree CFG cleanup : 0.65 ( 0%) usr 0.00 ( 0%) sys 0.67 ( 0%) wall
tree must-alias : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
tree PHI insertion : 12.48 ( 1%) usr 0.02 ( 1%) sys 12.51 ( 1%) wall
tree SSA rewrite : 0.10 ( 0%) usr 0.01 ( 0%) sys 0.11 ( 0%) wall
tree SSA other : 0.24 ( 0%) usr 0.03 ( 1%) sys 0.26 ( 0%) wall
tree thread jumps : 0.27 ( 0%) usr 0.02 ( 1%) sys 0.28 ( 0%) wall
dominator optimization: 0.92 ( 0%) usr 0.33 ( 9%) sys 1.25 ( 0%) wall
tree CCP : 0.23 ( 0%) usr 0.00 ( 0%) sys 0.22 ( 0%) wall
tree PRE : 562.07 (60%) usr 0.93 (25%) sys 576.33 (60%) wall
tree COPYPROP : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
tree DCE : 0.21 ( 0%) usr 0.00 ( 0%) sys 0.20 ( 0%) wall
tree SSA to normal : 1.14 ( 0%) usr 1.59 (42%) sys 3.17 ( 0%) wall
dominance frontiers : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall
expand : 0.50 ( 0%) usr 0.05 ( 1%) sys 0.60 ( 0%) wall
varconst : 0.00 ( 0%) usr 0.01 ( 0%) sys 0.00 ( 0%) wall
jump : 2.71 ( 0%) usr 0.02 ( 1%) sys 2.72 ( 0%) wall
CSE : 1.28 ( 0%) usr 0.00 ( 0%) sys 1.31 ( 0%) wall
global CSE : 4.17 ( 0%) usr 0.39 (10%) sys 4.55 ( 0%) wall
loop analysis : 0.05 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
bypass jumps : 0.61 ( 0%) usr 0.07 ( 2%) sys 0.68 ( 0%) wall
CSE 2 : 0.38 ( 0%) usr 0.00 ( 0%) sys 0.37 ( 0%) wall
branch prediction : 1.76 ( 0%) usr 0.00 ( 0%) sys 1.74 ( 0%) wall
flow analysis : 0.07 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%) wall
combiner : 9.36 ( 1%) usr 0.00 ( 0%) sys 9.36 ( 1%) wall
if-conversion : 3.28 ( 0%) usr 0.00 ( 0%) sys 3.29 ( 0%) wall
regmove : 0.17 ( 0%) usr 0.00 ( 0%) sys 0.17 ( 0%) wall
mode switching : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall
local alloc : 0.36 ( 0%) usr 0.00 ( 0%) sys 0.37 ( 0%) wall
global alloc : 16.83 ( 2%) usr 0.00 ( 0%) sys 16.83 ( 2%) wall
reload CSE regs : 2.04 ( 0%) usr 0.01 ( 0%) sys 2.04 ( 0%) wall
flow 2 : 0.27 ( 0%) usr 0.00 ( 0%) sys 0.29 ( 0%) wall
if-conversion 2 : 1.15 ( 0%) usr 0.00 ( 0%) sys 1.16 ( 0%) wall
peephole 2 : 0.10 ( 0%) usr 0.00 ( 0%) sys 0.10 ( 0%) wall
rename registers : 3.74 ( 0%) usr 0.02 ( 1%) sys 3.76 ( 0%) wall
scheduling 2 : 31.91 ( 3%) usr 0.00 ( 0%) sys 31.90 ( 3%) wall
reorder blocks : 0.17 ( 0%) usr 0.00 ( 0%) sys 0.18 ( 0%) wall
shorten branches : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall
final : 0.23 ( 0%) usr 0.01 ( 0%) sys 0.25 ( 0%) wall
rest of compilation : 0.69 ( 0%) usr 0.00 ( 0%) sys 0.71 ( 0%) wall
TOTAL : 943.25 3.79 960.50
Clearly PRE is still doing something that's not terribly intelligent given
that PRE + the increase the GC time accounts for 90% of the total
compilation time for this file.
jeff