diff options
author | Andreas Krebbel <Andreas.Krebbel@de.ibm.com> | 2011-03-23 13:42:46 +0000 |
---|---|---|
committer | Andreas Krebbel <krebbel@gcc.gnu.org> | 2011-03-23 13:42:46 +0000 |
commit | f137aa6354e620b0a5f9b3783951cdf69a81c588 (patch) | |
tree | 8c3ed9b4da9e845b7f2fe45b3684d3e43f469af5 | |
parent | 8d985ccd2e833b81201295c090ba4278b71ed4d6 (diff) | |
download | gcc-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/ChangeLog | 21 | ||||
-rw-r--r-- | gcc/config/s390/2084.md | 68 | ||||
-rw-r--r-- | gcc/config/s390/s390-opts.h | 18 | ||||
-rw-r--r-- | gcc/config/s390/s390.c | 80 | ||||
-rw-r--r-- | gcc/config/s390/s390.md | 2 | ||||
-rw-r--r-- | gcc/config/s390/s390.opt | 30 |
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 |