OSDN Git Service

2010-04-07 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Apr 2010 10:13:25 +0000 (10:13 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 00:48:02 +0000 (09:48 +0900)
PR middle-end/42617
* emit-rtl.c (set_mem_attributes_minus_bitpos): Do not
discard plain indirect references.
* fold-const.c (operand_equal_p): Guard against NULL_TREE
type.
* tree.c (tree_nop_conversion): Likewise.

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

gcc/ChangeLog
gcc/emit-rtl.c

index 34b0a26..d41b7d5 100644 (file)
@@ -1,3 +1,12 @@
+2010-04-07  Richard Guenther  <rguenther@suse.de>
+
+       PR middle-end/42617
+       * emit-rtl.c (set_mem_attributes_minus_bitpos): Do not
+       discard plain indirect references.
+       * fold-const.c (operand_equal_p): Guard against NULL_TREE
+       type.
+       * tree.c (tree_nop_conversion): Likewise.
+
 2010-04-07  Dodji Seketeli  <dodji@redhat.com>
 
        PR debug/43628
index 204f9df..dda2b0f 100644 (file)
@@ -1,7 +1,6 @@
 /* Emit RTL for the GCC expander.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-   2010
+   1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -50,6 +49,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "hashtab.h"
 #include "insn-config.h"
 #include "recog.h"
+#include "real.h"
+#include "fixed-value.h"
 #include "bitmap.h"
 #include "basic-block.h"
 #include "ggc.h"
@@ -516,36 +517,6 @@ const_fixed_from_fixed_value (FIXED_VALUE_TYPE value, enum machine_mode mode)
   return lookup_const_fixed (fixed);
 }
 
-/* Constructs double_int from rtx CST.  */
-
-double_int
-rtx_to_double_int (const_rtx cst)
-{
-  double_int r;
-
-  if (CONST_INT_P (cst))
-      r = shwi_to_double_int (INTVAL (cst));
-  else if (CONST_DOUBLE_P (cst) && GET_MODE (cst) == VOIDmode)
-    {
-      r.low = CONST_DOUBLE_LOW (cst);
-      r.high = CONST_DOUBLE_HIGH (cst);
-    }
-  else
-    gcc_unreachable ();
-  
-  return r;
-}
-
-
-/* Return a CONST_DOUBLE or CONST_INT for a value specified as
-   a double_int.  */
-
-rtx
-immed_double_int_const (double_int i, enum machine_mode mode)
-{
-  return immed_double_const (i.low, i.high, mode);
-}
-
 /* Return a CONST_DOUBLE or CONST_INT for a value specified as a pair
    of ints: I0 is the low-order word and I1 is the high-order word.
    Do not use this routine for non-integer modes; convert to
@@ -1780,6 +1751,14 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
                 the size we got from the type?  */
            }
 
+         else if (flag_argument_noalias > 1
+                  && (INDIRECT_REF_P (t2))
+                  && TREE_CODE (TREE_OPERAND (t2, 0)) == PARM_DECL)
+           {
+             expr = t2;
+             offset = NULL;
+           }
+
          /* If this is an indirect reference, record it.  */
          else if (TREE_CODE (t) == INDIRECT_REF
                   || TREE_CODE (t) == MISALIGNED_INDIRECT_REF)
@@ -1790,6 +1769,16 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
            }
        }
 
+      /* If this is a Fortran indirect argument reference, record the
+        parameter decl.  */
+      else if (flag_argument_noalias > 1
+              && (INDIRECT_REF_P (t))
+              && TREE_CODE (TREE_OPERAND (t, 0)) == PARM_DECL)
+       {
+         expr = t;
+         offset = NULL;
+       }
+
       /* If this is an indirect reference, record it.  */
       else if (TREE_CODE (t) == INDIRECT_REF
               || TREE_CODE (t) == MISALIGNED_INDIRECT_REF)