From patchwork Wed Dec 10 16:20:47 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ilya Tocar X-Patchwork-Id: 419755 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 8F05D14009B for ; Thu, 11 Dec 2014 03:21:18 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=V6TQxTT2LyBiWzUhFgqcKAPl5A9QS1+RdY3N5uswrRawZRPLvl cKqh0MkVxZU7Cfvk3RUWgTMmLtbZ1rmvqsMYDk+C/njjMZCn9SsQFPVAlHha7a3X IJZ8AgbnxsnNLwywAUVy/FfPSH6fOxgzNd+W0dVmRMyLDtPy39RWweV2k= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=qS/8fxAjvPc1VP6ezcSuKEIroMw=; b=FJQV4I+pOWEmW4YiMTR0 yii5NLvIY6MUxKf8yrsnwHs9k2Yvu62E/oykXKbuiwmuYj8Q4oQznv1P/LUNDZq4 Qlt+GrJclyL7n+y14xAPbOM08BlPWkbN/MdrygVomI2i2j+6kslFe7Zdd8wYwyOP AFrYgVvPam2IBQwFPw4PI54= Received: (qmail 12794 invoked by alias); 10 Dec 2014 16:21:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 12781 invoked by uid 89); 10 Dec 2014 16:21:09 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=1.3 required=5.0 tests=AWL, BAYES_50, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS, UNSUBSCRIBE_BODY autolearn=no version=3.3.2 X-HELO: mail-qc0-f177.google.com Received: from mail-qc0-f177.google.com (HELO mail-qc0-f177.google.com) (209.85.216.177) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Wed, 10 Dec 2014 16:21:06 +0000 Received: by mail-qc0-f177.google.com with SMTP id x3so2370144qcv.22 for ; Wed, 10 Dec 2014 08:21:04 -0800 (PST) X-Received: by 10.140.33.226 with SMTP id j89mr9348667qgj.23.1418228464323; Wed, 10 Dec 2014 08:21:04 -0800 (PST) Received: from msticlxl7.ims.intel.com (jfdmzpr05-ext.jf.intel.com. [134.134.139.74]) by mx.google.com with ESMTPSA id v11sm4596013qay.32.2014.12.10.08.21.00 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Dec 2014 08:21:03 -0800 (PST) Date: Wed, 10 Dec 2014 19:20:47 +0300 From: Ilya Tocar To: Uros Bizjak Cc: GCC Patches Subject: [PATCH x86] Add march/mtune=knl Message-ID: <20141210162047.GA128205@msticlxl7.ims.intel.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.23 (2014-03-12) X-IsSubscribed: yes Hi, Patch bellow adds march/mtune/attribute=knl. For now this is just silvermont tuning and avx/avx2/avx512 support. Ok for trunk? gcc/ * config.gcc: Support "knl". * config/i386/driver-i386.c (host_detect_local_cpu): Detect "knl". * config/i386/i386-c.c (ix86_target_macros_internal): Handle PROCESSOR_KNL. * config/i386/i386.c (m_KNL): Define. (processor_target_table): Add "knl". (PTA_KNL): Define. (ix86_issue_rate): Add PROCESSOR_KNL. (ix86_adjust_cost): Ditto. (ia32_multipass_dfa_lookahead): Ditto. (get_builtin_code_for_version): Handle "knl". (fold_builtin_cpu): Ditto. * config/i386/i386.h (TARGET_KNL): Define. (processor_type): Add PROCESSOR_KNL. * config/i386/i386.md (attr "cpu"): Add knl. * config/i386/x86-tune.def: Add m_KNL. gcc/testsuite/ * gcc.target/i386/funcspec-5.c: Test avx512f and knl. --- gcc/config.gcc | 3 +- gcc/config/i386/driver-i386.c | 6 +++- gcc/config/i386/i386-c.c | 7 +++++ gcc/config/i386/i386.c | 17 ++++++++++- gcc/config/i386/i386.h | 2 ++ gcc/config/i386/i386.md | 2 +- gcc/config/i386/x86-tune.def | 47 +++++++++++++++--------------- gcc/testsuite/gcc.target/i386/funcspec-5.c | 3 ++ 8 files changed, 60 insertions(+), 27 deletions(-) diff --git a/gcc/config.gcc b/gcc/config.gcc index fa3e1fc..8541274 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -591,7 +591,8 @@ pentium4 pentium4m pentiumpro prescott" x86_64_archs="amdfam10 athlon64 athlon64-sse3 barcelona bdver1 bdver2 \ bdver3 bdver4 btver1 btver2 k8 k8-sse3 opteron opteron-sse3 nocona \ core2 corei7 corei7-avx core-avx-i core-avx2 atom slm nehalem westmere \ -sandybridge ivybridge haswell broadwell bonnell silvermont x86-64 native" +sandybridge ivybridge haswell broadwell bonnell silvermont knl x86-64 \ +native" # Additional x86 processors supported by --with-cpu=. Each processor # MUST be separated by exactly one space. diff --git a/gcc/config/i386/driver-i386.c b/gcc/config/i386/driver-i386.c index a2248ce..69ebebd 100644 --- a/gcc/config/i386/driver-i386.c +++ b/gcc/config/i386/driver-i386.c @@ -747,7 +747,11 @@ const char *host_detect_local_cpu (int argc, const char **argv) if (arch) { /* This is unknown family 0x6 CPU. */ - if (has_adx) + /* Assume Knl. */ + if (has_avx512f) + cpu = "knl"; + /* Assume Broadwell. */ + else if (has_adx) cpu = "broadwell"; else if (has_avx2) /* Assume Haswell. */ diff --git a/gcc/config/i386/i386-c.c b/gcc/config/i386/i386-c.c index 3ad7d49..1c604fc3 100644 --- a/gcc/config/i386/i386-c.c +++ b/gcc/config/i386/i386-c.c @@ -171,6 +171,10 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__silvermont"); def_or_undef (parse_in, "__silvermont__"); break; + case PROCESSOR_KNL: + def_or_undef (parse_in, "__knl"); + def_or_undef (parse_in, "__knl__"); + break; /* use PROCESSOR_max to not set/unset the arch macro. */ case PROCESSOR_max: break; @@ -277,6 +281,9 @@ ix86_target_macros_internal (HOST_WIDE_INT isa_flag, def_or_undef (parse_in, "__tune_slm__"); def_or_undef (parse_in, "__tune_silvermont__"); break; + case PROCESSOR_KNL: + def_or_undef (parse_in, "__tune_knl__"); + break; case PROCESSOR_INTEL: case PROCESSOR_GENERIC: break; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1e1716e..f0cbe48 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -2040,6 +2040,7 @@ const struct processor_costs *ix86_cost = &pentium_cost; #define m_CORE_ALL (m_CORE2 | m_NEHALEM | m_SANDYBRIDGE | m_HASWELL) #define m_BONNELL (1<