calls.c (expand_call): Do not sibcall if outgoing_reg_parm_stack_space does not match.
authorJan Hubicka <jh@suse.cz>
Wed, 17 Dec 2008 12:03:04 +0000 (13:03 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 17 Dec 2008 12:03:04 +0000 (12:03 +0000)
* calls.c (expand_call): Do not sibcall if
outgoing_reg_parm_stack_space does not match.

Co-Authored-By: Kai Tietz <kai.tietz@onevision.com>
From-SVN: r142792

gcc/ChangeLog
gcc/calls.c

index 27fd45a..3b263c7 100644 (file)
@@ -1,3 +1,9 @@
+2008-12-12  Jan Hubicka  <jh@suse.cz>
+           Kai Tietz <kai.tietz@onevision.com>
+
+       * calls.c (expand_call): Do not sibcall if
+       outgoing_reg_parm_stack_space does not match.
+
 2008-12-12  Anatoly Sokolov  <aesok@post.ru>
 
        * config/avr/avr.c (avr_mcu_t): Add attiny87, attiny327, at90pwm81,
index 03994d4..b94d298 100644 (file)
@@ -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)