This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/13776] [tree-ssa] Many C++ compile-time regression in 3.5-tree-ssa 040120
- From: "rguenth at tat dot physik dot uni-tuebingen dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 14 Mar 2004 13:54:10 -0000
- Subject: [Bug c++/13776] [tree-ssa] Many C++ compile-time regression in 3.5-tree-ssa 040120
- References: <20040120183908.13776.kgardas@objectsecurity.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From rguenth at tat dot physik dot uni-tuebingen dot de 2004-03-14 13:54 -------
Subject: Re: [tree-ssa] Many C++ compile-time regression in
3.5-tree-ssa 040120
dberlin at gcc dot gnu dot org wrote:
> ------- Additional Comments From dberlin at gcc dot gnu dot org 2004-03-14 04:47 -------
> There are about 100 functions here with > a couple thousand bb's.
> PRE takes about 2-3 seconds for each of these functions.
> Which means i have to microoptimize it in order to get rid of the cumulative time effect.
> A lot of is it simply iterating over large lists looking for certain types of nodes (like EPHiS), where the
> lists are O(n_basic_blocks), and we only need to look at 10 entries or so. This doesn't matter when the
> numbers are close, but when you have 8000 bb's to walk 20 times, instead of walking 40 entries 20
> times, it matters.
The nice thing is, that with -fno-exceptions the results look a _lot_
better:
Execution times (seconds)
garbage collection : 21.13 ( 7%) usr 0.01 ( 0%) sys 21.20 ( 7%)
wall
callgraph construction: 1.45 ( 0%) usr 0.01 ( 0%) sys 1.46 ( 0%)
wall
callgraph optimization: 1.51 ( 0%) usr 0.09 ( 1%) sys 1.61 ( 1%)
wall
cfg construction : 0.52 ( 0%) usr 0.05 ( 1%) sys 0.57 ( 0%)
wall
cfg cleanup : 1.67 ( 1%) usr 0.00 ( 0%) sys 1.67 ( 1%)
wall
trivially dead code : 2.27 ( 1%) usr 0.01 ( 0%) sys 2.28 ( 1%)
wall
life analysis : 5.01 ( 2%) usr 0.00 ( 0%) sys 5.02 ( 2%)
wall
life info update : 3.11 ( 1%) usr 0.00 ( 0%) sys 3.17 ( 1%)
wall
alias analysis : 4.02 ( 1%) usr 0.01 ( 0%) sys 4.03 ( 1%)
wall
register scan : 1.97 ( 1%) usr 0.00 ( 0%) sys 1.97 ( 1%)
wall
rebuild jump labels : 0.54 ( 0%) usr 0.00 ( 0%) sys 0.54 ( 0%)
wall
preprocessing : 0.69 ( 0%) usr 0.20 ( 3%) sys 1.72 ( 1%)
wall
parser : 18.39 ( 6%) usr 1.03 (16%) sys 19.44 ( 6%)
wall
name lookup : 6.74 ( 2%) usr 1.43 (23%) sys 8.18 ( 3%)
wall
integration : 58.53 (19%) usr 0.43 ( 7%) sys 58.99 (19%)
wall
tree gimplify : 3.43 ( 1%) usr 0.05 ( 1%) sys 3.48 ( 1%)
wall
tree eh : 0.76 ( 0%) usr 0.00 ( 0%) sys 0.76 ( 0%)
wall
tree CFG construction : 1.54 ( 1%) usr 0.13 ( 2%) sys 1.67 ( 1%)
wall
tree CFG cleanup : 1.84 ( 1%) usr 0.01 ( 0%) sys 1.85 ( 1%)
wall
tree PTA : 0.68 ( 0%) usr 0.00 ( 0%) sys 0.68 ( 0%)
wall
tree alias analysis : 1.07 ( 0%) usr 0.01 ( 0%) sys 1.08 ( 0%)
wall
tree PHI insertion : 1.37 ( 0%) usr 0.06 ( 1%) sys 1.43 ( 0%)
wall
tree SSA rewrite : 3.53 ( 1%) usr 0.06 ( 1%) sys 3.59 ( 1%)
wall
tree SSA other : 4.69 ( 2%) usr 0.41 ( 7%) sys 5.12 ( 2%)
wall
tree operand scan : 3.57 ( 1%) usr 0.27 ( 4%) sys 3.85 ( 1%)
wall
dominator optimization: 16.32 ( 5%) usr 0.52 ( 8%) sys 16.84 ( 5%)
wall
tree SRA : 0.43 ( 0%) usr 0.00 ( 0%) sys 0.43 ( 0%)
wall
tree CCP : 1.51 ( 0%) usr 0.01 ( 0%) sys 1.52 ( 0%)
wall
tree split crit edges : 0.16 ( 0%) usr 0.00 ( 0%) sys 0.16 ( 0%)
wall
tree PRE : 17.34 ( 6%) usr 0.05 ( 1%) sys 17.40 ( 6%)
wall
tree linearize phis : 0.01 ( 0%) usr 0.01 ( 0%) sys 0.02 ( 0%)
wall
tree forward propagate: 1.01 ( 0%) usr 0.00 ( 0%) sys 1.01 ( 0%)
wall
tree conservative DCE : 2.54 ( 1%) usr 0.01 ( 0%) sys 2.55 ( 1%)
wall
tree aggressive DCE : 0.83 ( 0%) usr 0.00 ( 0%) sys 0.83 ( 0%)
wall
tree DSE : 1.86 ( 1%) usr 0.07 ( 1%) sys 1.93 ( 1%)
wall
tree copy headers : 1.39 ( 0%) usr 0.01 ( 0%) sys 1.40 ( 0%)
wall
tree SSA to normal : 3.01 ( 1%) usr 0.04 ( 1%) sys 3.05 ( 1%)
wall
tree rename SSA copies: 0.69 ( 0%) usr 0.07 ( 1%) sys 0.77 ( 0%)
wall
dominance frontiers : 0.18 ( 0%) usr 0.00 ( 0%) sys 0.18 ( 0%)
wall
control dependences : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.12 ( 0%)
wall
expand : 31.02 (10%) usr 0.24 ( 4%) sys 31.41 (10%)
wall
varconst : 0.94 ( 0%) usr 0.01 ( 0%) sys 0.99 ( 0%)
wall
jump : 1.77 ( 1%) usr 0.14 ( 2%) sys 1.97 ( 1%)
wall
CSE : 9.85 ( 3%) usr 0.03 ( 0%) sys 9.90 ( 3%)
wall
global CSE : 14.32 ( 5%) usr 0.17 ( 3%) sys 14.49 ( 5%)
wall
loop analysis : 4.19 ( 1%) usr 0.01 ( 0%) sys 4.21 ( 1%)
wall
bypass jumps : 1.19 ( 0%) usr 0.01 ( 0%) sys 1.20 ( 0%)
wall
CSE 2 : 4.24 ( 1%) usr 0.00 ( 0%) sys 4.24 ( 1%)
wall
branch prediction : 1.49 ( 0%) usr 0.03 ( 0%) sys 1.54 ( 0%)
wall
flow analysis : 0.12 ( 0%) usr 0.00 ( 0%) sys 0.14 ( 0%)
wall
combiner : 3.80 ( 1%) usr 0.01 ( 0%) sys 3.82 ( 1%)
wall
if-conversion : 0.61 ( 0%) usr 0.01 ( 0%) sys 0.63 ( 0%)
wall
regmove : 2.17 ( 1%) usr 0.00 ( 0%) sys 2.20 ( 1%)
wall
local alloc : 3.22 ( 1%) usr 0.03 ( 0%) sys 3.25 ( 1%)
wall
global alloc : 7.58 ( 3%) usr 0.21 ( 3%) sys 7.79 ( 3%)
wall
reload CSE regs : 3.25 ( 1%) usr 0.02 ( 0%) sys 3.27 ( 1%)
wall
flow 2 : 0.65 ( 0%) usr 0.00 ( 0%) sys 0.65 ( 0%)
wall
if-conversion 2 : 0.30 ( 0%) usr 0.00 ( 0%) sys 0.30 ( 0%)
wall
peephole 2 : 0.62 ( 0%) usr 0.02 ( 0%) sys 0.64 ( 0%)
wall
rename registers : 0.97 ( 0%) usr 0.04 ( 1%) sys 1.01 ( 0%)
wall
scheduling 2 : 5.57 ( 2%) usr 0.04 ( 1%) sys 5.66 ( 2%)
wall
machine dep reorg : 1.21 ( 0%) usr 0.00 ( 0%) sys 1.21 ( 0%)
wall
reorder blocks : 0.78 ( 0%) usr 0.00 ( 0%) sys 0.80 ( 0%)
wall
shorten branches : 0.82 ( 0%) usr 0.02 ( 0%) sys 0.84 ( 0%)
wall
reg stack : 0.20 ( 0%) usr 0.00 ( 0%) sys 0.20 ( 0%)
wall
final : 1.41 ( 0%) usr 0.14 ( 2%) sys 1.56 ( 1%)
wall
rest of compilation : 2.63 ( 1%) usr 0.04 ( 1%) sys 2.67 ( 1%)
wall
TOTAL : 302.38 6.29 310.24
So the question is, where is the difference and wether it needs to be
there ;)
Richard.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13776