diff options
author | Jan Hubicka <jh@suse.cz> | 2004-01-17 12:41:43 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2004-01-17 11:41:43 +0000 |
commit | f2e16e973b957b130293059a4117c35dffe6b36a (patch) | |
tree | 8e51ed2538908a0d4dc3ed8bbfac8b7537cdc823 /gcc | |
parent | f103e34d1dbc090a6bdb744bc1d7a568695ba491 (diff) | |
download | gcc-f2e16e973b957b130293059a4117c35dffe6b36a.zip gcc-f2e16e973b957b130293059a4117c35dffe6b36a.tar.gz gcc-f2e16e973b957b130293059a4117c35dffe6b36a.tar.bz2 |
toplev.c (HAVE_conditional_execution): Provide default.
* toplev.c (HAVE_conditional_execution): Provide default.
(rest_of_handle_reorder_blocks): For conditional_execution target
update liveness once after all transformations
(rest_of_compilation): Do crossjumping before ce3.
From-SVN: r76032
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/toplev.c | 32 |
2 files changed, 33 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e8abc33..1c11ea7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-01-17 Jan Hubicka <jh@suse.cz> + + * toplev.c (HAVE_conditional_execution): Provide default. + (rest_of_handle_reorder_blocks): For conditional_execution target + update liveness once after all transformations + (rest_of_compilation): Do crossjumping before ce3. + 2004-01-17 Geoffrey Keating <geoffk@apple.com> * alias.c (new_alias_set): Mark last_alias_set for PCH. diff --git a/gcc/toplev.c b/gcc/toplev.c index 3ac7d73..6850914 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -96,6 +96,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA declarations for e.g. AIX 4.x. */ #endif +#ifndef HAVE_conditional_execution +#define HAVE_conditional_execution 0 +#endif + /* Carry information from ASM_DECLARE_OBJECT_NAME to ASM_FINISH_DECLARE_OBJECT. */ @@ -2294,12 +2298,14 @@ rest_of_handle_regrename (tree decl, rtx insns) static void rest_of_handle_reorder_blocks (tree decl, rtx insns) { + bool changed; open_dump_file (DFI_bbro, decl); /* Last attempt to optimize CFG, as scheduling, peepholing and insn splitting possibly introduced more crossjumping opportunities. */ - cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE - | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0)); + changed |= cleanup_cfg (CLEANUP_EXPENSIVE + | (!HAVE_conditional_execution + ? CLEANUP_UPDATE_LIFE : 0)); if (flag_sched2_use_traces && flag_schedule_insns_after_reload) tracer (); @@ -2307,8 +2313,16 @@ rest_of_handle_reorder_blocks (tree decl, rtx insns) reorder_basic_blocks (); if (flag_reorder_blocks || (flag_sched2_use_traces && flag_schedule_insns_after_reload)) - cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_UPDATE_LIFE); - + changed |= cleanup_cfg (CLEANUP_EXPENSIVE + | (!HAVE_conditional_execution + ? CLEANUP_UPDATE_LIFE : 0)); + + /* On conditional execution targets we can not update the life cheaply, so + we deffer the updating to after both cleanups. This may lose some cases + but should not be terribly bad. */ + if (changed && HAVE_conditional_execution) + update_life_info (NULL, UPDATE_LIFE_GLOBAL_RM_NOTES, + PROP_DEATH_NOTES | PROP_REG_INFO); close_dump_file (DFI_bbro, print_rtl_with_bb, insns); } @@ -3474,16 +3488,22 @@ rest_of_compilation (tree decl) } #endif + open_dump_file (DFI_ce3, decl); + if (optimize) + /* Last attempt to optimize CFG, as scheduling, peepholing and insn + splitting possibly introduced more crossjumping opportunities. */ + cleanup_cfg (CLEANUP_EXPENSIVE + | CLEANUP_UPDATE_LIFE + | (flag_crossjumping ? CLEANUP_CROSSJUMP : 0)); if (flag_if_conversion2) { timevar_push (TV_IFCVT2); - open_dump_file (DFI_ce3, decl); if_convert (1); - close_dump_file (DFI_ce3, print_rtl_with_bb, insns); timevar_pop (TV_IFCVT2); } + close_dump_file (DFI_ce3, print_rtl_with_bb, insns); if (optimize > 0) { |