On Wed, Jun 13, 2012 at 4:47 PM, H.J. Lu <hongjiu...@intel.com> wrote:
> On i386, ix86_size_cost will be used for -Os, which has zero for > simultaneous_prefetches, prefetch_block, l1_cache_size and l2_cache_size. > This patch adds ix86_tune_cost and uses it for simultaneous_prefetches, > prefetch_block, l1_cache_size and l2_cache_size if ones from ix86_cost > are zero. OK to install? > > 2012-06-13 H.J. Lu <hongjiu...@intel.com> > > PR target/53647 > * config/i386/i386.c (ix86_tune_cost): New variable. > (ix86_option_override_internal): Set ix86_tune_cost. Use > ix86_tune_cost for simultaneous_prefetches, prefetch_block, > l1_cache_size and l2_cache_size if ones from ix86_cost are > zero. > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index 13755f4..2e64d55 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -1874,6 +1874,10 @@ struct processor_costs generic32_cost = { > 1, /* cond_not_taken_branch_cost. */ > }; > > +/* Set by -mtune. */ > +const struct processor_costs *ix86_tune_cost = &pentium_cost; > + > +/* Set by -mtune or -Os. */ /* Set by -mtune, overridden by -Os. */ > const struct processor_costs *ix86_cost = &pentium_cost; We probably don't need to initialize these variables, but won't hurt. > /* Processor feature/optimization bitmasks. */ > @@ -3546,6 +3550,7 @@ ix86_option_override_internal (bool main_args_p) > flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN; > } > > + ix86_tune_cost = processor_target_table[ix86_tune].cost; > if (optimize_size) > ix86_cost = &ix86_size_cost; > else > @@ -3794,16 +3799,27 @@ ix86_option_override_internal (bool main_args_p) > flag_schedule_insns_after_reload = flag_schedule_insns = 0; > > maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES, > - ix86_cost->simultaneous_prefetches, > + ix86_cost->simultaneous_prefetches > + ? ix86_cost->simultaneous_prefetches > + : ix86_tune_cost->simultaneous_prefetches, > global_options.x_param_values, > global_options_set.x_param_values); > - maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE, ix86_cost->prefetch_block, > + maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE, > + ix86_cost->prefetch_block > + ? ix86_cost->prefetch_block > + : ix86_tune_cost->prefetch_block, > global_options.x_param_values, > global_options_set.x_param_values); > - maybe_set_param_value (PARAM_L1_CACHE_SIZE, ix86_cost->l1_cache_size, > + maybe_set_param_value (PARAM_L1_CACHE_SIZE, > + ix86_cost->l1_cache_size > + ? ix86_cost->l1_cache_size > + : ix86_tune_cost->l1_cache_size, > global_options.x_param_values, > global_options_set.x_param_values); > - maybe_set_param_value (PARAM_L2_CACHE_SIZE, ix86_cost->l2_cache_size, > + maybe_set_param_value (PARAM_L2_CACHE_SIZE, > + ix86_cost->l2_cache_size > + ? ix86_cost->l2_cache_size > + : ix86_cost->l2_cache_size, > global_options.x_param_values, > global_options_set.x_param_values); > Just set these params directly from ix86_tune_costs. We know these are the same, unless -Os clears them. OK with these changes. Thanks, Uros.