aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@codesourcery.com>2014-11-05 12:14:36 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2014-11-05 12:14:36 +0000
commite0d14c396aaa626e054284cf96a250c7aaf907e4 (patch)
tree6ae355ca6def23b0f0cf6593b092c139fcd2f95a /gcc/function.c
parenta50fa76a9d8e3690ea563ff75d8d9cebb07208f7 (diff)
downloadgcc-e0d14c396aaa626e054284cf96a250c7aaf907e4.zip
gcc-e0d14c396aaa626e054284cf96a250c7aaf907e4.tar.gz
gcc-e0d14c396aaa626e054284cf96a250c7aaf907e4.tar.bz2
Allow a target to skip an unnecssary register return value for a struct return.
* target.def (omit_struct_return_reg): New data hook. * doc/tm.texi.in: Add @hook TARGET_OMIT_STRUCT_RETURN_REG. * doc/tm.texi: Regenerate. * function.c (expand_function_end): Use it. From-SVN: r217123
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 6d09982..91e3b2c 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5177,8 +5177,8 @@ expand_function_end (void)
If returning a structure PCC style,
the caller also depends on this value.
And cfun->returns_pcc_struct is not necessarily set. */
- if (cfun->returns_struct
- || cfun->returns_pcc_struct)
+ if ((cfun->returns_struct || cfun->returns_pcc_struct)
+ && !targetm.calls.omit_struct_return_reg)
{
rtx value_address = DECL_RTL (DECL_RESULT (current_function_decl));
tree type = TREE_TYPE (DECL_RESULT (current_function_decl));