params.c (set_param_value_internal): New.

* params.c (set_param_value_internal): New.
	(set_param_value): Use set_param_value_internal.
	(maybe_set_param_value, set_default_param_value): New.
	* params.h (PARAM_VALUE, PARAM_SET_P): Make into rvalues.
	(maybe_set_param_value, set_default_param_value): Declare.
	* config/arm/arm.c (arm_option_override): Use
	maybe_set_param_value.
	* config/i386/i386.c (ix86_option_override_internal): Use
	maybe_set_param_value.
	* config/ia64/ia64.c (ia64_option_default_params,
	TARGET_OPTION_DEFAULT_PARAMS): New.
	(ia64_option_optimization): Move some code to
	ia64_option_default_params.
	* config/picochip/picochip.c (picochip_option_override): Use
	maybe_set_param_value.
	* config/rs6000/rs6000.c (rs6000_option_default_params,
	TARGET_OPTION_DEFAULT_PARAMS): New.
	(rs6000_option_override_internal): Use maybe_set_param_value.
	(rs6000_option_optimization): Move some code to
	rs6000_option_default_params.
	* config/s390/s390.c (s390_option_override): Use
	maybe_set_param_value.
	* config/sh/sh.c (sh_option_default_params,
	TARGET_OPTION_DEFAULT_PARAMS): New.
	(sh_option_optimization): Move some code to
	sh_option_default_params.
	* config/sparc/sparc.c (sparc_option_override): Use
	maybe_set_param_value.
	* config/spu/spu.c (spu_option_default_params,
	TARGET_OPTION_DEFAULT_PARAMS): New.
	(spu_option_optimization): Move some code to
	spu_option_default_params.
	(spu_option_override): Use maybe_set_param_value.
	* doc/tm.texi.in (TARGET_OPTION_DEFAULT_PARAMS): New @hook.
	* doc/tm.texi: Regenerate.
	* ggc-common.c (init_ggc_heuristics): Use set_default_param_value.
	* opts.c (init_options_once): Use PARAM_VALUE not direct access to
	compiler_params.
	(default_options_optimization): Use maybe_set_param_value.
	(finish_options): Use maybe_set_param_value.
	* target.def (target_option.default_params): New hook.
	* toplev.c (general_init): Call
	targetm.target_option.default_params.

From-SVN: r165303
This commit is contained in:
Joseph Myers 2010-10-11 13:28:40 +01:00 committed by Joseph Myers
parent 4907769827
commit 128dc8e230
18 changed files with 214 additions and 96 deletions

View file

@ -1,3 +1,49 @@
2010-10-11 Joseph Myers <joseph@codesourcery.com>
* params.c (set_param_value_internal): New.
(set_param_value): Use set_param_value_internal.
(maybe_set_param_value, set_default_param_value): New.
* params.h (PARAM_VALUE, PARAM_SET_P): Make into rvalues.
(maybe_set_param_value, set_default_param_value): Declare.
* config/arm/arm.c (arm_option_override): Use
maybe_set_param_value.
* config/i386/i386.c (ix86_option_override_internal): Use
maybe_set_param_value.
* config/ia64/ia64.c (ia64_option_default_params,
TARGET_OPTION_DEFAULT_PARAMS): New.
(ia64_option_optimization): Move some code to
ia64_option_default_params.
* config/picochip/picochip.c (picochip_option_override): Use
maybe_set_param_value.
* config/rs6000/rs6000.c (rs6000_option_default_params,
TARGET_OPTION_DEFAULT_PARAMS): New.
(rs6000_option_override_internal): Use maybe_set_param_value.
(rs6000_option_optimization): Move some code to
rs6000_option_default_params.
* config/s390/s390.c (s390_option_override): Use
maybe_set_param_value.
* config/sh/sh.c (sh_option_default_params,
TARGET_OPTION_DEFAULT_PARAMS): New.
(sh_option_optimization): Move some code to
sh_option_default_params.
* config/sparc/sparc.c (sparc_option_override): Use
maybe_set_param_value.
* config/spu/spu.c (spu_option_default_params,
TARGET_OPTION_DEFAULT_PARAMS): New.
(spu_option_optimization): Move some code to
spu_option_default_params.
(spu_option_override): Use maybe_set_param_value.
* doc/tm.texi.in (TARGET_OPTION_DEFAULT_PARAMS): New @hook.
* doc/tm.texi: Regenerate.
* ggc-common.c (init_ggc_heuristics): Use set_default_param_value.
* opts.c (init_options_once): Use PARAM_VALUE not direct access to
compiler_params.
(default_options_optimization): Use maybe_set_param_value.
(finish_options): Use maybe_set_param_value.
* target.def (target_option.default_params): New hook.
* toplev.c (general_init): Call
targetm.target_option.default_params.
2010-10-11 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/45902

View file

@ -1953,13 +1953,12 @@ arm_option_override (void)
flag_reorder_blocks = 1;
}
if (!PARAM_SET_P (PARAM_GCSE_UNRESTRICTED_COST)
&& flag_pic)
if (flag_pic)
/* Hoisting PIC address calculations more aggressively provides a small,
but measurable, size reduction for PIC code. Therefore, we decrease
the bar for unrestricted expression hoisting to the cost of PIC address
calculation, which is 2 instructions. */
set_param_value ("gcse-unrestricted-cost", 2);
maybe_set_param_value (PARAM_GCSE_UNRESTRICTED_COST, 2);
/* Register global variables with the garbage collector. */
arm_add_gc_roots ();

View file

@ -3632,15 +3632,11 @@ ix86_option_override_internal (bool main_args_p)
if (!TARGET_SCHEDULE)
flag_schedule_insns_after_reload = flag_schedule_insns = 0;
if (!PARAM_SET_P (PARAM_SIMULTANEOUS_PREFETCHES))
set_param_value ("simultaneous-prefetches",
ix86_cost->simultaneous_prefetches);
if (!PARAM_SET_P (PARAM_L1_CACHE_LINE_SIZE))
set_param_value ("l1-cache-line-size", ix86_cost->prefetch_block);
if (!PARAM_SET_P (PARAM_L1_CACHE_SIZE))
set_param_value ("l1-cache-size", ix86_cost->l1_cache_size);
if (!PARAM_SET_P (PARAM_L2_CACHE_SIZE))
set_param_value ("l2-cache-size", ix86_cost->l2_cache_size);
maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES,
ix86_cost->simultaneous_prefetches);
maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE, ix86_cost->prefetch_block);
maybe_set_param_value (PARAM_L1_CACHE_SIZE, ix86_cost->l1_cache_size);
maybe_set_param_value (PARAM_L2_CACHE_SIZE, ix86_cost->l2_cache_size);
/* Enable sw prefetching at -O3 for CPUS that prefetching is helpful. */
if (flag_prefetch_loop_arrays < 0

View file

@ -203,6 +203,7 @@ static rtx gen_fr_restore_x (rtx, rtx, rtx);
static void ia64_option_override (void);
static void ia64_option_optimization (int, int);
static void ia64_option_default_params (void);
static bool ia64_can_eliminate (const int, const int);
static enum machine_mode hfa_element_mode (const_tree, bool);
static void ia64_setup_incoming_varargs (CUMULATIVE_ARGS *, enum machine_mode,
@ -372,6 +373,8 @@ static const struct attribute_spec ia64_attribute_table[] =
#define TARGET_OPTION_OVERRIDE ia64_option_override
#undef TARGET_OPTION_OPTIMIZATION
#define TARGET_OPTION_OPTIMIZATION ia64_option_optimization
#undef TARGET_OPTION_DEFAULT_PARAMS
#define TARGET_OPTION_DEFAULT_PARAMS ia64_option_default_params
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE ia64_output_function_prologue
@ -10839,15 +10842,20 @@ ia64_option_optimization (int level ATTRIBUTE_UNUSED,
#ifdef SUBTARGET_OPTIMIZATION_OPTIONS
SUBTARGET_OPTIMIZATION_OPTIONS;
#endif
}
/* Implement TARGET_OPTION_DEFAULT_PARAMS. */
static void
ia64_option_default_params (void)
{
/* Let the scheduler form additional regions. */
set_param_value ("max-sched-extend-regions-iters", 2);
set_default_param_value (PARAM_MAX_SCHED_EXTEND_REGIONS_ITERS, 2);
/* Set the default values for cache-related parameters. */
set_param_value ("simultaneous-prefetches", 6);
set_param_value ("l1-cache-line-size", 32);
set_default_param_value (PARAM_SIMULTANEOUS_PREFETCHES, 6);
set_default_param_value (PARAM_L1_CACHE_LINE_SIZE, 32);
set_param_value("sched-mem-true-dep-cost", 4);
set_default_param_value (PARAM_SCHED_MEM_TRUE_DEP_COST, 4);
}
/* HP-UX version_id attribute.

View file

@ -342,10 +342,10 @@ picochip_option_override (void)
/* If we are optimizing for stack, dont let inliner to inline functions
that could potentially increase stack size.*/
if (flag_conserve_stack)
{
PARAM_VALUE (PARAM_LARGE_STACK_FRAME) = 0;
PARAM_VALUE (PARAM_STACK_FRAME_GROWTH) = 0;
}
{
maybe_set_param_value (PARAM_LARGE_STACK_FRAME, 0);
maybe_set_param_value (PARAM_STACK_FRAME_GROWTH, 0);
}
/* Turn off the elimination of unused types. The elaborator
generates various interesting types to represent constants,

View file

@ -1137,6 +1137,7 @@ static rtx altivec_expand_vec_ext_builtin (tree, rtx);
static int get_element_number (tree, tree);
static void rs6000_option_override (void);
static void rs6000_option_optimization (int, int);
static void rs6000_option_default_params (void);
static bool rs6000_handle_option (size_t, const char *, int);
static void rs6000_parse_tls_size_option (void);
static void rs6000_parse_yes_no_option (const char *, const char *, int *);
@ -1604,6 +1605,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
#undef TARGET_OPTION_OPTIMIZATION
#define TARGET_OPTION_OPTIMIZATION rs6000_option_optimization
#undef TARGET_OPTION_DEFAULT_PARAMS
#define TARGET_OPTION_DEFAULT_PARAMS rs6000_option_default_params
#undef TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION
#define TARGET_VECTORIZE_BUILTIN_VECTORIZED_FUNCTION \
rs6000_builtin_vectorized_function
@ -3154,15 +3158,12 @@ rs6000_option_override_internal (const char *default_cpu)
gcc_unreachable ();
}
if (!PARAM_SET_P (PARAM_SIMULTANEOUS_PREFETCHES))
set_param_value ("simultaneous-prefetches",
rs6000_cost->simultaneous_prefetches);
if (!PARAM_SET_P (PARAM_L1_CACHE_SIZE))
set_param_value ("l1-cache-size", rs6000_cost->l1_cache_size);
if (!PARAM_SET_P (PARAM_L1_CACHE_LINE_SIZE))
set_param_value ("l1-cache-line-size", rs6000_cost->cache_line_size);
if (!PARAM_SET_P (PARAM_L2_CACHE_SIZE))
set_param_value ("l2-cache-size", rs6000_cost->l2_cache_size);
maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES,
rs6000_cost->simultaneous_prefetches);
maybe_set_param_value (PARAM_L1_CACHE_SIZE, rs6000_cost->l1_cache_size);
maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE,
rs6000_cost->cache_line_size);
maybe_set_param_value (PARAM_L2_CACHE_SIZE, rs6000_cost->l2_cache_size);
/* If using typedef char *va_list, signal that __builtin_va_start (&ap, 0)
can be optimized to ap = __builtin_next_arg (0). */
@ -3681,9 +3682,6 @@ rs6000_option_optimization (int level ATTRIBUTE_UNUSED,
avoid calling them when that's the only reason we would. */
flag_errno_math = 0;
/* Double growth factor to counter reduced min jump length. */
set_param_value ("max-grow-copy-bb-insns", 16);
/* Enable section anchors by default.
Skip section anchors for Objective C and Objective C++
until front-ends fixed. */
@ -3691,6 +3689,15 @@ rs6000_option_optimization (int level ATTRIBUTE_UNUSED,
flag_section_anchors = 2;
}
/* Implement TARGET_OPTION_DEFAULT_PARAMS. */
static void
rs6000_option_default_params (void)
{
/* Double growth factor to counter reduced min jump length. */
set_default_param_value (PARAM_MAX_GROW_COPY_BB_INSNS, 16);
}
static enum fpu_type_t
rs6000_parse_fpu_option (const char *option)
{

View file

@ -1687,30 +1687,22 @@ s390_option_override (void)
if (s390_tune == PROCESSOR_2097_Z10
|| s390_tune == PROCESSOR_2817_Z196)
{
if (!PARAM_SET_P (PARAM_MAX_UNROLLED_INSNS))
set_param_value ("max-unrolled-insns", 100);
if (!PARAM_SET_P (PARAM_MAX_UNROLL_TIMES))
set_param_value ("max-unroll-times", 32);
if (!PARAM_SET_P (PARAM_MAX_COMPLETELY_PEELED_INSNS))
set_param_value ("max-completely-peeled-insns", 2000);
if (!PARAM_SET_P (PARAM_MAX_COMPLETELY_PEEL_TIMES))
set_param_value ("max-completely-peel-times", 64);
maybe_set_param_value (PARAM_MAX_UNROLLED_INSNS, 100);
maybe_set_param_value (PARAM_MAX_UNROLL_TIMES, 32);
maybe_set_param_value (PARAM_MAX_COMPLETELY_PEELED_INSNS, 2000);
maybe_set_param_value (PARAM_MAX_COMPLETELY_PEEL_TIMES, 64);
}
set_param_value ("max-pending-list-length", 256);
/* values for loop prefetching */
set_param_value ("l1-cache-line-size", 256);
if (!PARAM_SET_P (PARAM_L1_CACHE_SIZE))
set_param_value ("l1-cache-size", 128);
maybe_set_param_value (PARAM_L1_CACHE_SIZE, 128);
/* s390 has more than 2 levels and the size is much larger. Since
we are always running virtualized assume that we only get a small
part of the caches above l1. */
if (!PARAM_SET_P (PARAM_L2_CACHE_SIZE))
set_param_value ("l2-cache-size", 1500);
if (!PARAM_SET_P (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO))
set_param_value ("prefetch-min-insn-to-mem-ratio", 2);
if (!PARAM_SET_P (PARAM_SIMULTANEOUS_PREFETCHES))
set_param_value ("simultaneous-prefetches", 6);
maybe_set_param_value (PARAM_L2_CACHE_SIZE, 1500);
maybe_set_param_value (PARAM_PREFETCH_MIN_INSN_TO_MEM_RATIO, 2);
maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES, 6);
/* This cannot reside in s390_option_optimization since HAVE_prefetch
requires the arch flags to be evaluated already. Since prefetching

View file

@ -184,6 +184,7 @@ static rtx gen_block_redirect (rtx, int, int);
static void sh_reorg (void);
static void sh_option_override (void);
static void sh_option_optimization (int, int);
static void sh_option_default_params (void);
static void output_stack_adjust (int, rtx, int, HARD_REG_SET *, bool);
static rtx frame_insn (rtx);
static rtx push (int);
@ -342,6 +343,8 @@ static const struct attribute_spec sh_attribute_table[] =
#define TARGET_OPTION_OVERRIDE sh_option_override
#undef TARGET_OPTION_OPTIMIZATION
#define TARGET_OPTION_OPTIMIZATION sh_option_optimization
#undef TARGET_OPTION_DEFAULT_PARAMS
#define TARGET_OPTION_DEFAULT_PARAMS sh_option_default_params
#undef TARGET_PRINT_OPERAND
#define TARGET_PRINT_OPERAND sh_print_operand
@ -731,8 +734,13 @@ sh_option_optimization (int level, int size)
the user explicitly requested this to be on or off. */
if (flag_schedule_insns > 0)
flag_schedule_insns = 2;
}
set_param_value ("simultaneous-prefetches", 2);
/* Implement TARGET_OPTION_DEFAULT_PARAMS. */
static void
sh_option_default_params (void)
{
set_default_param_value (PARAM_SIMULTANEOUS_PREFETCHES, 2);
}
/* Implement TARGET_OPTION_OVERRIDE macro. Validate and override

View file

@ -916,21 +916,19 @@ sparc_option_override (void)
target_flags |= MASK_LONG_DOUBLE_128;
#endif
if (!PARAM_SET_P (PARAM_SIMULTANEOUS_PREFETCHES))
set_param_value ("simultaneous-prefetches",
((sparc_cpu == PROCESSOR_ULTRASPARC
|| sparc_cpu == PROCESSOR_NIAGARA
|| sparc_cpu == PROCESSOR_NIAGARA2)
? 2
: (sparc_cpu == PROCESSOR_ULTRASPARC3
? 8 : 3)));
if (!PARAM_SET_P (PARAM_L1_CACHE_LINE_SIZE))
set_param_value ("l1-cache-line-size",
((sparc_cpu == PROCESSOR_ULTRASPARC
|| sparc_cpu == PROCESSOR_ULTRASPARC3
|| sparc_cpu == PROCESSOR_NIAGARA
|| sparc_cpu == PROCESSOR_NIAGARA2)
? 64 : 32));
maybe_set_param_value (PARAM_SIMULTANEOUS_PREFETCHES,
((sparc_cpu == PROCESSOR_ULTRASPARC
|| sparc_cpu == PROCESSOR_NIAGARA
|| sparc_cpu == PROCESSOR_NIAGARA2)
? 2
: (sparc_cpu == PROCESSOR_ULTRASPARC3
? 8 : 3)));
maybe_set_param_value (PARAM_L1_CACHE_LINE_SIZE,
((sparc_cpu == PROCESSOR_ULTRASPARC
|| sparc_cpu == PROCESSOR_ULTRASPARC3
|| sparc_cpu == PROCESSOR_NIAGARA
|| sparc_cpu == PROCESSOR_NIAGARA2)
? 64 : 32));
}
/* Miscellaneous utilities. */

View file

@ -151,6 +151,7 @@ char regs_ever_allocated[FIRST_PSEUDO_REGISTER];
/* Prototypes and external defs. */
static void spu_option_override (void);
static void spu_option_optimization (int, int);
static void spu_option_default_params (void);
static void spu_init_builtins (void);
static tree spu_builtin_decl (unsigned, bool);
static bool spu_scalar_mode_supported_p (enum machine_mode mode);
@ -482,6 +483,9 @@ static const struct attribute_spec spu_attribute_table[] =
#undef TARGET_OPTION_OPTIMIZATION
#define TARGET_OPTION_OPTIMIZATION spu_option_optimization
#undef TARGET_OPTION_DEFAULT_PARAMS
#define TARGET_OPTION_DEFAULT_PARAMS spu_option_default_params
#undef TARGET_EXCEPT_UNWIND_INFO
#define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
@ -490,23 +494,27 @@ struct gcc_target targetm = TARGET_INITIALIZER;
static void
spu_option_optimization (int level ATTRIBUTE_UNUSED, int size ATTRIBUTE_UNUSED)
{
/* Override some of the default param values. With so many registers
larger values are better for these params. */
MAX_PENDING_LIST_LENGTH = 128;
/* With so many registers this is better on by default. */
flag_rename_registers = 1;
}
/* Implement TARGET_OPTION_DEFAULT_PARAMS. */
static void
spu_option_default_params (void)
{
/* Override some of the default param values. With so many registers
larger values are better for these params. */
set_default_param_value (PARAM_MAX_PENDING_LIST_LENGTH, 128);
}
/* Implement TARGET_OPTION_OVERRIDE. */
static void
spu_option_override (void)
{
/* Small loops will be unpeeled at -O3. For SPU it is more important
to keep code small by default. */
if (!flag_unroll_loops && !flag_peel_loops
&& !PARAM_SET_P (PARAM_MAX_COMPLETELY_PEEL_TIMES))
PARAM_VALUE (PARAM_MAX_COMPLETELY_PEEL_TIMES) = 1;
if (!flag_unroll_loops && !flag_peel_loops)
maybe_set_param_value (PARAM_MAX_COMPLETELY_PEEL_TIMES, 1);
flag_omit_frame_pointer = 1;

View file

@ -812,6 +812,10 @@ this hook!} The debugging options are not supposed to alter the
generated code.
@end deftypefn
@deftypefn {Target Hook} void TARGET_OPTION_DEFAULT_PARAMS (void)
Set target-dependent default values for @option{--param} settings, using calls to @code{set_default_param_value}.
@end deftypefn
@deftypefn {Target Hook} void TARGET_HELP (void)
This hook is called in response to the user invoking
@option{--target-help} on the command line. It gives the target a

View file

@ -812,6 +812,8 @@ this hook!} The debugging options are not supposed to alter the
generated code.
@end deftypefn
@hook TARGET_OPTION_DEFAULT_PARAMS
@hook TARGET_HELP
This hook is called in response to the user invoking
@option{--target-help} on the command line. It gives the target a

View file

@ -857,8 +857,8 @@ void
init_ggc_heuristics (void)
{
#if !defined ENABLE_GC_CHECKING && !defined ENABLE_GC_ALWAYS_COLLECT
set_param_value ("ggc-min-expand", ggc_min_expand_heuristic ());
set_param_value ("ggc-min-heapsize", ggc_min_heapsize_heuristic ());
set_default_param_value (GGC_MIN_EXPAND, ggc_min_expand_heuristic ());
set_default_param_value (GGC_MIN_HEAPSIZE, ggc_min_heapsize_heuristic ());
#endif
}

View file

@ -669,11 +669,11 @@ init_options_once (void)
/* Save initial values of parameters we reset. */
initial_min_crossjump_insns
= compiler_params[PARAM_MIN_CROSSJUMP_INSNS].value;
= PARAM_VALUE (PARAM_MIN_CROSSJUMP_INSNS);
initial_max_fields_for_field_sensitive
= compiler_params[PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE].value;
= PARAM_VALUE (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE);
initial_loop_invariant_max_bbs_in_loop
= compiler_params[PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP].value;
= PARAM_VALUE (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP);
}
/* Initialize OPTS and OPTS_SET before using them in parsing options. */
@ -853,12 +853,12 @@ default_options_optimization (struct gcc_options *opts,
flag_ipa_sra = opt2;
/* Track fields in field-sensitive alias analysis. */
set_param_value ("max-fields-for-field-sensitive",
(opt2) ? 100 : initial_max_fields_for_field_sensitive);
maybe_set_param_value (PARAM_MAX_FIELDS_FOR_FIELD_SENSITIVE,
opt2 ? 100 : initial_max_fields_for_field_sensitive);
/* For -O1 only do loop invariant motion for very small loops. */
set_param_value ("loop-invariant-max-bbs-in-loop",
(opt2) ? initial_loop_invariant_max_bbs_in_loop : 1000);
maybe_set_param_value (PARAM_LOOP_INVARIANT_MAX_BBS_IN_LOOP,
opt2 ? initial_loop_invariant_max_bbs_in_loop : 1000);
/* -O3 optimizations. */
opt3 = (optimize >= 3);
@ -891,10 +891,11 @@ default_options_optimization (struct gcc_options *opts,
optimize = 2;
/* We want to crossjump as much as possible. */
set_param_value ("min-crossjump-insns", 1);
maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS, 1);
}
else
set_param_value ("min-crossjump-insns", initial_min_crossjump_insns);
maybe_set_param_value (PARAM_MIN_CROSSJUMP_INSNS,
initial_min_crossjump_insns);
/* -Ofast adds optimizations to -O3. */
if (ofast)
@ -1114,10 +1115,8 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set)
if (flag_conserve_stack)
{
if (!PARAM_SET_P (PARAM_LARGE_STACK_FRAME))
PARAM_VALUE (PARAM_LARGE_STACK_FRAME) = 100;
if (!PARAM_SET_P (PARAM_STACK_FRAME_GROWTH))
PARAM_VALUE (PARAM_STACK_FRAME_GROWTH) = 40;
maybe_set_param_value (PARAM_LARGE_STACK_FRAME, 100);
maybe_set_param_value (PARAM_STACK_FRAME_GROWTH, 40);
}
if (flag_wpa || flag_ltrans)
{

View file

@ -1,5 +1,5 @@
/* params.c - Run-time parameters.
Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008
Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>.
@ -51,6 +51,21 @@ add_params (const param_info params[], size_t n)
num_compiler_params += n;
}
/* Set the value of the parameter given by NUM to VALUE. If
EXPLICIT_P, this is being set by the user; otherwise it is being
set implicitly by the compiler. */
static void
set_param_value_internal (compiler_param num, int value,
bool explicit_p)
{
size_t i = (size_t) num;
compiler_params[i].value = value;
if (explicit_p)
compiler_params[i].set = true;
}
/* Set the VALUE associated with the parameter given by NAME. */
void
@ -75,10 +90,7 @@ set_param_value (const char *name, int value)
compiler_params[i].option,
compiler_params[i].max_value);
else
{
compiler_params[i].value = value;
compiler_params[i].set = true;
}
set_param_value_internal ((compiler_param) i, value, true);
return;
}
@ -86,6 +98,26 @@ set_param_value (const char *name, int value)
error ("invalid parameter %qs", name);
}
/* Set the value of the parameter given by NUM to VALUE, implicitly,
if it has not been set explicitly by the user. */
void
maybe_set_param_value (compiler_param num, int value)
{
if (!PARAM_SET_P (num))
set_param_value_internal (num, value, false);
}
/* Set the default value of a parameter given by NUM to VALUE, before
option processing. */
void
set_default_param_value (compiler_param num, int value)
{
gcc_assert (!PARAM_SET_P (num));
set_param_value_internal (num, value, false);
}
/* Return the current value of num_compiler_params, for the benefit of
plugins that use parameters as features. */

View file

@ -1,5 +1,5 @@
/* params.h - Run-time parameters.
Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009
Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
Written by Mark Mitchell <mark@codesourcery.com>.
@ -88,13 +88,24 @@ typedef enum compiler_param
LAST_PARAM
} compiler_param;
/* The value of the parameter given by ENUM. */
/* The value of the parameter given by ENUM. Not an lvalue. */
#define PARAM_VALUE(ENUM) \
(compiler_params[(int) ENUM].value)
((int) compiler_params[(int) ENUM].value)
/* True if the value of the parameter was explicitly changed. */
/* Set the value of the parameter given by NUM to VALUE, implicitly,
if it has not been set explicitly by the user. */
extern void maybe_set_param_value (compiler_param num, int value);
/* Set the default value of a parameter given by NUM to VALUE, before
option processing. */
extern void set_default_param_value (compiler_param num, int value);
/* True if the value of the parameter was explicitly changed. Not an
lvalue. */
#define PARAM_SET_P(ENUM) \
(compiler_params[(int) ENUM].set)
((bool) compiler_params[(int) ENUM].set)
/* Macros for the various parameters. */
#define STRUCT_REORG_COLD_STRUCT_RATIO \

View file

@ -2340,6 +2340,13 @@ DEFHOOK
void, (int level, int size),
hook_void_int_int)
DEFHOOK
(default_params,
"Set target-dependent default values for @option{--param} settings, using\
calls to @code{set_default_param_value}.",
void, (void),
hook_void_void)
/* Function to determine if one function can inline another function. */
#undef HOOK_PREFIX
#define HOOK_PREFIX "TARGET_"

View file

@ -1692,6 +1692,7 @@ general_init (const char *argv0)
/* Register the language-independent parameters. */
add_params (lang_independent_params, LAST_PARAM);
targetm.target_option.default_params ();
/* This must be done after add_params but before argument processing. */
init_ggc_heuristics();