[Bug c/12245] [4.2/4.3/4.4 regression] Uses lots of memory when compiling large initialized arrays
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Sun Feb 22 19:04:00 GMT 2009
------- Comment #43 from rguenther at suse dot de 2009-02-22 19:03 -------
Subject: Re: [4.2/4.3/4.4 regression] Uses lots of memory when
compiling large initialized arrays
On Sun, 22 Feb 2009, hubicka at gcc dot gnu dot org wrote:
> Actual representation of constructor don't seem to be major problem here.
>
> We seem to build _a lot_ (117MB) of CONVERT exprs just to call fold on it and
> convert integer to proper type, so counting in INTEGER_CSTs should be just
> slightly less than half of memory needed. This seems quite silly.
>
> The patch to not use HOST_WIDE_INT or similar for counting should save another
> 70MB of garbage (and speed up compilation), so perhaps you could dig it out?
> :))
>
> Following patch:
> Index: convert.c
> ===================================================================
> --- convert.c (revision 144352)
> +++ convert.c (working copy)
> @@ -749,6 +749,11 @@ convert_to_integer (tree type, tree expr
> break;
> }
>
> + /* When parsing long initializers, we might end up with a lot of casts.
> + Shortcut this. */
> + if (TREE_CODE (expr) == INTEGER_CST)
> + return fold_unary (CONVERT_EXPR, type, expr);
fold_convert (). But maybe not valid to do here for C std reasons, who
knows.
> +
> return build1 (CONVERT_EXPR, type, expr);
And probably just generally using fold_convert () would be ok as well.
Maybe they are there to make sure to build rvalues.
> case REAL_TYPE:
>
> Cuts gabrage production in half:
> c-typeck.c:6472 (output_init_element) 0: 0.0%
> 47910400:100.0% 45541112:23.7% 26342936:99.5% 19
> ggc-common.c:187 (ggc_calloc) 67094608:46.1% 0:
> 0.0% 67162736:34.9% 1088: 0.0% 58
> tree.c:1004 (build_int_cst_wide) 78264768:53.8% 0:
> 0.0% 78266496:40.7% 0: 0.0% 3261068
> Total 145570627 47910416
> 192171521 26481588 3275033
> source location Garbage Freed
> Leak Overhead Times
>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12245
More information about the Gcc-bugs
mailing list