From 511ea1538b58d7d44a53d0264fc041de5991270a Mon Sep 17 00:00:00 2001 From: Andreas Krebbel Date: Tue, 2 Apr 2019 10:50:03 +0000 Subject: [PATCH] S/390: arch13: Add arch13 as architecture option This patch enables the command line options and provides the proper macros for checking. gcc/ChangeLog: 2019-04-02 Andreas Krebbel * 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 * 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. From-SVN: r270077 --- gcc/ChangeLog | 17 +++++++++++++++++ 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/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/s390/s390.exp | 3 +++ gcc/testsuite/lib/target-supports.exp | 16 ++++++++++++++++ 12 files changed, 90 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 63c1223c67b..2ab9586762e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,20 @@ +2019-04-02 Andreas Krebbel + + * 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. + 2019-04-02 Martin Liska PR translation/89912 diff --git a/gcc/common/config/s390/s390-common.c b/gcc/common/config/s390/s390-common.c index 95699fb3734..f9c3a95f897 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 3eb2e800fc5..0a8830a0d57 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 95b85f07785..0352a79868a 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 e58eee4c67d..db9dc629714 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 5f26437bed9..5c55ebe3298 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 fcb85d653a2..c7aa67c83ce 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 b455b638134..bbe1ea5f01c 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 b6d987cf52a..0fb738fb261 100644 --- a/gcc/config/s390/s390.opt +++ b/gcc/config/s390/s390.opt @@ -109,6 +109,9 @@ Enum(processor_type) String(z14) Value(PROCESSOR_3906_Z14) 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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 54b2e39f957..35eb6fe09ce 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-04-02 Andreas Krebbel + + * 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. + 2019-04-01 H.J. Lu PR testsuite/89907 diff --git a/gcc/testsuite/gcc.target/s390/s390.exp b/gcc/testsuite/gcc.target/s390/s390.exp index 4dfb8b5f408..86f7e4398eb 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 90efaea804d..0dc1e184f55 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.30.2