summaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-07-28 13:09:22 +0000
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>1995-07-28 13:09:22 +0000
commite8a637a3a20f1807c24f39d9e9d28f88c87626cc (patch)
treea5be8f8855c5a404c95ef5e128b1bc199daf2cb3 /gcc/function.c
parent6578de3e19f67b490e1041b5bfec5629cd6f5ff0 (diff)
downloadgcc-e8a637a3a20f1807c24f39d9e9d28f88c87626cc.tar.gz
(assign_stack_temp): When split a slot, set base_offset and full_size in the
newly created slot. (combine_temp_slots): Update full_size when slots are combined. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10185 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 00790b26806..acf46ceb767 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -847,6 +847,8 @@ assign_stack_temp (mode, size, keep)
p = (struct temp_slot *) oballoc (sizeof (struct temp_slot));
p->in_use = p->addr_taken = 0;
p->size = best_p->size - rounded_size;
+ p->base_offset = best_p->base_offset + rounded_size;
+ p->full_size = best_p->full_size - rounded_size;
p->slot = gen_rtx (MEM, BLKmode,
plus_constant (XEXP (best_p->slot, 0),
rounded_size));
@@ -942,12 +944,14 @@ combine_temp_slots ()
{
/* Q comes after P; combine Q into P. */
p->size += q->size;
+ p->full_size += q->full_size;
delete_q = 1;
}
else if (q->base_offset + q->full_size == p->base_offset)
{
/* P comes after Q; combine P into Q. */
q->size += p->size;
+ q->full_size += p->full_size;
delete_p = 1;
break;
}