Commit f8ad8d7c by Zdenek Dvorak Committed by Zdenek Dvorak

emit-rtl.c (set_mem_attributes_minus_bitpos): Set MEM_POINTER flag.

	* 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.

From-SVN: r79764
parent 687c3ea5
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> 2004-03-20 Roger Sayle <roger@eyesopen.com>
PR target/13889 PR target/13889
......
...@@ -1512,6 +1512,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp, ...@@ -1512,6 +1512,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
|= ((lang_hooks.honor_readonly |= ((lang_hooks.honor_readonly
&& (TYPE_READONLY (type) || TREE_READONLY (t))) && (TYPE_READONLY (type) || TREE_READONLY (t)))
|| (! TYPE_P (t) && TREE_CONSTANT (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 /* 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. */ that it is a scalar if the type is not an aggregate. */
......
...@@ -770,6 +770,10 @@ force_not_mem (rtx x) ...@@ -770,6 +770,10 @@ force_not_mem (rtx x)
return x; return x;
temp = gen_reg_rtx (GET_MODE (x)); temp = gen_reg_rtx (GET_MODE (x));
if (MEM_POINTER (x))
REG_POINTER (temp) = 1;
emit_move_insn (temp, x); emit_move_insn (temp, x);
return temp; return temp;
} }
......
...@@ -243,14 +243,14 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), ...@@ -243,14 +243,14 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
/* Nonzero if this rtx came from procedure integration. /* Nonzero if this rtx came from procedure integration.
1 in a REG or PARALLEL means this rtx refers to the return value 1 in a REG or PARALLEL means this rtx refers to the return value
of the current function. 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; unsigned integrated : 1;
/* 1 in an INSN or a SET if this rtx is related to the call frame, /* 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 either changing how we compute the frame address or saving and
restoring registers in the prologue and epilogue. restoring registers in the prologue and epilogue.
1 in a MEM if the MEM refers to a scalar, rather than a member of 1 in a REG or MEM if it is a pointer.
an aggregate.
1 in a REG if the register is a pointer.
1 in a SYMBOL_REF if it addresses something in the per-function 1 in a SYMBOL_REF if it addresses something in the per-function
constant string pool. */ constant string pool. */
unsigned frame_related : 1; unsigned frame_related : 1;
...@@ -1136,6 +1136,10 @@ enum label_kind ...@@ -1136,6 +1136,10 @@ enum label_kind
#define REG_POINTER(RTX) \ #define REG_POINTER(RTX) \
(RTL_FLAG_CHECK1("REG_POINTER", (RTX), REG)->frame_related) (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. */ /* 1 if the given register REG corresponds to a hard register. */
#define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG))) #define HARD_REGISTER_P(REG) (HARD_REGISTER_NUM_P (REGNO (REG)))
...@@ -1251,7 +1255,7 @@ do { \ ...@@ -1251,7 +1255,7 @@ do { \
/* 1 if RTX is a mem that refers to a scalar. If zero, RTX may or may /* 1 if RTX is a mem that refers to a scalar. If zero, RTX may or may
not refer to a scalar. */ not refer to a scalar. */
#define MEM_SCALAR_P(RTX) \ #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. */ /* 1 if RTX is a mem that cannot trap. */
#define MEM_NOTRAP_P(RTX) \ #define MEM_NOTRAP_P(RTX) \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment