From 4f17aa0b9d1c065f9c1b2979e5782530cade3776 Mon Sep 17 00:00:00 2001 From: Xinliang David Li Date: Tue, 24 Sep 2013 20:44:03 +0000 Subject: [PATCH] Implement --param=vect-max-peeling-for-alignment=.. From-SVN: r202875 --- gcc/ChangeLog | 7 +++++++ gcc/doc/invoke.texi | 4 ++++ gcc/params.def | 5 +++++ gcc/tree-vect-data-refs.c | 24 ++++++++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 47c31a07eb5..49e92625771 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-09-24 Xinliang David Li + + * 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 * gimple-pretty-print.c: Various whitespace tweaks. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index aa0f4ed08b7..508bbb43838 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 3c5265160c6..27491378d11 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 98055ae01f8..c8cdcb85df0 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -1716,6 +1716,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; -- 2.30.2