summaryrefslogtreecommitdiff
path: root/gcc/calls.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2008-12-17 12:03:04 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2008-12-17 12:03:04 +0000
commit91ebded8a38290059ebac02b2c4ffce08d4dc64b (patch)
tree49f6bddf80954a1c4e78d3fb239c6a52162fa590 /gcc/calls.c
parentf24d382c97a8ef347ac6de422176d8940576f332 (diff)
downloadgcc-91ebded8a38290059ebac02b2c4ffce08d4dc64b.tar.gz
* calls.c (expand_call): Do not sibcall if
outgoing_reg_parm_stack_space does not match. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@142792 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/calls.c')
-rw-r--r--gcc/calls.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c
index 03994d4ecf5..b94d29800a8 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2298,6 +2298,10 @@ expand_call (tree exp, rtx target, int ignore)
It does not seem worth the effort since few optimizable
sibling calls will return a structure. */
|| structure_value_addr != NULL_RTX
+ /* If outgoing reg parm stack space changes, we can not do sibcall. */
+ || (OUTGOING_REG_PARM_STACK_SPACE (funtype)
+ != OUTGOING_REG_PARM_STACK_SPACE (TREE_TYPE (current_function_decl)))
+ || (reg_parm_stack_space != REG_PARM_STACK_SPACE (fndecl))
/* Check whether the target is able to optimize the call
into a sibcall. */
|| !targetm.function_ok_for_sibcall (fndecl, exp)