This patch enables the command line options and provides the proper macros for checking.
gcc/ChangeLog: 2019-04-02 Andreas Krebbel <kreb...@linux.ibm.com> * common/config/s390/s390-common.c (processor_flags_table): New entry for arch13. * config.gcc: Support arch13 with the --with-arch= configure flag. * config/s390/driver-native.c (s390_host_detect_local_cpu): * config/s390/s390-opts.h (enum processor_type): Add PROCESSOR_ARCH13. * config/s390/s390.c (s390_get_sched_attrmask) (s390_get_unit_mask): Add PROCESSOR_ARCH13. * config/s390/s390.h (enum processor_flags): Add PF_VXE2 and PF_ARCH13. * config/s390/s390.md (TARGET_CPU_ARCH13, TARGET_CPU_ARCH13_P) (TARGET_CPU_VXE2, TARGET_CPU_VXE2_P, TARGET_ARCH13) (TARGET_ARCH13_P, TARGET_VXE2, TARGET_VXE2_P): New macro definitions. * config/s390/s390.opt: Support arch13 as processor type in command line options. gcc/testsuite/ChangeLog: 2019-04-02 Andreas Krebbel <kreb...@linux.ibm.com> * gcc.target/s390/s390.exp: Run tests in arch13 subdir. * lib/target-supports.exp (check_effective_target_s390_vxe2): New runtime check for the vxe2 hardware feature on IBM Z. --- gcc/common/config/s390/s390-common.c | 21 ++++++++++++--------- gcc/config.gcc | 2 +- gcc/config/s390/driver-native.c | 2 +- gcc/config/s390/s390-opts.h | 1 + gcc/config/s390/s390.c | 3 +++ gcc/config/s390/s390.h | 19 ++++++++++++++++++- gcc/config/s390/s390.md | 10 +++++++++- gcc/config/s390/s390.opt | 3 +++ gcc/testsuite/gcc.target/s390/s390.exp | 3 +++ gcc/testsuite/lib/target-supports.exp | 16 ++++++++++++++++ 10 files changed, 67 insertions(+), 13 deletions(-) diff --git a/gcc/common/config/s390/s390-common.c b/gcc/common/config/s390/s390-common.c index 95699fb..f9c3a95 100644 --- a/gcc/common/config/s390/s390-common.c +++ b/gcc/common/config/s390/s390-common.c @@ -32,21 +32,24 @@ EXPORTED_CONST int processor_flags_table[] = /* z900 */ PF_IEEE_FLOAT | PF_ZARCH, /* z990 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT, /* z9-109 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT - | PF_EXTIMM, + | PF_EXTIMM, /* z9-ec */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT - | PF_EXTIMM | PF_DFP, + | PF_EXTIMM | PF_DFP, /* z10 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT - | PF_EXTIMM | PF_DFP | PF_Z10, + | PF_EXTIMM | PF_DFP | PF_Z10, /* z196 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT - | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196, + | 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, + | 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, + | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX + | PF_Z13 | PF_VX, /* z14 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT - | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX - | PF_Z13 | PF_VX | PF_VXE | PF_Z14 + | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX + | PF_Z13 | PF_VX | PF_VXE | PF_Z14, + /* arch13 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT + | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX + | PF_Z13 | PF_VX | PF_VXE | PF_Z14 | PF_VXE2 | PF_ARCH13 }; /* Change optimizations to be performed, depending on the diff --git a/gcc/config.gcc b/gcc/config.gcc index 3eb2e80..0a8830a 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4727,7 +4727,7 @@ case "${target}" in for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12) + "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 ) # OK ;; *) diff --git a/gcc/config/s390/driver-native.c b/gcc/config/s390/driver-native.c index 95b85f0..0352a79 100644 --- a/gcc/config/s390/driver-native.c +++ b/gcc/config/s390/driver-native.c @@ -120,7 +120,7 @@ s390_host_detect_local_cpu (int argc, const char **argv) cpu = "z14"; break; default: - cpu = "z14"; + cpu = "arch13"; break; } } diff --git a/gcc/config/s390/s390-opts.h b/gcc/config/s390/s390-opts.h index e58eee4..db9dc62 100644 --- a/gcc/config/s390/s390-opts.h +++ b/gcc/config/s390/s390-opts.h @@ -37,6 +37,7 @@ enum processor_type PROCESSOR_2827_ZEC12, PROCESSOR_2964_Z13, PROCESSOR_3906_Z14, + PROCESSOR_ARCH13, PROCESSOR_NATIVE, PROCESSOR_max }; diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 5f26437..5c55ebe 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -337,6 +337,7 @@ const struct s390_processor processor_table[] = { "zEC12", "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost, 10 }, { "z13", "z13", PROCESSOR_2964_Z13, &zEC12_cost, 11 }, { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost, 12 }, + { "arch13", "", PROCESSOR_ARCH13, &zEC12_cost, 13 }, { "native", "", PROCESSOR_NATIVE, NULL, 0 } }; @@ -14313,6 +14314,7 @@ s390_get_sched_attrmask (rtx_insn *insn) mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; break; case PROCESSOR_3906_Z14: + case PROCESSOR_ARCH13: if (get_attr_z14_cracked (insn)) mask |= S390_SCHED_ATTR_MASK_CRACKED; if (get_attr_z14_expanded (insn)) @@ -14349,6 +14351,7 @@ s390_get_unit_mask (rtx_insn *insn, int *units) mask |= 1 << 3; break; case PROCESSOR_3906_Z14: + case PROCESSOR_ARCH13: *units = 4; if (get_attr_z14_unit_lsu (insn)) mask |= 1 << 0; diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h index fcb85d6..c7aa67c 100644 --- a/gcc/config/s390/s390.h +++ b/gcc/config/s390/s390.h @@ -39,7 +39,9 @@ enum processor_flags PF_Z13 = 512, PF_VX = 1024, PF_Z14 = 2048, - PF_VXE = 4096 + PF_VXE = 4096, + PF_VXE2 = 8192, + PF_ARCH13 = 16384 }; /* This is necessary to avoid a warning about comparing different enum @@ -98,6 +100,14 @@ enum processor_flags (s390_arch_flags & PF_VXE) #define TARGET_CPU_VXE_P(opts) \ (opts->x_s390_arch_flags & PF_VXE) +#define TARGET_CPU_ARCH13 \ + (s390_arch_flags & PF_ARCH13) +#define TARGET_CPU_ARCH13_P(opts) \ + (opts->x_s390_arch_flags & PF_ARCH13) +#define TARGET_CPU_VXE2 \ + (s390_arch_flags & PF_VXE2) +#define TARGET_CPU_VXE2_P(opts) \ + (opts->x_s390_arch_flags & PF_VXE2) #define TARGET_HARD_FLOAT_P(opts) (!TARGET_SOFT_FLOAT_P(opts)) @@ -150,6 +160,13 @@ enum processor_flags (TARGET_VX && TARGET_CPU_VXE) #define TARGET_VXE_P(opts) \ (TARGET_VX_P (opts) && TARGET_CPU_VXE_P (opts)) +#define TARGET_ARCH13 (TARGET_ZARCH && TARGET_CPU_ARCH13) +#define TARGET_ARCH13_P(opts) \ + (TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_ARCH13_P (opts)) +#define TARGET_VXE2 \ + (TARGET_VX && TARGET_CPU_VXE2) +#define TARGET_VXE2_P(opts) \ + (TARGET_VX_P (opts) && TARGET_CPU_VXE2_P (opts)) #ifdef HAVE_AS_MACHINE_MACHINEMODE #define S390_USE_TARGET_ATTRIBUTE 1 diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md index b455b63..bbe1ea5 100644 --- a/gcc/config/s390/s390.md +++ b/gcc/config/s390/s390.md @@ -510,7 +510,7 @@ (const (symbol_ref "s390_tune_attr"))) (define_attr "cpu_facility" - "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe" + "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,arch13,vxe2" (const_string "standard")) (define_attr "enabled" "" @@ -567,6 +567,14 @@ (and (eq_attr "cpu_facility" "vxe") (match_test "TARGET_VXE")) (const_int 1) + + (and (eq_attr "cpu_facility" "arch13") + (match_test "TARGET_ARCH13")) + (const_int 1) + + (and (eq_attr "cpu_facility" "vxe2") + (match_test "TARGET_VXE2")) + (const_int 1) ] (const_int 0))) diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt index b6d987c..0fb738f 100644 --- a/gcc/config/s390/s390.opt +++ b/gcc/config/s390/s390.opt @@ -110,6 +110,9 @@ EnumValue Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14) EnumValue +Enum(processor_type) String(arch13) Value(PROCESSOR_ARCH13) + +EnumValue Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly mbackchain diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 4dfb8b5..86f7e43 100644 --- a/gcc/testsuite/gcc.target/s390/s390.exp +++ b/gcc/testsuite/gcc.target/s390/s390.exp @@ -215,6 +215,9 @@ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/target-attribute/*.{c,S}]] \ dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/arch12/*.{c,S}]] \ "" "-O3 -march=arch12 -mzarch" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/arch13/*.{c,S}]] \ + "" "-O3 -march=arch13 -mzarch" + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vxe/*.{c,S}]] \ "" "-O3 -march=arch12 -mzarch" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 90efaea..0dc1e18 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -8961,6 +8961,22 @@ proc check_effective_target_s390_vxe { } { } "-march=z14 -mzarch" ] } +# Same as above but for the arch13 vector enhancement facility. Test +# is performed with the vector shift left double by bit instruction. +proc check_effective_target_s390_vxe2 { } { + if ![istarget s390*-*-*] then { + return 0; + } + + return [check_runtime s390_check_vxe2 { + int main (void) + { + asm ("vsld %%v24, %%v26, %%v28, 3" : : : "v24", "v26", "v28"); + return 0; + } + } "-march=arch13 -mzarch" ] +} + #For versions of ARM architectures that have hardware div insn, #disable the divmod transform -- 2.7.4