This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 3/3] RFC: Add -O1g
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 23 Jun 2019 14:53:49 +0100
- Subject: [PATCH 3/3] RFC: Add -O1g
- References: <mpt5zowjtpx.fsf@arm.com>
This patch adds an option called -O1g, a half-way house between
-Og and -O1 in terms of both performance and debuggability.
2019-06-23 Richard Sandiford <richard.sandiford@arm.com>
config/
* bootstrap-O1g.mk: New file.
gcc/
* common.opt (O1g): New option.
* doc/invoke.texi: Document it.
* opts.c (default_options_optimization): Handle it.
(common_handle_option): Likewise.
gcc/testsuite/
* g++.dg/guality/guality.exp: Add "-O1g -g" to the list of options
to try for Og-* tests.
* gcc.dg/guality/guality.exp: Likewise.
* gcc.dg/sso/sso.exp (SSO_TORTURE_OPTIONS): Add "-O1g -g".
* gnat.dg/sso/sso.exp (SSO_TORTURE_OPTIONS): Likewise.
* lib/c-torture.exp (TORTURE_OPTIONS): Likewise.
Index: config/bootstrap-O1g.mk
===================================================================
--- /dev/null 2019-06-14 15:59:19.298479944 +0100
+++ config/bootstrap-O1g.mk 2019-06-23 14:48:59.302941670 +0100
@@ -0,0 +1,1 @@
+BOOT_CFLAGS := -O1g $(filter-out -O%, $(BOOT_CFLAGS))
Index: gcc/common.opt
===================================================================
--- gcc/common.opt 2019-06-23 14:48:44.495065059 +0100
+++ gcc/common.opt 2019-06-23 14:48:59.302941670 +0100
@@ -487,6 +487,9 @@ Og
Common Optimization
Optimize for debugging experience rather than speed or size.
+O1g
+Common Optimization
+
Q
Driver
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi 2019-06-18 09:35:52.089892867 +0100
+++ gcc/doc/invoke.texi 2019-06-23 14:48:59.314941570 +0100
@@ -8403,6 +8403,19 @@ optimization flags except for those that
-fmove-loop-invariants -fssa-phiopt @gol
-ftree-bit-ccp -ftree-pta -ftree-sra}
+@item -O1g
+@opindex O1g
+Perform the same optimizations as @option{-O1}, but take the debug
+experience into consideration when optimizing. In particular, try to
+make sure that the values of simple variables are printable at any
+point during their scope.
+
+This option is a compromise between @option{-Og} and @option{-O1}.
+The code it produces is generally faster than the code that
+@option{-Og} produces, but not as fast as the code that @option{-O1}
+produces. In contrast, the code that @option{-O1g} produces should be
+easier to debug than code that @option{-O1} produces, but might not be
+as easy to debug as the code that @option{-Og} produces.
@end table
If you use multiple @option{-O} options, with or without level numbers,
Index: gcc/opts.c
===================================================================
--- gcc/opts.c 2019-06-23 14:48:44.507064959 +0100
+++ gcc/opts.c 2019-06-23 14:48:59.314941570 +0100
@@ -639,6 +639,14 @@ default_options_optimization (struct gcc
opts->x_flag_tangible_debug = 1;
break;
+ case OPT_O1g:
+ opts->x_optimize_size = 0;
+ opts->x_optimize = 1;
+ opts->x_optimize_fast = 0;
+ opts->x_optimize_debug = 0;
+ opts->x_flag_tangible_debug = 1;
+ break;
+
case OPT_fopenacc:
if (opt->value)
openacc_mode = true;
@@ -2323,6 +2331,7 @@ common_handle_option (struct gcc_options
case OPT_Os:
case OPT_Ofast:
case OPT_Og:
+ case OPT_O1g:
/* Currently handled in a prescan. */
break;
Index: gcc/testsuite/g++.dg/guality/guality.exp
===================================================================
--- gcc/testsuite/g++.dg/guality/guality.exp 2019-06-23 14:48:44.511064925 +0100
+++ gcc/testsuite/g++.dg/guality/guality.exp 2019-06-23 14:48:59.314941570 +0100
@@ -78,9 +78,9 @@ if {[check_guality "
gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.C]] "" ""
gcc-dg-runtest $general "" ""
set-torture-options \
- [list "-O0" "-Og"] \
+ [list "-O0" "-Og" "-O1g"] \
[list {}] \
- [list "-Og -flto"]
+ [list "-Og -flto" "-O1g -flto"]
gcc-dg-runtest $Og "" ""
}
Index: gcc/testsuite/gcc.dg/guality/guality.exp
===================================================================
--- gcc/testsuite/gcc.dg/guality/guality.exp 2019-06-23 14:48:44.511064925 +0100
+++ gcc/testsuite/gcc.dg/guality/guality.exp 2019-06-23 14:48:59.314941570 +0100
@@ -93,9 +93,9 @@ if {[check_guality "
gcc-dg-runtest [lsort [glob $srcdir/$subdir/*.c]] "" ""
gcc-dg-runtest $general "" "-Wc++-compat"
set-torture-options \
- [list "-O0" "-Og"] \
+ [list "-O0" "-Og" "-O1g"] \
[list {}] \
- [list "-Og -flto"]
+ [list "-Og -flto" "-O1g -flto"]
gcc-dg-runtest $Og "" "-Wc++-compat"
}
Index: gcc/testsuite/gcc.dg/sso/sso.exp
===================================================================
--- gcc/testsuite/gcc.dg/sso/sso.exp 2019-03-08 18:15:04.412863081 +0000
+++ gcc/testsuite/gcc.dg/sso/sso.exp 2019-06-23 14:48:59.314941570 +0100
@@ -32,7 +32,8 @@ set SSO_TORTURE_OPTIONS [list \
{ -O2 } \
{ -O3 -finline-functions } \
{ -Os } \
- { -Og -g } ]
+ { -Og -g } \
+ { -O1g -g } ]
set-torture-options $SSO_TORTURE_OPTIONS
Index: gcc/testsuite/gnat.dg/sso/sso.exp
===================================================================
--- gcc/testsuite/gnat.dg/sso/sso.exp 2019-03-08 18:14:54.692900030 +0000
+++ gcc/testsuite/gnat.dg/sso/sso.exp 2019-06-23 14:48:59.314941570 +0100
@@ -28,7 +28,8 @@ set SSO_TORTURE_OPTIONS [list \
{ -O2 } \
{ -O3 -finline-functions } \
{ -Os } \
- { -Og -g } ]
+ { -Og -g } \
+ { -O1g -g } ]
set-torture-options $SSO_TORTURE_OPTIONS
Index: gcc/testsuite/lib/c-torture.exp
===================================================================
--- gcc/testsuite/lib/c-torture.exp 2019-03-08 18:14:42.504946361 +0000
+++ gcc/testsuite/lib/c-torture.exp 2019-06-23 14:48:59.314941570 +0100
@@ -56,7 +56,8 @@ if [info exists TORTURE_OPTIONS] {
{ -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions } \
{ -O3 -g } \
{ -Os } \
- { -Og -g } ]
+ { -Og -g } \
+ { -O1g -g } ]
if [check_effective_target_lto] {
# When having plugin test both slim and fat LTO and plugin/nonplugin