[PATCH] [i386] Recompute the frame layout less often

Daniel Santos daniel.santos@pobox.com
Tue May 16 05:42:00 GMT 2017


Ian, would you mind looking at this please?  A combination of my 
-mcall-ms2sysv-xlogues patch with Bernd's patch is causing problems when 
ix86_expand_split_stack_prologue() calls ix86_expand_call().

On 05/15/2017 06:46 PM, Daniel Santos wrote:
> Rather or not m->call_ms2sysv is set determines which stack layout is 
> used when ix86_compute_frame_layout() runs. But if we can run 
> expand_call after the final time ix86_compute_frame_layout() then we 
> have a problem.  It looks like ix86_expand_split_stack_prologue is the 
> only function that manually calls ix86_expand_call, but maybe it would 
> be better to modify the test to something like this:
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index a78819d6b3f..c36383f6962 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -29325,7 +29325,7 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx 
> callarg1,
>         }
>
>        /* Set here, but it may get cleared later.  */
> -      if (TARGET_CALL_MS2SYSV_XLOGUES)
> +      if (TARGET_CALL_MS2SYSV_XLOGUES && !reload_completed)
>         cfun->machine->call_ms2sysv = true;
>      }
>
>

Actually, I think this is wrong.  I happened to recall looking at the 
morestack code last year and remembered that it was all assembly.  I 
looked at it again and I don't see that it calls anything outside of 
it's implementation file (libgcc/config/i386/morestack.S) except for 
_Unwind_Resume and the calling function its self (I think it calls its 
caller).  It saves and restores rsi and rdi and doesn't use any sse 
registers, so it doesn't need to clobber all of the regs in the 
x86_64_ms_sysv_extra_clobbered_registers array.  I'm guessing that this 
should have it's own pattern instead of calling ix86_expand_call in the 
first place.

Of course, I'm the new guy here, so please enlighten me if I'm wrong.

Thanks,
Daniel



More information about the Gcc-patches mailing list