optimization/10196: [3.3/3.4 regression] Compile time regression with inlining
Richard Guenther
rguenth@tat.physik.uni-tuebingen.de
Mon Mar 24 15:16:00 GMT 2003
Corrected URL for the testcase is
http://www.tat.physik.uni-tuebingen.de/~rguenth/DynamicLayout2.cmpl.ii.gz
with g++-3.3 (GCC) 3.3 20030318 (prerelease) time report gives:
Execution times (seconds)
garbage collection : 10.45 ( 0%) usr 0.26 ( 1%) sys 13.75 ( 0%)
wall
cfg construction : 5.49 ( 0%) usr 0.12 ( 0%) sys 6.81 ( 0%)
wall
cfg cleanup : 15.82 ( 1%) usr 0.12 ( 0%) sys 20.12 ( 1%)
wall
trivially dead code : 2.08 ( 0%) usr 0.07 ( 0%) sys 3.38 ( 0%)
wall
life analysis : 1.45 ( 0%) usr 6.43 (23%) sys 11.50 ( 0%)
wall
life info update : 0.68 ( 0%) usr 2.49 ( 9%) sys 3.56 ( 0%)
wall
preprocessing : 0.31 ( 0%) usr 0.14 ( 0%) sys 6.38 ( 0%)
wall
lexical analysis : 0.20 ( 0%) usr 0.07 ( 0%) sys 0.19 ( 0%)
wall
parser : 2.26 ( 0%) usr 0.26 ( 1%) sys 3.19 ( 0%)
wall
name lookup : 1.19 ( 0%) usr 0.35 ( 1%) sys 1.75 ( 0%)
wall
expand :2148.17 (96%) usr 13.00 (46%) sys2628.00 (94%)
wall
varconst : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
integration : 0.68 ( 0%) usr 0.02 ( 0%) sys 1.06 ( 0%)
wall
jump : 20.45 ( 1%) usr 0.69 ( 2%) sys 25.69 ( 1%)
wall
CSE : 4.46 ( 0%) usr 0.38 ( 1%) sys 6.62 ( 0%)
wall
global CSE : 3.48 ( 0%) usr 0.70 ( 2%) sys 6.25 ( 0%)
wall
loop analysis : 4.81 ( 0%) usr 1.49 ( 5%) sys 8.06 ( 0%)
wall
CSE 2 : 1.25 ( 0%) usr 0.10 ( 0%) sys 1.94 ( 0%)
wall
branch prediction : 0.78 ( 0%) usr 0.10 ( 0%) sys 1.31 ( 0%)
wall
flow analysis : 0.79 ( 0%) usr 0.11 ( 0%) sys 1.38 ( 0%)
wall
combiner : 0.75 ( 0%) usr 0.13 ( 0%) sys 1.31 ( 0%)
wall
if-conversion : 0.39 ( 0%) usr 0.01 ( 0%) sys 0.50 ( 0%)
wall
regmove : 0.35 ( 0%) usr 0.02 ( 0%) sys 0.56 ( 0%)
wall
mode switching : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%)
wall
local alloc : 1.94 ( 0%) usr 0.58 ( 2%) sys 3.62 ( 0%)
wall
global alloc : 2.19 ( 0%) usr 0.16 ( 1%) sys 2.81 ( 0%)
wall
reload CSE regs : 2.15 ( 0%) usr 0.19 ( 1%) sys 3.12 ( 0%)
wall
flow 2 : 0.68 ( 0%) usr 0.07 ( 0%) sys 1.06 ( 0%)
wall
if-conversion 2 : 0.06 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
peephole 2 : 0.14 ( 0%) usr 0.01 ( 0%) sys 0.25 ( 0%)
wall
rename registers : 0.33 ( 0%) usr 0.01 ( 0%) sys 0.31 ( 0%)
wall
scheduling 2 : 1.28 ( 0%) usr 0.10 ( 0%) sys 2.06 ( 0%)
wall
reorder blocks : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%)
wall
shorten branches : 0.44 ( 0%) usr 0.02 ( 0%) sys 0.75 ( 0%)
wall
final : 0.50 ( 0%) usr 0.01 ( 0%) sys 0.88 ( 0%)
wall
symout : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
rest of compilation : 8.54 ( 0%) usr 0.11 ( 0%) sys 17.62 ( 1%)
wall
TOTAL :2244.76 28.32 2786.25
with (after fix of related PR c++/7086) time report gives:
Execution times (seconds)
garbage collection : 10.39 ( 7%) usr 0.35 ( 1%) sys 12.69 ( 6%)
wall
cfg construction : 5.62 ( 4%) usr 0.15 ( 1%) sys 8.69 ( 4%)
wall
cfg cleanup : 16.23 (11%) usr 0.25 ( 1%) sys 18.94 ( 8%)
wall
trivially dead code : 2.17 ( 1%) usr 0.11 ( 0%) sys 3.06 ( 1%)
wall
life analysis : 1.54 ( 1%) usr 6.60 (22%) sys 9.50 ( 4%)
wall
life info update : 0.80 ( 1%) usr 2.54 ( 8%) sys 4.12 ( 2%)
wall
preprocessing : 0.21 ( 0%) usr 0.08 ( 0%) sys 1.75 ( 1%)
wall
lexical analysis : 0.21 ( 0%) usr 0.07 ( 0%) sys 0.44 ( 0%)
wall
parser : 2.33 ( 2%) usr 0.32 ( 1%) sys 2.94 ( 1%)
wall
name lookup : 1.21 ( 1%) usr 0.38 ( 1%) sys 1.50 ( 1%)
wall
expand : 50.55 (34%) usr 12.93 (43%) sys 80.06 (35%)
wall
varconst : 0.06 ( 0%) usr 0.01 ( 0%) sys 0.25 ( 0%)
wall
integration : 0.66 ( 0%) usr 0.03 ( 0%) sys 0.88 ( 0%)
wall
jump : 20.92 (14%) usr 1.32 ( 4%) sys 30.06 (13%)
wall
CSE : 4.49 ( 3%) usr 0.38 ( 1%) sys 5.69 ( 2%)
wall
global CSE : 3.60 ( 2%) usr 0.72 ( 2%) sys 5.38 ( 2%)
wall
loop analysis : 4.62 ( 3%) usr 1.71 ( 6%) sys 9.31 ( 4%)
wall
CSE 2 : 1.40 ( 1%) usr 0.14 ( 0%) sys 1.62 ( 1%)
wall
branch prediction : 0.95 ( 1%) usr 0.00 ( 0%) sys 0.94 ( 0%)
wall
flow analysis : 0.89 ( 1%) usr 0.10 ( 0%) sys 1.06 ( 0%)
wall
combiner : 0.81 ( 1%) usr 0.15 ( 1%) sys 1.25 ( 1%)
wall
if-conversion : 0.42 ( 0%) usr 0.01 ( 0%) sys 0.69 ( 0%)
wall
regmove : 0.38 ( 0%) usr 0.02 ( 0%) sys 0.56 ( 0%)
wall
mode switching : 0.11 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
local alloc : 2.13 ( 1%) usr 0.60 ( 2%) sys 4.38 ( 2%)
wall
global alloc : 2.23 ( 1%) usr 0.23 ( 1%) sys 3.31 ( 1%)
wall
reload CSE regs : 2.30 ( 2%) usr 0.20 ( 1%) sys 2.88 ( 1%)
wall
flow 2 : 0.63 ( 0%) usr 0.11 ( 0%) sys 0.94 ( 0%)
wall
if-conversion 2 : 0.05 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
peephole 2 : 0.16 ( 0%) usr 0.00 ( 0%) sys 0.19 ( 0%)
wall
rename registers : 0.29 ( 0%) usr 0.02 ( 0%) sys 0.25 ( 0%)
wall
scheduling 2 : 1.30 ( 1%) usr 0.13 ( 0%) sys 1.94 ( 1%)
wall
reorder blocks : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%)
wall
shorten branches : 0.42 ( 0%) usr 0.04 ( 0%) sys 0.62 ( 0%)
wall
final : 0.52 ( 0%) usr 0.02 ( 0%) sys 0.56 ( 0%)
wall
symout : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
rest of compilation : 8.59 ( 6%) usr 0.20 ( 1%) sys 11.62 ( 5%)
wall
TOTAL : 149.26 29.92 228.50
which is a lot better than before, but still
compared to g++-3.2 (GCC) 3.2.3 20030313 (prerelease) numbers:
Execution times (seconds)
cfg construction : 0.14 ( 1%) usr 0.02 ( 3%) sys 0.44 ( 2%)
wall
cfg cleanup : 0.19 ( 2%) usr 0.00 ( 0%) sys 0.38 ( 1%)
wall
life analysis : 0.31 ( 3%) usr 0.05 ( 7%) sys 0.62 ( 2%)
wall
life info update : 0.05 ( 0%) usr 0.02 ( 3%) sys 0.19 ( 1%)
wall
preprocessing : 0.28 ( 3%) usr 0.11 (16%) sys 4.88 (19%)
wall
lexical analysis : 0.24 ( 2%) usr 0.06 ( 9%) sys 0.56 ( 2%)
wall
parser : 2.42 (24%) usr 0.20 (30%) sys 3.88 (15%)
wall
expand : 0.96 ( 9%) usr 0.04 ( 6%) sys 1.94 ( 8%)
wall
varconst : 0.12 ( 1%) usr 0.00 ( 0%) sys 0.31 ( 1%)
wall
integration : 0.27 ( 3%) usr 0.04 ( 6%) sys 0.56 ( 2%)
wall
jump : 0.14 ( 1%) usr 0.00 ( 0%) sys 0.25 ( 1%)
wall
CSE : 2.25 (22%) usr 0.02 ( 3%) sys 4.50 (18%)
wall
global CSE : 0.17 ( 2%) usr 0.01 ( 1%) sys 0.62 ( 2%)
wall
loop analysis : 0.14 ( 1%) usr 0.01 ( 1%) sys 0.38 ( 1%)
wall
CSE 2 : 0.73 ( 7%) usr 0.00 ( 0%) sys 1.12 ( 4%)
wall
flow analysis : 0.08 ( 1%) usr 0.00 ( 0%) sys 0.25 ( 1%)
wall
combiner : 0.14 ( 1%) usr 0.01 ( 1%) sys 0.38 ( 1%)
wall
if-conversion : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.19 ( 1%)
wall
regmove : 0.09 ( 1%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
mode switching : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.19 ( 1%)
wall
local alloc : 0.21 ( 2%) usr 0.00 ( 0%) sys 0.31 ( 1%)
wall
global alloc : 0.25 ( 2%) usr 0.00 ( 0%) sys 0.50 ( 2%)
wall
reload CSE regs : 0.14 ( 1%) usr 0.01 ( 1%) sys 0.31 ( 1%)
wall
flow 2 : 0.05 ( 0%) usr 0.00 ( 0%) sys 0.19 ( 1%)
wall
if-conversion 2 : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
peephole 2 : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.25 ( 1%)
wall
rename registers : 0.07 ( 1%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
scheduling 2 : 0.26 ( 3%) usr 0.02 ( 3%) sys 0.75 ( 3%)
wall
reorder blocks : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.06 ( 0%)
wall
shorten branches : 0.02 ( 0%) usr 0.01 ( 1%) sys 0.06 ( 0%)
wall
final : 0.05 ( 0%) usr 0.03 ( 4%) sys 0.31 ( 1%)
wall
rest of compilation : 0.24 ( 2%) usr 0.00 ( 0%) sys 0.50 ( 2%)
wall
TOTAL : 10.16 0.67 25.44
this is a regression by a factor of more than 10x.
Richard.
--
Richard Guenther <richard dot guenther at uni-tuebingen dot de>
WWW: http://www.tat.physik.uni-tuebingen.de/~rguenth/
More information about the Gcc-bugs
mailing list