From: Ilya Enkovich <enkovich.gnu@gmail.com>
To: gcc-patches@gcc.gnu.org
Subject: [PATCH, vec-tails 01/10] New compiler options
Date: Thu, 19 May 2016 19:37:00 -0000 [thread overview]
Message-ID: <20160519193619.GB40563@msticlxl57.ims.intel.com> (raw)
Hi,
This patch introduces new options used for loop epilogues vectorization.
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;
next reply other threads:[~2016-05-19 19:37 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-19 19:37 Ilya Enkovich [this message]
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
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=20160519193619.GB40563@msticlxl57.ims.intel.com \
--to=enkovich.gnu@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
/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).