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