http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49519
--- Comment #8 from Yukhin Kirill <kirill.yukhin at intel dot com> 2011-06-30
15:26:36 UTC ---
If someone really need a quick fix, it may be done like this:
gcc/expor.s:
static bool
mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
{
HOST_WIDE_INT i;
if (addr == crtl->args.internal_arg_pointer)
i = 0;
else if (GET_CODE (addr) == PLUS
&& XEXP (addr, 0) == crtl->args.internal_arg_pointer
&& CONST_INT_P (XEXP (addr, 1)))
i = INTVAL (XEXP (addr, 1));
/* Return true for arg pointer based indexed addressing. */
else if (GET_CODE (addr) == PLUS
&& (XEXP (addr, 0) == crtl->args.internal_arg_pointer
|| XEXP (addr, 1) == crtl->args.internal_arg_pointer))
else if (GET_CODE(addr) == REG) <-----------
return true;
else
return false;
But we possibly will be to conservative doing so