OSDN Git Service

* doc/invoke.texi: Delete mcmodel=medium from powerpc options.
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jun 2010 10:42:41 +0000 (10:42 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 25 Jun 2010 10:42:41 +0000 (10:42 +0000)
* config/rs6000/rs6000.h (enum rs6000_cmodel): Delete CMODEL_MEDIUM.
* config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Set
CMODEL_LARGE as default.
* config/rs6000/rs6000.c (rs6000_handle_option): Remove mcmodel=medium.
(offsettable_ok_by_alignment): Delete.
(rs6000_emit_move): Remove mcmodel=medium optimization.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161371 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/rs6000/linux64.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/doc/invoke.texi

index 3dd8907..52583f1 100644 (file)
@@ -1,3 +1,13 @@
+2010-06-25  Alan Modra  <amodra@gmail.com>
+
+       * doc/invoke.texi: Delete mcmodel=medium from powerpc options.
+       * config/rs6000/rs6000.h (enum rs6000_cmodel): Delete CMODEL_MEDIUM.
+       * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Set
+       CMODEL_LARGE as default.
+       * config/rs6000/rs6000.c (rs6000_handle_option): Remove mcmodel=medium.
+       (offsettable_ok_by_alignment): Delete.
+       (rs6000_emit_move): Remove mcmodel=medium optimization.
+
 2010-06-25  Bernd Schmidt  <bernds@codesourcery.com>
 
        With large parts from Jim Wilson:
 2010-06-25  Bernd Schmidt  <bernds@codesourcery.com>
 
        With large parts from Jim Wilson:
index c4e3651..900570f 100644 (file)
@@ -134,7 +134,7 @@ extern enum rs6000_cmodel cmodel;
          else                                                  \
            {                                                   \
              if (!rs6000_explicit_options.cmodel)              \
          else                                                  \
            {                                                   \
              if (!rs6000_explicit_options.cmodel)              \
-               SET_CMODEL (CMODEL_MEDIUM);                     \
+               SET_CMODEL (CMODEL_LARGE);                      \
              if (cmodel != CMODEL_SMALL)                       \
                {                                               \
                  TARGET_NO_FP_IN_TOC = 0;                      \
              if (cmodel != CMODEL_SMALL)                       \
                {                                               \
                  TARGET_NO_FP_IN_TOC = 0;                      \
index 55dd0a6..485b077 100644 (file)
@@ -3653,8 +3653,6 @@ rs6000_handle_option (size_t code, const char *arg, int value)
     case OPT_mcmodel_:
       if (strcmp (arg, "small") == 0)
        cmodel = CMODEL_SMALL;
     case OPT_mcmodel_:
       if (strcmp (arg, "small") == 0)
        cmodel = CMODEL_SMALL;
-      else if (strcmp (arg, "medium") == 0)
-       cmodel = CMODEL_MEDIUM;
       else if (strcmp (arg, "large") == 0)
        cmodel = CMODEL_LARGE;
       else
       else if (strcmp (arg, "large") == 0)
        cmodel = CMODEL_LARGE;
       else
@@ -6636,36 +6634,6 @@ rs6000_eliminate_indexed_memrefs (rtx operands[2])
                               copy_addr_to_reg (XEXP (operands[1], 0)));
 }
 
                               copy_addr_to_reg (XEXP (operands[1], 0)));
 }
 
-/* Return true if memory accesses to DECL are known to never straddle
-   a 32k boundary.  */
-
-static bool
-offsettable_ok_by_alignment (tree decl)
-{
-  unsigned HOST_WIDE_INT dsize;
-
-  /* Presume any compiler generated symbol_ref is suitably aligned.  */
-  if (!decl)
-    return true;
-
-  if (TREE_CODE (decl) != VAR_DECL
-      && TREE_CODE (decl) != PARM_DECL
-      && TREE_CODE (decl) != RESULT_DECL
-      && TREE_CODE (decl) != FIELD_DECL)
-    return true;
-
-  if (!host_integerp (DECL_SIZE_UNIT (decl), 1))
-    return false;
-
-  dsize = tree_low_cst (DECL_SIZE_UNIT (decl), 1);
-  if (dsize <= 1)
-    return true;
-  if (dsize > 32768)
-    return false;
-
-  return DECL_ALIGN_UNIT (decl) >= dsize;
-}
-
 /* Emit a move from SOURCE to DEST in mode MODE.  */
 void
 rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
 /* Emit a move from SOURCE to DEST in mode MODE.  */
 void
 rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
@@ -6979,16 +6947,11 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
       /* If this is a SYMBOL_REF that refers to a constant pool entry,
         and we have put it in the TOC, we just need to make a TOC-relative
         reference to it.  */
       /* If this is a SYMBOL_REF that refers to a constant pool entry,
         and we have put it in the TOC, we just need to make a TOC-relative
         reference to it.  */
-      if ((TARGET_TOC
-          && GET_CODE (operands[1]) == SYMBOL_REF
-          && constant_pool_expr_p (operands[1])
-          && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (operands[1]),
-                                              get_pool_mode (operands[1])))
-         || (TARGET_CMODEL == CMODEL_MEDIUM
-             && GET_CODE (operands[1]) == SYMBOL_REF
-             && !CONSTANT_POOL_ADDRESS_P (operands[1])
-             && SYMBOL_REF_LOCAL_P (operands[1])
-             && offsettable_ok_by_alignment (SYMBOL_REF_DECL (operands[1]))))
+      if (TARGET_TOC
+         && GET_CODE (operands[1]) == SYMBOL_REF
+         && constant_pool_expr_p (operands[1])
+         && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (operands[1]),
+                                             get_pool_mode (operands[1])))
        {
          rtx reg = NULL_RTX;
          if (TARGET_CMODEL != CMODEL_SMALL)
        {
          rtx reg = NULL_RTX;
          if (TARGET_CMODEL != CMODEL_SMALL)
index cd7b928..a6248ec 100644 (file)
@@ -295,11 +295,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 
 /* Code model for 64-bit linux.
    small: 16-bit toc offsets.
 
 /* Code model for 64-bit linux.
    small: 16-bit toc offsets.
-   medium: 32-bit toc offsets, static data and code within 2G of TOC pointer.
-   large: 32-bit toc offsets, no limit on static data and code.  */
+   large: 32-bit toc offsets.  */
 enum rs6000_cmodel {
   CMODEL_SMALL,
 enum rs6000_cmodel {
   CMODEL_SMALL,
-  CMODEL_MEDIUM,
   CMODEL_LARGE
 };
 
   CMODEL_LARGE
 };
 
index 7aa4e51..d132ee8 100644 (file)
@@ -14987,11 +14987,6 @@ scheduling parameters set by @option{-mtune}.
 Generate PowerPC64 code for the small model: The TOC is limited to
 64k.
 
 Generate PowerPC64 code for the small model: The TOC is limited to
 64k.
 
-@item -mcmodel=medium
-@opindex mcmodel=medium
-Generate PowerPC64 code for the medium model: The TOC and other static
-data may be up to a total of 4G in size.
-
 @item -mcmodel=large
 @opindex mcmodel=large
 Generate PowerPC64 code for the large model: The TOC may be up to 4G
 @item -mcmodel=large
 @opindex mcmodel=large
 Generate PowerPC64 code for the large model: The TOC may be up to 4G