2084.md: Enable all insn reservations also for z9_ec cpu attribute value.
authorAndreas Krebbel <Andreas.Krebbel@de.ibm.com>
Wed, 23 Mar 2011 13:42:46 +0000 (13:42 +0000)
committerAndreas Krebbel <krebbel@gcc.gnu.org>
Wed, 23 Mar 2011 13:42:46 +0000 (13:42 +0000)
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

gcc/ChangeLog
gcc/config/s390/2084.md
gcc/config/s390/s390-opts.h
gcc/config/s390/s390.c
gcc/config/s390/s390.md
gcc/config/s390/s390.opt

index bf0467272965d277b562d03a6f04264d2ad9b529..de143563a2f8a92a48323c4535b1aa28931a0bec 100644 (file)
@@ -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
index 9ce5530b67aa8876b9559129902611c913276ef5..2379f965e2ccab2689c88e19c2d0325c4883be69 100644 (file)
 ;;
 
 (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")
 
 ;;
 
 (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")
 
 ;;
 
 (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")
 
index fba8711c5dd0b95e1f88f4e12b4ad797956e1b28..668aaaa846e39ec4c85593566663a1761be570db 100644 (file)
@@ -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
index 671d8015a664d473e5b3dba27449c74a69c98fb7..2a299c2aa5a12b5d48aa6008fb72f9b056f78451 100644 (file)
@@ -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)
index 335ed09a686dc4a9c84f9547598aa08e98f12884..faf867254c3cfa4348912aa33aa132974f4cea62 100644 (file)
 ;; 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"
index 2bb78b640a4fa91001c7a8fc1f9a008a63247a35..6ce32dc9c9ed1e6da24a3108120e3a5613f1dada 100644 (file)
@@ -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