diff mbox series

Config.in: add -Ofast option

Message ID 1521735971-22210-1-git-send-email-joshua.henderson@microchip.com
State Superseded
Headers show
Series Config.in: add -Ofast option | expand

Commit Message

Joshua Henderson March 22, 2018, 4:26 p.m. UTC
-Ofast (introduced in GCC 4.6) It combines the existing optimization level -O3
with options that can affect standards compliance but result in better optimized
code. For example, -Ofast enables -ffast-math.

Signed-off-by: Joshua Henderson <joshua.henderson@microchip.com>
---
 Config.in           | 9 +++++++++
 package/Makefile.in | 3 +++
 2 files changed, 12 insertions(+)

Comments

Yann E. MORIN March 25, 2018, 8:24 a.m. UTC | #1
Joshua, All,

On 2018-03-22 09:26 -0700, Joshua Henderson spake thusly:
> -Ofast (introduced in GCC 4.6) It combines the existing optimization level -O3
> with options that can affect standards compliance but result in better optimized
> code. For example, -Ofast enables -ffast-math.
> 
> Signed-off-by: Joshua Henderson <joshua.henderson@microchip.com>
> ---
>  Config.in           | 9 +++++++++
>  package/Makefile.in | 3 +++
>  2 files changed, 12 insertions(+)
> 
> diff --git a/Config.in b/Config.in
> index 0002df5..e83ce02 100644
> --- a/Config.in
> +++ b/Config.in
> @@ -527,6 +527,15 @@ config BR2_OPTIMIZE_S
>  	  -ftree-vect-loop-version
>  	  This is the default.
>  
> +config BR2_OPTIMIZE_FAST
> +	bool "optimize for fast"

-Ofast was introduced in gcc-4.6, so you need a dependency:
    depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6

Otherwise I'm fine with this.

Regards,
Yann E. MORIN.

> +	help
> +	  Optimize for fast. Disregard strict standards compliance. -Ofast
> +	  enables all -O3 optimizations. It also enables optimizations that are
> +	  not valid for all standard-compliant programs. It turns on -ffast-math
> +	  and the Fortran-specific -fstack-arrays, unless -fmax-stack-var-size
> +	  is specified, and -fno-protect-parens.
> +
>  endchoice
>  
>  config BR2_GOOGLE_BREAKPAD_ENABLE
> diff --git a/package/Makefile.in b/package/Makefile.in
> index e387ce6..828e12e 100644
> --- a/package/Makefile.in
> +++ b/package/Makefile.in
> @@ -128,6 +128,9 @@ endif
>  ifeq ($(BR2_OPTIMIZE_S),y)
>  TARGET_OPTIMIZATION = -Os
>  endif
> +ifeq ($(BR2_OPTIMIZE_FAST),y)
> +TARGET_OPTIMIZATION = -Ofast
> +endif
>  ifeq ($(BR2_DEBUG_1),y)
>  TARGET_DEBUGGING = -g1
>  endif
> -- 
> 2.7.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Thomas Petazzoni March 25, 2018, 8:40 p.m. UTC | #2
Hello,

On Sun, 25 Mar 2018 10:24:34 +0200, Yann E. MORIN wrote:

> > +config BR2_OPTIMIZE_FAST
> > +	bool "optimize for fast"  
> 
> -Ofast was introduced in gcc-4.6, so you need a dependency:
>     depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6

The "odd" thing being that menuconfig is organized as follows:

 Target options --->
 Build options --->
 Toolchain --->

The optimization level is selected in "Build options" and the compiler
version is basically decided in "Toolchain".

So if you select -Ofast in Build options, and then go in Toolchain
chose a < 4.6 compiler, your -Ofast selection would disappear.

But there's no good way around this, and using gcc < 4.6 is anyway very
rare these days, so I also agree that the "depends on" you suggest is
what makes the most sense.

Thomas
Yann E. MORIN March 26, 2018, 4:12 p.m. UTC | #3
Thomas, All,

On 2018-03-25 22:40 +0200, Thomas Petazzoni spake thusly:
> On Sun, 25 Mar 2018 10:24:34 +0200, Yann E. MORIN wrote:
> > > +config BR2_OPTIMIZE_FAST
> > > +	bool "optimize for fast"  
> > 
> > -Ofast was introduced in gcc-4.6, so you need a dependency:
> >     depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
> 
> The "odd" thing being that menuconfig is organized as follows:
> 
>  Target options --->
>  Build options --->
>  Toolchain --->
> 
> The optimization level is selected in "Build options" and the compiler
> version is basically decided in "Toolchain".
> 
> So if you select -Ofast in Build options, and then go in Toolchain
> chose a < 4.6 compiler, your -Ofast selection would disappear.

Yeah, I know. But, as you ssay:

> But there's no good way around this, and using gcc < 4.6 is anyway very

... there's no good solution around this issue, and the case for gcc
before 4.6 is rare enough that we don't care abot those poor souls
anymore... :-/

> rare these days, so I also agree that the "depends on" you suggest is
> what makes the most sense.

Was that an Acked-by or a Reviewed-by? ;-)

Regards,
Yann E. MORIN.
diff mbox series

Patch

diff --git a/Config.in b/Config.in
index 0002df5..e83ce02 100644
--- a/Config.in
+++ b/Config.in
@@ -527,6 +527,15 @@  config BR2_OPTIMIZE_S
 	  -ftree-vect-loop-version
 	  This is the default.
 
+config BR2_OPTIMIZE_FAST
+	bool "optimize for fast"
+	help
+	  Optimize for fast. Disregard strict standards compliance. -Ofast
+	  enables all -O3 optimizations. It also enables optimizations that are
+	  not valid for all standard-compliant programs. It turns on -ffast-math
+	  and the Fortran-specific -fstack-arrays, unless -fmax-stack-var-size
+	  is specified, and -fno-protect-parens.
+
 endchoice
 
 config BR2_GOOGLE_BREAKPAD_ENABLE
diff --git a/package/Makefile.in b/package/Makefile.in
index e387ce6..828e12e 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -128,6 +128,9 @@  endif
 ifeq ($(BR2_OPTIMIZE_S),y)
 TARGET_OPTIMIZATION = -Os
 endif
+ifeq ($(BR2_OPTIMIZE_FAST),y)
+TARGET_OPTIMIZATION = -Ofast
+endif
 ifeq ($(BR2_DEBUG_1),y)
 TARGET_DEBUGGING = -g1
 endif