diff options
author | Jakub Jelinek <jakub@redhat.com> | 2009-02-20 13:56:01 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2009-02-20 13:56:01 +0100 |
commit | b1fb9f569958b2f6127f32495821a5b69c0a2c33 (patch) | |
tree | c37b4e8fdb620aa7e10238c591d1e5c0c5753af2 /gcc/opts.c | |
parent | da9c199f2cbefd192f9ec89579c7a627fa113bfc (diff) | |
download | gcc-b1fb9f569958b2f6127f32495821a5b69c0a2c33.zip gcc-b1fb9f569958b2f6127f32495821a5b69c0a2c33.tar.gz gcc-b1fb9f569958b2f6127f32495821a5b69c0a2c33.tar.bz2 |
re PR middle-end/39157 (Code that compiles fine in 1GB of memory with 4.1.2 requires > 20GB in 4.2.* and higher)
PR middle-end/39157
* Makefile.in (loop-invariant.o): Depend on $(PARAMS_H).
* params.h (LOOP_INVARIANT_MAX_BBS_IN_LOOP): Define.
* params.def (loop-invariant-max-bbs-in-loop): New parameter.
* opts.c (decode_options): Set loop-invariant-max-bbs-in-loop
parameter to 1000 for -O1 by default.
* doc/invoke.texi (loop-invariant-max-bbs-in-loop): Document new
parameter.
* loop-invariant.c: Include params.h.
(move_loop_invariants): Don't call move_single_loop_invariants on
very large loops.
From-SVN: r144320
Diffstat (limited to 'gcc/opts.c')
-rw-r--r-- | gcc/opts.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -1,5 +1,5 @@ /* Command line option handling. - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Neil Booth. @@ -811,6 +811,7 @@ decode_options (unsigned int argc, const char **argv) static int initial_avg_aliased_vops; static int initial_min_crossjump_insns; static int initial_max_fields_for_field_sensitive; + static int initial_loop_invariant_max_bbs_in_loop; static unsigned int initial_lang_mask; unsigned int i, lang_mask; @@ -833,6 +834,8 @@ decode_options (unsigned int argc, const char **argv) = compiler_params[PARAM_MIN_CROSSJUMP_INSNS].value; initial_max_fields_for_field_sensitive = compiler_params[PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE].value; + initial_loop_invariant_max_bbs_in_loop + = compiler_params[PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP].value; } else lang_mask = initial_lang_mask; @@ -943,6 +946,10 @@ decode_options (unsigned int argc, const char **argv) set_param_value ("max-fields-for-field-sensitive", (opt2) ? 100 : initial_max_fields_for_field_sensitive); + /* For -O1 only do loop invariant motion for very small loops. */ + set_param_value ("loop-invariant-max-bbs-in-loop", + (opt2) ? initial_loop_invariant_max_bbs_in_loop : 1000); + /* -O3 optimizations. */ opt3 = (optimize >= 3); flag_predictive_commoning = opt3; |