summaryrefslogtreecommitdiff
path: root/gcc/toplev.c
diff options
context:
space:
mode:
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-20 21:31:32 +0000
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-20 21:31:32 +0000
commit3a0ecac2446ed396f0ab9cbc849a5d87d8a9cada (patch)
treeba006d95fa2c6cd2214ff0411ebeceffe1b217d0 /gcc/toplev.c
parent187d4486729c4f0211637898ed8bdbca948f8359 (diff)
downloadgcc-3a0ecac2446ed396f0ab9cbc849a5d87d8a9cada.tar.gz
* loop-invariant.c: New file.
* Makefile.in (loop-invariant.o): New. * cfgloop.h (global_cost_for_size, init_set_costs, move_loop_invariants): Declare. * cfgloopanal.c (seq_cost, init_set_costs, global_cost_for_size): New functions. (avail_regs, res_regs, small_cost, pres_cost, spill_cost): New variables. * common.opt (floop-optimize2, fmove-loop-invariants): New options. * loop-init.c (loop_optimizer_init): Call init_set_costs. * passes.c (rest_of_handle_loop2): Call move_loop_invariants. (rest_of_compilation): Check flag_loop_optimize2. * toplev.c (process_options): Handle flag_loop_optimize2. * doc/invoke.texi (-floop-optimize2, -fmove-loop-invariants): Document. * doc/passes.texi (loop-invariant.c): Document. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83419 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r--gcc/toplev.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index b2990bcae77..1ce344cac9c 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1673,6 +1673,19 @@ process_options (void)
if (flag_unroll_loops || flag_peel_loops)
flag_rerun_cse_after_loop = 1;
+ /* If explicitly asked to run new loop optimizer, switch off the old
+ one. */
+ if (flag_loop_optimize2)
+ flag_loop_optimize = 0;
+
+ /* Enable new loop optimizer pass if any of its optimizations is called. */
+ if (flag_move_loop_invariants
+ || flag_unswitch_loops
+ || flag_peel_loops
+ || flag_unroll_loops
+ || flag_branch_on_count_reg)
+ flag_loop_optimize2 = 1;
+
if (flag_non_call_exceptions)
flag_asynchronous_unwind_tables = 1;
if (flag_asynchronous_unwind_tables)