aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Sandiford <richard@codesourcery.com>2007-09-07 08:14:10 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2007-09-07 08:14:10 +0000
commit8d1d0deea09d3c4ae0c3953ac4a4cb142d712e22 (patch)
tree13b5209c9e95d149333eff4bc29b4557accb0f57 /gcc/config
parent704aab3e3fa5514458136706d50e6a67e534364b (diff)
downloadgcc-8d1d0deea09d3c4ae0c3953ac4a4cb142d712e22.zip
gcc-8d1d0deea09d3c4ae0c3953ac4a4cb142d712e22.tar.gz
gcc-8d1d0deea09d3c4ae0c3953ac4a4cb142d712e22.tar.bz2
mips.c (mips_base_move_loop_invariants): New variable.
gcc/ * config/mips/mips.c (mips_base_move_loop_invariants): New variable. (mips_set_mips16_mode): Restore flag_move_loop_invariants, then set to 0 for MIPS16. (override_options): Set mips_base_move_loop_invariants. From-SVN: r128232
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/mips/mips.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 3655618..a4771f7 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -626,6 +626,7 @@ static bool mips_base_mips16;
/* Similar copies of option settings. */
static int mips_base_schedule_insns; /* flag_schedule_insns */
static int mips_base_reorder_blocks_and_partition; /* flag_reorder... */
+static int mips_base_move_loop_invariants; /* flag_move_loop_invariants */
static int mips_base_align_loops; /* align_loops */
static int mips_base_align_jumps; /* align_jumps */
static int mips_base_align_functions; /* align_functions */
@@ -5273,6 +5274,7 @@ mips_set_mips16_mode (int mips16_p)
align_functions = mips_base_align_functions;
flag_schedule_insns = mips_base_schedule_insns;
flag_reorder_blocks_and_partition = mips_base_reorder_blocks_and_partition;
+ flag_move_loop_invariants = mips_base_move_loop_invariants;
flag_delayed_branch = mips_flag_delayed_branch;
if (mips16_p)
@@ -5285,9 +5287,16 @@ mips_set_mips16_mode (int mips16_p)
flag_schedule_insns = 0;
/* Don't do hot/cold partitioning. The constant layout code expects
- the whole function to be in a single section. */
+ the whole function to be in a single section. */
flag_reorder_blocks_and_partition = 0;
+ /* Don't move loop invariants, because it tends to increase
+ register pressure. It also introduces an extra move in cases
+ where the constant is the first operand in a two-operand binary
+ instruction, or when it forms a register argument to a functon
+ call. */
+ flag_move_loop_invariants = 0;
+
/* Silently disable -mexplicit-relocs since it doesn't apply
to mips16 code. Even so, it would overly pedantic to warn
about "-mips16 -mexplicit-relocs", especially given that
@@ -5804,6 +5813,7 @@ override_options (void)
mips_base_target_flags = target_flags;
mips_base_schedule_insns = flag_schedule_insns;
mips_base_reorder_blocks_and_partition = flag_reorder_blocks_and_partition;
+ mips_base_move_loop_invariants = flag_move_loop_invariants;
mips_base_align_loops = align_loops;
mips_base_align_jumps = align_jumps;
mips_base_align_functions = align_functions;