mirror of git://gcc.gnu.org/git/gcc.git
gimple.c (is_gimple_non_addressable): Remove.
* gimple.c (is_gimple_non_addressable): Remove.
* gimple.h: Remove is_gimple_non_addressable.
* gimplify.c (gimplify_modify_expr_rhs): Use is_gimple_reg instead of
is_gimple_non_addressable.
* trans-mem.c (expand_assign_tm): Same.
From-SVN: r183015
This commit is contained in:
parent
2c5cbc315f
commit
345ae17774
|
|
@ -1,3 +1,11 @@
|
||||||
|
2012-01-09 Aldy Hernandez <aldyh@redhat.com>
|
||||||
|
|
||||||
|
* gimple.c (is_gimple_non_addressable): Remove.
|
||||||
|
* gimple.h: Remove is_gimple_non_addressable.
|
||||||
|
* gimplify.c (gimplify_modify_expr_rhs): Use is_gimple_reg instead of
|
||||||
|
is_gimple_non_addressable.
|
||||||
|
* trans-mem.c (expand_assign_tm): Same.
|
||||||
|
|
||||||
2012-01-09 Richard Guenther <rguenther@suse.de>
|
2012-01-09 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/51775
|
PR tree-optimization/51775
|
||||||
|
|
|
||||||
11
gcc/gimple.c
11
gcc/gimple.c
|
|
@ -2963,17 +2963,6 @@ is_gimple_reg (tree t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Return true if T is a GIMPLE variable whose address is not needed. */
|
|
||||||
|
|
||||||
bool
|
|
||||||
is_gimple_non_addressable (tree t)
|
|
||||||
{
|
|
||||||
if (TREE_CODE (t) == SSA_NAME)
|
|
||||||
t = SSA_NAME_VAR (t);
|
|
||||||
|
|
||||||
return (is_gimple_variable (t) && ! needs_to_live_in_memory (t));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true if T is a GIMPLE rvalue, i.e. an identifier or a constant. */
|
/* Return true if T is a GIMPLE rvalue, i.e. an identifier or a constant. */
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -1006,9 +1006,6 @@ extern bool is_gimple_mem_rhs (tree);
|
||||||
/* Returns true iff T is a valid if-statement condition. */
|
/* Returns true iff T is a valid if-statement condition. */
|
||||||
extern bool is_gimple_condexpr (tree);
|
extern bool is_gimple_condexpr (tree);
|
||||||
|
|
||||||
/* Returns true iff T is a variable that does not need to live in memory. */
|
|
||||||
extern bool is_gimple_non_addressable (tree t);
|
|
||||||
|
|
||||||
/* Returns true iff T is a valid call address expression. */
|
/* Returns true iff T is a valid call address expression. */
|
||||||
extern bool is_gimple_call_addr (tree);
|
extern bool is_gimple_call_addr (tree);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4411,7 +4411,9 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p,
|
||||||
/* It's OK to use the target directly if it's being
|
/* It's OK to use the target directly if it's being
|
||||||
initialized. */
|
initialized. */
|
||||||
use_target = true;
|
use_target = true;
|
||||||
else if (!is_gimple_non_addressable (*to_p))
|
else if (TREE_CODE (*to_p) != SSA_NAME
|
||||||
|
&& (!is_gimple_variable (*to_p)
|
||||||
|
|| needs_to_live_in_memory (*to_p)))
|
||||||
/* Don't use the original target if it's already addressable;
|
/* Don't use the original target if it's already addressable;
|
||||||
if its address escapes, and the called function uses the
|
if its address escapes, and the called function uses the
|
||||||
NRV optimization, a conforming program could see *to_p
|
NRV optimization, a conforming program could see *to_p
|
||||||
|
|
|
||||||
|
|
@ -2184,7 +2184,7 @@ expand_assign_tm (struct tm_region *region, gimple_stmt_iterator *gsi)
|
||||||
/* ??? Figure out if there's any possible overlap between the LHS
|
/* ??? Figure out if there's any possible overlap between the LHS
|
||||||
and the RHS and if not, use MEMCPY. */
|
and the RHS and if not, use MEMCPY. */
|
||||||
|
|
||||||
if (load_p && is_gimple_non_addressable (lhs))
|
if (load_p && is_gimple_reg (lhs))
|
||||||
{
|
{
|
||||||
tmp = create_tmp_var (TREE_TYPE (lhs), NULL);
|
tmp = create_tmp_var (TREE_TYPE (lhs), NULL);
|
||||||
lhs_addr = build_fold_addr_expr (tmp);
|
lhs_addr = build_fold_addr_expr (tmp);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue