OSDN Git Service

* emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_POINTER
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 20 Mar 2004 23:08:57 +0000 (23:08 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 20 Mar 2004 23:08:57 +0000 (23:08 +0000)
flag.
* explow.c (force_not_mem): Set REG_POINTER flag according to
MEM_POINTER one.
* rtl.h (MEM_POINTER): New macro.
(struct rtx_def): Use integrated for MEM_SCALAR_P and frame_related
for MEM_POINTER.

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

gcc/ChangeLog
gcc/emit-rtl.c
gcc/explow.c
gcc/rtl.h

index 7f32ea6..46a3a9e 100644 (file)
@@ -1,3 +1,13 @@
+2004-03-20  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
+
+       * emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_POINTER
+       flag.
+       * explow.c (force_not_mem): Set REG_POINTER flag according to
+       MEM_POINTER one.
+       * rtl.h (MEM_POINTER): New macro.
+       (struct rtx_def): Use integrated for MEM_SCALAR_P and frame_related
+       for MEM_POINTER.
+
 2004-03-20  Roger Sayle  <roger@eyesopen.com>
 
        PR target/13889
index 3032b53..6d18b78 100644 (file)
@@ -1512,6 +1512,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
     |= ((lang_hooks.honor_readonly
         && (TYPE_READONLY (type) || TREE_READONLY (t)))
        || (! TYPE_P (t) && TREE_CONSTANT (t)));
+  MEM_POINTER (ref) = POINTER_TYPE_P (type);
 
   /* If we are making an object of this type, or if this is a DECL, we know
      that it is a scalar if the type is not an aggregate.  */
index 0655f24..b3c82b8 100644 (file)
@@ -770,6 +770,10 @@ force_not_mem (rtx x)
     return x;
 
   temp = gen_reg_rtx (GET_MODE (x));
+
+  if (MEM_POINTER (x))
+    REG_POINTER (temp) = 1;
+
   emit_move_insn (temp, x);
   return temp;
 }
index e98203f..26466a9 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -243,14 +243,14 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
   /* Nonzero if this rtx came from procedure integration.
      1 in a REG or PARALLEL means this rtx refers to the return value
      of the current function.
-     1 in a SYMBOL_REF if the symbol is weak.  */
+     1 in a SYMBOL_REF if the symbol is weak.
+     1 in a MEM if the MEM refers to a scalar, rather than a member of
+     an aggregate.  */
   unsigned integrated : 1;
   /* 1 in an INSN or a SET if this rtx is related to the call frame,
      either changing how we compute the frame address or saving and
      restoring registers in the prologue and epilogue.
-     1 in a MEM if the MEM refers to a scalar, rather than a member of
-     an aggregate.
-     1 in a REG if the register is a pointer.
+     1 in a REG or MEM if it is a pointer.
      1 in a SYMBOL_REF if it addresses something in the per-function
      constant string pool.  */
   unsigned frame_related : 1;
@@ -1136,6 +1136,10 @@ enum label_kind
 #define REG_POINTER(RTX)                                               \
   (RTL_FLAG_CHECK1("REG_POINTER", (RTX), REG)->frame_related)
 
+/* 1 if RTX is a mem that holds a pointer value.  */
+#define MEM_POINTER(RTX)                                               \
+  (RTL_FLAG_CHECK1("MEM_POINTER", (RTX), MEM)->frame_related)
+
 /* 1 if the given register REG corresponds to a hard register.  */
 #define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))
 
@@ -1251,7 +1255,7 @@ do {                                                                      \
 /* 1 if RTX is a mem that refers to a scalar.  If zero, RTX may or may
    not refer to a scalar.  */
 #define MEM_SCALAR_P(RTX)                                              \
-  (RTL_FLAG_CHECK1("MEM_SCALAR_P", (RTX), MEM)->frame_related)
+  (RTL_FLAG_CHECK1("MEM_SCALAR_P", (RTX), MEM)->integrated)
 
 /* 1 if RTX is a mem that cannot trap.  */
 #define MEM_NOTRAP_P(RTX) \