diff options
author | Richard Guenther <rguenther@suse.de> | 2011-04-21 11:31:52 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-04-21 11:31:52 +0000 |
commit | 53f94a5c18aa035ceb4f9ada2afb9ec8aa07ce57 (patch) | |
tree | 16beee1774ba2326722157c467df642024eced08 /gcc/tree-ssa-alias.c | |
parent | f0dca5baf206a94c93c9aef85eb32d2734bf2878 (diff) | |
download | gcc-53f94a5c18aa035ceb4f9ada2afb9ec8aa07ce57.zip gcc-53f94a5c18aa035ceb4f9ada2afb9ec8aa07ce57.tar.gz gcc-53f94a5c18aa035ceb4f9ada2afb9ec8aa07ce57.tar.bz2 |
tree-ssa-alias.c (ref_maybe_used_by_stmt_p): Handle return statements.
2011-04-21 Richard Guenther <rguenther@suse.de>
* tree-ssa-alias.c (ref_maybe_used_by_stmt_p): Handle
return statements.
From-SVN: r172820
Diffstat (limited to 'gcc/tree-ssa-alias.c')
-rw-r--r-- | gcc/tree-ssa-alias.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c index a77c803..673073e 100644 --- a/gcc/tree-ssa-alias.c +++ b/gcc/tree-ssa-alias.c @@ -1364,6 +1364,26 @@ ref_maybe_used_by_stmt_p (gimple stmt, tree ref) } else if (is_gimple_call (stmt)) return ref_maybe_used_by_call_p (stmt, ref); + else if (gimple_code (stmt) == GIMPLE_RETURN) + { + tree retval = gimple_return_retval (stmt); + tree base; + if (retval + && TREE_CODE (retval) != SSA_NAME + && !is_gimple_min_invariant (retval) + && refs_may_alias_p (retval, ref)) + return true; + /* If ref escapes the function then the return acts as a use. */ + base = get_base_address (ref); + if (!base) + ; + else if (DECL_P (base)) + return is_global_var (base); + else if (TREE_CODE (base) == MEM_REF + || TREE_CODE (base) == TARGET_MEM_REF) + return ptr_deref_may_alias_global_p (TREE_OPERAND (base, 0)); + return false; + } return true; } |