This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/26854] Inordinate compile times on large routines
- From: "zadeck at naturalbridge dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 20 Dec 2007 14:49:12 -0000
- Subject: [Bug tree-optimization/26854] Inordinate compile times on large routines
- References: <bug-26854-271@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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