This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 3/3] RFC: Add -O1g


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]