aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorXinliang David Li <davidxl@google.com>2013-09-24 20:44:03 +0000
committerXinliang David Li <davidxl@gcc.gnu.org>2013-09-24 20:44:03 +0000
commit4f17aa0b9d1c065f9c1b2979e5782530cade3776 (patch)
treead589584e20951af8c0b712b9c985c104b7654e7 /gcc
parent114f3eb91d259328f4e043c667656d4ec6bce31a (diff)
downloadgcc-4f17aa0b9d1c065f9c1b2979e5782530cade3776.zip
gcc-4f17aa0b9d1c065f9c1b2979e5782530cade3776.tar.gz
gcc-4f17aa0b9d1c065f9c1b2979e5782530cade3776.tar.bz2
Implement --param=vect-max-peeling-for-alignment=..
From-SVN: r202875
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/doc/invoke.texi4
-rw-r--r--gcc/params.def5
-rw-r--r--gcc/tree-vect-data-refs.c24
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 47c31a0..49e9262 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-24 Xinliang David Li <davidxl@google.com>
+
+ * tree-vect-data-refs.c (vect_enhance_data_refs_alignment):
+ Check max peel iterations parameter.
+ * param.def: New parameter.
+ * doc/invoke.texi: Document New parameter.
+
2013-09-24 Christophe Lyon <christophe.lyon@linaro.org>
* gimple-pretty-print.c: Various whitespace tweaks.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index aa0f4ed..508bbb4 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -9451,6 +9451,10 @@ The maximum number of run-time checks that can be performed when
doing loop versioning for alias in the vectorizer. See option
@option{-ftree-vect-loop-version} for more information.
+@item vect-max-peeling-for-alignment
+The maximum number of loop peels to enhance access alignment
+for vectorizer. Value -1 means 'no limit'.
+
@item max-iterations-to-track
The maximum number of iterations of a loop the brute-force algorithm
for analysis of the number of iterations of the loop tries to evaluate.
diff --git a/gcc/params.def b/gcc/params.def
index 3c52651..2749137 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -544,6 +544,11 @@ DEFPARAM(PARAM_VECT_MAX_VERSION_FOR_ALIAS_CHECKS,
"Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check",
10, 0, 0)
+DEFPARAM(PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT,
+ "vect-max-peeling-for-alignment",
+ "Max number of loop peels to enhancement alignment of data references in a loop",
+ -1, -1, 64)
+
DEFPARAM(PARAM_MAX_CSELIB_MEMORY_LOCATIONS,
"max-cselib-memory-locations",
"The maximum memory locations recorded by cselib",
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 98055ae..c8cdcb8 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -1718,6 +1718,30 @@ vect_enhance_data_refs_alignment (loop_vec_info loop_vinfo)
if (do_peeling)
{
+ unsigned max_allowed_peel
+ = PARAM_VALUE (PARAM_VECT_MAX_PEELING_FOR_ALIGNMENT);
+ if (max_allowed_peel != (unsigned)-1)
+ {
+ unsigned max_peel = npeel;
+ if (max_peel == 0)
+ {
+ gimple dr_stmt = DR_STMT (dr0);
+ stmt_vec_info vinfo = vinfo_for_stmt (dr_stmt);
+ tree vtype = STMT_VINFO_VECTYPE (vinfo);
+ max_peel = TYPE_VECTOR_SUBPARTS (vtype) - 1;
+ }
+ if (max_peel > max_allowed_peel)
+ {
+ do_peeling = false;
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "Disable peeling, max peels reached: %d\n", max_peel);
+ }
+ }
+ }
+
+ if (do_peeling)
+ {
stmt_info_for_cost *si;
void *data = LOOP_VINFO_TARGET_COST_DATA (loop_vinfo);