aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>2011-03-23 13:42:46 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2011-03-23 13:42:46 +0000
commitf137aa6354e620b0a5f9b3783951cdf69a81c588 (patch)
tree8c3ed9b4da9e845b7f2fe45b3684d3e43f469af5
parent8d985ccd2e833b81201295c090ba4278b71ed4d6 (diff)
downloadgcc-f137aa6354e620b0a5f9b3783951cdf69a81c588.zip
gcc-f137aa6354e620b0a5f9b3783951cdf69a81c588.tar.gz
gcc-f137aa6354e620b0a5f9b3783951cdf69a81c588.tar.bz2
2084.md: Enable all insn reservations also for z9_ec cpu attribute value.
2011-03-23 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> * config/s390/2084.md: Enable all insn reservations also for z9_ec cpu attribute value. * config/s390/s390-opts.h (enum s390_arch_option): Remove. (enum processor_type): Add PROCESSOR_2094_Z9_EC. * config/s390/s390.c (processor_flags_table): New constant array. (s390_handle_arch_option): Remove. (s390_handle_option): Remove s390_handle_arch_option invocations and OPT_mwarn_framesize_ handling. (s390_option_override): Remove s390_handle_arch_option invocation. (s390_emit_prologue): Remove use of HOST_WIDE_INT_PRINT_DEC in warnings. * config/s390/s390.md (cpu attribute): Add z9_ec value. * config/s390/s390.opt (s390_tune, s390_arch) (march=): Replace s390_arch_option enum and values with processor_type. Set variable name to s390_arch. Set initialization value. (mtune=): Replace s390_arch_option with processor_type. Set variable name to s390_tune. Set initialization value. From-SVN: r171350
-rw-r--r--gcc/ChangeLog21
-rw-r--r--gcc/config/s390/2084.md68
-rw-r--r--gcc/config/s390/s390-opts.h18
-rw-r--r--gcc/config/s390/s390.c80
-rw-r--r--gcc/config/s390/s390.md2
-rw-r--r--gcc/config/s390/s390.opt30
6 files changed, 93 insertions, 126 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bf04672..de14356 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,24 @@
+2011-03-23 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+
+ * config/s390/2084.md: Enable all insn reservations also for z9_ec
+ cpu attribute value.
+ * config/s390/s390-opts.h (enum s390_arch_option): Remove.
+ (enum processor_type): Add PROCESSOR_2094_Z9_EC.
+ * config/s390/s390.c (processor_flags_table): New constant array.
+ (s390_handle_arch_option): Remove.
+ (s390_handle_option): Remove s390_handle_arch_option invocations
+ and OPT_mwarn_framesize_ handling.
+ (s390_option_override): Remove s390_handle_arch_option invocation.
+ (s390_emit_prologue): Remove use of HOST_WIDE_INT_PRINT_DEC in
+ warnings.
+ * config/s390/s390.md (cpu attribute): Add z9_ec value.
+ * config/s390/s390.opt (s390_tune, s390_arch)
+ (march=): Replace s390_arch_option enum and values with
+ processor_type. Set variable name to s390_arch. Set
+ initialization value.
+ (mtune=): Replace s390_arch_option with processor_type. Set
+ variable name to s390_tune. Set initialization value.
+
2011-03-23 Julian Brown <julian@codesourcery.com>
* expr.c (expand_expr_real_1): Only use BLKmode for volatile
diff --git a/gcc/config/s390/2084.md b/gcc/config/s390/2084.md
index 9ce5530..2379f96 100644
--- a/gcc/config/s390/2084.md
+++ b/gcc/config/s390/2084.md
@@ -62,69 +62,69 @@
;;
(define_insn_reservation "x_int" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(and (eq_attr "type" "integer")
(eq_attr "atype" "reg")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_agen" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(and (eq_attr "type" "integer")
(eq_attr "atype" "agen")))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_lr" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "lr"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_la" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "la"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_larl" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "larl"))
"x-e1-st,x-wr-st")
(define_insn_reservation "x_load" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "load"))
"x-e1-st+x-mem,x-wr-st")
(define_insn_reservation "x_store" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "store"))
"x-e1-st+x_store_tok,x-wr-st")
(define_insn_reservation "x_branch" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "branch"))
"x_e1_r,x_wr_r")
(define_insn_reservation "x_call" 5
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "jsr"))
"x-e1-np*5,x-wr-np")
(define_insn_reservation "x_mul_hi" 2
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "imulhi"))
"x-e1-np*2,x-wr-np")
(define_insn_reservation "x_mul_sidi" 4
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "imulsi,imuldi"))
"x-e1-np*4,x-wr-np")
(define_insn_reservation "x_div" 10
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "idiv"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_sem" 17
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "sem"))
"x-e1-np+x-mem,x-e1-np*16,x-wr-st")
@@ -133,27 +133,27 @@
;;
(define_insn_reservation "x_cs" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "cs"))
"x-e1-np,x-wr-np")
(define_insn_reservation "x_vs" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "vs"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_stm" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "stm"))
"(x-e1-np+x_store_tok)*10,x-wr-np")
(define_insn_reservation "x_lm" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "lm"))
"x-e1-np*10,x-wr-np")
(define_insn_reservation "x_other" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "other"))
"x-e1-np,x-wr-np")
@@ -162,88 +162,88 @@
;;
(define_insn_reservation "x_fsimptf" 7
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimptf,fhex"))
"x_e1_t*2,x-wr-fp")
(define_insn_reservation "x_fsimpdf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimpdf,fmuldf,fmadddf,fhex"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fsimpsf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fsimpsf,fmulsf,fmaddsf,fhex"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fmultf" 33
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fmultf"))
"x_e1_t*27,x-wr-fp")
(define_insn_reservation "x_fdivtf" 82
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivtf,fsqrttf"))
"x_e1_t*76,x-wr-fp")
(define_insn_reservation "x_fdivdf" 36
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivdf,fsqrtdf"))
"x_e1_t*30,x-wr-fp")
(define_insn_reservation "x_fdivsf" 36
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fdivsf,fsqrtsf"))
"x_e1_t*30,x-wr-fp")
(define_insn_reservation "x_floadtf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floadtf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_floaddf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floaddf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_floadsf" 6
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "floadsf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fstoredf" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fstoredf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_fstoresf" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "fstoresf"))
"x_e1_t,x-wr-fp")
(define_insn_reservation "x_ftrunctf" 16
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftrunctf"))
"x_e1_t*10,x-wr-fp")
(define_insn_reservation "x_ftruncdf" 11
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftruncdf"))
"x_e1_t*5,x-wr-fp")
(define_insn_reservation "x_ftoi" 1
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "ftoi"))
"x_e1_t*3,x-wr-fp")
(define_insn_reservation "x_itof" 7
- (and (eq_attr "cpu" "z990,z9_109")
+ (and (eq_attr "cpu" "z990,z9_109,z9_ec")
(eq_attr "type" "itoftf,itofdf,itofsf"))
"x_e1_t*3,x-wr-fp")
diff --git a/gcc/config/s390/s390-opts.h b/gcc/config/s390/s390-opts.h
index fba8711..668aaaa 100644
--- a/gcc/config/s390/s390-opts.h
+++ b/gcc/config/s390/s390-opts.h
@@ -32,26 +32,10 @@ enum processor_type
PROCESSOR_2064_Z900,
PROCESSOR_2084_Z990,
PROCESSOR_2094_Z9_109,
+ PROCESSOR_2094_Z9_EC,
PROCESSOR_2097_Z10,
PROCESSOR_2817_Z196,
PROCESSOR_max
};
-/* This enumeration must match processor_alias_table in
- s390_handle_arch_option. It is different from enum processor_type
- because some processors differ for option handling but not for
- scheduling. */
-
-enum s390_arch_option
-{
- s390_arch_g5,
- s390_arch_g6,
- s390_arch_z900,
- s390_arch_z990,
- s390_arch_z9_109,
- s390_arch_z9_ec,
- s390_arch_z10,
- s390_arch_z196
-};
-
#endif
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 671d801..2a299c2 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -55,6 +55,21 @@ along with GCC; see the file COPYING3. If not see
#include "cfgloop.h"
#include "opts.h"
+static 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
+ | PF_EXTIMM,
+ /* z9-ec */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP,
+ /* z10 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP | PF_Z10,
+ /* z196 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT
+ | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196
+ };
/* Define the specific costs for a given cpu. */
@@ -1530,47 +1545,12 @@ s390_option_init_struct (struct gcc_options *opts)
opts->x_flag_asynchronous_unwind_tables = 1;
}
-/* Set *TYPE and *FLAGS to the associated processor_type and
- processor_flags for processor ARCH. */
-
-static void
-s390_handle_arch_option (enum s390_arch_option arch,
- enum processor_type *type,
- int *flags)
-{
- /* This must match enum s390_arch_option in s390-opts.h. */
- static struct pta
- {
- const enum processor_type processor;
- const int flags; /* From enum processor_flags. */
- }
- const processor_alias_table[] =
- {
- {PROCESSOR_9672_G5, PF_IEEE_FLOAT},
- {PROCESSOR_9672_G6, PF_IEEE_FLOAT},
- {PROCESSOR_2064_Z900, PF_IEEE_FLOAT | PF_ZARCH},
- {PROCESSOR_2084_Z990, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT},
- {PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM},
- {PROCESSOR_2094_Z9_109, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP },
- {PROCESSOR_2097_Z10, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10},
- {PROCESSOR_2817_Z196, PF_IEEE_FLOAT | PF_ZARCH
- | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 },
- };
-
- *type = processor_alias_table[(int) arch].processor;
- *flags = processor_alias_table[(int) arch].flags;
-}
-
/* Implement TARGET_HANDLE_OPTION. */
static bool
s390_handle_option (struct gcc_options *opts,
struct gcc_options *opts_set ATTRIBUTE_UNUSED,
- const struct cl_decoded_option *decoded,
+ const struct cl_decoded_option *decoded,
location_t loc)
{
size_t code = decoded->opt_index;
@@ -1580,9 +1560,7 @@ s390_handle_option (struct gcc_options *opts,
switch (code)
{
case OPT_march_:
- s390_handle_arch_option ((enum s390_arch_option) value,
- &opts->x_s390_arch,
- &opts->x_s390_arch_flags);
+ opts->x_s390_arch_flags = processor_flags_table[value];
opts->x_s390_arch_string = arg;
return true;
@@ -1597,9 +1575,7 @@ s390_handle_option (struct gcc_options *opts,
return true;
case OPT_mtune_:
- s390_handle_arch_option ((enum s390_arch_option) value,
- &opts->x_s390_tune,
- &opts->x_s390_tune_flags);
+ opts->x_s390_tune_flags = processor_flags_table[value];
return true;
case OPT_mwarn_framesize_:
@@ -1626,20 +1602,15 @@ s390_option_override (void)
target_flags &= ~MASK_ZARCH;
}
- /* Determine processor architectural level. */
- if (!s390_arch_string)
+ /* Set the march default in case it hasn't been specified on
+ cmdline. */
+ if (s390_arch == PROCESSOR_max)
{
s390_arch_string = TARGET_ZARCH? "z900" : "g5";
- s390_handle_arch_option ((TARGET_ZARCH ? s390_arch_z900 : s390_arch_g5),
- &s390_arch, &s390_arch_flags);
+ s390_arch = TARGET_ZARCH ? PROCESSOR_2064_Z900 : PROCESSOR_9672_G5;
+ s390_arch_flags = processor_flags_table[(int)s390_arch];
}
- /* This check is triggered when the user specified a wrong -march=
- string and prevents subsequent error messages from being
- issued. */
- if (s390_arch == PROCESSOR_max)
- return;
-
/* Determine processor to tune for. */
if (s390_tune == PROCESSOR_max)
{
@@ -8160,8 +8131,7 @@ s390_emit_prologue (void)
not match the test under mask pattern. */
if (stack_guard >= s390_stack_size)
{
- warning (0, "frame size of function %qs is "
- HOST_WIDE_INT_PRINT_DEC
+ warning (0, "frame size of function %qs is %wd"
" bytes which is more than half the stack size. "
"The dynamic check would not be reliable. "
"No check emitted for this function.",
@@ -8189,7 +8159,7 @@ s390_emit_prologue (void)
if (s390_warn_framesize > 0
&& cfun_frame_layout.frame_size >= s390_warn_framesize)
- warning (0, "frame size of %qs is " HOST_WIDE_INT_PRINT_DEC " bytes",
+ warning (0, "frame size of %qs is %wd bytes",
current_function_name (), cfun_frame_layout.frame_size);
if (s390_warn_dynamicstack_p && cfun->calls_alloca)
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index 335ed09..faf8672 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -272,7 +272,7 @@
;; 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,z10,z196"
+(define_attr "cpu" "g5,g6,z900,z990,z9_109,z9_ec,z10,z196"
(const (symbol_ref "s390_tune_attr")))
(define_attr "cpu_facility" "standard,ieee,zarch,longdisp,extimm,dfp,z10,z196"
diff --git a/gcc/config/s390/s390.opt b/gcc/config/s390/s390.opt
index 2bb78b6..6ce32dc 100644
--- a/gcc/config/s390/s390.opt
+++ b/gcc/config/s390/s390.opt
@@ -25,17 +25,9 @@ config/s390/s390-opts.h
Variable
const char *s390_arch_string
-; Which cpu are we tuning for.
-Variable
-enum processor_type s390_tune = PROCESSOR_max
-
Variable
int s390_tune_flags
-; Which instruction set architecture to use.
-Variable
-enum processor_type s390_arch
-
Variable
int s390_arch_flags
@@ -51,35 +43,35 @@ Target Report RejectNegative Negative(m31) Mask(64BIT)
64 bit ABI
march=
-Target RejectNegative Joined Enum(s390_arch_option)
+Target RejectNegative Joined Enum(processor_type) Var(s390_arch) Init(PROCESSOR_max)
Generate code for given CPU
Enum
-Name(s390_arch_option) Type(enum s390_arch_option)
+Name(processor_type) Type(enum processor_type)
EnumValue
-Enum(s390_arch_option) String(g5) Value(s390_arch_g5)
+Enum(processor_type) String(g5) Value(PROCESSOR_9672_G5)
EnumValue
-Enum(s390_arch_option) String(g6) Value(s390_arch_g6)
+Enum(processor_type) String(g6) Value(PROCESSOR_9672_G6)
EnumValue
-Enum(s390_arch_option) String(z900) Value(s390_arch_z900)
+Enum(processor_type) String(z900) Value(PROCESSOR_2064_Z900)
EnumValue
-Enum(s390_arch_option) String(z990) Value(s390_arch_z990)
+Enum(processor_type) String(z990) Value(PROCESSOR_2084_Z990)
EnumValue
-Enum(s390_arch_option) String(z9-109) Value(s390_arch_z9_109)
+Enum(processor_type) String(z9-109) Value(PROCESSOR_2094_Z9_109)
EnumValue
-Enum(s390_arch_option) String(z9-ec) Value(s390_arch_z9_ec)
+Enum(processor_type) String(z9-ec) Value(PROCESSOR_2094_Z9_EC)
EnumValue
-Enum(s390_arch_option) String(z10) Value(s390_arch_z10)
+Enum(processor_type) String(z10) Value(PROCESSOR_2097_Z10)
EnumValue
-Enum(s390_arch_option) String(z196) Value(s390_arch_z196)
+Enum(processor_type) String(z196) Value(PROCESSOR_2817_Z196)
mbackchain
Target Report Mask(BACKCHAIN)
@@ -130,7 +122,7 @@ Target RejectNegative Joined UInteger Var(s390_stack_size)
Emit extra code in the function prologue in order to trap if the stack size exceeds the given limit
mtune=
-Target RejectNegative Joined Enum(s390_arch_option)
+Target RejectNegative Joined Enum(processor_type) Var(s390_tune) Init(PROCESSOR_max)
Schedule code for given CPU
mmvcle