OSDN Git Service

PR testsuite/33946
[pf3gnuchains/gcc-fork.git] / gcc / rtl.c
index 7d3dac7..edf393f 100644 (file)
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -1,12 +1,12 @@
 /* RTL utility routines.
    Copyright (C) 1987, 1988, 1991, 1994, 1997, 1998, 1999, 2000, 2001, 2002,
-   2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -15,9 +15,8 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 /* This file is compiled twice: once for the generator programs
    once for the compiler.  */
@@ -111,7 +110,7 @@ const enum rtx_class rtx_class[NUM_RTX_CODE] = {
 
 const unsigned char rtx_code_size[NUM_RTX_CODE] = {
 #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)                                \
-  ((ENUM) == CONST_INT || (ENUM) == CONST_DOUBLE                       \
+  ((ENUM) == CONST_INT || (ENUM) == CONST_DOUBLE || (ENUM) == CONST_FIXED\
    ? RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (HOST_WIDE_INT)       \
    : RTX_HDR_SIZE + (sizeof FORMAT - 1) * sizeof (rtunion)),
 
@@ -168,7 +167,7 @@ rtvec_alloc (int n)
 /* Return the number of bytes occupied by rtx value X.  */
 
 unsigned int
-rtx_size (rtx x)
+rtx_size (const_rtx x)
 {
   if (GET_CODE (x) == SYMBOL_REF && SYMBOL_REF_HAS_BLOCK_INFO_P (x))
     return RTX_HDR_SIZE + sizeof (struct block_symbol);
@@ -204,7 +203,7 @@ rtx_alloc_stat (RTX_CODE code MEM_STAT_DECL)
 /* Return true if ORIG is a sharable CONST.  */
 
 bool
-shared_const_p (rtx orig)
+shared_const_p (const_rtx orig)
 {
   gcc_assert (GET_CODE (orig) == CONST);
   
@@ -235,6 +234,7 @@ copy_rtx (rtx orig)
     case REG:
     case CONST_INT:
     case CONST_DOUBLE:
+    case CONST_FIXED:
     case CONST_VECTOR:
     case SYMBOL_REF:
     case CODE_LABEL:
@@ -319,15 +319,11 @@ copy_rtx (rtx orig)
 /* Create a new copy of an rtx.  Only copy just one level.  */
 
 rtx
-shallow_copy_rtx_stat (rtx orig MEM_STAT_DECL)
+shallow_copy_rtx_stat (const_rtx orig MEM_STAT_DECL)
 {
-  unsigned int size;
-  rtx copy;
-
-  size = rtx_size (orig);
-  copy = (rtx) ggc_alloc_zone_pass_stat (size, &rtl_zone);
-  memcpy (copy, orig, size);
-  return copy;
+  const unsigned int size = rtx_size (orig);
+  rtx const copy = (rtx) ggc_alloc_zone_pass_stat (size, &rtl_zone);
+  return memcpy (copy, orig, size);
 }
 \f
 /* Nonzero when we are generating CONCATs.  */
@@ -341,7 +337,7 @@ int currently_expanding_to_rtl;
    This is the Lisp function EQUAL for rtx arguments.  */
 
 int
-rtx_equal_p (rtx x, rtx y)
+rtx_equal_p (const_rtx x, const_rtx y)
 {
   int i;
   int j;
@@ -379,6 +375,7 @@ rtx_equal_p (rtx x, rtx y)
     case SCRATCH:
     case CONST_DOUBLE:
     case CONST_INT:
+    case CONST_FIXED:
       return 0;
 
     default:
@@ -480,7 +477,7 @@ dump_rtx_statistics (void)
 \f
 #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007)
 void
-rtl_check_failed_bounds (rtx r, int n, const char *file, int line,
+rtl_check_failed_bounds (const_rtx r, int n, const char *file, int line,
                         const char *func)
 {
   internal_error
@@ -490,7 +487,7 @@ rtl_check_failed_bounds (rtx r, int n, const char *file, int line,
 }
 
 void
-rtl_check_failed_type1 (rtx r, int n, int c1, const char *file, int line,
+rtl_check_failed_type1 (const_rtx r, int n, int c1, const char *file, int line,
                        const char *func)
 {
   internal_error
@@ -500,7 +497,7 @@ rtl_check_failed_type1 (rtx r, int n, int c1, const char *file, int line,
 }
 
 void
-rtl_check_failed_type2 (rtx r, int n, int c1, int c2, const char *file,
+rtl_check_failed_type2 (const_rtx r, int n, int c1, int c2, const char *file,
                        int line, const char *func)
 {
   internal_error
@@ -510,7 +507,7 @@ rtl_check_failed_type2 (rtx r, int n, int c1, int c2, const char *file,
 }
 
 void
-rtl_check_failed_code1 (rtx r, enum rtx_code code, const char *file,
+rtl_check_failed_code1 (const_rtx r, enum rtx_code code, const char *file,
                        int line, const char *func)
 {
   internal_error ("RTL check: expected code '%s', have '%s' in %s, at %s:%d",
@@ -519,7 +516,7 @@ rtl_check_failed_code1 (rtx r, enum rtx_code code, const char *file,
 }
 
 void
-rtl_check_failed_code2 (rtx r, enum rtx_code code1, enum rtx_code code2,
+rtl_check_failed_code2 (const_rtx r, enum rtx_code code1, enum rtx_code code2,
                        const char *file, int line, const char *func)
 {
   internal_error
@@ -529,7 +526,7 @@ rtl_check_failed_code2 (rtx r, enum rtx_code code1, enum rtx_code code2,
 }
 
 void
-rtl_check_failed_code_mode (rtx r, enum rtx_code code, enum machine_mode mode,
+rtl_check_failed_code_mode (const_rtx r, enum rtx_code code, enum machine_mode mode,
                            bool not_mode, const char *file, int line,
                            const char *func)
 {
@@ -556,7 +553,7 @@ rtl_check_failed_block_symbol (const char *file, int line, const char *func)
 
 /* XXX Maybe print the vector?  */
 void
-rtvec_check_failed_bounds (rtvec r, int n, const char *file, int line,
+rtvec_check_failed_bounds (const_rtvec r, int n, const char *file, int line,
                           const char *func)
 {
   internal_error
@@ -567,7 +564,7 @@ rtvec_check_failed_bounds (rtvec r, int n, const char *file, int line,
 
 #if defined ENABLE_RTL_FLAG_CHECKING
 void
-rtl_check_failed_flag (const char *name, rtx r, const char *file,
+rtl_check_failed_flag (const char *name, const_rtx r, const char *file,
                       int line, const char *func)
 {
   internal_error