/* GCSE'ing constants:
We do not specifically distinguish between constant and non-constant
- expressions in PRE and Hoist. We use rtx_cost below to limit
+ expressions in PRE and Hoist. We use set_src_cost below to limit
the maximum distance simple expressions can travel.
Nevertheless, constants are much easier to GCSE, and, hence,
gcc_assert (!optimize_function_for_speed_p (cfun)
&& optimize_function_for_size_p (cfun));
- cost = rtx_cost (x, SET, 0);
+ cost = set_src_cost (x, 0);
if (cost < COSTS_N_INSNS (GCSE_UNRESTRICTED_COST))
{
gate_rtl_pre (void)
{
return optimize > 0 && flag_gcse
- && optimize_function_for_speed_p (cfun);
+ && !cfun->calls_setjmp
+ && optimize_function_for_speed_p (cfun)
+ && dbg_cnt (pre);
}
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 ();
gate_rtl_hoist (void)
{
return optimize > 0 && flag_gcse
- /* 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);
+ && !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);
}
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 ();
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_df_finish | TODO_verify_rtl_sharing |
- TODO_dump_func |
TODO_verify_flow | TODO_ggc_collect /* todo_flags_finish */
}
};
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_df_finish | TODO_verify_rtl_sharing |
- TODO_dump_func |
TODO_verify_flow | TODO_ggc_collect /* todo_flags_finish */
}
};