public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues.
       [not found] ` <20170611171246.18689-1-daniel.santos@pobox.com>
@ 2017-06-11 20:30   ` Daniel Santos
  2017-06-13  3:42     ` Sandra Loosemore
  2017-06-13 11:31     ` Bernd Edlinger
  0 siblings, 2 replies; 3+ messages in thread
From: Daniel Santos @ 2017-06-11 20:30 UTC (permalink / raw)
  To: Bernd Edlinger, gcc-patches
  Cc: Uros Bizjak, Jan Hubicka, Gerald Pfeifer, Joseph Myers, Sandra Loosemore

I appear to have forgotten to cc gcc-patches, sorry about that.

There are currently three cases where we issue a warning when disabling
-mcall-ms2sysv-xlogues for a function, but I never added a proper
warning, so there's no mechanism for disabling it.  This is something
that I meant to address sooner.  I'm thinking that it's better to just
remove the warning entirely and document these cases, rather than adding
a new warning.  Any thoughts?

These are the conditions:

* the use of -fsplit-stack,
* the use of static call chains (not sure if we can ever have that), and
* if the function calls __buildin_eh_return.

Some of these cases can likely be supported, but they are just on the
"not yet tested" list.

2017-06-11  Daniel Santos  <daniel.santos@pobox.com

	* config/i386/i386.c (warn_once_call_ms2sysv_xlogues): Remove.
	(ix86_compute_frame_layout): Don't call warn_once_call_ms2sysv_xlogues.
	(ix86_expand_call): Likewise.

Thanks,
Daniel

Signed-off-by: Daniel Santos <daniel.santos@pobox.com>
---
 gcc/config/i386/i386.c | 26 +++-----------------------
 gcc/doc/invoke.texi    | 25 ++++++++++++++++++++-----
 2 files changed, 23 insertions(+), 28 deletions(-)

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index d5c2d46bf5e..2dc6e53c765 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12772,18 +12772,6 @@ ix86_builtin_setjmp_frame_value (void)
   return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx;
 }
 
-/* Emits a warning for unsupported msabi to sysv pro/epilogues.  */
-static void warn_once_call_ms2sysv_xlogues (const char *feature)
-{
-  static bool warned_once = false;
-  if (!warned_once)
-    {
-      warning (0, "-mcall-ms2sysv-xlogues is not compatible with %s",
-	       feature);
-      warned_once = true;
-    }
-}
-
 /* When using -fsplit-stack, the allocation routines set a field in
    the TCB to the bottom of the stack plus this much space, measured
    in bytes.  */
@@ -12814,18 +12802,10 @@ ix86_compute_frame_layout (void)
       gcc_assert (TARGET_SSE);
       gcc_assert (!ix86_using_red_zone ());
 
-      if (crtl->calls_eh_return)
+      if (crtl->calls_eh_return || ix86_static_chain_on_stack)
 	{
 	  gcc_assert (!reload_completed);
 	  m->call_ms2sysv = false;
-	  warn_once_call_ms2sysv_xlogues ("__builtin_eh_return");
-	}
-
-      else if (ix86_static_chain_on_stack)
-	{
-	  gcc_assert (!reload_completed);
-	  m->call_ms2sysv = false;
-	  warn_once_call_ms2sysv_xlogues ("static call chains");
 	}
 
       /* Finally, compute which registers the stub will manage.  */
@@ -29290,9 +29270,9 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
 	  else if (ix86_function_ms_hook_prologue (current_function_decl))
 	    ;
 
-	  /* TODO: Cases not yet examined.  */
+	  /* TODO: Compatibility not yet examined.  */
 	  else if (flag_split_stack)
-	    warn_once_call_ms2sysv_xlogues ("-fsplit-stack");
+	    ;
 
 	  else
 	    {
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index c1168823af7..eec02b43a4f 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -25389,11 +25389,26 @@ using the function attributes @code{ms_abi} and @code{sysv_abi}.
 @opindex mno-call-ms2sysv-xlogues
 Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
 System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
-default, the code for saving and restoring these registers is emitted inline,
-resulting in fairly lengthy prologues and epilogues.  Using
-@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
-use stubs in the static portion of libgcc to perform these saves and restores,
-thus reducing function size at the cost of a few extra instructions.
+default, the instructions for saving and restoring these registers are emitted
+inline, resulting in fairly lengthy pro- and epilogues.  Using
+@option{-mcall-ms2sysv-xlogues} emits pro- and epilogues that use stubs in the
+static portion of libgcc to perform these saves and restores, thus reducing
+function size at the cost of executing a few extra instructions.  This cost is
+theoretically mitigated or eliminated by reduced instruction cache utilization,
+temporal locality of the stubs, and the stubs' use of MOV instructions over
+PUSH and POP.
+
+This option is not supported with SEH, so it is completely unavailable on
+Windows.  It is also silently disabled if a function:
+
+@enumerate
+@item is built with @option{-mno-sse2} or @option{-fsplit-stack},
+@item has @code{__attribute__ ((ms_hook_prologue))}, or
+@item either throws an exception or explicitly calls @code{__builtin_eh_return}.
+@end enumerate
+
+Support for @option{-fsplit-stack} and @code{__builtin_eh_return} may be
+added at some time in the future, but has not yet been tested.
 
 @item -mtls-dialect=@var{type}
 @opindex mtls-dialect
-- 
2.11.0

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues.
  2017-06-11 20:30   ` [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues Daniel Santos
@ 2017-06-13  3:42     ` Sandra Loosemore
  2017-06-13 11:31     ` Bernd Edlinger
  1 sibling, 0 replies; 3+ messages in thread
From: Sandra Loosemore @ 2017-06-13  3:42 UTC (permalink / raw)
  To: Daniel Santos, Bernd Edlinger, gcc-patches
  Cc: Uros Bizjak, Jan Hubicka, Gerald Pfeifer, Joseph Myers

On 06/11/2017 02:35 PM, Daniel Santos wrote:
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index c1168823af7..eec02b43a4f 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -25389,11 +25389,26 @@ using the function attributes @code{ms_abi} and @code{sysv_abi}.
>   @opindex mno-call-ms2sysv-xlogues
>   Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
>   System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
> -default, the code for saving and restoring these registers is emitted inline,
> -resulting in fairly lengthy prologues and epilogues.  Using
> -@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
> -use stubs in the static portion of libgcc to perform these saves and restores,
> -thus reducing function size at the cost of a few extra instructions.
> +default, the instructions for saving and restoring these registers are emitted
> +inline, resulting in fairly lengthy pro- and epilogues.  Using
> +@option{-mcall-ms2sysv-xlogues} emits pro- and epilogues that use stubs in the

Please restore the "prologues and epilogues" language that was there before.

> +static portion of libgcc to perform these saves and restores, thus reducing
> +function size at the cost of executing a few extra instructions.  This cost is
> +theoretically mitigated or eliminated by reduced instruction cache utilization,
> +temporal locality of the stubs, and the stubs' use of MOV instructions over
> +PUSH and POP.
> +
> +This option is not supported with SEH, so it is completely unavailable on
> +Windows.  It is also silently disabled if a function:
> +
> +@enumerate
> +@item is built with @option{-mno-sse2} or @option{-fsplit-stack},
> +@item has @code{__attribute__ ((ms_hook_prologue))}, or
> +@item either throws an exception or explicitly calls @code{__builtin_eh_return}.
> +@end enumerate
> +
> +Support for @option{-fsplit-stack} and @code{__builtin_eh_return} may be
> +added at some time in the future, but has not yet been tested.

It can't be tested if it's not there yet.  :-S

I'd prefer if you just added these things to the enumerated list of 
unsupported cases.  I know I've removed other "maybe we will implement 
this later" language from the GCC manual that had been there for 10 or 
20 years without anybody ever implementing those features.  Saying 
"maybe we will implement this later" is just extra words in the manual 
and not helpful to users.

-Sandra

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues.
  2017-06-11 20:30   ` [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues Daniel Santos
  2017-06-13  3:42     ` Sandra Loosemore
@ 2017-06-13 11:31     ` Bernd Edlinger
  1 sibling, 0 replies; 3+ messages in thread
From: Bernd Edlinger @ 2017-06-13 11:31 UTC (permalink / raw)
  To: Daniel Santos, gcc-patches
  Cc: Uros Bizjak, Jan Hubicka, Gerald Pfeifer, Joseph Myers, Sandra Loosemore



On 06/11/17 22:35, Daniel Santos wrote:
> I appear to have forgotten to cc gcc-patches, sorry about that.
> 
> There are currently three cases where we issue a warning when disabling
> -mcall-ms2sysv-xlogues for a function, but I never added a proper
> warning, so there's no mechanism for disabling it.  This is something
> that I meant to address sooner.  I'm thinking that it's better to just
> remove the warning entirely and document these cases, rather than adding
> a new warning.  Any thoughts?
> 
> These are the conditions:
> 
> * the use of -fsplit-stack,
> * the use of static call chains (not sure if we can ever have that), and
> * if the function calls __buildin_eh_return.
> 
> Some of these cases can likely be supported, but they are just on the
> "not yet tested" list.
> 
> 2017-06-11  Daniel Santos  <daniel.santos@pobox.com
> 
> 	* config/i386/i386.c (warn_once_call_ms2sysv_xlogues): Remove.
> 	(ix86_compute_frame_layout): Don't call warn_once_call_ms2sysv_xlogues.
> 	(ix86_expand_call): Likewise.
> 

Your change log should also mention the changed doc/invoke.texi


> Thanks,
> Daniel
> 
> Signed-off-by: Daniel Santos <daniel.santos@pobox.com>
> ---
>   gcc/config/i386/i386.c | 26 +++-----------------------
>   gcc/doc/invoke.texi    | 25 ++++++++++++++++++++-----
>   2 files changed, 23 insertions(+), 28 deletions(-)
> 
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index d5c2d46bf5e..2dc6e53c765 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -12772,18 +12772,6 @@ ix86_builtin_setjmp_frame_value (void)
>     return stack_realign_fp ? hard_frame_pointer_rtx : virtual_stack_vars_rtx;
>   }
>   
> -/* Emits a warning for unsupported msabi to sysv pro/epilogues.  */
> -static void warn_once_call_ms2sysv_xlogues (const char *feature)
> -{
> -  static bool warned_once = false;
> -  if (!warned_once)
> -    {
> -      warning (0, "-mcall-ms2sysv-xlogues is not compatible with %s",
> -	       feature);
> -      warned_once = true;
> -    }
> -}
> -
>   /* When using -fsplit-stack, the allocation routines set a field in
>      the TCB to the bottom of the stack plus this much space, measured
>      in bytes.  */
> @@ -12814,18 +12802,10 @@ ix86_compute_frame_layout (void)
>         gcc_assert (TARGET_SSE);
>         gcc_assert (!ix86_using_red_zone ());
>   
> -      if (crtl->calls_eh_return)
> +      if (crtl->calls_eh_return || ix86_static_chain_on_stack)
>   	{
>   	  gcc_assert (!reload_completed);
>   	  m->call_ms2sysv = false;
> -	  warn_once_call_ms2sysv_xlogues ("__builtin_eh_return");
> -	}
> -
> -      else if (ix86_static_chain_on_stack)
> -	{
> -	  gcc_assert (!reload_completed);
> -	  m->call_ms2sysv = false;
> -	  warn_once_call_ms2sysv_xlogues ("static call chains");
>   	}
>   
>         /* Finally, compute which registers the stub will manage.  */
> @@ -29290,9 +29270,9 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
>   	  else if (ix86_function_ms_hook_prologue (current_function_decl))
>   	    ;
>   
> -	  /* TODO: Cases not yet examined.  */
> +	  /* TODO: Compatibility not yet examined.  */
>   	  else if (flag_split_stack)
> -	    warn_once_call_ms2sysv_xlogues ("-fsplit-stack");
> +	    ;
>   
>   	  else
>   	    {
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index c1168823af7..eec02b43a4f 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -25389,11 +25389,26 @@ using the function attributes @code{ms_abi} and @code{sysv_abi}.
>   @opindex mno-call-ms2sysv-xlogues
>   Due to differences in 64-bit ABIs, any Microsoft ABI function that calls a
>   System V ABI function must consider RSI, RDI and XMM6-15 as clobbered.  By
> -default, the code for saving and restoring these registers is emitted inline,
> -resulting in fairly lengthy prologues and epilogues.  Using
> -@option{-mcall-ms2sysv-xlogues} emits prologues and epilogues that
> -use stubs in the static portion of libgcc to perform these saves and restores,
> -thus reducing function size at the cost of a few extra instructions.
> +default, the instructions for saving and restoring these registers are emitted
> +inline, resulting in fairly lengthy pro- and epilogues.  Using
> +@option{-mcall-ms2sysv-xlogues} emits pro- and epilogues that use stubs in the
> +static portion of libgcc to perform these saves and restores, thus reducing
> +function size at the cost of executing a few extra instructions.  This cost is
> +theoretically mitigated or eliminated by reduced instruction cache utilization,
> +temporal locality of the stubs, and the stubs' use of MOV instructions over
> +PUSH and POP.
> +
> +This option is not supported with SEH, so it is completely unavailable on
> +Windows.  It is also silently disabled if a function:
> +
> +@enumerate
> +@item is built with @option{-mno-sse2} or @option{-fsplit-stack},
> +@item has @code{__attribute__ ((ms_hook_prologue))}, or
> +@item either throws an exception or explicitly calls @code{__builtin_eh_return}.
> +@end enumerate
> +
> +Support for @option{-fsplit-stack} and @code{__builtin_eh_return} may be
> +added at some time in the future, but has not yet been tested.
>   
>   @item -mtls-dialect=@var{type}
>   @opindex mtls-dialect
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-06-13 11:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <AM4PR0701MB2162CCE44B5BB78CD525DC8EE4CC0@AM4PR0701MB2162.eurprd07.prod.outlook.com>
     [not found] ` <20170611171246.18689-1-daniel.santos@pobox.com>
2017-06-11 20:30   ` [PATCH try 2 resend] [i386] Remove warnings for ignoring -mcall-ms2sysv-xlogues Daniel Santos
2017-06-13  3:42     ` Sandra Loosemore
2017-06-13 11:31     ` Bernd Edlinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).