diff mbox

[RFC] Introduce configure flag --with-stage1-cflags.

Message ID 41109217-1bf5-b112-e783-8040196fd410@suse.cz
State New
Headers show

Commit Message

Martin Liška May 25, 2017, 9:23 a.m. UTC
Hello.

After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a recent
enough compiler can significantly speed up bootstrap. Thus I'm suggesting to
introduce --with-stage1-cflags where one can provide such options.

Apart from that, maybe it would be handy to automatically enable "-O2" when
one has a recent compiler? Do we have an example where we detect host compiler
and it's version?

Martin

Comments

Richard Biener May 26, 2017, 11:46 a.m. UTC | #1
On Thu, May 25, 2017 at 11:23 AM, Martin Liška <mliska@suse.cz> wrote:
> Hello.
>
> After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a recent
> enough compiler can significantly speed up bootstrap. Thus I'm suggesting to
> introduce --with-stage1-cflags where one can provide such options.

I don't think this is necessary -- you can always override with STAGE1_CFLAGS.

> Apart from that, maybe it would be handy to automatically enable "-O2" when
> one has a recent compiler? Do we have an example where we detect host compiler
> and it's version?

Don't know about version but configury already detects that we use GCC, so that
knowledge should be readily available.

Richard.

>
> Martin
Jakub Jelinek May 26, 2017, 11:51 a.m. UTC | #2
On Fri, May 26, 2017 at 01:46:47PM +0200, Richard Biener wrote:
> On Thu, May 25, 2017 at 11:23 AM, Martin Liška <mliska@suse.cz> wrote:
> > Hello.
> >
> > After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a recent
> > enough compiler can significantly speed up bootstrap. Thus I'm suggesting to
> > introduce --with-stage1-cflags where one can provide such options.
> 
> I don't think this is necessary -- you can always override with STAGE1_CFLAGS.
> 
> > Apart from that, maybe it would be handy to automatically enable "-O2" when
> > one has a recent compiler? Do we have an example where we detect host compiler
> > and it's version?
> 
> Don't know about version but configury already detects that we use GCC, so that
> knowledge should be readily available.

Well, it certainly shouldn't be -O2 by default for any system GCC, more
something like if it is major of the configured configure minus 1 or newer
(or minus 2?), then use -O2, otherwise default to -O0 as before.

	Jakub
Richard Biener May 26, 2017, 11:55 a.m. UTC | #3
On Fri, May 26, 2017 at 1:51 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Fri, May 26, 2017 at 01:46:47PM +0200, Richard Biener wrote:
>> On Thu, May 25, 2017 at 11:23 AM, Martin Liška <mliska@suse.cz> wrote:
>> > Hello.
>> >
>> > After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a recent
>> > enough compiler can significantly speed up bootstrap. Thus I'm suggesting to
>> > introduce --with-stage1-cflags where one can provide such options.
>>
>> I don't think this is necessary -- you can always override with STAGE1_CFLAGS.
>>
>> > Apart from that, maybe it would be handy to automatically enable "-O2" when
>> > one has a recent compiler? Do we have an example where we detect host compiler
>> > and it's version?
>>
>> Don't know about version but configury already detects that we use GCC, so that
>> knowledge should be readily available.
>
> Well, it certainly shouldn't be -O2 by default for any system GCC, more
> something like if it is major of the configured configure minus 1 or newer
> (or minus 2?), then use -O2, otherwise default to -O0 as before.

I'd still default to -O0 on release branches regardless of version and then
for development we can probably simply use "any GCC" when people have
the chance to override.

At least for me host GCC 4.8 works quite well with -O2.

Richard.

>         Jakub
Eric Botcazou May 29, 2017, 11:13 a.m. UTC | #4
> After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a
> recent enough compiler can significantly speed up bootstrap. Thus I'm
> suggesting to introduce --with-stage1-cflags where one can provide such
> options.

-O1 is sufficient in my experience and far less risky than -O2 in this case.
Richard Biener May 30, 2017, 6:59 a.m. UTC | #5
On Mon, May 29, 2017 at 1:13 PM, Eric Botcazou <ebotcazou@adacore.com> wrote:
>> After a discussion with Richi, using adding "-O2" to STAGE1 cflags with a
>> recent enough compiler can significantly speed up bootstrap. Thus I'm
>> suggesting to introduce --with-stage1-cflags where one can provide such
>> options.
>
> -O1 is sufficient in my experience and far less risky than -O2 in this case.

Are you sure?  In my experience -O2 gets the most test coverage during lifetime
of a particular release.

Richard.

> --
> Eric Botcazou
Eric Botcazou May 30, 2017, 9:43 a.m. UTC | #6
> Are you sure?  In my experience -O2 gets the most test coverage during
> lifetime of a particular release.

Yes, some older GCC releases have aliasing issues that are exposed at -O2 only 
because of -fstrict-aliasing and -fschedule-insns.
Martin Liška May 30, 2017, 10:30 a.m. UTC | #7
On 05/30/2017 11:43 AM, Eric Botcazou wrote:
>> Are you sure?  In my experience -O2 gets the most test coverage during
>> lifetime of a particular release.
> 
> Yes, some older GCC releases have aliasing issues that are exposed at -O2 only 
> because of -fstrict-aliasing and -fschedule-insns.
> 

That's why we decided to enable -O2 just with GCC 4.8+.

Martin
Eric Botcazou May 30, 2017, 11:10 a.m. UTC | #8
> That's why we decided to enable -O2 just with GCC 4.8+.

IMO it's too dangerous on non-x86 platforms and -O1 would be much safer.
diff mbox

Patch

From 5c44f79237125ad2bc29fcd1fb06a249c05b277d Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Thu, 25 May 2017 11:17:29 +0200
Subject: [PATCH] Introduce configure flag --with-stage1-cflags.

ChangeLog:

2017-05-25  Martin Liska  <mliska@suse.cz>

	* configure.ac: Introduce configure flag --with-stage1-cflags.
	* configure: Regenerate.
---
 configure    | 40 +++++++++++++++++++++++++++-------------
 configure.ac | 31 +++++++++++++++++++------------
 2 files changed, 46 insertions(+), 25 deletions(-)

diff --git a/configure b/configure
index 2c2fe644cfa..442f78d9565 100755
--- a/configure
+++ b/configure
@@ -559,7 +559,6 @@  compare_exclusions
 host_shared
 stage2_werror_flag
 stage1_checking
-stage1_cflags
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -652,6 +651,7 @@  isllibs
 poststage1_ldflags
 poststage1_libs
 stage1_ldflags
+stage1_cflags
 stage1_libs
 extra_isl_gmp_configure_flags
 extra_mpc_mpfr_configure_flags
@@ -771,6 +771,7 @@  with_gmp
 with_gmp_include
 with_gmp_lib
 with_stage1_libs
+with_stage1_cflags
 with_stage1_ldflags
 with_boot_libs
 with_boot_ldflags
@@ -1542,6 +1543,8 @@  Optional Packages:
   --with-gmp-include=PATH specify directory for installed GMP include files
   --with-gmp-lib=PATH     specify directory for the installed GMP library
   --with-stage1-libs=LIBS libraries for stage1
+  --with-stage1-cflags=FLAGS
+                          compiler flags for stage1
   --with-stage1-ldflags=FLAGS
                           linker flags for stage1
   --with-boot-libs=LIBS   libraries for stage2 and later
@@ -5804,6 +5807,29 @@  fi
 
 
 
+# Compiler flags to use for stage1 or when not bootstrapping.
+
+# Check whether --with-stage1-cflags was given.
+if test "${with_stage1_cflags+set}" = set; then :
+  withval=$with_stage1_cflags; if test "$withval" = "no" -o "$withval" = "yes"; then
+   stage1_cflags=
+ else
+   stage1_cflags=$withval
+ fi
+else
+  stage1_cflags="-g"
+  case $build in
+    vax-*-*)
+      case ${GCC} in
+	yes) stage1_cflags="-g -Wa,-J" ;;
+	*) stage1_cflags="-g -J" ;;
+      esac ;;
+  esac
+fi
+
+
+
+
 # Linker flags to use for stage1 or when not bootstrapping.
 
 # Check whether --with-stage1-ldflags was given.
@@ -14544,18 +14570,6 @@  MAINT=$MAINTAINER_MODE_TRUE
 # GCC bootstrap support
 # ---------------------
 
-# Stage specific cflags for build.
-stage1_cflags="-g"
-case $build in
-  vax-*-*)
-    case ${GCC} in
-      yes) stage1_cflags="-g -Wa,-J" ;;
-      *) stage1_cflags="-g -J" ;;
-    esac ;;
-esac
-
-
-
 # Enable --enable-checking in stage1 of the compiler.
 # Check whether --enable-stage1-checking was given.
 if test "${enable_stage1_checking+set}" = set; then :
diff --git a/configure.ac b/configure.ac
index 865dd543fa3..7b7902240c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1637,6 +1637,25 @@  AC_ARG_WITH(stage1-libs,
 [stage1_libs=])
 AC_SUBST(stage1_libs)
 
+# Compiler flags to use for stage1 or when not bootstrapping.
+AC_ARG_WITH(stage1-cflags,
+[AS_HELP_STRING([--with-stage1-cflags=FLAGS], [compiler flags for stage1])],
+[if test "$withval" = "no" -o "$withval" = "yes"; then
+   stage1_cflags=
+ else
+   stage1_cflags=$withval
+ fi],
+[stage1_cflags="-g"
+  case $build in
+    vax-*-*)
+      case ${GCC} in
+	yes) stage1_cflags="-g -Wa,-J" ;;
+	*) stage1_cflags="-g -J" ;;
+      esac ;;
+  esac])
+
+AC_SUBST(stage1_cflags)
+
 # Linker flags to use for stage1 or when not bootstrapping.
 AC_ARG_WITH(stage1-ldflags,
 [AS_HELP_STRING([--with-stage1-ldflags=FLAGS], [linker flags for stage1])],
@@ -3421,18 +3440,6 @@  AC_SUBST(MAINT)dnl
 # GCC bootstrap support
 # ---------------------
 
-# Stage specific cflags for build.
-stage1_cflags="-g"
-case $build in
-  vax-*-*)
-    case ${GCC} in
-      yes) stage1_cflags="-g -Wa,-J" ;;
-      *) stage1_cflags="-g -J" ;;
-    esac ;;
-esac
-
-AC_SUBST(stage1_cflags)
-
 # Enable --enable-checking in stage1 of the compiler.
 AC_ARG_ENABLE(stage1-checking,
 [AS_HELP_STRING([[--enable-stage1-checking[=all]]],
-- 
2.12.2