diff options
author | Andreas Krebbel <krebbel@linux.vnet.ibm.com> | 2015-05-19 17:24:24 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2015-05-19 17:24:24 +0000 |
commit | 55ac540cd6ec0bbdf76ba5fd57ddd67f17112609 (patch) | |
tree | 37b1d510d64aff5cb257564ddbec0ca293617e90 /gcc | |
parent | 9e8ea2fc165e50248f1c6b6b78bc8b365881a09b (diff) | |
download | gcc-55ac540cd6ec0bbdf76ba5fd57ddd67f17112609.zip gcc-55ac540cd6ec0bbdf76ba5fd57ddd67f17112609.tar.gz gcc-55ac540cd6ec0bbdf76ba5fd57ddd67f17112609.tar.bz2 |
S/390 Add -march/-mtune=z13 option.
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.
* doc/invoke.texi: Add z13 option for -march.
From-SVN: r223393
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 25 | ||||
-rw-r--r-- | gcc/common/config/s390/s390-common.c | 3 | ||||
-rw-r--r-- | gcc/config.gcc | 2 | ||||
-rw-r--r-- | gcc/config/s390/s390-opts.h | 1 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 35 | ||||
-rw-r--r-- | gcc/config/s390/s390.h | 19 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 8 | ||||
-rw-r--r-- | gcc/config/s390/s390.opt | 7 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 3 |
9 files changed, 91 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dea95c1..7cc99e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,30 @@ 2015-05-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * 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. + * doc/invoke.texi: Add z13 option for -march. + +2015-05-19 Andreas Krebbel <krebbel@linux.vnet.ibm.com> + * config/s390/predicates.md (shift_count_or_setmem_operand): Add mode check to make sure that only scalar integer values are accepted. 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 91fbf86..eb08a1d 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4090,7 +4090,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 2c83c00..21aa62b 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)) @@ -11455,7 +11456,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; @@ -11704,7 +11706,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) { @@ -11787,7 +11790,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) { @@ -11867,7 +11871,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. */ @@ -11998,6 +12003,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) @@ -12037,6 +12058,7 @@ s390_option_override (void) s390_cost = &z196_cost; break; case PROCESSOR_2827_ZEC12: + case PROCESSOR_2964_Z13: s390_cost = &zEC12_cost; break; default: @@ -12064,7 +12086,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 2984aa1..ed9ed4e 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 ad06721..e0cd3db 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 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 2dfaacb..a451537 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -20450,7 +20450,8 @@ The default is to not print debug information. Generate code that runs on @var{cpu-type}, which is the name of a system representing a certain processor type. Possible values for @var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, @samp{z990}, -@samp{z9-109}, @samp{z9-ec}, @samp{z10}, @samp{z196}, and @samp{zEC12}. +@samp{z9-109}, @samp{z9-ec}, @samp{z10}, @samp{z196}, @samp{zEC12}, +and @samp{z13}. When generating code using the instructions available on z/Architecture, the default is @option{-march=z900}. Otherwise, the default is @option{-march=g5}. |