From: David Li Date: Thu, 9 Jun 2011 16:09:23 +0000 (+0000) Subject: Gator cleanup X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=bdf67bcba3ccc715da89128200d06140943f33b4;p=gcc.git Gator cleanup From-SVN: r174848 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cbc85ee7a8e..6e87f93d053 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2011-06-09 David Li + + * tree-complex.c (tree_lower_complex): Gate cleanup. + * tree-stdarg.c (check_all_va_list_escapes): Ditto. + (execute_optimize_stdarg): Ditto. + * tree-eh.c (execute_lower_eh_dispatch): Ditto. + (execute_cleanup_eh_1): Ditto. + (execute_cleanup_eh): Ditto. + * gcse.c (gate_rtl_pre): Ditto. + (execute_rtl_pre): Ditto. + * except.c (finish_eh_generation): Ditto. + (convert_to_eh_region_ranges): Ditto. + * cprop.c (one_cprop_pass): Ditto. + + 2011-06-09 Bernd Schmidt PR target/48673 diff --git a/gcc/cprop.c b/gcc/cprop.c index b7b17b19387..a81a80862dd 100644 --- a/gcc/cprop.c +++ b/gcc/cprop.c @@ -1843,15 +1843,17 @@ one_cprop_pass (void) static bool gate_rtl_cprop (void) { - return optimize > 0 && flag_gcse - && !cfun->calls_setjmp - && dbg_cnt (cprop); + return optimize > 0 && flag_gcse; } static unsigned int execute_rtl_cprop (void) { int changed; + + if (cfun->calls_setjmp || !dbg_cnt (cprop)) + return 0; + delete_unreachable_blocks (); df_set_flags (DF_LR_RUN_DCE); df_analyze (); @@ -1882,4 +1884,3 @@ struct rtl_opt_pass pass_rtl_cprop = TODO_verify_flow | TODO_ggc_collect /* todo_flags_finish */ } }; - diff --git a/gcc/except.c b/gcc/except.c index 1e5c291055f..a8bb7a94d92 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -1440,14 +1440,17 @@ finish_eh_generation (void) static bool gate_handle_eh (void) { - /* Nothing to do if no regions created. */ - return cfun->eh->region_tree != NULL; + return true; } /* Complete generation of exception handling code. */ static unsigned int rest_of_handle_eh (void) { + /* Nothing to do if no regions created. */ + if (cfun->eh->region_tree == NULL) + return 0; + finish_eh_generation (); cleanup_cfg (CLEANUP_NO_INSN_DEL); return 0; @@ -2392,6 +2395,9 @@ convert_to_eh_region_ranges (void) int min_labelno = 0, max_labelno = 0; int saved_call_site_base = call_site_base; + if (cfun->eh->region_tree == NULL) + return 0; + crtl->eh.action_record_data = VEC_alloc (uchar, gc, 64); ar_hash = htab_create (31, action_record_hash, action_record_eq, free); @@ -2643,8 +2649,6 @@ static bool gate_convert_to_eh_region_ranges (void) { /* Nothing to do for SJLJ exceptions or if no regions created. */ - if (cfun->eh->region_tree == NULL) - return false; if (targetm.except_unwind_info (&global_options) == UI_SJLJ) return false; return true; diff --git a/gcc/gcse.c b/gcc/gcse.c index 41fff7ab86b..fd1455f0790 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -3713,15 +3713,17 @@ static bool gate_rtl_pre (void) { return optimize > 0 && flag_gcse - && !cfun->calls_setjmp - && optimize_function_for_speed_p (cfun) - && dbg_cnt (pre); + && optimize_function_for_speed_p (cfun); } static unsigned int execute_rtl_pre (void) { int changed; + + if (cfun->calls_setjmp || !dbg_cnt (pre)) + return 0; + delete_unreachable_blocks (); df_analyze (); changed = one_pre_gcse_pass (); @@ -3735,18 +3737,20 @@ static bool gate_rtl_hoist (void) { return optimize > 0 && flag_gcse - && !cfun->calls_setjmp - /* It does not make sense to run code hoisting unless we are optimizing - for code size -- it rarely makes programs faster, and can make then - bigger if we did PRE (when optimizing for space, we don't run PRE). */ - && optimize_function_for_size_p (cfun) - && dbg_cnt (hoist); + /* It does not make sense to run code hoisting unless we are optimizing + for code size -- it rarely makes programs faster, and can make then + bigger if we did PRE (when optimizing for space, we don't run PRE). */ + && optimize_function_for_size_p (cfun); } static unsigned int execute_rtl_hoist (void) { int changed; + + if (cfun->calls_setjmp || !dbg_cnt (hoist)) + return 0; + delete_unreachable_blocks (); df_analyze (); changed = one_code_hoisting_pass (); @@ -3799,4 +3803,3 @@ struct rtl_opt_pass pass_rtl_hoist = }; #include "gt-gcse.h" - diff --git a/gcc/tree-complex.c b/gcc/tree-complex.c index ec2b438ca47..34298517eff 100644 --- a/gcc/tree-complex.c +++ b/gcc/tree-complex.c @@ -1569,6 +1569,11 @@ tree_lower_complex (void) gimple_stmt_iterator gsi; basic_block bb; + /* With errors, normal optimization passes are not run. If we don't + lower complex operations at all, rtl expansion will abort. */ + if (cfun->curr_properties & PROP_gimple_lcx) + return 0; + if (!init_dont_simulate_again ()) return 0; @@ -1634,9 +1639,7 @@ struct gimple_opt_pass pass_lower_complex = static bool gate_no_optimization (void) { - /* With errors, normal optimization passes are not run. If we don't - lower complex operations at all, rtl expansion will abort. */ - return !(cfun->curr_properties & PROP_gimple_lcx); + return true; } struct gimple_opt_pass pass_lower_complex_O0 = diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index e87c32e798b..7d27e0c90a7 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -3234,6 +3234,9 @@ execute_lower_eh_dispatch (void) bool any_rewritten = false; bool redirected = false; + if (cfun->eh->region_tree == NULL) + return 0; + assign_filter_values (); FOR_EACH_BB (bb) @@ -3254,7 +3257,7 @@ execute_lower_eh_dispatch (void) static bool gate_lower_eh_dispatch (void) { - return cfun->eh->region_tree != NULL; + return true; } struct gimple_opt_pass pass_lower_eh_dispatch = @@ -3983,8 +3986,12 @@ execute_cleanup_eh_1 (void) static unsigned int execute_cleanup_eh (void) { - int ret = execute_cleanup_eh_1 (); + int ret; + if (cfun->eh == NULL || cfun->eh->region_tree == NULL) + return 0; + + ret = execute_cleanup_eh_1 (); /* If the function no longer needs an EH personality routine clear it. This exposes cross-language inlining opportunities and avoids references to a never defined personality routine. */ @@ -3998,7 +4005,7 @@ execute_cleanup_eh (void) static bool gate_cleanup_eh (void) { - return cfun->eh != NULL && cfun->eh->region_tree != NULL; + return true; } struct gimple_opt_pass pass_cleanup_eh = { diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c index 46fc339a55a..7f16092f436 100644 --- a/gcc/tree-stdarg.c +++ b/gcc/tree-stdarg.c @@ -627,8 +627,7 @@ check_all_va_list_escapes (struct stdarg_info *si) static bool gate_optimize_stdarg (void) { - /* This optimization is only for stdarg functions. */ - return cfun->stdarg != 0; + return true; } @@ -645,6 +644,10 @@ execute_optimize_stdarg (void) const char *funcname = NULL; tree cfun_va_list; + /* This optimization is only for stdarg functions. */ + if (cfun->stdarg == 0) + return 0; + cfun->va_list_gpr_size = 0; cfun->va_list_fpr_size = 0; memset (&si, 0, sizeof (si));