------- Comment #43 from zadeck at naturalbridge dot com 2007-12-20 14:49 ------- Subject: Re: Inordinate compile times on large routines
lucier at math dot purdue dot edu wrote: > ------- Comment #42 from lucier at math dot purdue dot edu 2007-12-20 03:52 > ------- > Created an attachment (id=14799) --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14799&action=view) > --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14799&action=view) > memory details for an unpatched mainline > > Here is the same information without Steven's two patches for mainline. > > > Could you add the attached patch in and rerun your example? It will add 4 lines to indicate what kinds of def-use and use-def chains are being created. A lot of the space is being used by these chains and I want to find out how many of those chains are for artificial uses and defs. thanks kenny Index: df-problems.c =================================================================== --- df-problems.c (revision 131096) +++ df-problems.c (working copy) @@ -1855,13 +1855,23 @@ df_live_verify_transfer_functions (void) #define df_chain_problem_p(FLAG) (((enum df_chain_flags)df_chain->local_flags)&(FLAG)) +static long df_chain_counters[4]; + /* Create a du or ud chain from SRC to DST and link it into SRC. */ struct df_link * df_chain_create (struct df_ref *src, struct df_ref *dst) { struct df_link *head = DF_REF_CHAIN (src); - struct df_link *link = pool_alloc (df_chain->block_pool);; + struct df_link *link = pool_alloc (df_chain->block_pool); + int index = 0; + + if (!src->insn) + index += (src->type == DF_REF_REG_DEF) ? 2 : 1; + if (!dst->insn) + index += (src->type == DF_REF_REG_DEF) ? 2 : 1; + + df_chain_counters[index]++; DF_REF_CHAIN (src) = link; link->next = head; @@ -2156,11 +2166,18 @@ df_chain_finalize (bitmap all_blocks) { unsigned int bb_index; bitmap_iterator bi; - + + memset (df_chain_counters, 0, 4*sizeof(long)); + EXECUTE_IF_SET_IN_BITMAP (all_blocks, 0, bb_index, bi) { df_chain_create_bb (bb_index); } + + fprintf (stderr, "real -> real = %ld\n", df_chain_counters[0]); + fprintf (stderr, "real -> art = %ld\n", df_chain_counters[1]); + fprintf (stderr, "art -> real = %ld\n", df_chain_counters[2]); + fprintf (stderr, "art -> art = %ld\n", df_chain_counters[3]); } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26854