On Thu, Oct 31, 2019 at 2:17 PM Martin Liška <mli...@suse.cz> wrote: > > On 10/31/19 2:16 PM, Martin Liška wrote: > > On 10/31/19 2:01 PM, Martin Liška wrote: > >> Hi. > >> > >> Based on the discussion with Honza and Richard I'm sending a proposal > >> for conversion of param machinery into the existing option machinery. > >> Our motivation for the change is to provide per function param values, > >> similarly what 'Optimization' keyword does for options. > >> > >> Right now, we support the following format: > >> gcc --param=lto-partitions=4 /tmp/main.c -c > >> > >> And so that I decided to name newly the params like: > >> > >> -param=ipa-sra-ptr-growth-factor= > >> Common Joined UInteger Var(param_ipa_sra_ptr_growth_factor) Init(2) Param > >> Optimization > >> Maximum allowed growth of number and total size of new parameters > >> that ipa-sra replaces a pointer to an aggregate with. > >> > >> And I learnt decoder to parse '--param' 'name=value' as > >> '--param=name=value'. Doing that > >> the transformation works. Help provides reasonable output as well: > >> > >> $ ./xgcc -B. --param predictable-branch-outcome=5 /tmp/main.c -c -Q > >> --help=param > >> The --param option recognizes the following as parameters: > >> --param=ipa-sra-ptr-growth-factor= 2 > >> --param=predictable-branch-outcome=<0,50> 5 > >> > >> Thoughts? > >> Thanks, > >> Martin > >> > >> --- > >> gcc/common.opt | 18 +++++++++++------- > >> gcc/ipa-sra.c | 3 +-- > >> gcc/opt-functions.awk | 3 ++- > >> gcc/opts-common.c | 9 +++++++++ > >> gcc/opts.c | 36 ------------------------------------ > >> gcc/params.def | 10 ---------- > >> gcc/predict.c | 4 ++-- > >> 7 files changed, 25 insertions(+), 58 deletions(-) > >> > >> > > > > I forgot to add gcc-patches to To. > > > > Martin > > > > + the patch.
Nice. I wonder if we can auto-generate params.h so that PARAM_VALUE (...) can continue to "work"? But maybe that's too much and against making them first-class (but "unsupported") options. At least it would make the final patch _much_ smaller... (one could think of auto-generating an enum and using an array of params for the storage again - but then possibly split for [non-]Optimization - ugh). If we (auto-)name the variables all-uppercase like PARAM_IPA_SRA_PTR_GROWTH_FACTOR we could have #define PARAM_VALUE (x) x ... (that said, everything that helps making the transition hit GCC 10 is appreciated ;)) For +-param=ipa-sra-ptr-growth-factor= +Common Joined UInteger Var(param_ipa_sra_ptr_growth_factor) Init(2) Param Optimization I wonder if both Var(...) and Param can be "autodetected" (aka actually required)? At least the core of the patch looks nicely small! How do the OPT_ enum values for a --param look like? Thanks, Richard. > Martin