summaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-28 20:27:45 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2002-05-28 20:27:45 +0000
commitb002d972387bc8ddb706c1d69a21ab66b7ab2213 (patch)
tree9ee0a47e45ceb034f0cc3cfa471a997423d3eae0 /gcc/config
parent773e91a0f425f896d949d17962d8f5d13f1b785d (diff)
downloadgcc-b002d972387bc8ddb706c1d69a21ab66b7ab2213.tar.gz
* config/i386/i386.c (ix86_compute_frame_layout): Do not add
bottom alignment for leaf functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53965 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index cf2def2393b..39831af4745 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4138,8 +4138,9 @@ ix86_compute_frame_layout (frame)
offset += size;
- /* Add outgoing arguments area. */
- if (ACCUMULATE_OUTGOING_ARGS)
+ /* Add outgoing arguments area. Can be skipped if we eliminated
+ all the function calls as dead code. */
+ if (ACCUMULATE_OUTGOING_ARGS && !current_function_is_leaf)
{
offset += current_function_outgoing_args_size;
frame->outgoing_arguments_size = current_function_outgoing_args_size;
@@ -4147,9 +4148,12 @@ ix86_compute_frame_layout (frame)
else
frame->outgoing_arguments_size = 0;
- /* Align stack boundary. */
- frame->padding2 = ((offset + preferred_alignment - 1)
- & -preferred_alignment) - offset;
+ /* Align stack boundary. Only needed if we're calling another function. */
+ if (!current_function_is_leaf)
+ frame->padding2 = ((offset + preferred_alignment - 1)
+ & -preferred_alignment) - offset;
+ else
+ frame->padding2 = 0;
offset += frame->padding2;