public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Ilya Enkovich <enkovich.gnu@gmail.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, vec-tails 01/10] New compiler options
Date: Thu, 09 Jun 2016 10:36:00 -0000	[thread overview]
Message-ID: <CAMbmDYZqqrUEh6CR8HrBOdCkL3bhW2NUL8_pnWMvvLZ8V8VJVg@mail.gmail.com> (raw)
In-Reply-To: <CAMbmDYZCwaz7EkRcOa4i5xy6Kh4aZw+5oj-MM-2j16x8uX9G5g@mail.gmail.com>

Hi Richard,

Do you have some comments on other parts of this series?

Thanks,
Ilya

2016-05-20 14:40 GMT+03:00 Ilya Enkovich <enkovich.gnu@gmail.com>:
> 2016-05-20 14:17 GMT+03:00 Richard Biener <richard.guenther@gmail.com>:
>> On Fri, May 20, 2016 at 11:50 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>>> 2016-05-20 12:26 GMT+03:00 Richard Biener <richard.guenther@gmail.com>:
>>>> On Thu, May 19, 2016 at 9:36 PM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>>>>> Hi,
>>>>>
>>>>> This patch introduces new options used for loop epilogues vectorization.
>>>>
>>>> Why's that?  This is a bit too much for the casual user and if it is
>>>> really necessary
>>>> to control this via options then it is not fine-grained enough.
>>>>
>>>> Why doesn't the vectorizer/backend have enough info to decide this itself?
>>>
>>> I don't expect casual user to decide which modes to choose.  These controls are
>>> added for debugging and performance measurement purposes.  I see now I miss
>>> -ftree-vectorize-epilogues aliased to -ftree-vectorize-epilogues=all.  Surely
>>> I expect epilogues and short loops vectorization be enabled by default on -O3
>>> or by -ftree-vectorize-loops.
>>
>> Can you make all these --params then?  I think to be useful to users we'd want
>> them to be loop pragmas rather than options.
>
> OK, I'll change it to params.  I didn't think about control via
> pragmas but will do now.
>
> Thanks,
> Ilya
>
>>
>> Richard.
>>
>>> Thanks,
>>> Ilya
>>>
>>>>
>>>> Richard.
>>>>
>>>>> Thanks,
>>>>> Ilya
>>>>> --
>>>>> gcc/
>>>>>
>>>>> 2016-05-19  Ilya Enkovich  <ilya.enkovich@intel.com>
>>>>>
>>>>>         * common.opt (flag_tree_vectorize_epilogues): New.
>>>>>         (ftree-vectorize-short-loops): New.
>>>>>         (ftree-vectorize-epilogues=): New.
>>>>>         (fno-tree-vectorize-epilogues): New.
>>>>>         (fvect-epilogue-cost-model=): New.
>>>>>         * flag-types.h (enum vect_epilogue_mode): New.
>>>>>         * opts.c (parse_vectorizer_options): New.
>>>>>         (common_handle_option): Support -ftree-vectorize-epilogues=
>>>>>         and -fno-tree-vectorize-epilogues options.
>>>>>
>>>>>
>>>>> diff --git a/gcc/common.opt b/gcc/common.opt
>>>>> index 682cb41..6b83b79 100644
>>>>> --- a/gcc/common.opt
>>>>> +++ b/gcc/common.opt
>>>>> @@ -243,6 +243,10 @@ bool dump_base_name_prefixed = false
>>>>>  Variable
>>>>>  bool flag_disable_hsa = false
>>>>>
>>>>> +; Flag holding modes for loop epilogue vectorization
>>>>> +Variable
>>>>> +unsigned int flag_tree_vectorize_epilogues
>>>>> +
>>>>>  ###
>>>>>  Driver
>>>>>
>>>>> @@ -2557,6 +2561,19 @@ ftree-vectorize
>>>>>  Common Report Var(flag_tree_vectorize) Optimization
>>>>>  Enable vectorization on trees.
>>>>>
>>>>> +ftree-vectorize-short-loops
>>>>> +Common Report Var(flag_tree_vectorize_short_loops) Optimization
>>>>> +Enable vectorization of loops with low trip count using masking.
>>>>> +
>>>>> +ftree-vectorize-epilogues=
>>>>> +Common Report Joined Optimization
>>>>> +Comma separated list of loop epilogue vectorization modes.
>>>>> +Available modes: combine, mask, nomask.
>>>>> +
>>>>> +fno-tree-vectorize-epilogues
>>>>> +Common RejectNegative Optimization
>>>>> +Disable epilogues vectorization.
>>>>> +
>>>>>  ftree-vectorizer-verbose=
>>>>>  Common Joined RejectNegative Ignore
>>>>>  Does nothing.  Preserved for backward compatibility.
>>>>> @@ -2577,6 +2594,10 @@ fsimd-cost-model=
>>>>>  Common Joined RejectNegative Enum(vect_cost_model) Var(flag_simd_cost_model) Init(VECT_COST_MODEL_UNLIMITED) Optimization
>>>>>  Specifies the vectorization cost model for code marked with a simd directive.
>>>>>
>>>>> +fvect-epilogue-cost-model=
>>>>> +Common Joined RejectNegative Enum(vect_cost_model) Var(flag_vect_epilogue_cost_model) Init(VECT_COST_MODEL_DEFAULT) Optimization
>>>>> +Specifies the cost model for epilogue vectorization.
>>>>> +
>>>>>  Enum
>>>>>  Name(vect_cost_model) Type(enum vect_cost_model) UnknownError(unknown vectorizer cost model %qs)
>>>>>
>>>>> diff --git a/gcc/flag-types.h b/gcc/flag-types.h
>>>>> index dd57e16..24081b1 100644
>>>>> --- a/gcc/flag-types.h
>>>>> +++ b/gcc/flag-types.h
>>>>> @@ -200,6 +200,15 @@ enum vect_cost_model {
>>>>>    VECT_COST_MODEL_DEFAULT = 3
>>>>>  };
>>>>>
>>>>> +/* Epilogue vectorization modes.  */
>>>>> +enum vect_epilogue_mode {
>>>>> +  VECT_EPILOGUE_COMBINE = 1 << 0,
>>>>> +  VECT_EPILOGUE_MASK = 1 << 1,
>>>>> +  VECT_EPILOGUE_NOMASK = 1 << 2,
>>>>> +  VECT_EPILOGUE_ALL = VECT_EPILOGUE_COMBINE | VECT_EPILOGUE_MASK
>>>>> +                     | VECT_EPILOGUE_NOMASK
>>>>> +};
>>>>> +
>>>>>  /* Different instrumentation modes.  */
>>>>>  enum sanitize_code {
>>>>>    /* AddressSanitizer.  */
>>>>> diff --git a/gcc/opts.c b/gcc/opts.c
>>>>> index 0f9431a..a0c0987 100644
>>>>> --- a/gcc/opts.c
>>>>> +++ b/gcc/opts.c
>>>>> @@ -1531,6 +1531,63 @@ parse_sanitizer_options (const char *p, location_t loc, int scode,
>>>>>    return flags;
>>>>>  }
>>>>>
>>>>> +/* Parse comma separated vectorizer suboptions from P for option SCODE,
>>>>> +   adjust previous FLAGS and return new ones.  If COMPLAIN is false,
>>>>> +   don't issue diagnostics.  */
>>>>> +
>>>>> +unsigned int
>>>>> +parse_vectorizer_options (const char *p, location_t loc, int scode,
>>>>> +                         unsigned int flags, int value, bool complain)
>>>>> +{
>>>>> +  if (scode != OPT_ftree_vectorize_epilogues_)
>>>>> +    return flags;
>>>>> +
>>>>> +  if (!p)
>>>>> +    return value;
>>>>> +
>>>>> +  while (*p != 0)
>>>>> +    {
>>>>> +      size_t len;
>>>>> +      const char *comma = strchr (p, ',');
>>>>> +      unsigned int flag = 0;
>>>>> +
>>>>> +      if (comma == NULL)
>>>>> +       len = strlen (p);
>>>>> +      else
>>>>> +       len = comma - p;
>>>>> +      if (len == 0)
>>>>> +       {
>>>>> +         p = comma + 1;
>>>>> +         continue;
>>>>> +       }
>>>>> +
>>>>> +      /* Check to see if the string matches an option class name.  */
>>>>> +      if (len == strlen ("combine")
>>>>> +         && memcmp (p, "combine", len) == 0)
>>>>> +       flag = VECT_EPILOGUE_COMBINE;
>>>>> +      else if (len == strlen ("mask")
>>>>> +         && memcmp (p, "mask", len) == 0)
>>>>> +       flag = VECT_EPILOGUE_MASK;
>>>>> +      else if (len == strlen ("nomask")
>>>>> +         && memcmp (p, "nomask", len) == 0)
>>>>> +       flag = VECT_EPILOGUE_NOMASK;
>>>>> +      else if (complain)
>>>>> +       error_at (loc, "unrecognized argument to -ftree-vectorize-epilogues= "
>>>>> +                 "option: %q.*s", (int) len, p);
>>>>> +
>>>>> +      if (value)
>>>>> +       flags |= flag;
>>>>> +      else
>>>>> +       flags &= ~flag;
>>>>> +
>>>>> +      if (comma == NULL)
>>>>> +       break;
>>>>> +      p = comma + 1;
>>>>> +    }
>>>>> +
>>>>> +  return flags;
>>>>> +}
>>>>> +
>>>>>  /* Handle target- and language-independent options.  Return zero to
>>>>>     generate an "unknown option" message.  Only options that need
>>>>>     extra handling need to be listed here; if you simply want
>>>>> @@ -2018,6 +2075,18 @@ common_handle_option (struct gcc_options *opts,
>>>>>        if (!opts_set->x_flag_tree_slp_vectorize)
>>>>>          opts->x_flag_tree_slp_vectorize = value;
>>>>>        break;
>>>>> +
>>>>> +    case OPT_ftree_vectorize_epilogues_:
>>>>> +      opts->x_flag_tree_vectorize_epilogues
>>>>> +       = parse_vectorizer_options (arg, loc, code,
>>>>> +                                   opts->x_flag_tree_vectorize_epilogues,
>>>>> +                                   value, true);
>>>>> +      break;
>>>>> +
>>>>> +    case OPT_fno_tree_vectorize_epilogues:
>>>>> +      opts->x_flag_tree_vectorize_epilogues = 0;
>>>>> +      break;
>>>>> +
>>>>>      case OPT_fshow_column:
>>>>>        dc->show_column = value;
>>>>>        break;

  reply	other threads:[~2016-06-09 10:36 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-19 19:37 Ilya Enkovich
2016-05-19 20:23 ` Joseph Myers
2016-05-20  9:26 ` Richard Biener
2016-05-20  9:50   ` Ilya Enkovich
2016-05-20 11:17     ` Richard Biener
2016-05-20 11:40       ` Ilya Enkovich
2016-06-09 10:36         ` Ilya Enkovich [this message]
2016-06-09 12:19           ` Richard Biener
2016-06-16  5:06         ` Jeff Law
2016-06-17 10:41           ` Ilya Enkovich
2016-06-20 22:33             ` Jeff Law
2016-06-16 13:45         ` Ilya Enkovich
2016-07-11 13:37           ` Ilya Enkovich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMbmDYZqqrUEh6CR8HrBOdCkL3bhW2NUL8_pnWMvvLZ8V8VJVg@mail.gmail.com \
    --to=enkovich.gnu@gmail.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=richard.guenther@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).