emit-rtl.c (set_mem_attributes_minus_bitpos): Check TREE_THIS_NOTRAP when setting MEM_NOTRAP_P.
2004-06-26 Andrew Haley <aph@redhat.com> * emit-rtl.c (set_mem_attributes_minus_bitpos): Check TREE_THIS_NOTRAP when setting MEM_NOTRAP_P. * tree-eh.c (tree_could_trap_p): Check TREE_THIS_NOTRAP. * tree.h (TREE_THIS_NOTRAP): New. From-SVN: r83706
This commit is contained in:
parent
1ab3a0ade6
commit
5cb2183e8b
4 changed files with 20 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2004-06-26 Andrew Haley <aph@redhat.com>
|
||||
|
||||
* emit-rtl.c (set_mem_attributes_minus_bitpos): Check
|
||||
TREE_THIS_NOTRAP when setting MEM_NOTRAP_P.
|
||||
* tree-eh.c (tree_could_trap_p): Check TREE_THIS_NOTRAP.
|
||||
* tree.h (TREE_THIS_NOTRAP): New.
|
||||
|
||||
2004-06-26 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
* genattrtab.c (write_test_expr): Put a unsigned cast before
|
||||
|
|
|
@ -1543,6 +1543,7 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
|
|||
&& (TYPE_READONLY (type) || (t != type && TREE_READONLY (t))))
|
||||
|| (! TYPE_P (t) && TREE_CONSTANT (t)));
|
||||
MEM_POINTER (ref) = POINTER_TYPE_P (type);
|
||||
MEM_NOTRAP_P (ref) = TREE_THIS_NOTRAP (t);
|
||||
|
||||
/* 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. */
|
||||
|
|
|
@ -1688,9 +1688,11 @@ tree_could_trap_p (tree expr)
|
|||
case IMAGPART_EXPR:
|
||||
case BIT_FIELD_REF:
|
||||
t = get_base_address (expr);
|
||||
return !t || TREE_CODE (t) == INDIRECT_REF;
|
||||
return !t || tree_could_trap_p (t);
|
||||
|
||||
case INDIRECT_REF:
|
||||
return (TREE_THIS_NOTRAP (expr) == false);
|
||||
|
||||
case TRUNC_DIV_EXPR:
|
||||
case CEIL_DIV_EXPR:
|
||||
case FLOOR_DIV_EXPR:
|
||||
|
|
|
@ -304,6 +304,9 @@ struct tree_common GTY(())
|
|||
TYPE_ALIGN_OK in
|
||||
..._TYPE
|
||||
|
||||
TREE_THIS_NOTRAP in
|
||||
INDIRECT_REF
|
||||
|
||||
deprecated_flag:
|
||||
|
||||
TREE_DEPRECATED in
|
||||
|
@ -760,6 +763,12 @@ extern void tree_operand_check_failed (int, enum tree_code,
|
|||
If this bit is set in an expression, so is TREE_SIDE_EFFECTS. */
|
||||
#define TREE_THIS_VOLATILE(NODE) ((NODE)->common.volatile_flag)
|
||||
|
||||
/* Nonzero means this node will not trap. In an INDIRECT_REF, means
|
||||
accessing the memory pointed to won't generate a trap. However,
|
||||
this only applies to an object when used appropriately: it doesn't
|
||||
mean that writing a READONLY mem won't trap. */
|
||||
#define TREE_THIS_NOTRAP(NODE) ((NODE)->common.nothrow_flag)
|
||||
|
||||
/* In a VAR_DECL, PARM_DECL or FIELD_DECL, or any kind of ..._REF node,
|
||||
nonzero means it may not be the lhs of an assignment. */
|
||||
#define TREE_READONLY(NODE) (NON_TYPE_CHECK (NODE)->common.readonly_flag)
|
||||
|
|
Loading…
Add table
Reference in a new issue