diff options
Diffstat (limited to 'gcc/cfgcleanup.c')
-rw-r--r-- | gcc/cfgcleanup.c | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 619b274..1aa4cbb 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -2990,7 +2990,7 @@ cleanup_cfg (int mode) } static unsigned int -rest_of_handle_jump2 (void) +execute_jump (void) { delete_trivially_dead_insns (get_insns (), max_reg_num ()); if (dump_file) @@ -3000,22 +3000,47 @@ rest_of_handle_jump2 (void) return 0; } +struct rtl_opt_pass pass_jump = +{ + { + RTL_PASS, + "jump", /* name */ + NULL, /* gate */ + execute_jump, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + TV_JUMP, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + TODO_ggc_collect, /* todo_flags_start */ + TODO_verify_rtl_sharing, /* todo_flags_finish */ + } +}; + +static unsigned int +execute_jump2 (void) +{ + cleanup_cfg (flag_crossjumping ? CLEANUP_CROSSJUMP : 0); + return 0; +} struct rtl_opt_pass pass_jump2 = { { RTL_PASS, - "jump", /* name */ - NULL, /* gate */ - rest_of_handle_jump2, /* execute */ - NULL, /* sub */ - NULL, /* next */ - 0, /* static_pass_number */ - TV_JUMP, /* tv_id */ - 0, /* properties_required */ - 0, /* properties_provided */ - 0, /* properties_destroyed */ - TODO_ggc_collect, /* todo_flags_start */ - TODO_verify_rtl_sharing, /* todo_flags_finish */ + "jump2", /* name */ + NULL, /* gate */ + execute_jump2, /* execute */ + NULL, /* sub */ + NULL, /* next */ + 0, /* static_pass_number */ + TV_JUMP, /* tv_id */ + 0, /* properties_required */ + 0, /* properties_provided */ + 0, /* properties_destroyed */ + TODO_ggc_collect, /* todo_flags_start */ + TODO_verify_rtl_sharing, /* todo_flags_finish */ } }; |