This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: some tree-ssa vs mainline stats


Dan Nicolaescu wrote:

I've done some empirical comparisons of GCC from CVS HEAD and the
tree-ssa branch. One comparison was for compiling a C file: combine.i,
the other one was for compiling a C++ file: generate-3.4.ii from PR8361


First the ggc_alloc-ed memory, printed using this patch
http://gcc.gnu.org/ml/gcc-patches/2003-06/msg01972.html



                                generate-3.4.ii SSA  generate-3.4.ii HEAD
Total Overhead:                         83783064        34185222
Total Allocated:                       731518424       397362416
Total Overhead under   32B:              7872708          652308
Total Allocated under  32B:            332573472       194445000
Total Overhead under   64B:             29934672         6397392
Total Allocated under  64B:            482390040       265828848
Total Overhead under  128B:             40725380         9095252
Total Allocated under 128B:            585024728       314759152


combine.i SSA combine.i HEAD Total Overhead: 6631608 2010876 Total Allocated: 72673776 48363184 Total Overhead under 32B: 2418024 14520 Total Allocated under 32B: 43772364 32016332 Total Overhead under 64B: 3824092 478592 Total Allocated under 64B: 55117808 37752656 Total Overhead under 128B: 4282744 611152 Total Allocated under 128B: 61364720 40886448

all the values are in bytes

Observations:
- tree-ssa is allocating a lot more memory - the overheads are a higher for tree-ssa, so it seems that it needs
a few extra values added to ggc-page.c:extra_order_size_table



Total # of identifiers:
generate-3.4.ii SSA 84136 generate-3.4.ii HEAD 8131 combine.i SSA 10987 combine.i HEAD 4389



Does tree-ssa create unique identifiers for each ssa name, or something similar? Is that OK?


It creates a unique identifier for each temporary it needs to gimplify the function tree. All you really need for a temporary is a name (ie. just a string) because you never have to lookup the identifier or the DECL it represents. But temporaries still need a identifier nodes because DECL_NAME and DECL_ASSEMBLER_NAME are IDENTIFIER_NODEs. This also causes some memory overhead: each IDENTIFIER_NODE in C++ is 64 bytes, and you really only need 8 (a char * pointing to the name in the string pool and an int for the name length) for a temporary.


Gr.
Steven



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]