From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 112556 invoked by alias); 19 May 2016 19:37:32 -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 112533 invoked by uid 89); 19 May 2016 19:37:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy=ilya.enkovich@intel.com, ilyaenkovichintelcom, 20015, 200,15 X-HELO: mail-wm0-f45.google.com Received: from mail-wm0-f45.google.com (HELO mail-wm0-f45.google.com) (74.125.82.45) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Thu, 19 May 2016 19:37:21 +0000 Received: by mail-wm0-f45.google.com with SMTP id a17so141445928wme.0 for ; Thu, 19 May 2016 12:37:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=l7O0i2fCaRCLvPVwz2LXEnpyxdaLC2PYA1Vp0L+pUlo=; b=VbioMxfw9TGBVWJpJfJUQ+vg2bCfg8elz11+UC22d7OcBxL01ztWO3hj6ATgtCSH5n cca6Oi9sa9GRJUvxDrc38qufeGsuxQL33lbWi9WIn0uQejzwil5t2YQq1pKgsc0pwuBu lkZDDU7vbSQrAjMmLX1CzuVGrPQ4Gf/sWFkISY2danK6TWqICxrGwZIsAKmkRIHy+UJ0 VvLaz+1lPyrqdckdjXfC1aWasryIJOFrJ3OCQOS3qmQWOWLlGthIhBu0ckWiRHckiHhE 4ipzA19cFxukOeE8SvMUa8/n9c8vwCnCW8qlB5ZQWqnjg4qqo46CgPkvzdBjcwqnZFrr /PMw== X-Gm-Message-State: AOPr4FV70fyFNfrMyg7cCDOrl/HzxRdQI/lbftcjmehB2WsWMPecyh1SqhRp387GOXMTxg== X-Received: by 10.194.76.172 with SMTP id l12mr15261630wjw.75.1463686638437; Thu, 19 May 2016 12:37:18 -0700 (PDT) Received: from msticlxl57.ims.intel.com (irdmzpr01-ext.ir.intel.com. [192.198.151.36]) by smtp.gmail.com with ESMTPSA id u12sm792660wmu.12.2016.05.19.12.37.17 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 May 2016 12:37:17 -0700 (PDT) Date: Thu, 19 May 2016 19:37:00 -0000 From: Ilya Enkovich To: gcc-patches@gcc.gnu.org Subject: [PATCH, vec-tails 01/10] New compiler options Message-ID: <20160519193619.GB40563@msticlxl57.ims.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes X-SW-Source: 2016-05/txt/msg01563.txt.bz2 Hi, This patch introduces new options used for loop epilogues vectorization. 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;