From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8825 invoked by alias); 20 May 2016 09:26:17 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 8807 invoked by uid 89); 20 May 2016 09:26:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=ilya.enkovich@intel.com, ilyaenkovichintelcom, enkovich.gnu@gmail.com, enkovichgnugmailcom X-HELO: mail-wm0-f68.google.com Received: from mail-wm0-f68.google.com (HELO mail-wm0-f68.google.com) (74.125.82.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 20 May 2016 09:26:06 +0000 Received: by mail-wm0-f68.google.com with SMTP id n129so27562120wmn.1 for ; Fri, 20 May 2016 02:26:05 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=Vg7GMxchpCXiQtsfQOFw6kqfW+d6dNiLAuBz0U3cp7s=; b=eN9PSQEdj98VH0MK1SdkDRNr7gvftNEpecd+ytmB6KNGFOd7hC7EymDFg/j/lA6Xub Ei/kw7rXM7lMV304mAQ6x4Cg8UQa9hHgQeUjOF38JSnNwppUvNuEYNcAvX0G0GNNsG5/ e3Q00+jjLaj9/dnBHRXWnvsGuGPTEDLYodS9XCs+osifPKJ/qtL/kYUWMxjoc/PEPtya JBeVHDHSvSgSQW89UR7jXzJHu1fpykdlGP/VwVKW7af1bLREhe4AoUgJWEamR6CR3uDy VenE/gsM5/ckp42AiZdgmH4wuCJgdaaS84yQq/+WVs4LcmofsXx+gzXIOJYJGPguoq+q GL8w== X-Gm-Message-State: AOPr4FWemSp2Bkc517FZH4HyE2fSLqXoW3XuLl7gxSLaGRlALFLHP8Y0M3TUSP8SM1SRY3PoHKVyvR/fZGOSCQ== MIME-Version: 1.0 X-Received: by 10.194.24.38 with SMTP id r6mr2133151wjf.88.1463736363108; Fri, 20 May 2016 02:26:03 -0700 (PDT) Received: by 10.194.87.34 with HTTP; Fri, 20 May 2016 02:26:03 -0700 (PDT) In-Reply-To: <20160519193619.GB40563@msticlxl57.ims.intel.com> References: <20160519193619.GB40563@msticlxl57.ims.intel.com> Date: Fri, 20 May 2016 09:26:00 -0000 Message-ID: Subject: Re: [PATCH, vec-tails 01/10] New compiler options From: Richard Biener To: Ilya Enkovich Cc: GCC Patches Content-Type: text/plain; charset=UTF-8 X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg01606.txt.bz2 On Thu, May 19, 2016 at 9:36 PM, Ilya Enkovich 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? Richard. > Thanks, > Ilya > -- > gcc/ > > 2016-05-19 Ilya Enkovich > > * 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;