This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/9805] optimisation of largish array constant containing strings takes forever(?) and consumes very large amounts of memory
- From: "pinskia at physics dot uc dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 2 Aug 2003 15:46:19 -0000
- Subject: [Bug optimization/9805] optimisation of largish array constant containing strings takes forever(?) and consumes very large amounts of memory
- References: <20030222190600.9805.tilps@hotmail.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9805
------- Additional Comments From pinskia at physics dot uc dot edu 2003-08-02 15:46 -------
-O3 is faster than -O1 or -O2.
Can someone tell me how can this be (I know now not expanding static functions that are not
referenced)?
Looks like expand is causing this.
tin:~/src/gnu/gcctest>time g++ pr9805.cc -S -O -ftime-report
Execution times (seconds)
cfg construction : 1.16 ( 5%) usr 0.04 ( 4%) sys 1.20 ( 5%) wall
cfg cleanup : 1.45 ( 6%) usr 0.03 ( 3%) sys 1.48 ( 6%) wall
trivially dead code : 0.37 ( 2%) usr 0.00 ( 0%) sys 0.37 ( 1%) wall
life analysis : 2.70 (12%) usr 0.04 ( 4%) sys 2.74 (11%) wall
life info update : 1.80 ( 8%) usr 0.00 ( 0%) sys 1.80 ( 7%) wall
alias analysis : 0.59 ( 3%) usr 0.02 ( 2%) sys 0.61 ( 2%) wall
register scan : 0.19 ( 1%) usr 0.00 ( 0%) sys 0.19 ( 1%) wall
rebuild jump labels : 0.18 ( 1%) usr 0.00 ( 0%) sys 0.18 ( 1%) wall
preprocessing : 0.05 ( 0%) usr 0.01 ( 1%) sys 0.05 ( 0%) wall
parser : 0.33 ( 1%) usr 0.09 ( 8%) sys 0.43 ( 2%) wall
name lookup : 0.19 ( 1%) usr 0.10 ( 9%) sys 0.29 ( 1%) wall
expand : 3.50 (15%) usr 0.33 (30%) sys 3.84 (16%) wall
varconst : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
integration : 2.64 (11%) usr 0.15 (14%) sys 2.79 (11%) wall
jump : 0.39 ( 2%) usr 0.02 ( 2%) sys 0.41 ( 2%) wall
CSE : 0.38 ( 2%) usr 0.00 ( 0%) sys 0.38 ( 2%) wall
loop analysis : 0.28 ( 1%) usr 0.04 ( 4%) sys 0.32 ( 1%) wall
branch prediction : 0.75 ( 3%) usr 0.04 ( 4%) sys 0.79 ( 3%) wall
flow analysis : 0.12 ( 1%) usr 0.00 ( 0%) sys 0.12 ( 0%) wall
combiner : 0.25 ( 1%) usr 0.00 ( 0%) sys 0.25 ( 1%) wall
if-conversion : 0.43 ( 2%) usr 0.01 ( 1%) sys 0.44 ( 2%) wall
local alloc : 0.28 ( 1%) usr 0.02 ( 2%) sys 0.30 ( 1%) wall
global alloc : 2.70 (12%) usr 0.12 (11%) sys 2.82 (11%) wall
reload CSE regs : 0.53 ( 2%) usr 0.00 ( 0%) sys 0.53 ( 2%) wall
flow 2 : 0.33 ( 1%) usr 0.00 ( 0%) sys 0.33 ( 1%) wall
if-conversion 2 : 0.22 ( 1%) usr 0.00 ( 0%) sys 0.22 ( 1%) wall
rename registers : 0.29 ( 1%) usr 0.00 ( 0%) sys 0.29 ( 1%) wall
shorten branches : 0.11 ( 0%) usr 0.00 ( 0%) sys 0.11 ( 0%) wall
final : 0.22 ( 1%) usr 0.02 ( 2%) sys 0.42 ( 2%) wall
rest of compilation : 0.92 ( 4%) usr 0.02 ( 2%) sys 0.94 ( 4%) wall
TOTAL : 23.39 1.10 24.77
23.390u 1.140s 0:24.81 98.8% 0+0k 0+0io 1118pf+0w
tin:~/src/gnu/gcctest>time g++ pr9805.cc -S -O3 -ftime-report
Execution times (seconds)
callgraph construction: 0.04 ( 3%) usr 0.00 ( 0%) sys 0.04 ( 2%) wall
cfg cleanup : 0.04 ( 3%) usr 0.00 ( 0%) sys 0.04 ( 2%) wall
trivially dead code : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 1%) wall
life analysis : 0.08 ( 5%) usr 0.00 ( 0%) sys 0.08 ( 4%) wall
life info update : 0.03 ( 2%) usr 0.00 ( 0%) sys 0.03 ( 2%) wall
alias analysis : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
register scan : 0.03 ( 2%) usr 0.00 ( 0%) sys 0.03 ( 2%) wall
preprocessing : 0.05 ( 3%) usr 0.03 (10%) sys 0.08 ( 4%) wall
parser : 0.36 (23%) usr 0.13 (42%) sys 0.50 (26%) wall
name lookup : 0.14 ( 9%) usr 0.12 (39%) sys 0.26 (13%) wall
expand : 0.06 ( 4%) usr 0.01 ( 3%) sys 0.07 ( 4%) wall
varconst : 0.02 ( 1%) usr 0.01 ( 3%) sys 0.02 ( 1%) wall
integration : 0.05 ( 3%) usr 0.00 ( 0%) sys 0.05 ( 3%) wall
jump : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
CSE : 0.09 ( 6%) usr 0.00 ( 0%) sys 0.09 ( 5%) wall
global CSE : 0.07 ( 4%) usr 0.01 ( 3%) sys 0.08 ( 4%) wall
loop analysis : 0.03 ( 2%) usr 0.00 ( 0%) sys 0.03 ( 2%) wall
bypass jumps : 0.03 ( 2%) usr 0.00 ( 0%) sys 0.03 ( 2%) wall
CSE 2 : 0.03 ( 2%) usr 0.00 ( 0%) sys 0.03 ( 2%) wall
if-conversion : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
regmove : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
local alloc : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 1%) wall
global alloc : 0.09 ( 6%) usr 0.00 ( 0%) sys 0.09 ( 5%) wall
reload CSE regs : 0.05 ( 3%) usr 0.00 ( 0%) sys 0.05 ( 3%) wall
flow 2 : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
peephole 2 : 0.01 ( 1%) usr 0.00 ( 0%) sys 0.01 ( 1%) wall
rename registers : 0.06 ( 4%) usr 0.00 ( 0%) sys 0.06 ( 3%) wall
scheduling 2 : 0.08 ( 5%) usr 0.00 ( 0%) sys 0.08 ( 4%) wall
final : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 1%) wall
rest of compilation : 0.02 ( 1%) usr 0.00 ( 0%) sys 0.02 ( 1%) wall
TOTAL : 1.58 0.31 1.95
1.580u 0.320s 0:01.97 96.4% 0+0k 0+0io 1193pf+0w
This testcase looks like when unit-at-a-time is enabled by default, it will be fixed.