tree.h (TREE_THIS_NOTRAP): Use TREE_CHECK5.
* tree.h (TREE_THIS_NOTRAP): Use TREE_CHECK5. * emit-rtl.c (set_mem_attributes_minus_bitpos): Only check TREE_THIS_NOTRAP when appropriate. (get_spill_slot_decl): Don't set TREE_THIS_NOTRAP on the new VAR_DECL. * gimplify.c (gimplify_expr): Copy NOTRAP from INDIRECT_REF to newly created MEM_REF. From-SVN: r165313
This commit is contained in:
parent
c159751bf5
commit
3748f5c9d3
|
@ -1,3 +1,13 @@
|
|||
2010-10-11 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* tree.h (TREE_THIS_NOTRAP): Use TREE_CHECK5.
|
||||
* emit-rtl.c (set_mem_attributes_minus_bitpos): Only check
|
||||
TREE_THIS_NOTRAP when appropriate.
|
||||
(get_spill_slot_decl): Don't set TREE_THIS_NOTRAP on the new
|
||||
VAR_DECL.
|
||||
* gimplify.c (gimplify_expr): Copy NOTRAP from INDIRECT_REF to
|
||||
newly created MEM_REF.
|
||||
|
||||
2010-10-11 Hariharan Sandanagobalane <hariharan@picochip.com>
|
||||
|
||||
Nathan Froyds patch to hooks FUNCTION_ARG etc.
|
||||
|
|
|
@ -1660,7 +1660,11 @@ set_mem_attributes_minus_bitpos (rtx ref, tree t, int objectp,
|
|||
else
|
||||
MEM_NOTRAP_P (ref) = 1;
|
||||
}
|
||||
else
|
||||
else if (TREE_CODE (base) == INDIRECT_REF
|
||||
|| TREE_CODE (base) == MEM_REF
|
||||
|| TREE_CODE (base) == TARGET_MEM_REF
|
||||
|| TREE_CODE (base) == ARRAY_REF
|
||||
|| TREE_CODE (base) == ARRAY_RANGE_REF)
|
||||
MEM_NOTRAP_P (ref) = TREE_THIS_NOTRAP (base);
|
||||
|
||||
base = get_base_address (base);
|
||||
|
@ -2236,7 +2240,6 @@ get_spill_slot_decl (bool force_build_p)
|
|||
DECL_ARTIFICIAL (d) = 1;
|
||||
DECL_IGNORED_P (d) = 1;
|
||||
TREE_USED (d) = 1;
|
||||
TREE_THIS_NOTRAP (d) = 1;
|
||||
spill_slot_decl = d;
|
||||
|
||||
rd = gen_rtx_MEM (BLKmode, frame_pointer_rtx);
|
||||
|
|
|
@ -6798,6 +6798,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
|||
case INDIRECT_REF:
|
||||
{
|
||||
bool volatilep = TREE_THIS_VOLATILE (*expr_p);
|
||||
bool notrap = TREE_THIS_NOTRAP (*expr_p);
|
||||
tree saved_ptr_type = TREE_TYPE (TREE_OPERAND (*expr_p, 0));
|
||||
|
||||
*expr_p = fold_indirect_ref_loc (input_location, *expr_p);
|
||||
|
@ -6818,6 +6819,7 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
|
|||
TREE_OPERAND (*expr_p, 0),
|
||||
build_int_cst (saved_ptr_type, 0));
|
||||
TREE_THIS_VOLATILE (*expr_p) = volatilep;
|
||||
TREE_THIS_NOTRAP (*expr_p) = notrap;
|
||||
ret = GS_OK;
|
||||
break;
|
||||
}
|
||||
|
|
12
gcc/tree.h
12
gcc/tree.h
|
@ -601,7 +601,7 @@ struct GTY(()) tree_common {
|
|||
all types
|
||||
|
||||
TREE_THIS_NOTRAP in
|
||||
INDIRECT_REF, ARRAY_REF, ARRAY_RANGE_REF
|
||||
INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, ARRAY_RANGE_REF
|
||||
|
||||
deprecated_flag:
|
||||
|
||||
|
@ -1255,7 +1255,9 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
|
|||
(or slice of the array) always belongs to the range of the array.
|
||||
I.e. that the access will not trap, provided that the access to
|
||||
the base to the array will not trap. */
|
||||
#define TREE_THIS_NOTRAP(NODE) ((NODE)->base.nothrow_flag)
|
||||
#define TREE_THIS_NOTRAP(NODE) \
|
||||
(TREE_CHECK5 (NODE, INDIRECT_REF, MEM_REF, TARGET_MEM_REF, ARRAY_REF, \
|
||||
ARRAY_RANGE_REF)->base.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.
|
||||
|
@ -1296,8 +1298,10 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int,
|
|||
In a BLOCK, this means that the block contains variables that are used. */
|
||||
#define TREE_USED(NODE) ((NODE)->base.used_flag)
|
||||
|
||||
/* In a FUNCTION_DECL, nonzero means a call to the function cannot throw
|
||||
an exception. In a CALL_EXPR, nonzero means the call cannot throw. */
|
||||
/* In a FUNCTION_DECL, nonzero means a call to the function cannot
|
||||
throw an exception. In a CALL_EXPR, nonzero means the call cannot
|
||||
throw. We can't easily check the node type here as the C++
|
||||
frontend also uses this flag (for AGGR_INIT_EXPR). */
|
||||
#define TREE_NOTHROW(NODE) ((NODE)->base.nothrow_flag)
|
||||
|
||||
/* In a CALL_EXPR, means that it's safe to use the target of the call
|
||||
|
|
Loading…
Reference in New Issue