OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* doc/tm.texi.in (Cond. Exec. Macros): Rename node from this ...
[pf3gnuchains/gcc-fork.git]
/
gcc
/
tree-nrv.c
diff --git
a/gcc/tree-nrv.c
b/gcc/tree-nrv.c
index
31de9ba
..
8ee3b8b
100644
(file)
--- a/
gcc/tree-nrv.c
+++ b/
gcc/tree-nrv.c
@@
-259,6
+259,9
@@
tree_nrv (void)
}
}
}
}
+ SET_DECL_VALUE_EXPR (found, result);
+ DECL_HAS_VALUE_EXPR_P (found) = 1;
+
/* FOUND is no longer used. Ensure it gets removed. */
var_ann (found)->used = 0;
return 0;
/* FOUND is no longer used. Ensure it gets removed. */
var_ann (found)->used = 0;
return 0;
@@
-293,7
+296,7
@@
struct gimple_opt_pass pass_nrv =
optimization, where DEST is expected to be the LHS of a modify
expression where the RHS is a function returning an aggregate.
optimization, where DEST is expected to be the LHS of a modify
expression where the RHS is a function returning an aggregate.
- DEST is available if it is not clobbered by the call. */
+ DEST is available if it is not clobbered
or used
by the call. */
static bool
dest_safe_for_nrv_p (gimple call)
static bool
dest_safe_for_nrv_p (gimple call)
@@
-307,7
+310,8
@@
dest_safe_for_nrv_p (gimple call)
if (TREE_CODE (dest) == SSA_NAME)
return true;
if (TREE_CODE (dest) == SSA_NAME)
return true;
- if (call_may_clobber_ref_p (call, dest))
+ if (call_may_clobber_ref_p (call, dest)
+ || ref_maybe_used_by_stmt_p (call, dest))
return false;
return true;
return false;
return true;
@@
-342,8
+346,7
@@
execute_return_slot_opt (void)
&& gimple_call_lhs (stmt)
&& !gimple_call_return_slot_opt_p (stmt)
&& aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)),
&& gimple_call_lhs (stmt)
&& !gimple_call_return_slot_opt_p (stmt)
&& aggregate_value_p (TREE_TYPE (gimple_call_lhs (stmt)),
- gimple_call_fndecl (stmt))
- )
+ gimple_call_fndecl (stmt)))
{
/* Check if the location being assigned to is
clobbered by the call. */
{
/* Check if the location being assigned to is
clobbered by the call. */