diff mbox

[1/2] Remove -fshort-double

Message ID 1411826065-15761-1-git-send-email-andi@firstfloor.org
State New
Headers show

Commit Message

Andi Kleen Sept. 27, 2014, 1:54 p.m. UTC
From: Andi Kleen <ak@linux.intel.com>

-fshort-double has crashes the compiler since 4.6 (see PR60410)
Since it's an obscure option that apparently nobody uses it the
best way to fix it seems to just remove it.

This prevents constant ICEs when running an gcc optimization flags
autotuner.

gcc/testsuite/:

2014-09-26  Andi Kleen  <ak@linux.intel.com>

	PR target/60410
	* gcc.dg/lto/pr55113_0.c: Remove.

gcc/:

2014-09-26  Andi Kleen  <ak@linux.intel.com>

	PR target/60410
	* doc/invoke.texi: Remove -fshort-double.
	* lto-wrapper.c (merge_and_complain): Dito.
	(run_gcc): Dito.

gcc/c-family/:

2014-09-26  Andi Kleen  <ak@linux.intel.com>

	PR target/60410
	* c-common.c (c_common_nodes_and_builtins): Remove
	-fshort-double.
	* c.opt: Dito.

gcc/lto/:

2014-09-26  Andi Kleen  <ak@linux.intel.com>

	PR target/60410
	* lto-lang.c (lto_init): Remove -fshort-double.
---
 gcc/c-family/c-common.c              |  2 +-
 gcc/c-family/c.opt                   |  4 ----
 gcc/doc/invoke.texi                  | 10 +---------
 gcc/lto-wrapper.c                    |  3 ---
 gcc/lto/lto-lang.c                   |  2 +-
 gcc/testsuite/gcc.dg/lto/pr55113_0.c | 14 --------------
 6 files changed, 3 insertions(+), 32 deletions(-)
 delete mode 100644 gcc/testsuite/gcc.dg/lto/pr55113_0.c

Comments

Richard Biener Sept. 29, 2014, 11:17 a.m. UTC | #1
On Sat, Sep 27, 2014 at 3:54 PM, Andi Kleen <andi@firstfloor.org> wrote:
> From: Andi Kleen <ak@linux.intel.com>
>
> -fshort-double has crashes the compiler since 4.6 (see PR60410)
> Since it's an obscure option that apparently nobody uses it the
> best way to fix it seems to just remove it.
>
> This prevents constant ICEs when running an gcc optimization flags
> autotuner.

As we saw LTO fixes for -fshort-double it's clear that this flag _is_ used
for some embedded archs.

So - no, you can't simply remove it.  But IMHO it should become a
target-specific flag.

Richard.

> gcc/testsuite/:
>
> 2014-09-26  Andi Kleen  <ak@linux.intel.com>
>
>         PR target/60410
>         * gcc.dg/lto/pr55113_0.c: Remove.
>
> gcc/:
>
> 2014-09-26  Andi Kleen  <ak@linux.intel.com>
>
>         PR target/60410
>         * doc/invoke.texi: Remove -fshort-double.
>         * lto-wrapper.c (merge_and_complain): Dito.
>         (run_gcc): Dito.
>
> gcc/c-family/:
>
> 2014-09-26  Andi Kleen  <ak@linux.intel.com>
>
>         PR target/60410
>         * c-common.c (c_common_nodes_and_builtins): Remove
>         -fshort-double.
>         * c.opt: Dito.
>
> gcc/lto/:
>
> 2014-09-26  Andi Kleen  <ak@linux.intel.com>
>
>         PR target/60410
>         * lto-lang.c (lto_init): Remove -fshort-double.
> ---
>  gcc/c-family/c-common.c              |  2 +-
>  gcc/c-family/c.opt                   |  4 ----
>  gcc/doc/invoke.texi                  | 10 +---------
>  gcc/lto-wrapper.c                    |  3 ---
>  gcc/lto/lto-lang.c                   |  2 +-
>  gcc/testsuite/gcc.dg/lto/pr55113_0.c | 14 --------------
>  6 files changed, 3 insertions(+), 32 deletions(-)
>  delete mode 100644 gcc/testsuite/gcc.dg/lto/pr55113_0.c
>
> diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
> index a9e0191..7a529a2 100644
> --- a/gcc/c-family/c-common.c
> +++ b/gcc/c-family/c-common.c
> @@ -5325,7 +5325,7 @@ c_common_nodes_and_builtins (void)
>    tree va_list_ref_type_node;
>    tree va_list_arg_type_node;
>
> -  build_common_tree_nodes (flag_signed_char, flag_short_double);
> +  build_common_tree_nodes (flag_signed_char, false);
>
>    /* Define `int' and `char' first so that dbx will output them first.  */
>    record_builtin_type (RID_INT, NULL, integer_type_node);
> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> index 72ac2ed..d6a9698 100644
> --- a/gcc/c-family/c.opt
> +++ b/gcc/c-family/c.opt
> @@ -1251,10 +1251,6 @@ frtti
>  C++ ObjC++ Optimization Var(flag_rtti) Init(1)
>  Generate run time type descriptor information
>
> -fshort-double
> -C ObjC C++ ObjC++ LTO Optimization Var(flag_short_double)
> -Use the same size for double as for float
> -
>  fshort-enums
>  C ObjC C++ ObjC++ LTO Optimization Var(flag_short_enums)
>  Use the narrowest integer type possible for enumeration types
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 0c3f4be..b2b667d 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -1094,7 +1094,7 @@ See S/390 and zSeries Options.
>  -fno-jump-tables @gol
>  -frecord-gcc-switches @gol
>  -freg-struct-return  -fshort-enums @gol
> --fshort-double  -fshort-wchar @gol
> +-fshort-wchar @gol
>  -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
>  -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
>  -fno-stack-limit -fsplit-stack @gol
> @@ -22598,14 +22598,6 @@ is equivalent to the smallest integer type that has enough room.
>  code that is not binary compatible with code generated without that switch.
>  Use it to conform to a non-default application binary interface.
>
> -@item -fshort-double
> -@opindex fshort-double
> -Use the same size for @code{double} as for @code{float}.
> -
> -@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
> -code that is not binary compatible with code generated without that switch.
> -Use it to conform to a non-default application binary interface.
> -
>  @item -fshort-wchar
>  @opindex fshort-wchar
>  Override the underlying type for @samp{wchar_t} to be @samp{short
> diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
> index 08fd090..a2ce79c 100644
> --- a/gcc/lto-wrapper.c
> +++ b/gcc/lto-wrapper.c
> @@ -275,7 +275,6 @@ merge_and_complain (struct cl_decoded_option **decoded_options,
>
>         case OPT_freg_struct_return:
>         case OPT_fpcc_struct_return:
> -       case OPT_fshort_double:
>           for (j = 0; j < *decoded_options_count; ++j)
>             if ((*decoded_options)[j].opt_index == foption->opt_index)
>               break;
> @@ -500,7 +499,6 @@ run_gcc (unsigned argc, char *argv[])
>         case OPT_fgnu_tm:
>         case OPT_freg_struct_return:
>         case OPT_fpcc_struct_return:
> -       case OPT_fshort_double:
>         case OPT_ffp_contract_:
>         case OPT_fwrapv:
>         case OPT_ftrapv:
> @@ -573,7 +571,6 @@ run_gcc (unsigned argc, char *argv[])
>
>         case OPT_freg_struct_return:
>         case OPT_fpcc_struct_return:
> -       case OPT_fshort_double:
>           /* Ignore these, they are determined by the input files.
>              ???  We fail to diagnose a possible mismatch here.  */
>           continue;
> diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
> index 9e8524a..57b4f71 100644
> --- a/gcc/lto/lto-lang.c
> +++ b/gcc/lto/lto-lang.c
> @@ -1165,7 +1165,7 @@ lto_init (void)
>    flag_generate_lto = (flag_wpa != NULL);
>
>    /* Create the basic integer types.  */
> -  build_common_tree_nodes (flag_signed_char, flag_short_double);
> +  build_common_tree_nodes (flag_signed_char, false);
>
>    /* The global tree for the main identifier is filled in by
>       language-specific front-end initialization that is not run in the
> diff --git a/gcc/testsuite/gcc.dg/lto/pr55113_0.c b/gcc/testsuite/gcc.dg/lto/pr55113_0.c
> deleted file mode 100644
> index 8c30976..0000000
> --- a/gcc/testsuite/gcc.dg/lto/pr55113_0.c
> +++ /dev/null
> @@ -1,14 +0,0 @@
> -/* PR 55113 */
> -/* { dg-lto-do link } */
> -/* { dg-lto-options { { -flto -fshort-double -O0 } } }*/
> -/* { dg-skip-if "PR60410" { x86_64-*-* || { i?86-*-* && lp64 } } } */
> -/* { dg-skip-if "PR60410" { i?86-*-solaris2.1[0-9]* } } */
> -
> -int
> -main(void)
> -{
> -  float a = 1.0;
> -  float b = 2.0;
> -  double f = a + b * 1e-12;
> -  return (int)f - 1;
> -}
> --
> 2.1.1
>
Andi Kleen Sept. 29, 2014, 3:20 p.m. UTC | #2
> As we saw LTO fixes for -fshort-double it's clear that this flag _is_ used
> for some embedded archs.

Did we? It has been ICEing since 4.5, which is before LTO.

-Andi
Jakub Jelinek Sept. 29, 2014, 3:21 p.m. UTC | #3
On Mon, Sep 29, 2014 at 08:20:03AM -0700, Andi Kleen wrote:
> > As we saw LTO fixes for -fshort-double it's clear that this flag _is_ used
> > for some embedded archs.
> 
> Did we? It has been ICEing since 4.5, which is before LTO.

Depends on which target.  Aren't the ICEs i?86/x86_64 backend ICEs?

	Jakub
Richard Biener Sept. 29, 2014, 3:31 p.m. UTC | #4
On September 29, 2014 5:21:36 PM CEST, Jakub Jelinek <jakub@redhat.com> wrote:
>On Mon, Sep 29, 2014 at 08:20:03AM -0700, Andi Kleen wrote:
>> > As we saw LTO fixes for -fshort-double it's clear that this flag
>_is_ used
>> > for some embedded archs.
>> 
>> Did we? It has been ICEing since 4.5, which is before LTO.
>
>Depends on which target.  Aren't the ICEs i?86/x86_64 backend ICEs?
>

Yes, even works fine with x87 math

Richard.

>	Jakub
Andi Kleen Sept. 29, 2014, 3:47 p.m. UTC | #5
> So - no, you can't simply remove it.  But IMHO it should become a
> target-specific flag.

How about a patch to just disable it for x86? 

-Andi
diff mbox

Patch

diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index a9e0191..7a529a2 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -5325,7 +5325,7 @@  c_common_nodes_and_builtins (void)
   tree va_list_ref_type_node;
   tree va_list_arg_type_node;
 
-  build_common_tree_nodes (flag_signed_char, flag_short_double);
+  build_common_tree_nodes (flag_signed_char, false);
 
   /* Define `int' and `char' first so that dbx will output them first.  */
   record_builtin_type (RID_INT, NULL, integer_type_node);
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 72ac2ed..d6a9698 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1251,10 +1251,6 @@  frtti
 C++ ObjC++ Optimization Var(flag_rtti) Init(1)
 Generate run time type descriptor information
 
-fshort-double
-C ObjC C++ ObjC++ LTO Optimization Var(flag_short_double)
-Use the same size for double as for float
-
 fshort-enums
 C ObjC C++ ObjC++ LTO Optimization Var(flag_short_enums)
 Use the narrowest integer type possible for enumeration types
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 0c3f4be..b2b667d 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1094,7 +1094,7 @@  See S/390 and zSeries Options.
 -fno-jump-tables @gol
 -frecord-gcc-switches @gol
 -freg-struct-return  -fshort-enums @gol
--fshort-double  -fshort-wchar @gol
+-fshort-wchar @gol
 -fverbose-asm  -fpack-struct[=@var{n}]  -fstack-check @gol
 -fstack-limit-register=@var{reg}  -fstack-limit-symbol=@var{sym} @gol
 -fno-stack-limit -fsplit-stack @gol
@@ -22598,14 +22598,6 @@  is equivalent to the smallest integer type that has enough room.
 code that is not binary compatible with code generated without that switch.
 Use it to conform to a non-default application binary interface.
 
-@item -fshort-double
-@opindex fshort-double
-Use the same size for @code{double} as for @code{float}.
-
-@strong{Warning:} the @option{-fshort-double} switch causes GCC to generate
-code that is not binary compatible with code generated without that switch.
-Use it to conform to a non-default application binary interface.
-
 @item -fshort-wchar
 @opindex fshort-wchar
 Override the underlying type for @samp{wchar_t} to be @samp{short
diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c
index 08fd090..a2ce79c 100644
--- a/gcc/lto-wrapper.c
+++ b/gcc/lto-wrapper.c
@@ -275,7 +275,6 @@  merge_and_complain (struct cl_decoded_option **decoded_options,
 
 	case OPT_freg_struct_return:
 	case OPT_fpcc_struct_return:
-	case OPT_fshort_double:
 	  for (j = 0; j < *decoded_options_count; ++j)
 	    if ((*decoded_options)[j].opt_index == foption->opt_index)
 	      break;
@@ -500,7 +499,6 @@  run_gcc (unsigned argc, char *argv[])
 	case OPT_fgnu_tm:
 	case OPT_freg_struct_return:
 	case OPT_fpcc_struct_return:
-	case OPT_fshort_double:
 	case OPT_ffp_contract_:
 	case OPT_fwrapv:
 	case OPT_ftrapv:
@@ -573,7 +571,6 @@  run_gcc (unsigned argc, char *argv[])
 
 	case OPT_freg_struct_return:
 	case OPT_fpcc_struct_return:
-	case OPT_fshort_double:
 	  /* Ignore these, they are determined by the input files.
 	     ???  We fail to diagnose a possible mismatch here.  */
 	  continue;
diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c
index 9e8524a..57b4f71 100644
--- a/gcc/lto/lto-lang.c
+++ b/gcc/lto/lto-lang.c
@@ -1165,7 +1165,7 @@  lto_init (void)
   flag_generate_lto = (flag_wpa != NULL);
 
   /* Create the basic integer types.  */
-  build_common_tree_nodes (flag_signed_char, flag_short_double);
+  build_common_tree_nodes (flag_signed_char, false);
 
   /* The global tree for the main identifier is filled in by
      language-specific front-end initialization that is not run in the
diff --git a/gcc/testsuite/gcc.dg/lto/pr55113_0.c b/gcc/testsuite/gcc.dg/lto/pr55113_0.c
deleted file mode 100644
index 8c30976..0000000
--- a/gcc/testsuite/gcc.dg/lto/pr55113_0.c
+++ /dev/null
@@ -1,14 +0,0 @@ 
-/* PR 55113 */
-/* { dg-lto-do link } */
-/* { dg-lto-options { { -flto -fshort-double -O0 } } }*/
-/* { dg-skip-if "PR60410" { x86_64-*-* || { i?86-*-* && lp64 } } } */
-/* { dg-skip-if "PR60410" { i?86-*-solaris2.1[0-9]* } } */
-
-int 
-main(void)
-{
-  float a = 1.0;
-  float b = 2.0;
-  double f = a + b * 1e-12;
-  return (int)f - 1;
-}