> On Fri, 14 Jun 2013, Jan Hubicka wrote: > > > > > > > > > Ok, not streaming and comparing TREE_USED gets it improved to > > > > > > I will try to gather better data tomorrow. My mozilla build died on disk > > > space, > > > but according to stats we are now at about 7GB of GGC memory after > > > merging. > > > I was playing with the following patch that implements testing whether > > > types > > > are same in my (probably naive and wrong) understanding of ODR rule in C++ > > > > So i can confirm that we now need 3GB of TMP space instead of 8GB with > > earlier > > version of patch. I will compare to mainline tomorrow, but I think it is > > about the same. > > phase opt and generate : 96.39 ( 9%) usr 40.45 (45%) sys 136.91 (12%) > > wall 271042 kB ( 7%) ggc > > phase stream in : 457.87 (43%) usr 8.38 ( 9%) sys 466.44 (40%) > > wall 3798844 kB (93%) ggc > > phase stream out : 509.39 (48%) usr 40.82 (46%) sys 550.88 (48%) > > wall 7149 kB ( 0%) ggc > > ipa cp : 13.62 ( 1%) usr 5.00 ( 6%) sys 18.61 ( 2%) > > wall 425204 kB (10%) ggc > > ipa inlining heuristics : 60.52 ( 6%) usr 36.15 (40%) sys 96.71 ( 8%) > > wall 1353370 kB (33%) ggc > > ipa lto decl in : 346.94 (33%) usr 5.49 ( 6%) sys 352.60 (31%) > > wall 7042 kB ( 0%) ggc > > ipa lto decl out : 481.19 (45%) usr 23.28 (26%) sys 504.68 (44%) > > wall 0 kB ( 0%) ggc > > TOTAL :1063.67 89.65 1154.26 > > 4078436 kB > > > > So we are still bound by streaming. I am running -flto-report overnight. > > > > My ODR patch finds 36377 matches and also weird looking mismatches of type: > > <record_type 0x7fbd30d46dc8 sockaddr_storage BLK > > size <integer_cst 0x7fbd416bc1e0 type <integer_type 0x7fbd415660a8 > > bitsizetype> constant 1024> > > unit size <integer_cst 0x7fbd416bc700 type <integer_type 0x7fbd41566000 > > sizetype> constant 128> > > align 64 symtab 0 alias set -1 canonical type 0x7fbd30f0bc78 > > fields <field_decl 0x7fbd30e99ed8 ss_family > > type <integer_type 0x7fbd3b98c000 sa_family_t public unsigned HI > > size <integer_cst 0x7fbd41555fe0 constant 16> > > unit size <integer_cst 0x7fbd4156a000 constant 2> > > align 16 symtab 0 alias set -1 canonical type 0x7fbd41566540 > > precision 16 min <integer_cst 0x7fbd4156a020 0> max <integer_cst > > 0x7fbd41555fc0 65535>> > > unsigned nonlocal HI file /usr/include/bits/socket.h line 189 col 0 > > size <integer_cst 0x7fbd41555fe0 16> unit size <integer_cst 0x7fbd4156a000 > > 2> > > align 16 offset_align 128 > > offset <integer_cst 0x7fbd41555d60 constant 0> > > bit offset <integer_cst 0x7fbd41555de0 constant 0> context > > <record_type 0x7fbd30d46dc8 sockaddr_storage> > > chain <field_decl 0x7fbd30e99000 __ss_align type <integer_type > > 0x7fbd415667e0 long unsigned int> > > unsigned nonlocal DI file /usr/include/bits/socket.h line 190 > > col 0 > > size <integer_cst 0x7fbd41555d20 constant 64> > > unit size <integer_cst 0x7fbd41555d40 constant 8> > > align 64 offset_align 128 offset <integer_cst 0x7fbd41555d60 0> > > bit offset <integer_cst 0x7fbd41555d20 64> context <record_type > > 0x7fbd30d46dc8 sockaddr_storage> chain <field_decl 0x7fbd30e99e40 > > __ss_padding>>> context <translation_unit_decl 0x7fbd30cbc2e0 D.967968> > > chain <type_decl 0x7fbd30d47da8 sockaddr_storage>> > > <record_type 0x7fbd30f0bc78 sockaddr_storage BLK > > size <integer_cst 0x7fbd416bc1e0 type <integer_type 0x7fbd415660a8 > > bitsizetype> constant 1024> > > unit size <integer_cst 0x7fbd416bc700 type <integer_type 0x7fbd41566000 > > sizetype> constant 128> > > align 64 symtab 0 alias set -1 canonical type 0x7fbd30f0bc78 > > fields <field_decl 0x7fbd30ef9558 ss_family > > type <integer_type 0x7fbd3b98c000 sa_family_t public unsigned HI > > size <integer_cst 0x7fbd41555fe0 constant 16> > > unit size <integer_cst 0x7fbd4156a000 constant 2> > > align 16 symtab 0 alias set -1 canonical type 0x7fbd41566540 > > precision 16 min <integer_cst 0x7fbd4156a020 0> max <integer_cst > > 0x7fbd41555fc0 65535>> > > unsigned HI file /usr/include/bits/socket.h line 189 col 0 size > > <integer_cst 0x7fbd41555fe0 16> unit size <integer_cst 0x7fbd4156a000 2> > > align 16 offset_align 128 > > offset <integer_cst 0x7fbd41555d60 constant 0> > > bit offset <integer_cst 0x7fbd41555de0 constant 0> context > > <record_type 0x7fbd30f0bc78 sockaddr_storage> > > chain <field_decl 0x7fbd30ef94c0 __ss_align type <integer_type > > 0x7fbd415667e0 long unsigned int> > > unsigned DI file /usr/include/bits/socket.h line 190 col 0 > > size <integer_cst 0x7fbd41555d20 constant 64> > > unit size <integer_cst 0x7fbd41555d40 constant 8> > > align 64 offset_align 128 offset <integer_cst 0x7fbd41555d60 0> > > bit offset <integer_cst 0x7fbd41555d20 64> context <record_type > > 0x7fbd30f0bc78 sockaddr_storage> chain <field_decl 0x7fbd30ef9428 > > __ss_padding>>> context <translation_unit_decl 0x7fbd30ea9f18 D.936417> > > pointer_to_this <pointer_type 0x7fbd30f0bd20> chain <type_decl > > 0x7fbd30ea9398 D.938243>> > > > > that mismatch because we run into following difference: > > <type_decl 0x7fbd30d47da8 sockaddr_storage > > type <record_type 0x7fbd30d46dc8 sockaddr_storage BLK > > size <integer_cst 0x7fbd416bc1e0 constant 1024> > > unit size <integer_cst 0x7fbd416bc700 constant 128> > > align 64 symtab 0 alias set -1 canonical type 0x7fbd30f0bc78 > > fields <field_decl 0x7fbd30e99ed8 ss_family type <integer_type > > 0x7fbd3b98c000 sa_family_t> > > unsigned nonlocal HI file /usr/include/bits/socket.h line 189 > > col 0 > > size <integer_cst 0x7fbd41555fe0 constant 16> > > unit size <integer_cst 0x7fbd4156a000 constant 2> > > align 16 offset_align 128 > > offset <integer_cst 0x7fbd41555d60 constant 0> > > bit offset <integer_cst 0x7fbd41555de0 constant 0> context > > <record_type 0x7fbd30d46dc8 sockaddr_storage> chain <field_decl > > 0x7fbd30e99000 __ss_align>> context <translation_unit_decl 0x7fbd30cbc2e0 > > D.967968> > > chain <type_decl 0x7fbd30d47da8 sockaddr_storage>> > > public VOID file /usr/include/bits/socket.h line 187 col 0 > > align 8 context <translation_unit_decl 0x7fbd30cbc2e0 D.967968>> > > <identifier_node 0x7fbd30f06d70 sockaddr_storage> > > > > I am not sure what means that one type has more TYPE_DECLs stacked than the > > other. > > I think that's the usual case of two nearly identical types in the > _same_ SCC, linked through one of the types TYPE_DECL DECL_ORIGINAL_TYPE. > The C++ frontend likes to produce those ...
Hmm, so i guess I should walk into ORIGINAL_TYPE when seeing TYPE_DECL? Honza