diff options
author | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-22 12:56:47 +0000 |
---|---|---|
committer | rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-04-22 12:56:47 +0000 |
commit | 030087e31b1253fb9ed6835a82e93a61ccc02493 (patch) | |
tree | e2bc6c7177a42d1b832555b60d0a854bcb834bd0 /gcc/postreload.c | |
parent | b4f314ea97f04620d290f3ae25d831f46692864f (diff) | |
parent | ac875fa40bf5429aff0612943d8c5705c4e11bb5 (diff) | |
download | gcc-030087e31b1253fb9ed6835a82e93a61ccc02493.tar.gz |
Merge from trunk.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/wide-int@209623 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/postreload.c')
-rw-r--r-- | gcc/postreload.c | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/gcc/postreload.c b/gcc/postreload.c index cf3f0cfb85e..ea83c3c9b73 100644 --- a/gcc/postreload.c +++ b/gcc/postreload.c @@ -2315,30 +2315,6 @@ move2add_note_store (rtx dst, const_rtx set, void *data) } } -static bool -gate_handle_postreload (void) -{ - return (optimize > 0 && reload_completed); -} - - -static unsigned int -rest_of_handle_postreload (void) -{ - if (!dbg_cnt (postreload_cse)) - return 0; - - /* Do a very simple CSE pass over just the hard registers. */ - reload_cse_regs (get_insns ()); - /* Reload_cse_regs can eliminate potentially-trapping MEMs. - Remove any EH edges associated with them. */ - if (cfun->can_throw_non_call_exceptions - && purge_all_dead_edges ()) - cleanup_cfg (0); - - return 0; -} - namespace { const pass_data pass_data_postreload_cse = @@ -2346,7 +2322,6 @@ const pass_data pass_data_postreload_cse = RTL_PASS, /* type */ "postreload", /* name */ OPTGROUP_NONE, /* optinfo_flags */ - true, /* has_gate */ true, /* has_execute */ TV_RELOAD_CSE_REGS, /* tv_id */ 0, /* properties_required */ @@ -2364,11 +2339,29 @@ public: {} /* opt_pass methods: */ - bool gate () { return gate_handle_postreload (); } - unsigned int execute () { return rest_of_handle_postreload (); } + virtual bool gate (function *) { return (optimize > 0 && reload_completed); } + + virtual unsigned int execute (function *); }; // class pass_postreload_cse +unsigned int +pass_postreload_cse::execute (function *fun) +{ + if (!dbg_cnt (postreload_cse)) + return 0; + + /* Do a very simple CSE pass over just the hard registers. */ + reload_cse_regs (get_insns ()); + /* Reload_cse_regs can eliminate potentially-trapping MEMs. + Remove any EH edges associated with them. */ + if (fun->can_throw_non_call_exceptions + && purge_all_dead_edges ()) + cleanup_cfg (0); + + return 0; +} + } // anon namespace rtl_opt_pass * |