http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45375
--- Comment #91 from Jan Hubicka <hubicka at gcc dot gnu.org> 2011-05-03
17:34:56 UTC ---
Hi,
with the patch I just posted for removal of hash tables for cgraph/varpool node
set, the situation with hashing is better. We got from 900s WPA stage to 500s
WPA stage.
Streaming still dominate:
ipa lto decl in : 331.26 (56%) usr 5.51 (34%) sys 337.11 (56%) wall
722314 kB (46%) ggc
ipa lto decl out : 118.21 (20%) usr 4.37 (27%) sys 122.57 (20%) wall
0 kB ( 0%) ggc
ipa lto decl merge : 23.61 ( 4%) usr 0.20 ( 1%) sys 23.83 ( 4%) wall
962 kB ( 0%) ggc
inline heuristics : 57.12 (10%) usr 0.14 ( 1%) sys 57.27 ( 9%) wall
227500 kB (14%) ggc
TOTAL : 587.02 16.36 604.01
1585790 kB
(I have plans for fixing inliner once more prominent problems are solved)
Streaming in oprofile:
150985 20.6876 lto1 htab_find_slot_with_hash
71532 9.8012 lto1 gimple_types_compatible_p
55971 7.6690 libc-2.11.1.so _int_malloc
55104 7.5502 lto1 iterative_hash_hashval_t
33160 4.5435 lto1 type_pair_eq
31554 4.3235 libc-2.11.1.so memset
25670 3.5172 lto1 gtc_visit
23972 3.2846 lto1 gimple_type_hash_1
21562 2.9544 lto1 lto_input_tree
15230 2.0868 lto1 gt_ggc_mx_lang_tree_node
14807 2.0288 lto1 inflate_fast
callgrind profile (of javascript instead of libxul) shows that tree_map_base
hash is the most busy one:
453,603,428 *
libiberty/../../libiberty/hashtab.c:htab_find_slot_with_hash'2
33,167,620 > gcc/../../gcc/tree.c:tree_map_base_eq (6633524x)
134,245,948 > libiberty/../../libiberty/hashtab.c:htab_expand (18x)
25,459,797 > gcc/../../gcc/gimple.c:type_pair_eq (2793149x)
and the users of hashing:
63,519,720 < /libiberty/hashtab.c:htab_find_slot'2 (676308x)
3,975,492,482 < /libiberty/hashtab.c:htab_find_slot (2179693x)
255,072,048 * /libiberty/hashtab.c:htab_find_slot_with_hash
14,530,222 < /gcc/gimple.c:iterative_hash_gimple_type'2 (52634x)
526,622,873 < /gcc/gimple.c:lookup_type_pair.isra.103.constprop.111
(1621144x)
17,415,611 < /gcc/gimple.c:iterative_hash_gimple_type (100893x)
11,734,620 < /gcc/gimple.c:visit'2 (98730x)
432,531,796 < /gcc/gimple.c:gimple_type_hash_1 (3851023x)
35,405,473 < /gcc/gimple.c:visit (319520x)
108,790,992 * /libiberty/hashtab.c:htab_find_slot'2
Oprofile of the whole build shows also problem in decl_assembler_name_equal
(because of our stupit alias hacks) and can_inline_edge_p. I will look into
those two.
260739 7.1750 lto1 lto1
htab_find_slot_with_hash
151080 4.1574 lto1 lto1
decl_assembler_name_equal
130969 3.6040 libc-2.11.1.so libc-2.11.1.so _int_malloc
100723 2.7717 lto1 lto1
gimple_types_compatible_p
97370 2.6794 lto1 lto1
iterative_hash_hashval_t
75051 2.0653 libc-2.11.1.so libc-2.11.1.so memset
56508 1.5550 lto1 lto1
bitmap_set_bit
53211 1.4643 lto1 lto1
can_inline_edge_p
51613 1.4203 oprofiled oprofiled
/usr/bin/oprofiled
49992 1.3757 lto1 lto1
pointer_map_insert
48381 1.3313 lto1 lto1
lto_input_tree
44467 1.2236 lto1 lto1
type_pair_eq
35096 0.9658 libc-2.11.1.so libc-2.11.1.so _int_free
35069 0.9650 lto1 lto1 gtc_visit
(this is including ltrans stage)
Honza