calls.c (store_one_arg): Mark any slots used for the argument as in-use immediately after we're done...

* calls.c (store_one_arg): Mark any slots used for the argument
        as in-use immediately after we're done saving any slots which
        will be overwritten by this argument.

From-SVN: r25256
This commit is contained in:
Jeffrey A Law 1999-02-16 20:42:28 +00:00 committed by Jeff Law
parent 6756293cc3
commit b564df0678
2 changed files with 14 additions and 7 deletions

View file

@ -1,3 +1,9 @@
Tue Feb 16 21:29:38 1999 Jeffrey A Law (law@cygnus.com)
* calls.c (store_one_arg): Mark any slots used for the argument
as in-use immediately after we're done saving any slots which
will be overwritten by this argument.
Tue Feb 16 21:02:07 1999 Anton Hartl <toni@devsoft.com>
* rs6000.md (call_value): Fix typo.

View file

@ -3558,6 +3558,14 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size,
}
}
}
/* Now that we have saved any slots that will be overwritten by this
store, mark all slots this store will use. We must do this before
we actually expand the argument since the expansion itself may
trigger library calls which might need to use the same stack slot. */
if (argblock && ! variable_size && arg->stack)
for (i = lower_bound; i < upper_bound; i++)
stack_usage_map[i] = 1;
#endif
/* If this isn't going to be placed on both the stack and in registers,
@ -3733,11 +3741,4 @@ store_one_arg (arg, argblock, may_be_alloca, variable_size,
preserve_temp_slots (NULL_RTX);
free_temp_slots ();
pop_temp_slots ();
#ifdef ACCUMULATE_OUTGOING_ARGS
/* Now mark the segment we just used. */
if (argblock && ! variable_size && arg->stack)
for (i = lower_bound; i < upper_bound; i++)
stack_usage_map[i] = 1;
#endif
}