loop.c (load_mems): Don't change the interface of called functions.

* loop.c (load_mems): Don't change the interface of called functions.

	* calls.c (expand_call): Take current_function_pretend_args_size
	into account when setting argblock for sibcalls.

From-SVN: r52745
This commit is contained in:
J"orn Rennecke 2002-04-24 23:52:16 +00:00 committed by Joern Rennecke
parent 0df9cfc799
commit fcae219ac4
3 changed files with 30 additions and 4 deletions

View File

@ -1,3 +1,10 @@
Wed Apr 24 23:45:37 2002 J"orn Rennecke <joern.rennecke@superh.com>
* loop.c (load_mems): Don't change the interface of called functions.
* calls.c (expand_call): Take current_function_pretend_args_size
into account when setting argblock for sibcalls.
2002-04-24 Matt Hiller <hiller@redhat.com> 2002-04-24 Matt Hiller <hiller@redhat.com>
* cpplex.c: Remove conditional #undef of MULTIBYTE_CHARS. * cpplex.c: Remove conditional #undef of MULTIBYTE_CHARS.

View File

@ -2709,6 +2709,12 @@ expand_call (exp, target, ignore)
if (pass == 0) if (pass == 0)
{ {
argblock = virtual_incoming_args_rtx; argblock = virtual_incoming_args_rtx;
argblock
#ifdef STACK_GROWS_DOWNWARD
= plus_constant (argblock, current_function_pretend_args_size);
#else
= plus_constant (argblock, -current_function_pretend_args_size);
#endif
stored_args_map = sbitmap_alloc (args_size.constant); stored_args_map = sbitmap_alloc (args_size.constant);
sbitmap_zero (stored_args_map); sbitmap_zero (stored_args_map);
} }

View File

@ -9784,6 +9784,17 @@ load_mems (loop)
&& rtx_equal_p (SET_DEST (set), mem)) && rtx_equal_p (SET_DEST (set), mem))
SET_REGNO_REG_SET (&store_copies, REGNO (SET_SRC (set))); SET_REGNO_REG_SET (&store_copies, REGNO (SET_SRC (set)));
/* If this is a call which uses / clobbers this memory
location, we must not change the interface here. */
if (GET_CODE (p) == CALL_INSN
&& reg_mentioned_p (loop_info->mems[i].mem,
CALL_INSN_FUNCTION_USAGE (p)))
{
cancel_changes (0);
loop_info->mems[i].optimize = 0;
break;
}
else
/* Replace the memory reference with the shadow register. */ /* Replace the memory reference with the shadow register. */
replace_loop_mems (p, loop_info->mems[i].mem, replace_loop_mems (p, loop_info->mems[i].mem,
loop_info->mems[i].reg); loop_info->mems[i].reg);
@ -9794,7 +9805,9 @@ load_mems (loop)
maybe_never = 1; maybe_never = 1;
} }
if (! apply_change_group ()) if (! loop_info->mems[i].optimize)
; /* We found we couldn't do the replacement, so do nothing. */
else if (! apply_change_group ())
/* We couldn't replace all occurrences of the MEM. */ /* We couldn't replace all occurrences of the MEM. */
loop_info->mems[i].optimize = 0; loop_info->mems[i].optimize = 0;
else else