+2018-08-08 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ * common/config/s390/s390-common.c (processor_flags_table):
+ Remove flags.
+ * config.gcc: Remove with_arch/with_tune support.
+ * config/s390/2064.md: Remove cpu attribute comparisons.
+ * config/s390/driver-native.c (s390_host_detect_local_cpu):
+ Remove MTN.
+ * config/s390/linux.h (ASM_SPEC):
+ Remove -march support.
+ * config/s390/s390-c.c (s390_cpu_cpp_builtins_internal):
+ Use a table to get an arch level.
+ * config/s390/s390-opts.h (enum processor_type):
+ Remove enum values.
+ * config/s390/s390.c
+ (processor_table): Remove entries, add arch_level values.
+ (s390_issue_rate): Remove cases.
+ (s390_option_override): Adjust
+ s390_option_override_internal() call.
+ (s390_option_override_internal): Remove deprecation warning.
+ (s390_valid_target_attribute_tree): Adjust
+ s390_option_override_internal() call.
+ * config/s390/s390.h (struct s390_processor):
+ Share with s390-c.c, add arch_level field.
+ * config/s390/s390.md:
+ Remove occurrences in cpu attribute.
+ * config/s390/s390.opt: Remove -march/-mtune support.
+ * config/s390/tpf.h (ASM_SPEC): Remove -march support.
+ * doc/invoke.texi: Remove deprecation warning.
+
2018-08-08 Luis Machado <luis.machado@linaro.org>
* config/aarch64/aarch64.c (qdf24xx_vector_cost): New static
EXPORTED_CONST int processor_flags_table[] =
{
- /* g5 */ PF_IEEE_FLOAT,
- /* g6 */ PF_IEEE_FLOAT,
/* 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
for which in arch tune; do
eval "val=\$with_$which"
case ${val} in
- "" | native | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | arch3 | 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)
# OK
;;
*)
;; |
;; wr
-;; This scheduler description is also used for the g5 and g6.
-
(define_automaton "z_ipu")
(define_cpu_unit "z_e1" "z_ipu")
(define_cpu_unit "z_wr" "z_ipu")
(define_insn_reservation "z_la" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "la"))
"z_e1,z_wr")
(define_insn_reservation "z_larl" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "larl"))
"z_e1,z_wr")
(define_insn_reservation "z_load" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "load"))
"z_e1,z_wr")
(define_insn_reservation "z_store" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "store"))
"z_e1,z_wr")
(define_insn_reservation "z_sem" 2
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "sem"))
"z_e1*2,z_wr")
(define_insn_reservation "z_call" 5
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "jsr"))
"z_e1*5,z_wr")
(define_insn_reservation "z_mul" 5
- (and (eq_attr "cpu" "g5,g6,z900")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "imulsi,imulhi"))
"z_e1*5,z_wr")
(define_insn_reservation "z_inf" 10
- (and (eq_attr "cpu" "g5,g6,z900")
+ (and (eq_attr "cpu" "z900")
(eq_attr "type" "idiv,imuldi"))
"z_e1*10,z_wr")
;; For everything else we check the atype flag.
(define_insn_reservation "z_int" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(and (not (eq_attr "type" "la,larl,load,store,jsr"))
(eq_attr "atype" "reg")))
"z_e1,z_wr")
(define_insn_reservation "z_agen" 1
- (and (eq_attr "cpu" "z900,g5,g6")
+ (and (eq_attr "cpu" "z900")
(and (not (eq_attr "type" "la,larl,load,store,jsr"))
(eq_attr "atype" "agen")))
"z_e1,z_wr")
machine_id = strtol (p, NULL, 16);
switch (machine_id)
{
- /* g5 and g6 default to z900 */
- case 0x9672:
case 0x2064:
case 0x2066:
cpu = "z900";
#undef ASM_SPEC
#define ASM_SPEC \
"%{m31&m64}%{mesa&mzarch}%{march=z*}" \
- "%{march=arch3:-march=g5}" \
"%{march=arch5:-march=z900}" \
"%{march=arch6:-march=z990}" \
"%{march=arch7:-march=z9-ec}" \
"__bool");
{
char macro_def[64];
- int arch_level;
gcc_assert (s390_arch != PROCESSOR_NATIVE);
- arch_level = (int)s390_arch + 3;
- if (s390_arch >= PROCESSOR_2094_Z9_EC)
- /* Z9_EC has the same level as Z9_109. */
- arch_level--;
- /* Review when a new arch is added and increase the value. */
- char dummy[(PROCESSOR_max > 12) ? -1 : 1] __attribute__((unused));
- sprintf (macro_def, "__ARCH__=%d", arch_level);
+ sprintf (macro_def, "__ARCH__=%d", processor_table[s390_arch].arch_level);
cpp_undef (pfile, "__ARCH__");
cpp_define (pfile, macro_def);
}
#ifndef S390_OPTS_H
#define S390_OPTS_H
-/* Which processor to generate code or schedule for. The cpu attribute
+/* Which processor to generate code or schedule for. The `cpu' attribute
defines a list that mirrors this list, so changes to s390.md must be
- made at the same time. The enumeration must also be kept in snyc with
- processor_table in s390.c (the enumeration values are used as indices into
- the table). */
+ made at the same time. The enumeration must also be kept in sync with
+ `processor_table' and `processor_flags_table' in s390.c (the enumeration
+ values are used as indices into these tables). */
enum processor_type
{
- PROCESSOR_9672_G5,
- PROCESSOR_9672_G6,
PROCESSOR_2064_Z900,
PROCESSOR_2084_Z990,
PROCESSOR_2094_Z9_109,
COSTS_N_INSNS (160), /* DSGR cracked */
};
-static struct
-{
- /* The preferred name to be used in user visible output. */
- const char *const name;
- /* CPU name as it should be passed to Binutils via .machine */
- const char *const binutils_name;
- const enum processor_type processor;
- const struct processor_costs *cost;
-}
-const processor_table[] =
-{
- { "g5", "g5", PROCESSOR_9672_G5, &z900_cost },
- { "g6", "g6", PROCESSOR_9672_G6, &z900_cost },
- { "z900", "z900", PROCESSOR_2064_Z900, &z900_cost },
- { "z990", "z990", PROCESSOR_2084_Z990, &z990_cost },
- { "z9-109", "z9-109", PROCESSOR_2094_Z9_109, &z9_109_cost },
- { "z9-ec", "z9-ec", PROCESSOR_2094_Z9_EC, &z9_109_cost },
- { "z10", "z10", PROCESSOR_2097_Z10, &z10_cost },
- { "z196", "z196", PROCESSOR_2817_Z196, &z196_cost },
- { "zEC12", "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost },
- { "z13", "z13", PROCESSOR_2964_Z13, &zEC12_cost },
- { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost },
- { "native", "", PROCESSOR_NATIVE, NULL }
+const struct s390_processor processor_table[] =
+{
+ { "z900", "z900", PROCESSOR_2064_Z900, &z900_cost, 5 },
+ { "z990", "z990", PROCESSOR_2084_Z990, &z990_cost, 6 },
+ { "z9-109", "z9-109", PROCESSOR_2094_Z9_109, &z9_109_cost, 7 },
+ { "z9-ec", "z9-ec", PROCESSOR_2094_Z9_EC, &z9_109_cost, 7 },
+ { "z10", "z10", PROCESSOR_2097_Z10, &z10_cost, 8 },
+ { "z196", "z196", PROCESSOR_2817_Z196, &z196_cost, 9 },
+ { "zEC12", "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost, 10 },
+ { "z13", "z13", PROCESSOR_2964_Z13, &zEC12_cost, 11 },
+ { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost, 12 },
+ { "native", "", PROCESSOR_NATIVE, NULL, 0 }
};
extern int reload_completed;
return 3;
case PROCESSOR_2097_Z10:
return 2;
- case PROCESSOR_9672_G5:
- case PROCESSOR_9672_G6:
case PROCESSOR_2064_Z900:
/* Starting with EC12 we use the sched_reorder hook to take care
of instruction dispatch constraints. The algorithm only
}
static void
-s390_option_override_internal (bool main_args_p,
- struct gcc_options *opts,
+s390_option_override_internal (struct gcc_options *opts,
const struct gcc_options *opts_set)
{
- const char *prefix;
- const char *suffix;
-
- /* Set up prefix/suffix so the error messages refer to either the command
- line argument, or the attribute(target). */
- if (main_args_p)
- {
- prefix = "-m";
- suffix = "";
- }
- else
- {
- prefix = "option(\"";
- suffix = "\")";
- }
-
-
/* Architecture mode defaults according to ABI. */
if (!(opts_set->x_target_flags & MASK_ZARCH))
{
/* Set the march default in case it hasn't been specified on cmdline. */
if (!opts_set->x_s390_arch)
opts->x_s390_arch = PROCESSOR_2064_Z900;
- else if (opts->x_s390_arch == PROCESSOR_9672_G5
- || opts->x_s390_arch == PROCESSOR_9672_G6)
- warning (OPT_Wdeprecated, "%sarch=%s%s is deprecated and will be removed "
- "in future releases; use at least %sarch=z900%s",
- prefix, opts->x_s390_arch == PROCESSOR_9672_G5 ? "g5" : "g6",
- suffix, prefix, suffix);
opts->x_s390_arch_flags = processor_flags_table[(int) opts->x_s390_arch];
/* Determine processor to tune for. */
if (!opts_set->x_s390_tune)
opts->x_s390_tune = opts->x_s390_arch;
- else if (opts->x_s390_tune == PROCESSOR_9672_G5
- || opts->x_s390_tune == PROCESSOR_9672_G6)
- warning (OPT_Wdeprecated, "%stune=%s%s is deprecated and will be removed "
- "in future releases; use at least %stune=z900%s",
- prefix, opts->x_s390_tune == PROCESSOR_9672_G5 ? "g5" : "g6",
- suffix, prefix, suffix);
opts->x_s390_tune_flags = processor_flags_table[opts->x_s390_tune];
/* Set up function hooks. */
init_machine_status = s390_init_machine_status;
- s390_option_override_internal (true, &global_options, &global_options_set);
+ s390_option_override_internal (&global_options, &global_options_set);
/* Save the initial options in case the user does function specific
options. */
dest[i] |= src[i];
/* Do any overrides, such as arch=xxx, or tune=xxx support. */
- s390_option_override_internal (false, opts, &new_opts_set);
+ s390_option_override_internal (opts, &new_opts_set);
/* Save the current options unless we are validating options for
#pragma. */
t = build_target_option_node (opts);
extern const int processor_flags_table[];
+struct s390_processor
+{
+ /* The preferred name to be used in user visible output. */
+ const char *const name;
+ /* CPU name as it should be passed to Binutils via .machine */
+ const char *const binutils_name;
+ const enum processor_type processor;
+ const struct processor_costs *cost;
+ int arch_level;
+};
+
+extern const struct s390_processor processor_table[];
+
/* The truth element value for vector comparisons. Our instructions
always generate -1 in that case. */
#define VECTOR_STORE_FLAG_VALUE(MODE) CONSTM1_RTX (GET_MODE_INNER (MODE))
;; Processor type. This attribute must exactly match the processor_type
-;; enumeration in s390.h. The current machine description does not
-;; distinguish between g5 and g6, but there are differences between the two
-;; CPUs could in theory be modeled.
+;; enumeration in s390.h.
-(define_attr "cpu" "g5,g6,z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,arch12"
+(define_attr "cpu" "z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,arch12"
(const (symbol_ref "s390_tune_attr")))
(define_attr "cpu_facility"
]
(const_int 0)))
-;; Pipeline description for z900. For lack of anything better,
-;; this description is also used for the g5 and g6.
+;; Pipeline description for z900.
(include "2064.md")
;; Pipeline description for z990, z9-109 and z9-ec.
Enum
Name(processor_type) Type(enum processor_type)
-EnumValue
-Enum(processor_type) String(g5) Value(PROCESSOR_9672_G5)
-
-EnumValue
-Enum(processor_type) String(arch3) Value(PROCESSOR_9672_G5)
-
-EnumValue
-Enum(processor_type) String(g6) Value(PROCESSOR_9672_G6)
-
EnumValue
Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900)
#undef ASM_SPEC
#define ASM_SPEC \
"%{m31&m64}%{mesa&mzarch}%{march=z*}" \
- "%{march=arch3:-march=g5}" \
"%{march=arch5:-march=z900}" \
"%{march=arch6:-march=z990}" \
"%{march=arch7:-march=z9-ec}" \
@samp{z196}/@samp{arch9}, @samp{zEC12}, @samp{z13}/@samp{arch11}, and
@samp{native}.
-The default is @option{-march=z900}. @samp{g5}/@samp{arch3} and
-@samp{g6} are deprecated and will be removed with future releases.
+The default is @option{-march=z900}.
Specifying @samp{native} as cpu type can be used to select the best
architecture option for the host processor.
+2018-08-08 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ * gcc.target/s390/hotpatch-8.c: Remove.
+ * gcc.target/s390/hotpatch-9.c: Remove.
+ * gcc.target/s390/mnop-mcount-m31-fpic.c: Remove.
+ * gcc.target/s390/mnop-mcount-m31.c: Remove.
+
2018-08-08 Jakub Jelinek <jakub@redhat.com>
P0595R1 - is_constant_evaluated
+++ /dev/null
-/* Functional tests for the function hotpatching feature. */
-
-/* { dg-do compile { target { ! lp64 } } } */
-/* { dg-options "-mesa -march=g5 -Wno-deprecated -mhotpatch=0,3" } */
-/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
- printf("hello, world!\n");
-}
-
-/* Check number of occurences of certain instructions. */
-/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
-/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(3 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
-/* { dg-final { scan-assembler-times "nopr\t%r0" 1 } } */
-/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
-/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
-/* { dg-final { scan-assembler-not "alignment for hotpatch" } } */
+++ /dev/null
-/* Functional tests for the function hotpatching feature. */
-
-/* { dg-do compile { target { ! lp64 } } } */
-/* { dg-options "-mesa -march=g5 -Wno-deprecated -mhotpatch=0,4" } */
-/* { dg-skip-if "" { *-*-* } { "*" } { "-O*" } } */
-
-#include <stdio.h>
-
-void hp1(void)
-{
- printf("hello, world!\n");
-}
-
-/* Check number of occurences of certain instructions. */
-/* { dg-final { scan-assembler-not "pre-label NOPs" } } */
-/* { dg-final { scan-assembler "^\[^.\].*:\n.*post-label.*(4 halfwords).*\n\(\(.L.*:\n\)\|\(\[\[:space:\]\]*.cfi_.*\n\)\)*\[\[:space:\]\]*nop\t0" } } */
-/* { dg-final { scan-assembler-not "nopr\t%r0" } } */
-/* { dg-final { scan-assembler-times "nop\t0" 2 } } */
-/* { dg-final { scan-assembler-not "brcl\t0, 0" } } */
+++ /dev/null
-/* { dg-do compile } */
-/* { dg-options "-m31 -mesa -march=g5 -fPIC -pg -mnop-mcount -Wno-deprecated" } */
-
-void
-profileme (void)
-{
- /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(16 halfwords\\)\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0" } } */
-}
+++ /dev/null
-/* { dg-do compile } */
-/* { dg-options "-m31 -mesa -march=g5 -pg -mnop-mcount -Wno-deprecated" } */
-
-void
-profileme (void)
-{
- /* { dg-final { scan-assembler "NOPs for -mnop-mcount \\(15 halfwords\\)\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bc\t0,0\n.*bcr\t0,0" } } */
-}