diff options
author | Jan Hubicka <jh@suse.cz> | 2000-02-28 12:55:43 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2000-02-28 11:55:43 +0000 |
commit | 4e217aed3db141e5ad2195bd93d9459125202dbc (patch) | |
tree | ea6dbb8319ab6543e1633fcc2f65ec0b8ab63e0a /gcc | |
parent | 035a6890e978b3ba9e23b8c202c2dbf997f2b673 (diff) | |
download | gcc-4e217aed3db141e5ad2195bd93d9459125202dbc.zip gcc-4e217aed3db141e5ad2195bd93d9459125202dbc.tar.gz gcc-4e217aed3db141e5ad2195bd93d9459125202dbc.tar.bz2 |
calls.c (expand_call): Attempt to combine stack adjustments with pending stack adjustments.
Thu Feb 24 17:17:29 MET 2000 Jan Hubicka <jh@suse.cz>
* calls.c (expand_call): Attempt to combine stack adjustments with
pending stack adjustments.
From-SVN: r32230
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/calls.c | 18 |
2 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c064d94..9d36cce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Feb 28 12:53:57 MET 2000 Jan Hubicka <jh@suse.cz> + + * calls.c (expand_call): Attempt to combine stack adjustments with + pending stack adjustments. + Mon Feb 28 11:34:43 2000 J"orn Rennecke <amylaar@cygnus.co.uk> * loop.c (reg_in_basic_block_p): Don't abort when falling through diff --git a/gcc/calls.c b/gcc/calls.c index 07f4c48..dfa52e0 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -2276,8 +2276,22 @@ expand_call (exp, target, ignore) #ifdef PREFERRED_STACK_BOUNDARY /* If we push args individually in reverse order, perform stack alignment before the first push (the last arg). */ - if (argblock == 0) - anti_adjust_stack (GEN_INT (args_size.constant - unadjusted_args_size)); + if (args_size.constant != unadjusted_args_size) + { + /* When the stack adjustment is pending, + we get better code by combining the adjustments. */ + if (pending_stack_adjust && !is_const) + { + args_size.constant = (unadjusted_args_size + + ((pending_stack_adjust + args_size.constant + - unadjusted_args_size) + % (preferred_stack_boundary / BITS_PER_UNIT))); + pending_stack_adjust -= args_size.constant - unadjusted_args_size; + do_pending_stack_adjust (); + } + else if (argblock == 0) + anti_adjust_stack (GEN_INT (args_size.constant - unadjusted_args_size)); + } #endif #endif |