--- Paolo Bonzini <[EMAIL PROTECTED]> wrote: > Etienne Lorrain wrote: > > Hello, > > > > You really do not want to get a correction for: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23631 > > before release? > > > > I checked again with 4.0.2 20050917, and nothing > > has changed since: > > http://gcc.gnu.org/ml/gcc/2005-09/msg00251.html > > Etienne, does the patch at > http://gcc.gnu.org/ml/gcc-patches/2005-08/msg01747.html work for you? > > Paolo >
I applied the patch by hand (not working with CVS) and it does _not_ solve the problem. To reproduce, compile: int sub (int i) { int array[1000000] = { 0 }; sub2 (&array[i]); } with ~/projet/toolchain/bin/gcc -c -Os tmp.c and type: $ size tmp.o text data bss dec hex filename 4000052 0 0 4000052 3d0934 tmp.o too big text size... The exact patch I have here is: --- gcc-4.0.2-20050917/gcc/expr.c 2005-09-10 03:03:28.000000000 +0200 +++ gcc-4.0.2-20050917-new/gcc/expr.c 2005-09-19 14:39:41.206416416 +0200 @@ -6390,6 +6390,23 @@ return ret; } +/* Return 1 if EXP contains all zeros. */ + +static int +all_zeros_p (tree exp) +{ + if (TREE_CODE (exp) == CONSTRUCTOR) + { + HOST_WIDE_INT nz_elts, nc_elts, count; + bool must_clear; + + categorize_ctor_elements (exp, &nz_elts, &nc_elts, &count, &must_clear); + return nz_elts == 0; + } + + return initializer_zerop (exp); +} + static rtx expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, enum expand_modifier modifier, rtx *alt_rtl) @@ -6737,8 +6754,21 @@ return const0_rtx; } - - /* All elts simple constants => refer to a constant in memory. But + /* Try to avoid creating a temporary at all. This is possible + if we can construct with a single memset, which store_constructor + knows how to do. + FIXME: exchange all_zeros_p for something that allows all + [0..255] initializers. */ + else if (TREE_STATIC (exp) + && !TREE_ADDRESSABLE (exp) + && target != 0 && mode == BLKmode + && all_zeros_p (exp)) + { + store_constructor (exp, target, 0, int_expr_size (exp)); + return target; + } + + /* All elts simple constants => refer to a constant in memory. But if this is a non-BLKmode mode, let it store a field at a time since that should make a CONST_INT or CONST_DOUBLE when we fold. Likewise, if we have a target we can use, it is best to ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com