From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 112673 invoked by alias); 11 May 2015 13:24:00 -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 112621 invoked by uid 89); 11 May 2015 13:23:59 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,T_RP_MATCHES_RCVD,UNWANTED_LANGUAGE_BODY autolearn=no version=3.3.2 X-HELO: e06smtp16.uk.ibm.com Received: from e06smtp16.uk.ibm.com (HELO e06smtp16.uk.ibm.com) (195.75.94.112) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (CAMELLIA256-SHA encrypted) ESMTPS; Mon, 11 May 2015 13:23:54 +0000 Received: from /spool/local by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 11 May 2015 14:23:51 +0100 Received: from d06dlp01.portsmouth.uk.ibm.com (9.149.20.13) by e06smtp16.uk.ibm.com (192.168.101.146) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Mon, 11 May 2015 14:23:48 +0100 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id B9D2B17D8056 for ; Mon, 11 May 2015 14:24:35 +0100 (BST) Received: from d06av04.portsmouth.uk.ibm.com (d06av04.portsmouth.uk.ibm.com [9.149.37.216]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t4BDNmB562062722 for ; Mon, 11 May 2015 13:23:48 GMT Received: from d06av04.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t4BDNlml026494 for ; Mon, 11 May 2015 07:23:47 -0600 Received: from maggie.ibm.com (dyn-9-152-212-139.boeblingen.de.ibm.com [9.152.212.139]) by d06av04.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t4BDNgbg026137 for ; Mon, 11 May 2015 07:23:47 -0600 From: Andreas Krebbel To: gcc-patches@gcc.gnu.org Subject: [PATCH 04/13] S/390 Add -march/-mtune=z13 option. Date: Mon, 11 May 2015 13:24:00 -0000 Message-Id: <1431350621-21405-5-git-send-email-krebbel@linux.vnet.ibm.com> In-Reply-To: <1431350621-21405-1-git-send-email-krebbel@linux.vnet.ibm.com> References: <1431350621-21405-1-git-send-email-krebbel@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15051113-0025-0000-0000-00000512CC8C X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg00923.txt.bz2 gcc/ * common/config/s390/s390-common.c (processor_flags_table): Add z13. * config.gcc: Add z13. * config/s390/s390-opts.h (enum processor_type): Add PROCESSOR_2964_Z13. * config/s390/s390.c (s390_adjust_priority): Check for PROCESSOR_2964_Z13. (s390_reorg): Likewise. (s390_sched_reorder): Likewise. (s390_sched_variable_issue): Likewise. (s390_loop_unroll_adjust): Likewise. (s390_option_override): Likewise. Default to -mvx when available. * config/s390/s390.h (enum processor_flags): Add PF_Z13 and PF_VX. (TARGET_CPU_Z13, TARGET_CPU_VX, TARGET_Z13, TARGET_VX) (TARGET_VX_ABI): Define macros. macros. (TARGET_DEFAULT): Add MASK_OPT_VX. * config/s390/s390.md ("cpu" attribute): Add z13. ("cpu_facility" attribute): Add vec. * config/s390/s390.opt (processor_type): Add z13. (mvx): New options. --- gcc/common/config/s390/s390-common.c | 3 +++ gcc/config.gcc | 2 +- gcc/config/s390/s390-opts.h | 1 + gcc/config/s390/s390.c | 35 ++++++++++++++++++++++++++++------ gcc/config/s390/s390.h | 19 ++++++++++++++++-- gcc/config/s390/s390.md | 8 ++++++-- gcc/config/s390/s390.opt | 7 +++++++ 7 files changed, 64 insertions(+), 11 deletions(-) diff --git a/gcc/common/config/s390/s390-common.c b/gcc/common/config/s390/s390-common.c index 7181beb..43459c8 100644 --- a/gcc/common/config/s390/s390-common.c +++ b/gcc/common/config/s390/s390-common.c @@ -42,7 +42,10 @@ EXPORTED_CONST int processor_flags_table[] = /* z196 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196, /* zEC12 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT + | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX, + /* z13 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX + | PF_Z13 | PF_VX }; /* Change optimizations to be performed, depending on the diff --git a/gcc/config.gcc b/gcc/config.gcc index a1df043..a2af2a0 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4071,7 +4071,7 @@ case "${target}" in for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12) + "" | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13) # OK ;; *) diff --git a/gcc/config/s390/s390-opts.h b/gcc/config/s390/s390-opts.h index cb9ebc7..5bde333 100644 --- a/gcc/config/s390/s390-opts.h +++ b/gcc/config/s390/s390-opts.h @@ -35,6 +35,7 @@ enum processor_type PROCESSOR_2097_Z10, PROCESSOR_2817_Z196, PROCESSOR_2827_ZEC12, + PROCESSOR_2964_Z13, PROCESSOR_max }; diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index cc37618..843a860 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -5851,7 +5851,8 @@ s390_adjust_priority (rtx_insn *insn, int priority) && s390_tune != PROCESSOR_2094_Z9_109 && s390_tune != PROCESSOR_2097_Z10 && s390_tune != PROCESSOR_2817_Z196 - && s390_tune != PROCESSOR_2827_ZEC12) + && s390_tune != PROCESSOR_2827_ZEC12 + && s390_tune != PROCESSOR_2964_Z13) return priority; switch (s390_safe_attr_type (insn)) @@ -11451,7 +11452,8 @@ s390_reorg (void) /* Walk over the insns and do some >=z10 specific changes. */ if (s390_tune == PROCESSOR_2097_Z10 || s390_tune == PROCESSOR_2817_Z196 - || s390_tune == PROCESSOR_2827_ZEC12) + || s390_tune == PROCESSOR_2827_ZEC12 + || s390_tune == PROCESSOR_2964_Z13) { rtx_insn *insn; bool insn_added_p = false; @@ -11700,7 +11702,8 @@ s390_sched_reorder (FILE *file, int verbose, if (reload_completed && *nreadyp > 1) s390_z10_prevent_earlyload_conflicts (ready, nreadyp); - if (s390_tune == PROCESSOR_2827_ZEC12 + if ((s390_tune == PROCESSOR_2827_ZEC12 + || s390_tune == PROCESSOR_2964_Z13) && reload_completed && *nreadyp > 1) { @@ -11783,7 +11786,8 @@ s390_sched_variable_issue (FILE *file, int verbose, rtx_insn *insn, int more) { last_scheduled_insn = insn; - if (s390_tune == PROCESSOR_2827_ZEC12 + if ((s390_tune == PROCESSOR_2827_ZEC12 + || s390_tune == PROCESSOR_2964_Z13) && reload_completed && recog_memoized (insn) >= 0) { @@ -11863,7 +11867,8 @@ s390_loop_unroll_adjust (unsigned nunroll, struct loop *loop) if (s390_tune != PROCESSOR_2097_Z10 && s390_tune != PROCESSOR_2817_Z196 - && s390_tune != PROCESSOR_2827_ZEC12) + && s390_tune != PROCESSOR_2827_ZEC12 + && s390_tune != PROCESSOR_2964_Z13) return nunroll; /* Count the number of memory references within the loop body. */ @@ -11994,6 +11999,22 @@ s390_option_override (void) if (!(target_flags_explicit & MASK_OPT_HTM) && TARGET_CPU_HTM && TARGET_ZARCH) target_flags |= MASK_OPT_HTM; + if (target_flags_explicit & MASK_OPT_VX) + { + if (TARGET_OPT_VX) + { + if (!TARGET_CPU_VX) + error ("hardware vector support not available on %s", + s390_arch_string); + if (TARGET_SOFT_FLOAT) + error ("hardware vector support not available with -msoft-float"); + } + } + else if (TARGET_CPU_VX) + /* Enable vector support if available and not explicitly disabled + by user. E.g. with -m31 -march=z13 -mzarch */ + target_flags |= MASK_OPT_VX; + if (TARGET_HARD_DFP && !TARGET_DFP) { if (target_flags_explicit & MASK_HARD_DFP) @@ -12033,6 +12054,7 @@ s390_option_override (void) s390_cost = &z196_cost; break; case PROCESSOR_2827_ZEC12: + case PROCESSOR_2964_Z13: s390_cost = &zEC12_cost; break; default: @@ -12060,7 +12082,8 @@ s390_option_override (void) if (s390_tune == PROCESSOR_2097_Z10 || s390_tune == PROCESSOR_2817_Z196 - || s390_tune == PROCESSOR_2827_ZEC12) + || s390_tune == PROCESSOR_2827_ZEC12 + || s390_tune == PROCESSOR_2964_Z13) { maybe_set_param_value (PARAM_MAX_UNROLLED_INSNS, 100, global_options.x_param_values, diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index 4953075..7130275 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -35,7 +35,9 @@ enum processor_flags PF_Z10 = 32, PF_Z196 = 64, PF_ZEC12 = 128, - PF_TX = 256 + PF_TX = 256, + PF_Z13 = 512, + PF_VX = 1024 }; /* This is necessary to avoid a warning about comparing different enum @@ -64,6 +66,10 @@ enum processor_flags (s390_arch_flags & PF_ZEC12) #define TARGET_CPU_HTM \ (s390_arch_flags & PF_TX) +#define TARGET_CPU_Z13 \ + (s390_arch_flags & PF_Z13) +#define TARGET_CPU_VX \ + (s390_arch_flags & PF_VX) /* These flags indicate that the generated code should run on a cpu providing the respective hardware facility when run in @@ -82,7 +88,15 @@ enum processor_flags #define TARGET_ZEC12 \ (TARGET_ZARCH && TARGET_CPU_ZEC12) #define TARGET_HTM (TARGET_OPT_HTM) +#define TARGET_Z13 \ + (TARGET_ZARCH && TARGET_CPU_Z13) +#define TARGET_VX \ + (TARGET_ZARCH && TARGET_CPU_VX && TARGET_OPT_VX && TARGET_HARD_FLOAT) +/* Use the ABI introduced with IBM z13: + - pass vector arguments <= 16 bytes in VRs + - align *all* vector types to 8 bytes */ +#define TARGET_VX_ABI TARGET_VX #define TARGET_AVOID_CMP_AND_BRANCH (s390_tune == PROCESSOR_2817_Z196) @@ -115,7 +129,8 @@ enum processor_flags while (0) #ifdef DEFAULT_TARGET_64BIT -#define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_DFP | MASK_OPT_HTM) +#define TARGET_DEFAULT (MASK_64BIT | MASK_ZARCH | MASK_HARD_DFP \ + | MASK_OPT_HTM | MASK_OPT_VX) #else #define TARGET_DEFAULT 0 #endif diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index 76dca0a..9b7c9d9 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -324,11 +324,11 @@ ;; distinguish between g5 and g6, but there are differences between the two ;; CPUs could in theory be modeled. -(define_attr "cpu" "g5,g6,z900,z990,z9_109,z9_ec,z10,z196,zEC12" +(define_attr "cpu" "g5,g6,z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13" (const (symbol_ref "s390_tune_attr"))) (define_attr "cpu_facility" - "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12" + "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vec" (const_string "standard")) (define_attr "enabled" "" @@ -369,6 +369,10 @@ (and (eq_attr "cpu_facility" "zEC12") (match_test "TARGET_ZEC12")) + (const_int 1) + + (and (eq_attr "cpu_facility" "vec") + (match_test "TARGET_VX")) (const_int 1)] (const_int 0))) diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt index 22f1ff5..0ff897b 100644 --- a/gcc/config/s390/s390.opt +++ b/gcc/config/s390/s390.opt @@ -76,6 +76,9 @@ Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196) EnumValue Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12) +EnumValue +Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13) + mbackchain Target Report Mask(BACKCHAIN) Maintain backchain pointer @@ -118,6 +121,10 @@ mhtm Target Report Mask(OPT_HTM) Use hardware transactional execution instructions +mvx +Target Report Mask(OPT_VX) +Use hardware vector facility instructions and enable the vector ABI + mpacked-stack Target Report Mask(PACKED_STACK) Use packed stack layout -- 1.7.9.5