public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH 2/2] Autogenerated part of introduction of GCC_OPTION macro
  2014-05-09 21:12 [PATCH 0/2] Make option-lookup macros explicit David Malcolm
  2014-05-09 21:12 ` [PATCH 1/2] Handwritten part of introduction of GCC_OPTION macro David Malcolm
@ 2014-05-09 21:12 ` David Malcolm
  2014-05-10  5:42   ` Václav Zeman
  2014-05-10  0:28 ` [PATCH 0/2] Make option-lookup macros explicit Trevor Saunders
  2014-05-14 18:31 ` Jeff Law
  3 siblings, 1 reply; 7+ messages in thread
From: David Malcolm @ 2014-05-09 21:12 UTC (permalink / raw)
  To: gcc-patches; +Cc: David Malcolm

This patch is 2.2MB in size, so I've uploaded it to:
http://dmalcolm.fedorapeople.org/gcc/large-patches/6fb783b39f914574a1889aa51d06c08cf55678b4-0002-Autogenerated-part-of-introduction-of-GCC_OPTION-mac.patch

(even just the ChangeLog would be 160KB)

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] Handwritten part of introduction of GCC_OPTION macro
  2014-05-09 21:12 [PATCH 0/2] Make option-lookup macros explicit David Malcolm
@ 2014-05-09 21:12 ` David Malcolm
  2014-05-09 21:12 ` [PATCH 2/2] Autogenerated " David Malcolm
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: David Malcolm @ 2014-05-09 21:12 UTC (permalink / raw)
  To: gcc-patches; +Cc: David Malcolm

This is the hand-written half of the patch series.

gcc/ada/gcc-interface/misc.c requires some special care: it "undeffed"
some options macros in order to support explicit variables for 5
options, whilst using other options via macros.  I ported this
file by hand, disabling the refactoring script for this specific file.
These 5 variables continue to exist as variables in the new
implementation.

gcc/
	* opth-gen.awk: Introduce GCC_OPTION macro, using it to eliminate
	the family of macros named after options that implicitly looked
	up within the global_options global in favor of explicit lookup.

gcc/ada/
	* gcc-interface/gigi.h (flag_vms_malloc64): This macro exists on
	non-VMS systems, to provide a value for this flag, which exists
	as an option, but only on VMS, within vms.opt.  Given that we can't
	redefine a direct GCC_OPTION (flag_vms_malloc64) lookup, instead
	rename this to...
	(GCC_OPTION_flag_vms_malloc64): New macro: an option lookup on
	VMS, 0 elsewhere.
	* gcc-interface/decl.c (gnat_to_gnu_param): Use new macro
	GCC_OPTION_flag_vms_malloc64 in place of flag_vms_malloc64.
	* gcc-interface/misc.c (gnat_handle_option): Manually wrap option
	usage in GCC_OPTION macro.
	(optimize): Remove undef of macro.
	(optimize_size): Likewise.
	(flag_compare_debug): Likewise.
	(flag_short_enums): Likewise.
	(flag_stack_check): Likewise.
	(gnat_post_options): Wrap some option usage in
	GCC_OPTION macro, avoiding wrapping the variables introduced
	for the specific options that formerly had undefs above.
	(gnat_init): Wrap option usage in GCC_OPTION macro.
	(gnat_init_gcc_eh): Likewise.
	(gnat_init_gcc_fp): Likewise.

gcc/c-family/
	* c.opt (Wformat-contains-nul): Wrap usage of "warn_format" within
	GCC_OPTION macro, and wrap all of body of LangEnabledBy in curly
	braces so that the awk opt parser can cope with the parentheses.
	(Wformat-extra-args): Likewise.
	(Wformat-nonliteral): Likewise.
	(Wformat-security): Likewise.
	(Wformat-y2k): Likewise.
	(Wformat-zero-length): Likewise.
	(Wnonnull): Likewise.
---
 gcc/ada/gcc-interface/decl.c |  3 ++-
 gcc/ada/gcc-interface/gigi.h |  6 ++++--
 gcc/ada/gcc-interface/misc.c | 31 +++++++++++++------------------
 gcc/c-family/c.opt           | 14 +++++++-------
 gcc/config/alpha/vms.h       |  2 +-
 gcc/opth-gen.awk             | 15 ++++++++-------
 6 files changed, 35 insertions(+), 36 deletions(-)

diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 4180e59..4c9788d 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -5752,7 +5752,8 @@ gnat_to_gnu_param (Entity_Id gnat_param, Mechanism_Type mech,
 
   /* VMS descriptors are themselves passed by reference.  */
   if (mech == By_Short_Descriptor ||
-      (mech == By_Descriptor && TARGET_ABI_OPEN_VMS && !flag_vms_malloc64))
+      (mech == By_Descriptor && TARGET_ABI_OPEN_VMS
+       && !GCC_OPTION_flag_vms_malloc64))
     gnu_param_type
       = build_pointer_type (build_vms_descriptor32 (gnu_param_type,
 						    Mechanism (gnat_param),
diff --git a/gcc/ada/gcc-interface/gigi.h b/gcc/ada/gcc-interface/gigi.h
index b709273..a565dc6 100644
--- a/gcc/ada/gcc-interface/gigi.h
+++ b/gcc/ada/gcc-interface/gigi.h
@@ -1059,8 +1059,10 @@ extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
 /* VMS option set by default, when clear forces 32bit mallocs and 32bit
    Descriptors.  Always used in combination with TARGET_ABI_OPEN_VMS
    so no effect on non-VMS systems.  */
-#if TARGET_ABI_OPEN_VMS == 0
-#define flag_vms_malloc64 0
+#if TARGET_ABI_OPEN_VMS
+#define GCC_OPTION_flag_vms_malloc64 flag_vms_malloc64
+#else
+#define GCC_OPTION_flag_vms_malloc64 0
 #endif
 
 /* Convenient shortcuts.  */
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index a5f2881..e447095 100644
--- a/gcc/ada/gcc-interface/misc.c
+++ b/gcc/ada/gcc-interface/misc.c
@@ -133,8 +133,8 @@ gnat_handle_option (size_t scode, const char *arg ATTRIBUTE_UNUSED, int value,
 			       OPT_Wunused, NULL, value,
 			       gnat_option_lang_mask (), kind, loc,
 			       handlers, global_dc);
-      warn_uninitialized = value;
-      warn_maybe_uninitialized = value;
+      GCC_OPTION (warn_uninitialized) = value;
+      GCC_OPTION (warn_maybe_uninitialized) = value;
       break;
 
     case OPT_gant:
@@ -225,11 +225,6 @@ gnat_init_options (unsigned int decoded_options_count,
 
 /* Ada code requires variables for these settings rather than elements
    of the global_options structure.  */
-#undef optimize
-#undef optimize_size
-#undef flag_compare_debug
-#undef flag_short_enums
-#undef flag_stack_check
 int optimize;
 int optimize_size;
 int flag_compare_debug;
@@ -244,16 +239,16 @@ static bool
 gnat_post_options (const char **pfilename ATTRIBUTE_UNUSED)
 {
   /* Excess precision other than "fast" requires front-end support.  */
-  if (flag_excess_precision_cmdline == EXCESS_PRECISION_STANDARD
+  if (GCC_OPTION (flag_excess_precision_cmdline) == EXCESS_PRECISION_STANDARD
       && TARGET_FLT_EVAL_METHOD_NON_DEFAULT)
     sorry ("-fexcess-precision=standard for Ada");
-  flag_excess_precision_cmdline = EXCESS_PRECISION_FAST;
+  GCC_OPTION (flag_excess_precision_cmdline) = EXCESS_PRECISION_FAST;
 
   /* ??? The warning machinery is outsmarted by Ada.  */
-  warn_unused_parameter = 0;
+  GCC_OPTION (warn_unused_parameter) = 0;
 
   /* No psABI change warnings for Ada.  */
-  warn_psabi = 0;
+  GCC_OPTION (warn_psabi) = 0;
 
   /* No caret by default for Ada.  */
   if (!global_options_set.x_flag_diagnostics_show_caret)
@@ -336,7 +331,7 @@ gnat_init (void)
   /* Do little here, most of the standard declarations are set up after the
      front-end has been run.  Use the same `char' as C, this doesn't really
      matter since we'll use the explicit `unsigned char' for Character.  */
-  build_common_tree_nodes (flag_signed_char, false);
+  build_common_tree_nodes (GCC_OPTION (flag_signed_char), false);
 
   /* In Ada, we use an unsigned 8-bit type for the default boolean type.  */
   boolean_type_node = make_unsigned_type (8);
@@ -388,8 +383,8 @@ gnat_init_gcc_eh (void)
      marked as "cannot trap" if the flag is not set (see emit_libcall_block).
      We should not let this be since it is possible for such calls to actually
      raise in Ada.  */
-  flag_exceptions = 1;
-  flag_non_call_exceptions = 1;
+  GCC_OPTION (flag_exceptions) = 1;
+  GCC_OPTION (flag_non_call_exceptions) = 1;
 
   init_eh ();
 }
@@ -402,18 +397,18 @@ gnat_init_gcc_fp (void)
   /* Disable FP optimizations that ignore the signedness of zero if
      S'Signed_Zeros is true, but don't override the user if not.  */
   if (Signed_Zeros_On_Target)
-    flag_signed_zeros = 1;
+    GCC_OPTION (flag_signed_zeros) = 1;
   else if (!global_options_set.x_flag_signed_zeros)
-    flag_signed_zeros = 0;
+    GCC_OPTION (flag_signed_zeros) = 0;
 
   /* Assume that FP operations can trap if S'Machine_Overflow is true,
      but don't override the user if not.
 
      ??? Alpha/VMS enables FP traps without declaring it.  */
   if (Machine_Overflows_On_Target || TARGET_ABI_OPEN_VMS)
-    flag_trapping_math = 1;
+    GCC_OPTION (flag_trapping_math) = 1;
   else if (!global_options_set.x_flag_trapping_math)
-    flag_trapping_math = 0;
+    GCC_OPTION (flag_trapping_math) = 0;
 }
 
 /* Print language-specific items in declaration NODE.  */
diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
index 7d0a2cd..21df9a0 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -400,27 +400,27 @@ C ObjC C++ ObjC++ Warning Alias(Wformat=, 1, 0)
 Warn about printf/scanf/strftime/strfmon format string anomalies
 
 Wformat-contains-nul
-C ObjC C++ ObjC++ Var(warn_format_contains_nul) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 1, 0)
+C ObjC C++ ObjC++ Var(warn_format_contains_nul) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=, GCC_OPTION (warn_format) >= 1, 0})
 Warn about format strings that contain NUL bytes
 
 Wformat-extra-args
-C ObjC C++ ObjC++ Var(warn_format_extra_args) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 1, 0)
+C ObjC C++ ObjC++ Var(warn_format_extra_args) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=, GCC_OPTION (warn_format) >= 1, 0})
 Warn if passing too many arguments to a function for its format string
 
 Wformat-nonliteral
-C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
+C ObjC C++ ObjC++ Var(warn_format_nonliteral) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=, GCC_OPTION (warn_format) >= 2, 0})
 Warn about format strings that are not literals
 
 Wformat-security
-C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=, warn_format >= 2, 0)
+C ObjC C++ ObjC++ Var(warn_format_security) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=, GCC_OPTION (warn_format) >= 2, 0})
 Warn about possible security problems with format functions
 
 Wformat-y2k
-C ObjC C++ ObjC++ Var(warn_format_y2k) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=,warn_format >= 2, 0)
+C ObjC C++ ObjC++ Var(warn_format_y2k) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=,GCC_OPTION (warn_format) >= 2, 0})
 Warn about strftime formats yielding 2-digit years
 
 Wformat-zero-length
-C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=,warn_format >= 1, 0)
+C ObjC C++ ObjC++ Var(warn_format_zero_length) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=,GCC_OPTION (warn_format) >= 1, 0})
 Warn about zero-length formats
 
 Wformat=
@@ -573,7 +573,7 @@ C++ ObjC++ Var(warn_nonvdtor) Warning
 Warn about non-virtual destructors
 
 Wnonnull
-C ObjC C++ ObjC++ Var(warn_nonnull) Warning LangEnabledBy(C ObjC C++ ObjC++,Wformat=,warn_format >= 1,0)
+C ObjC C++ ObjC++ Var(warn_nonnull) Warning LangEnabledBy({C ObjC C++ ObjC++,Wformat=,GCC_OPTION (warn_format) >= 1,0})
 Warn about NULL being passed to argument slots marked as requiring non-NULL
 
 Wnonnull
diff --git a/gcc/config/alpha/vms.h b/gcc/config/alpha/vms.h
index b297778..df0130c 100644
--- a/gcc/config/alpha/vms.h
+++ b/gcc/config/alpha/vms.h
@@ -48,7 +48,7 @@ along with GCC; see the file COPYING3.  If not see
 /* The maximum alignment 'malloc' honors.  */
 #undef  MALLOC_ABI_ALIGNMENT
 #define MALLOC_ABI_ALIGNMENT \
-  ((flag_vms_malloc64 && flag_vms_pointer_size != VMS_POINTER_SIZE_NONE \
+  ((flag_vms_malloc64 && flag_vms_pointer_size != VMS_POINTER_SIZE_NONE	\
    ? 16 : 8) * BITS_PER_UNIT)
 
 #undef FIXED_REGISTERS
diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index 45aee34..1b96151 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -44,14 +44,17 @@ if (n_extra_h_includes > 0) {
 }
 
 print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)"
-print "#ifndef GENERATOR_FILE"
+print "#ifdef GENERATOR_FILE"
+print "#define GCC_OPTION(NAME) (NAME)"
+print "#else"
 print "#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS)"
 print "struct GTY(()) gcc_options"
 print "#else"
 print "struct gcc_options"
 print "#endif"
 print "{"
-print "#endif"
+print "#define GCC_OPTION(NAME) (global_options.x_##NAME)"
+print "#endif /* #ifdef GENERATOR_FILE */"
 
 for (i = 0; i < n_extra_vars; i++) {
 	var = extra_vars[i]
@@ -70,7 +73,6 @@ for (i = 0; i < n_extra_vars; i++) {
 	print "extern " orig_var ";"
 	print "#else"
 	print "  " type " x_" name type_after ";"
-	print "#define " name " global_options.x_" name
 	print "#endif"
 }
 
@@ -90,7 +92,6 @@ for (i = 0; i < n_opts; i++) {
 	print "extern " var_type(flags[i]) name ";"
 	print "#else"
 	print "  " var_type(flags[i]) "x_" name ";"
-	print "#define " name " global_options.x_" name
 	print "#endif"
 }
 for (i = 0; i < n_opts; i++) {
@@ -381,7 +382,7 @@ for (i = 0; i < n_opts; i++) {
 			extra_mask_macros[name] = 1
 		}
 		print "#define TARGET_" name \
-		      " ((" vname " & " mask name ") != 0)"
+		      " ((GCC_OPTION (" vname ") & " mask name ") != 0)"
 		print "#define TARGET_" name "_P(" vname ")" \
 		      " ((" vname " & " mask name ") != 0)"
 	}
@@ -389,7 +390,7 @@ for (i = 0; i < n_opts; i++) {
 for (i = 0; i < n_extra_masks; i++) {
 	if (extra_mask_macros[extra_masks[i]] == 0)
 		print "#define TARGET_" extra_masks[i] \
-		      " ((target_flags & MASK_" extra_masks[i] ") != 0)"
+		      " ((GCC_OPTION (target_flags) & MASK_" extra_masks[i] ") != 0)"
 }
 print ""
 
@@ -399,7 +400,7 @@ for (i = 0; i < n_opts; i++) {
 		vname = var_name(flags[i])
 		mask = "OPTION_MASK_"
 		if (vname == "") {
-			vname = "target_flags"
+			vname = "GCC_OPTION (target_flags)"
 			mask = "MASK_"
 		}
 		print "#define TARGET_" nth_arg(1, opt) \
-- 
1.8.5.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 0/2] Make option-lookup macros explicit
@ 2014-05-09 21:12 David Malcolm
  2014-05-09 21:12 ` [PATCH 1/2] Handwritten part of introduction of GCC_OPTION macro David Malcolm
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: David Malcolm @ 2014-05-09 21:12 UTC (permalink / raw)
  To: gcc-patches; +Cc: David Malcolm

GCC's code is full of references to options like:

  static bool
  gate_vrp (void)
  {
    return flag_tree_vrp != 0;
  }

where "flag_tree_vrp" is actually an autogenerated macro to:

  global_options.x_flag_tree_vrp

This is deeply confusing to a newbie (and indeed still to me after ~two
years of working with GCC's internals) e.g. when stepping through code and
trying to query the value in gdb - what is an actual variable, and what is
an option?  Why isn't tab-completion working?  etc

The idea of the following patch series is to replace the above with:

  static bool
  gate_vrp (void)
  {
    return GCC_OPTION (flag_tree_vrp) != 0;
  }

thus making it obvious when macro magic is occurring.

There are two patches, a hand-written one, and an autogenerated one.

The latter is 2.2MB in size, so I've uploaded it to:
 http://dmalcolm.fedorapeople.org/gcc/large-patches/6fb783b39f914574a1889aa51d06c08cf55678b4-0002-Autogenerated-part-of-introduction-of-GCC_OPTION-mac.patch

The autogenerated patch was generated by a script:
 https://github.com/davidmalcolm/gcc-refactoring-scripts/blob/master/refactor_options.py
which has a selftest suite here:
 https://github.com/davidmalcolm/gcc-refactoring-scripts/blob/master/test_refactor_options.py

From a global-state-removal perspective, it might be nice to associate
options with a gcc::context, rather than have a single instance of options,
though that isn't addressed in these patches.
(e.g. perhaps explicitly adding a gcc::context arg to the macro???)

The patches were successfully bootstrapped&regrtested on top
of r208714 (rather old, 2014-03-20) albeit just on x86_64-unknown-linux-gnu
(Fedora 20), with
  --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto
(i.e. every frontend, I think).

OK for trunk, after 4.9.1 is released?  (clearly I need to test on
more targets first, given how much config/* code this touches, but I
wanted to sound the idea out on this list).

Dave

David Malcolm (2):
  Handwritten part of introduction of GCC_OPTION macro
  Autogenerated part of introduction of GCC_OPTION macro

 gcc/ada/gcc-interface/decl.c           |   17 +-
 gcc/ada/gcc-interface/gigi.h           |    6 +-
 gcc/ada/gcc-interface/misc.c           |   31 +-
 gcc/ada/gcc-interface/trans.c          |   32 +-
 gcc/ada/gcc-interface/utils.c          |    6 +-
 gcc/ada/gcc-interface/utils2.c         |    2 +-
 gcc/alias.c                            |   14 +-
 gcc/asan.c                             |   14 +-
 gcc/auto-inc-dec.c                     |    2 +-
 gcc/bb-reorder.c                       |   14 +-
 gcc/bt-load.c                          |   20 +-
 gcc/builtins.c                         |  112 ++--
 gcc/builtins.def                       |   16 +-
 gcc/c-family/c-ada-spec.c              |    8 +-
 gcc/c-family/c-common.c                |   90 +--
 gcc/c-family/c-cppbuiltin.c            |   54 +-
 gcc/c-family/c-format.c                |   30 +-
 gcc/c-family/c-gimplify.c              |    4 +-
 gcc/c-family/c-lex.c                   |   18 +-
 gcc/c-family/c-opts.c                  |  158 ++---
 gcc/c-family/c-pch.c                   |   10 +-
 gcc/c-family/c-pragma.c                |   32 +-
 gcc/c-family/c.opt                     |   14 +-
 gcc/c-family/cilk.c                    |    2 +-
 gcc/c/c-aux-info.c                     |    2 +-
 gcc/c/c-decl.c                         |  146 ++---
 gcc/c/c-parser.c                       |  142 ++---
 gcc/c/c-typeck.c                       |  156 ++---
 gcc/caller-save.c                      |    4 +-
 gcc/calls.c                            |   22 +-
 gcc/cfgbuild.c                         |    2 +-
 gcc/cfgcleanup.c                       |   10 +-
 gcc/cfgexpand.c                        |   38 +-
 gcc/cfgloopanal.c                      |    4 +-
 gcc/cfgrtl.c                           |   16 +-
 gcc/cgraph.c                           |   12 +-
 gcc/cgraphclones.c                     |    6 +-
 gcc/cgraphunit.c                       |   66 +-
 gcc/cilk.h                             |    2 +-
 gcc/combine-stack-adj.c                |    2 +-
 gcc/combine.c                          |   22 +-
 gcc/common/config/arc/arc-common.c     |    2 +-
 gcc/compare-elim.c                     |    2 +-
 gcc/config/aarch64/aarch64.c           |   48 +-
 gcc/config/aarch64/aarch64.h           |    6 +-
 gcc/config/aarch64/aarch64.md          |    2 +-
 gcc/config/alpha/alpha.c               |  154 ++---
 gcc/config/alpha/alpha.h               |    2 +-
 gcc/config/alpha/alpha.md              |    8 +-
 gcc/config/alpha/elf.h                 |    4 +-
 gcc/config/alpha/linux.h               |    6 +-
 gcc/config/alpha/predicates.md         |    4 +-
 gcc/config/alpha/vms.h                 |   16 +-
 gcc/config/arc/arc.c                   |  138 ++--
 gcc/config/arc/arc.h                   |   38 +-
 gcc/config/arc/arc.md                  |   62 +-
 gcc/config/arc/arc600.md               |    4 +-
 gcc/config/arc/constraints.md          |    6 +-
 gcc/config/arc/predicates.md           |    2 +-
 gcc/config/arm/aout.h                  |    4 +-
 gcc/config/arm/arm-fixed.md            |    8 +-
 gcc/config/arm/arm-modes.def           |    2 +-
 gcc/config/arm/arm.c                   |  332 +++++-----
 gcc/config/arm/arm.h                   |   52 +-
 gcc/config/arm/arm.md                  |   84 +--
 gcc/config/arm/coff.h                  |    2 +-
 gcc/config/arm/constraints.md          |    6 +-
 gcc/config/arm/elf.h                   |    8 +-
 gcc/config/arm/neon.md                 |   56 +-
 gcc/config/arm/predicates.md           |    2 +-
 gcc/config/arm/thumb2.md               |   42 +-
 gcc/config/arm/vec-common.md           |   10 +-
 gcc/config/arm/vfp.md                  |   10 +-
 gcc/config/avr/avr-c.c                 |    2 +-
 gcc/config/avr/avr-fixed.md            |    2 +-
 gcc/config/avr/avr-log.c               |    6 +-
 gcc/config/avr/avr.c                   |   94 +--
 gcc/config/avr/avr.h                   |    6 +-
 gcc/config/avr/avr.md                  |   10 +-
 gcc/config/bfin/bfin-opts.h            |    2 +-
 gcc/config/bfin/bfin-protos.h          |   18 +-
 gcc/config/bfin/bfin.c                 |   68 +-
 gcc/config/bfin/bfin.h                 |   16 +-
 gcc/config/bfin/bfin.md                |   10 +-
 gcc/config/c6x/c6x.c                   |   74 +--
 gcc/config/c6x/c6x.h                   |   10 +-
 gcc/config/c6x/c6x.md                  |   40 +-
 gcc/config/cr16/cr16.c                 |   56 +-
 gcc/config/cr16/cr16.md                |   16 +-
 gcc/config/cris/constraints.md         |    4 +-
 gcc/config/cris/cris.c                 |   88 +--
 gcc/config/cris/cris.h                 |   12 +-
 gcc/config/cris/cris.md                |   28 +-
 gcc/config/cris/linux.h                |    2 +-
 gcc/config/cris/predicates.md          |    4 +-
 gcc/config/darwin-c.c                  |   22 +-
 gcc/config/darwin.c                    |  116 ++--
 gcc/config/darwin.h                    |   18 +-
 gcc/config/elfos.h                     |    6 +-
 gcc/config/epiphany/constraints.md     |    8 +-
 gcc/config/epiphany/epiphany-modes.def |    8 +-
 gcc/config/epiphany/epiphany.c         |   76 +--
 gcc/config/epiphany/epiphany.h         |   24 +-
 gcc/config/epiphany/epiphany.md        |   38 +-
 gcc/config/epiphany/predicates.md      |    2 +-
 gcc/config/epiphany/resolve-sw-modes.c |    2 +-
 gcc/config/fr30/fr30.c                 |    2 +-
 gcc/config/frv/frv.c                   |  114 ++--
 gcc/config/frv/frv.h                   |   44 +-
 gcc/config/frv/frv.md                  |    6 +-
 gcc/config/frv/predicates.md           |    8 +-
 gcc/config/h8300/constraints.md        |    2 +-
 gcc/config/h8300/elf.h                 |    2 +-
 gcc/config/h8300/h8300.c               |   28 +-
 gcc/config/h8300/h8300.md              |    4 +-
 gcc/config/i386/constraints.md         |    2 +-
 gcc/config/i386/cygming.h              |   18 +-
 gcc/config/i386/darwin.h               |   10 +-
 gcc/config/i386/djgpp.h                |    2 +-
 gcc/config/i386/i386-c.c               |   14 +-
 gcc/config/i386/i386-interix.h         |    2 +-
 gcc/config/i386/i386.c                 |  398 ++++++------
 gcc/config/i386/i386.h                 |   38 +-
 gcc/config/i386/i386.md                |  210 +++----
 gcc/config/i386/mingw32.h              |    4 +-
 gcc/config/i386/mmx.md                 |    4 +-
 gcc/config/i386/msformat-c.c           |    2 +-
 gcc/config/i386/netbsd-elf.h           |    2 +-
 gcc/config/i386/netbsd64.h             |    4 +-
 gcc/config/i386/openbsd.h              |    2 +-
 gcc/config/i386/openbsdelf.h           |    2 +-
 gcc/config/i386/predicates.md          |   42 +-
 gcc/config/i386/sol2.h                 |    4 +-
 gcc/config/i386/sse.md                 |   20 +-
 gcc/config/i386/winnt-cxx.c            |    4 +-
 gcc/config/i386/winnt.c                |   12 +-
 gcc/config/ia64/constraints.md         |    4 +-
 gcc/config/ia64/div.md                 |   60 +-
 gcc/config/ia64/ia64.c                 |   92 +--
 gcc/config/ia64/ia64.h                 |    6 +-
 gcc/config/ia64/ia64.md                |    2 +-
 gcc/config/ia64/predicates.md          |    2 +-
 gcc/config/iq2000/iq2000.c             |   20 +-
 gcc/config/iq2000/iq2000.h             |    2 +-
 gcc/config/iq2000/iq2000.md            |    6 +-
 gcc/config/linux.h                     |    6 +-
 gcc/config/lm32/lm32.c                 |   10 +-
 gcc/config/lm32/lm32.h                 |   12 +-
 gcc/config/lm32/lm32.md                |   22 +-
 gcc/config/lm32/predicates.md          |    2 +-
 gcc/config/m32c/m32c.c                 |   12 +-
 gcc/config/m32c/m32c.h                 |    8 +-
 gcc/config/m32r/m32r-opts.h            |   16 +-
 gcc/config/m32r/m32r.c                 |   34 +-
 gcc/config/m32r/m32r.h                 |   18 +-
 gcc/config/m32r/m32r.md                |   56 +-
 gcc/config/m32r/predicates.md          |    2 +-
 gcc/config/m68k/constraints.md         |    2 +-
 gcc/config/m68k/linux.h                |    2 +-
 gcc/config/m68k/m68k.c                 |   72 +--
 gcc/config/m68k/m68k.h                 |    4 +-
 gcc/config/m68k/m68k.md                |   10 +-
 gcc/config/m68k/netbsd-elf.h           |    2 +-
 gcc/config/mcore/mcore-elf.h           |    4 +-
 gcc/config/mcore/mcore.c               |   14 +-
 gcc/config/mcore/mcore.md              |    6 +-
 gcc/config/mep/mep-pragma.c            |    8 +-
 gcc/config/mep/mep.c                   |   60 +-
 gcc/config/mep/mep.h                   |    8 +-
 gcc/config/mep/mep.md                  |    4 +-
 gcc/config/microblaze/microblaze.c     |   96 +--
 gcc/config/microblaze/microblaze.h     |   10 +-
 gcc/config/microblaze/microblaze.md    |   28 +-
 gcc/config/microblaze/predicates.md    |    4 +-
 gcc/config/mips/mips-ps-3d.md          |   32 +-
 gcc/config/mips/mips.c                 |  334 +++++-----
 gcc/config/mips/mips.h                 |   72 +--
 gcc/config/mips/mips.md                |  140 ++---
 gcc/config/mips/netbsd.h               |    8 +-
 gcc/config/mips/sb1.md                 |    2 +-
 gcc/config/mips/sdemtk.h               |    4 +-
 gcc/config/mmix/mmix.c                 |    8 +-
 gcc/config/mn10300/constraints.md      |    2 +-
 gcc/config/mn10300/mn10300.c           |   40 +-
 gcc/config/mn10300/mn10300.h           |    6 +-
 gcc/config/mn10300/mn10300.md          |   14 +-
 gcc/config/mn10300/predicates.md       |    2 +-
 gcc/config/moxie/moxie.c               |    2 +-
 gcc/config/msp430/msp430.c             |   58 +-
 gcc/config/msp430/msp430.md            |    8 +-
 gcc/config/nds32/nds32.c               |   64 +-
 gcc/config/nds32/nds32.h               |    8 +-
 gcc/config/nios2/nios2.c               |   38 +-
 gcc/config/nios2/nios2.h               |    4 +-
 gcc/config/nios2/nios2.md              |    6 +-
 gcc/config/openbsd.h                   |    6 +-
 gcc/config/pa/pa-hpux10.h              |    2 +-
 gcc/config/pa/pa-hpux11.h              |    4 +-
 gcc/config/pa/pa.c                     |  152 ++---
 gcc/config/pa/pa.h                     |   18 +-
 gcc/config/pa/pa.md                    |  162 ++---
 gcc/config/pa/predicates.md            |    6 +-
 gcc/config/pdp11/pdp11.c               |   16 +-
 gcc/config/pdp11/pdp11.md              |    2 +-
 gcc/config/picochip/picochip.c         |   58 +-
 gcc/config/picochip/picochip.h         |    2 +-
 gcc/config/picochip/picochip.md        |    2 +-
 gcc/config/rl78/rl78.c                 |   20 +-
 gcc/config/rl78/rl78.h                 |    8 +-
 gcc/config/rs6000/750cl.h              |    2 +-
 gcc/config/rs6000/aix43.h              |    4 +-
 gcc/config/rs6000/aix51.h              |    2 +-
 gcc/config/rs6000/aix52.h              |    4 +-
 gcc/config/rs6000/aix53.h              |    4 +-
 gcc/config/rs6000/aix61.h              |   22 +-
 gcc/config/rs6000/altivec.md           |   16 +-
 gcc/config/rs6000/darwin.h             |   16 +-
 gcc/config/rs6000/darwin.md            |   14 +-
 gcc/config/rs6000/e500.h               |   10 +-
 gcc/config/rs6000/eabialtivec.h        |    2 +-
 gcc/config/rs6000/freebsd.h            |    2 +-
 gcc/config/rs6000/freebsd64.h          |   46 +-
 gcc/config/rs6000/linux.h              |    8 +-
 gcc/config/rs6000/linux64.h            |   62 +-
 gcc/config/rs6000/linuxaltivec.h       |    2 +-
 gcc/config/rs6000/paired.md            |    4 +-
 gcc/config/rs6000/predicates.md        |   12 +-
 gcc/config/rs6000/rs6000-c.c           |   26 +-
 gcc/config/rs6000/rs6000.c             | 1072 ++++++++++++++++----------------
 gcc/config/rs6000/rs6000.h             |   44 +-
 gcc/config/rs6000/rs6000.md            |  196 +++---
 gcc/config/rs6000/singlefp.h           |    6 +-
 gcc/config/rs6000/spe.md               |   36 +-
 gcc/config/rs6000/sysv4.h              |  176 +++---
 gcc/config/rs6000/vector.md            |    2 +-
 gcc/config/rs6000/vsx.md               |    4 +-
 gcc/config/rs6000/vxworks.h            |    2 +-
 gcc/config/rs6000/xcoff.h              |    4 +-
 gcc/config/rs6000/xfpu.h               |    2 +-
 gcc/config/rx/rx.c                     |   54 +-
 gcc/config/rx/rx.h                     |   16 +-
 gcc/config/rx/rx.md                    |   20 +-
 gcc/config/s390/predicates.md          |    6 +-
 gcc/config/s390/s390.c                 |  190 +++---
 gcc/config/s390/s390.h                 |   26 +-
 gcc/config/s390/s390.md                |   16 +-
 gcc/config/score/score.c               |   24 +-
 gcc/config/score/score.h               |    2 +-
 gcc/config/score/score.md              |   18 +-
 gcc/config/sh/linux.h                  |   12 +-
 gcc/config/sh/netbsd-elf.h             |    2 +-
 gcc/config/sh/sh-mem.cc                |   16 +-
 gcc/config/sh/sh.c                     |  350 +++++------
 gcc/config/sh/sh.h                     |   28 +-
 gcc/config/sh/sh.md                    |  126 ++--
 gcc/config/sh/sh_optimize_sett_clrt.cc |    2 +-
 gcc/config/sh/sh_treg_combine.cc       |    2 +-
 gcc/config/sh/sync.md                  |   14 +-
 gcc/config/sh/vxworks.h                |    2 +-
 gcc/config/sol2.c                      |    2 +-
 gcc/config/sol2.h                      |    2 +-
 gcc/config/sparc/sol2.h                |    4 +-
 gcc/config/sparc/sparc.c               |  268 ++++----
 gcc/config/sparc/sparc.h               |   24 +-
 gcc/config/sparc/sparc.md              |   56 +-
 gcc/config/sparc/sync.md               |    8 +-
 gcc/config/spu/spu-builtins.md         |    8 +-
 gcc/config/spu/spu-c.c                 |    6 +-
 gcc/config/spu/spu.c                   |   96 +--
 gcc/config/spu/spu.h                   |    4 +-
 gcc/config/spu/spu.md                  |   24 +-
 gcc/config/stormy16/stormy16.c         |    2 +-
 gcc/config/tilegx/tilegx.c             |   74 +--
 gcc/config/tilegx/tilegx.h             |    4 +-
 gcc/config/tilegx/tilegx.md            |   40 +-
 gcc/config/tilepro/tilepro.c           |   58 +-
 gcc/config/tilepro/tilepro.h           |    4 +-
 gcc/config/tilepro/tilepro.md          |   12 +-
 gcc/config/v850/predicates.md          |    8 +-
 gcc/config/v850/v850.c                 |   34 +-
 gcc/config/v850/v850.h                 |    2 +-
 gcc/config/v850/v850.md                |   38 +-
 gcc/config/vax/constraints.md          |    2 +-
 gcc/config/vax/elf.h                   |    4 +-
 gcc/config/vax/predicates.md           |   10 +-
 gcc/config/vax/vax.c                   |   44 +-
 gcc/config/vax/vax.md                  |   16 +-
 gcc/config/vms/vms-c.c                 |    8 +-
 gcc/config/vms/vms.c                   |   20 +-
 gcc/config/vms/vms.h                   |   10 +-
 gcc/config/vxworks.c                   |    6 +-
 gcc/config/xtensa/predicates.md        |    4 +-
 gcc/config/xtensa/xtensa.c             |   28 +-
 gcc/config/xtensa/xtensa.h             |    8 +-
 gcc/config/xtensa/xtensa.md            |   10 +-
 gcc/convert.c                          |   28 +-
 gcc/coverage.c                         |   26 +-
 gcc/cp/call.c                          |   62 +-
 gcc/cp/class.c                         |   44 +-
 gcc/cp/cp-cilkplus.c                   |    2 +-
 gcc/cp/cp-gimplify.c                   |    6 +-
 gcc/cp/cvt.c                           |    6 +-
 gcc/cp/decl.c                          |  110 ++--
 gcc/cp/decl2.c                         |   70 +--
 gcc/cp/error.c                         |   20 +-
 gcc/cp/except.c                        |   20 +-
 gcc/cp/friend.c                        |    2 +-
 gcc/cp/init.c                          |   24 +-
 gcc/cp/lex.c                           |   18 +-
 gcc/cp/mangle.c                        |    8 +-
 gcc/cp/method.c                        |   10 +-
 gcc/cp/name-lookup.c                   |   10 +-
 gcc/cp/optimize.c                      |    2 +-
 gcc/cp/parser.c                        |   78 +--
 gcc/cp/pt.c                            |   18 +-
 gcc/cp/repo.c                          |   10 +-
 gcc/cp/rtti.c                          |    6 +-
 gcc/cp/search.c                        |    4 +-
 gcc/cp/semantics.c                     |   44 +-
 gcc/cp/typeck.c                        |   78 +--
 gcc/cp/typeck2.c                       |    4 +-
 gcc/cp/vtable-class-hierarchy.c        |   30 +-
 gcc/cppbuiltin.c                       |   24 +-
 gcc/cprop.c                            |    2 +-
 gcc/cse.c                              |   26 +-
 gcc/cselib.c                           |    4 +-
 gcc/dbxout.c                           |   72 +--
 gcc/dce.c                              |   10 +-
 gcc/ddg.c                              |    6 +-
 gcc/defaults.h                         |    2 +-
 gcc/df-core.c                          |    8 +-
 gcc/df-problems.c                      |    2 +-
 gcc/dojump.c                           |    4 +-
 gcc/dse.c                              |    6 +-
 gcc/dumpfile.c                         |    2 +-
 gcc/dwarf2asm.c                        |   30 +-
 gcc/dwarf2cfi.c                        |   18 +-
 gcc/dwarf2out.c                        |  416 ++++++-------
 gcc/emit-rtl.c                         |    4 +-
 gcc/except.c                           |   16 +-
 gcc/explow.c                           |   20 +-
 gcc/expmed.c                           |   20 +-
 gcc/expr.c                             |   24 +-
 gcc/final.c                            |  100 +--
 gcc/flags.h                            |    4 +-
 gcc/fold-const.c                       |  128 ++--
 gcc/fortran/arith.c                    |    2 +-
 gcc/fortran/cpp.c                      |    6 +-
 gcc/fortran/decl.c                     |    2 +-
 gcc/fortran/error.c                    |   24 +-
 gcc/fortran/f95-lang.c                 |    6 +-
 gcc/fortran/frontend-passes.c          |    2 +-
 gcc/fortran/io.c                       |    4 +-
 gcc/fortran/options.c                  |   34 +-
 gcc/fortran/primary.c                  |    2 +-
 gcc/fortran/resolve.c                  |    8 +-
 gcc/fortran/scanner.c                  |   10 +-
 gcc/fortran/trans-decl.c               |   16 +-
 gcc/fortran/trans-expr.c               |    6 +-
 gcc/fortran/trans-intrinsic.c          |    4 +-
 gcc/fortran/trans-stmt.c               |    2 +-
 gcc/fortran/trans.c                    |    4 +-
 gcc/function.c                         |   48 +-
 gcc/fwprop.c                           |    2 +-
 gcc/gcc.c                              |  102 +--
 gcc/gcse.c                             |   38 +-
 gcc/ggc-page.c                         |    4 +-
 gcc/gimple-fold.c                      |   12 +-
 gcc/gimple-low.c                       |    4 +-
 gcc/gimple-ssa-isolate-paths.c         |   12 +-
 gcc/gimple-ssa-strength-reduction.c    |    6 +-
 gcc/gimple.c                           |    2 +-
 gcc/gimplify.c                         |   24 +-
 gcc/go/go-backend.c                    |    2 +-
 gcc/go/go-lang.c                       |    8 +-
 gcc/go/gofrontend/expressions.cc       |    8 +-
 gcc/graphite-clast-to-gimple.c         |    6 +-
 gcc/graphite-poly.c                    |   12 +-
 gcc/graphite-sese-to-poly.c            |   10 +-
 gcc/graphite.c                         |   18 +-
 gcc/haifa-sched.c                      |   34 +-
 gcc/ifcvt.c                            |   14 +-
 gcc/incpath.c                          |    8 +-
 gcc/init-regs.c                        |    6 +-
 gcc/internal-fn.c                      |    2 +-
 gcc/ipa-cp.c                           |   12 +-
 gcc/ipa-devirt.c                       |   24 +-
 gcc/ipa-inline-analysis.c              |   24 +-
 gcc/ipa-inline-transform.c             |    4 +-
 gcc/ipa-inline.c                       |   46 +-
 gcc/ipa-profile.c                      |    8 +-
 gcc/ipa-prop.c                         |   24 +-
 gcc/ipa-prop.h                         |    2 +-
 gcc/ipa-pure-const.c                   |   10 +-
 gcc/ipa-reference.c                    |    2 +-
 gcc/ipa-split.c                        |   12 +-
 gcc/ipa.c                              |   46 +-
 gcc/ira-build.c                        |    6 +-
 gcc/ira-color.c                        |   18 +-
 gcc/ira-conflicts.c                    |   10 +-
 gcc/ira-costs.c                        |   32 +-
 gcc/ira-int.h                          |    2 +-
 gcc/ira.c                              |   74 +--
 gcc/java/boehm.c                       |    8 +-
 gcc/java/builtins.c                    |   16 +-
 gcc/java/class.c                       |   76 +--
 gcc/java/constants.c                   |    2 +-
 gcc/java/decl.c                        |   10 +-
 gcc/java/except.c                      |    4 +-
 gcc/java/expr.c                        |   54 +-
 gcc/java/java-tree.h                   |    2 +-
 gcc/java/jcf-parse.c                   |   28 +-
 gcc/java/jcf.h                         |    2 +-
 gcc/java/lang.c                        |   20 +-
 gcc/java/parse.h                       |    2 +-
 gcc/java/typeck.c                      |    2 +-
 gcc/java/verify-glue.c                 |    2 +-
 gcc/langhooks.c                        |    2 +-
 gcc/loop-init.c                        |   26 +-
 gcc/loop-invariant.c                   |   32 +-
 gcc/loop-iv.c                          |    8 +-
 gcc/loop-unroll.c                      |   24 +-
 gcc/lower-subreg.c                     |    2 +-
 gcc/lra-constraints.c                  |    2 +-
 gcc/lra-spills.c                       |    2 +-
 gcc/lra.c                              |    2 +-
 gcc/lto-cgraph.c                       |   12 +-
 gcc/lto-compress.c                     |    2 +-
 gcc/lto-section-in.c                   |    4 +-
 gcc/lto-section-out.c                  |    2 +-
 gcc/lto-streamer-in.c                  |    4 +-
 gcc/lto-streamer-out.c                 |   18 +-
 gcc/lto-streamer.c                     |    6 +-
 gcc/lto/lto-lang.c                     |   32 +-
 gcc/lto/lto-partition.c                |   14 +-
 gcc/lto/lto-symtab.c                   |    4 +-
 gcc/lto/lto.c                          |   88 +--
 gcc/mode-switching.c                   |    2 +-
 gcc/modulo-sched.c                     |   14 +-
 gcc/objc/objc-act.c                    |   82 +--
 gcc/objc/objc-encoding.c               |   16 +-
 gcc/objc/objc-gnu-runtime-abi-01.c     |   20 +-
 gcc/objc/objc-next-runtime-abi-01.c    |   40 +-
 gcc/objc/objc-next-runtime-abi-02.c    |   14 +-
 gcc/objc/objc-runtime-shared-support.c |    4 +-
 gcc/omp-low.c                          |   42 +-
 gcc/optabs.c                           |   12 +-
 gcc/opth-gen.awk                       |   15 +-
 gcc/opts-global.c                      |    8 +-
 gcc/opts.c                             |    6 +-
 gcc/passes.c                           |   46 +-
 gcc/plugin.c                           |    4 +-
 gcc/postreload-gcse.c                  |    6 +-
 gcc/postreload.c                       |    4 +-
 gcc/predict.c                          |   24 +-
 gcc/print-rtl.c                        |   10 +-
 gcc/print-tree.c                       |    2 +-
 gcc/profile.c                          |   14 +-
 gcc/real.h                             |   10 +-
 gcc/recog.c                            |   16 +-
 gcc/ree.c                              |    2 +-
 gcc/reg-stack.c                        |    6 +-
 gcc/regcprop.c                         |    2 +-
 gcc/regrename.c                        |    2 +-
 gcc/regs.h                             |    4 +-
 gcc/reload.c                           |   10 +-
 gcc/reload1.c                          |   24 +-
 gcc/reorg.c                            |    4 +-
 gcc/rtl.h                              |    2 +-
 gcc/rtlanal.c                          |   10 +-
 gcc/sched-ebb.c                        |    4 +-
 gcc/sched-rgn.c                        |   36 +-
 gcc/sdbout.c                           |    2 +-
 gcc/sel-sched-ir.c                     |   16 +-
 gcc/sel-sched-ir.h                     |    4 +-
 gcc/sel-sched.c                        |    4 +-
 gcc/simplify-rtx.c                     |   28 +-
 gcc/stmt.c                             |    8 +-
 gcc/stor-layout.c                      |   20 +-
 gcc/store-motion.c                     |    2 +-
 gcc/symtab.c                           |    4 +-
 gcc/targhooks.c                        |   30 +-
 gcc/toplev.c                           |  378 +++++------
 gcc/tracer.c                           |    6 +-
 gcc/trans-mem.c                        |   10 +-
 gcc/tree-call-cdce.c                   |    2 +-
 gcc/tree-cfg.c                         |   10 +-
 gcc/tree-cfgcleanup.c                  |   28 +-
 gcc/tree-complex.c                     |    6 +-
 gcc/tree-data-ref.c                    |    2 +-
 gcc/tree-eh.c                          |   38 +-
 gcc/tree-if-conv.c                     |   34 +-
 gcc/tree-inline.c                      |   22 +-
 gcc/tree-loop-distribution.c           |   10 +-
 gcc/tree-nested.c                      |   10 +-
 gcc/tree-nrv.c                         |    2 +-
 gcc/tree-outof-ssa.c                   |    4 +-
 gcc/tree-parloops.c                    |   10 +-
 gcc/tree-predcom.c                     |    4 +-
 gcc/tree-profile.c                     |   24 +-
 gcc/tree-sra.c                         |    4 +-
 gcc/tree-ssa-alias.c                   |   14 +-
 gcc/tree-ssa-ccp.c                     |    8 +-
 gcc/tree-ssa-coalesce.c                |    4 +-
 gcc/tree-ssa-copy.c                    |    2 +-
 gcc/tree-ssa-copyrename.c              |    8 +-
 gcc/tree-ssa-dce.c                     |    4 +-
 gcc/tree-ssa-dom.c                     |    2 +-
 gcc/tree-ssa-dse.c                     |    2 +-
 gcc/tree-ssa-forwprop.c                |    2 +-
 gcc/tree-ssa-live.c                    |    8 +-
 gcc/tree-ssa-loop-ch.c                 |    4 +-
 gcc/tree-ssa-loop-im.c                 |   14 +-
 gcc/tree-ssa-loop-ivcanon.c            |   14 +-
 gcc/tree-ssa-loop-niter.c              |   20 +-
 gcc/tree-ssa-loop-prefetch.c           |    2 +-
 gcc/tree-ssa-loop-unswitch.c           |    2 +-
 gcc/tree-ssa-loop.c                    |   10 +-
 gcc/tree-ssa-math-opts.c               |   30 +-
 gcc/tree-ssa-operands.c                |    4 +-
 gcc/tree-ssa-phiopt.c                  |   14 +-
 gcc/tree-ssa-phiprop.c                 |    2 +-
 gcc/tree-ssa-pre.c                     |    8 +-
 gcc/tree-ssa-reassoc.c                 |    8 +-
 gcc/tree-ssa-sccvn.c                   |    4 +-
 gcc/tree-ssa-sink.c                    |    2 +-
 gcc/tree-ssa-strlen.c                  |    2 +-
 gcc/tree-ssa-structalias.c             |   10 +-
 gcc/tree-ssa-tail-merge.c              |    2 +-
 gcc/tree-ssa-ter.c                     |    4 +-
 gcc/tree-ssa-uncprop.c                 |    2 +-
 gcc/tree-ssa-uninit.c                  |    4 +-
 gcc/tree-streamer-out.c                |    2 +-
 gcc/tree-switch-conversion.c           |    6 +-
 gcc/tree-tailcall.c                    |    4 +-
 gcc/tree-vect-data-refs.c              |    2 +-
 gcc/tree-vect-generic.c                |    4 +-
 gcc/tree-vect-loop.c                   |    6 +-
 gcc/tree-vectorizer.c                  |    6 +-
 gcc/tree-vectorizer.h                  |    6 +-
 gcc/tree-vrp.c                         |   22 +-
 gcc/tree.c                             |   30 +-
 gcc/tree.h                             |   10 +-
 gcc/tsan.c                             |    6 +-
 gcc/ubsan.c                            |   12 +-
 gcc/value-prof.c                       |    4 +-
 gcc/var-tracking.c                     |   30 +-
 gcc/varasm.c                           |   94 +--
 gcc/varpool.c                          |    4 +-
 gcc/vmsdbgout.c                        |   84 +--
 gcc/vtable-verify.c                    |    4 +-
 gcc/web.c                              |    2 +-
 gcc/xcoffout.c                         |    6 +-
 553 files changed, 7478 insertions(+), 7479 deletions(-)

-- 
1.8.5.3

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Make option-lookup macros explicit
  2014-05-09 21:12 [PATCH 0/2] Make option-lookup macros explicit David Malcolm
  2014-05-09 21:12 ` [PATCH 1/2] Handwritten part of introduction of GCC_OPTION macro David Malcolm
  2014-05-09 21:12 ` [PATCH 2/2] Autogenerated " David Malcolm
@ 2014-05-10  0:28 ` Trevor Saunders
  2014-05-14 18:31 ` Jeff Law
  3 siblings, 0 replies; 7+ messages in thread
From: Trevor Saunders @ 2014-05-10  0:28 UTC (permalink / raw)
  To: David Malcolm; +Cc: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 32500 bytes --]

On Fri, May 09, 2014 at 05:14:45PM -0400, David Malcolm wrote:
> GCC's code is full of references to options like:
> 
>   static bool
>   gate_vrp (void)
>   {
>     return flag_tree_vrp != 0;
>   }
> 
> where "flag_tree_vrp" is actually an autogenerated macro to:
> 
>   global_options.x_flag_tree_vrp
> 
> This is deeply confusing to a newbie (and indeed still to me after ~two
> years of working with GCC's internals) e.g. when stepping through code and
> trying to query the value in gdb - what is an actual variable, and what is
> an option?  Why isn't tab-completion working?  etc
> 
> The idea of the following patch series is to replace the above with:
> 
>   static bool
>   gate_vrp (void)
>   {
>     return GCC_OPTION (flag_tree_vrp) != 0;
>   }

Well, these functions take a function * now as of my refactor a week or two
ago.

> thus making it obvious when macro magic is occurring.

what exactly does the x_ and macro thing buy us anyway, imo
opts.vrp_enabled or opts.vrp_enabled () seems fine.

> There are two patches, a hand-written one, and an autogenerated one.
> 
> The latter is 2.2MB in size, so I've uploaded it to:
>  http://dmalcolm.fedorapeople.org/gcc/large-patches/6fb783b39f914574a1889aa51d06c08cf55678b4-0002-Autogenerated-part-of-introduction-of-GCC_OPTION-mac.patch
> 
> The autogenerated patch was generated by a script:
>  https://github.com/davidmalcolm/gcc-refactoring-scripts/blob/master/refactor_options.py
> which has a selftest suite here:
>  https://github.com/davidmalcolm/gcc-refactoring-scripts/blob/master/test_refactor_options.py
> 
> From a global-state-removal perspective, it might be nice to associate
> options with a gcc::context, rather than have a single instance of options,
> though that isn't addressed in these patches.

I thought we wanted to hang options off the function  to make handling
lto / optimization pragmas / attributes easier?

 If we want to do that, or for that matter the context thing, I'd think
 the natural ordering would be to pass the argument to the get_opt macro
 / function, and then just change its implementation to not look at the
 global.  That would have the advantage of less churn ;)

 Trev

> (e.g. perhaps explicitly adding a gcc::context arg to the macro???)
> 
> The patches were successfully bootstrapped&regrtested on top
> of r208714 (rather old, 2014-03-20) albeit just on x86_64-unknown-linux-gnu
> (Fedora 20), with
>   --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto
> (i.e. every frontend, I think).
> 
> OK for trunk, after 4.9.1 is released?  (clearly I need to test on
> more targets first, given how much config/* code this touches, but I
> wanted to sound the idea out on this list).
> 
> Dave
> 
> David Malcolm (2):
>   Handwritten part of introduction of GCC_OPTION macro
>   Autogenerated part of introduction of GCC_OPTION macro
> 
>  gcc/ada/gcc-interface/decl.c           |   17 +-
>  gcc/ada/gcc-interface/gigi.h           |    6 +-
>  gcc/ada/gcc-interface/misc.c           |   31 +-
>  gcc/ada/gcc-interface/trans.c          |   32 +-
>  gcc/ada/gcc-interface/utils.c          |    6 +-
>  gcc/ada/gcc-interface/utils2.c         |    2 +-
>  gcc/alias.c                            |   14 +-
>  gcc/asan.c                             |   14 +-
>  gcc/auto-inc-dec.c                     |    2 +-
>  gcc/bb-reorder.c                       |   14 +-
>  gcc/bt-load.c                          |   20 +-
>  gcc/builtins.c                         |  112 ++--
>  gcc/builtins.def                       |   16 +-
>  gcc/c-family/c-ada-spec.c              |    8 +-
>  gcc/c-family/c-common.c                |   90 +--
>  gcc/c-family/c-cppbuiltin.c            |   54 +-
>  gcc/c-family/c-format.c                |   30 +-
>  gcc/c-family/c-gimplify.c              |    4 +-
>  gcc/c-family/c-lex.c                   |   18 +-
>  gcc/c-family/c-opts.c                  |  158 ++---
>  gcc/c-family/c-pch.c                   |   10 +-
>  gcc/c-family/c-pragma.c                |   32 +-
>  gcc/c-family/c.opt                     |   14 +-
>  gcc/c-family/cilk.c                    |    2 +-
>  gcc/c/c-aux-info.c                     |    2 +-
>  gcc/c/c-decl.c                         |  146 ++---
>  gcc/c/c-parser.c                       |  142 ++---
>  gcc/c/c-typeck.c                       |  156 ++---
>  gcc/caller-save.c                      |    4 +-
>  gcc/calls.c                            |   22 +-
>  gcc/cfgbuild.c                         |    2 +-
>  gcc/cfgcleanup.c                       |   10 +-
>  gcc/cfgexpand.c                        |   38 +-
>  gcc/cfgloopanal.c                      |    4 +-
>  gcc/cfgrtl.c                           |   16 +-
>  gcc/cgraph.c                           |   12 +-
>  gcc/cgraphclones.c                     |    6 +-
>  gcc/cgraphunit.c                       |   66 +-
>  gcc/cilk.h                             |    2 +-
>  gcc/combine-stack-adj.c                |    2 +-
>  gcc/combine.c                          |   22 +-
>  gcc/common/config/arc/arc-common.c     |    2 +-
>  gcc/compare-elim.c                     |    2 +-
>  gcc/config/aarch64/aarch64.c           |   48 +-
>  gcc/config/aarch64/aarch64.h           |    6 +-
>  gcc/config/aarch64/aarch64.md          |    2 +-
>  gcc/config/alpha/alpha.c               |  154 ++---
>  gcc/config/alpha/alpha.h               |    2 +-
>  gcc/config/alpha/alpha.md              |    8 +-
>  gcc/config/alpha/elf.h                 |    4 +-
>  gcc/config/alpha/linux.h               |    6 +-
>  gcc/config/alpha/predicates.md         |    4 +-
>  gcc/config/alpha/vms.h                 |   16 +-
>  gcc/config/arc/arc.c                   |  138 ++--
>  gcc/config/arc/arc.h                   |   38 +-
>  gcc/config/arc/arc.md                  |   62 +-
>  gcc/config/arc/arc600.md               |    4 +-
>  gcc/config/arc/constraints.md          |    6 +-
>  gcc/config/arc/predicates.md           |    2 +-
>  gcc/config/arm/aout.h                  |    4 +-
>  gcc/config/arm/arm-fixed.md            |    8 +-
>  gcc/config/arm/arm-modes.def           |    2 +-
>  gcc/config/arm/arm.c                   |  332 +++++-----
>  gcc/config/arm/arm.h                   |   52 +-
>  gcc/config/arm/arm.md                  |   84 +--
>  gcc/config/arm/coff.h                  |    2 +-
>  gcc/config/arm/constraints.md          |    6 +-
>  gcc/config/arm/elf.h                   |    8 +-
>  gcc/config/arm/neon.md                 |   56 +-
>  gcc/config/arm/predicates.md           |    2 +-
>  gcc/config/arm/thumb2.md               |   42 +-
>  gcc/config/arm/vec-common.md           |   10 +-
>  gcc/config/arm/vfp.md                  |   10 +-
>  gcc/config/avr/avr-c.c                 |    2 +-
>  gcc/config/avr/avr-fixed.md            |    2 +-
>  gcc/config/avr/avr-log.c               |    6 +-
>  gcc/config/avr/avr.c                   |   94 +--
>  gcc/config/avr/avr.h                   |    6 +-
>  gcc/config/avr/avr.md                  |   10 +-
>  gcc/config/bfin/bfin-opts.h            |    2 +-
>  gcc/config/bfin/bfin-protos.h          |   18 +-
>  gcc/config/bfin/bfin.c                 |   68 +-
>  gcc/config/bfin/bfin.h                 |   16 +-
>  gcc/config/bfin/bfin.md                |   10 +-
>  gcc/config/c6x/c6x.c                   |   74 +--
>  gcc/config/c6x/c6x.h                   |   10 +-
>  gcc/config/c6x/c6x.md                  |   40 +-
>  gcc/config/cr16/cr16.c                 |   56 +-
>  gcc/config/cr16/cr16.md                |   16 +-
>  gcc/config/cris/constraints.md         |    4 +-
>  gcc/config/cris/cris.c                 |   88 +--
>  gcc/config/cris/cris.h                 |   12 +-
>  gcc/config/cris/cris.md                |   28 +-
>  gcc/config/cris/linux.h                |    2 +-
>  gcc/config/cris/predicates.md          |    4 +-
>  gcc/config/darwin-c.c                  |   22 +-
>  gcc/config/darwin.c                    |  116 ++--
>  gcc/config/darwin.h                    |   18 +-
>  gcc/config/elfos.h                     |    6 +-
>  gcc/config/epiphany/constraints.md     |    8 +-
>  gcc/config/epiphany/epiphany-modes.def |    8 +-
>  gcc/config/epiphany/epiphany.c         |   76 +--
>  gcc/config/epiphany/epiphany.h         |   24 +-
>  gcc/config/epiphany/epiphany.md        |   38 +-
>  gcc/config/epiphany/predicates.md      |    2 +-
>  gcc/config/epiphany/resolve-sw-modes.c |    2 +-
>  gcc/config/fr30/fr30.c                 |    2 +-
>  gcc/config/frv/frv.c                   |  114 ++--
>  gcc/config/frv/frv.h                   |   44 +-
>  gcc/config/frv/frv.md                  |    6 +-
>  gcc/config/frv/predicates.md           |    8 +-
>  gcc/config/h8300/constraints.md        |    2 +-
>  gcc/config/h8300/elf.h                 |    2 +-
>  gcc/config/h8300/h8300.c               |   28 +-
>  gcc/config/h8300/h8300.md              |    4 +-
>  gcc/config/i386/constraints.md         |    2 +-
>  gcc/config/i386/cygming.h              |   18 +-
>  gcc/config/i386/darwin.h               |   10 +-
>  gcc/config/i386/djgpp.h                |    2 +-
>  gcc/config/i386/i386-c.c               |   14 +-
>  gcc/config/i386/i386-interix.h         |    2 +-
>  gcc/config/i386/i386.c                 |  398 ++++++------
>  gcc/config/i386/i386.h                 |   38 +-
>  gcc/config/i386/i386.md                |  210 +++----
>  gcc/config/i386/mingw32.h              |    4 +-
>  gcc/config/i386/mmx.md                 |    4 +-
>  gcc/config/i386/msformat-c.c           |    2 +-
>  gcc/config/i386/netbsd-elf.h           |    2 +-
>  gcc/config/i386/netbsd64.h             |    4 +-
>  gcc/config/i386/openbsd.h              |    2 +-
>  gcc/config/i386/openbsdelf.h           |    2 +-
>  gcc/config/i386/predicates.md          |   42 +-
>  gcc/config/i386/sol2.h                 |    4 +-
>  gcc/config/i386/sse.md                 |   20 +-
>  gcc/config/i386/winnt-cxx.c            |    4 +-
>  gcc/config/i386/winnt.c                |   12 +-
>  gcc/config/ia64/constraints.md         |    4 +-
>  gcc/config/ia64/div.md                 |   60 +-
>  gcc/config/ia64/ia64.c                 |   92 +--
>  gcc/config/ia64/ia64.h                 |    6 +-
>  gcc/config/ia64/ia64.md                |    2 +-
>  gcc/config/ia64/predicates.md          |    2 +-
>  gcc/config/iq2000/iq2000.c             |   20 +-
>  gcc/config/iq2000/iq2000.h             |    2 +-
>  gcc/config/iq2000/iq2000.md            |    6 +-
>  gcc/config/linux.h                     |    6 +-
>  gcc/config/lm32/lm32.c                 |   10 +-
>  gcc/config/lm32/lm32.h                 |   12 +-
>  gcc/config/lm32/lm32.md                |   22 +-
>  gcc/config/lm32/predicates.md          |    2 +-
>  gcc/config/m32c/m32c.c                 |   12 +-
>  gcc/config/m32c/m32c.h                 |    8 +-
>  gcc/config/m32r/m32r-opts.h            |   16 +-
>  gcc/config/m32r/m32r.c                 |   34 +-
>  gcc/config/m32r/m32r.h                 |   18 +-
>  gcc/config/m32r/m32r.md                |   56 +-
>  gcc/config/m32r/predicates.md          |    2 +-
>  gcc/config/m68k/constraints.md         |    2 +-
>  gcc/config/m68k/linux.h                |    2 +-
>  gcc/config/m68k/m68k.c                 |   72 +--
>  gcc/config/m68k/m68k.h                 |    4 +-
>  gcc/config/m68k/m68k.md                |   10 +-
>  gcc/config/m68k/netbsd-elf.h           |    2 +-
>  gcc/config/mcore/mcore-elf.h           |    4 +-
>  gcc/config/mcore/mcore.c               |   14 +-
>  gcc/config/mcore/mcore.md              |    6 +-
>  gcc/config/mep/mep-pragma.c            |    8 +-
>  gcc/config/mep/mep.c                   |   60 +-
>  gcc/config/mep/mep.h                   |    8 +-
>  gcc/config/mep/mep.md                  |    4 +-
>  gcc/config/microblaze/microblaze.c     |   96 +--
>  gcc/config/microblaze/microblaze.h     |   10 +-
>  gcc/config/microblaze/microblaze.md    |   28 +-
>  gcc/config/microblaze/predicates.md    |    4 +-
>  gcc/config/mips/mips-ps-3d.md          |   32 +-
>  gcc/config/mips/mips.c                 |  334 +++++-----
>  gcc/config/mips/mips.h                 |   72 +--
>  gcc/config/mips/mips.md                |  140 ++---
>  gcc/config/mips/netbsd.h               |    8 +-
>  gcc/config/mips/sb1.md                 |    2 +-
>  gcc/config/mips/sdemtk.h               |    4 +-
>  gcc/config/mmix/mmix.c                 |    8 +-
>  gcc/config/mn10300/constraints.md      |    2 +-
>  gcc/config/mn10300/mn10300.c           |   40 +-
>  gcc/config/mn10300/mn10300.h           |    6 +-
>  gcc/config/mn10300/mn10300.md          |   14 +-
>  gcc/config/mn10300/predicates.md       |    2 +-
>  gcc/config/moxie/moxie.c               |    2 +-
>  gcc/config/msp430/msp430.c             |   58 +-
>  gcc/config/msp430/msp430.md            |    8 +-
>  gcc/config/nds32/nds32.c               |   64 +-
>  gcc/config/nds32/nds32.h               |    8 +-
>  gcc/config/nios2/nios2.c               |   38 +-
>  gcc/config/nios2/nios2.h               |    4 +-
>  gcc/config/nios2/nios2.md              |    6 +-
>  gcc/config/openbsd.h                   |    6 +-
>  gcc/config/pa/pa-hpux10.h              |    2 +-
>  gcc/config/pa/pa-hpux11.h              |    4 +-
>  gcc/config/pa/pa.c                     |  152 ++---
>  gcc/config/pa/pa.h                     |   18 +-
>  gcc/config/pa/pa.md                    |  162 ++---
>  gcc/config/pa/predicates.md            |    6 +-
>  gcc/config/pdp11/pdp11.c               |   16 +-
>  gcc/config/pdp11/pdp11.md              |    2 +-
>  gcc/config/picochip/picochip.c         |   58 +-
>  gcc/config/picochip/picochip.h         |    2 +-
>  gcc/config/picochip/picochip.md        |    2 +-
>  gcc/config/rl78/rl78.c                 |   20 +-
>  gcc/config/rl78/rl78.h                 |    8 +-
>  gcc/config/rs6000/750cl.h              |    2 +-
>  gcc/config/rs6000/aix43.h              |    4 +-
>  gcc/config/rs6000/aix51.h              |    2 +-
>  gcc/config/rs6000/aix52.h              |    4 +-
>  gcc/config/rs6000/aix53.h              |    4 +-
>  gcc/config/rs6000/aix61.h              |   22 +-
>  gcc/config/rs6000/altivec.md           |   16 +-
>  gcc/config/rs6000/darwin.h             |   16 +-
>  gcc/config/rs6000/darwin.md            |   14 +-
>  gcc/config/rs6000/e500.h               |   10 +-
>  gcc/config/rs6000/eabialtivec.h        |    2 +-
>  gcc/config/rs6000/freebsd.h            |    2 +-
>  gcc/config/rs6000/freebsd64.h          |   46 +-
>  gcc/config/rs6000/linux.h              |    8 +-
>  gcc/config/rs6000/linux64.h            |   62 +-
>  gcc/config/rs6000/linuxaltivec.h       |    2 +-
>  gcc/config/rs6000/paired.md            |    4 +-
>  gcc/config/rs6000/predicates.md        |   12 +-
>  gcc/config/rs6000/rs6000-c.c           |   26 +-
>  gcc/config/rs6000/rs6000.c             | 1072 ++++++++++++++++----------------
>  gcc/config/rs6000/rs6000.h             |   44 +-
>  gcc/config/rs6000/rs6000.md            |  196 +++---
>  gcc/config/rs6000/singlefp.h           |    6 +-
>  gcc/config/rs6000/spe.md               |   36 +-
>  gcc/config/rs6000/sysv4.h              |  176 +++---
>  gcc/config/rs6000/vector.md            |    2 +-
>  gcc/config/rs6000/vsx.md               |    4 +-
>  gcc/config/rs6000/vxworks.h            |    2 +-
>  gcc/config/rs6000/xcoff.h              |    4 +-
>  gcc/config/rs6000/xfpu.h               |    2 +-
>  gcc/config/rx/rx.c                     |   54 +-
>  gcc/config/rx/rx.h                     |   16 +-
>  gcc/config/rx/rx.md                    |   20 +-
>  gcc/config/s390/predicates.md          |    6 +-
>  gcc/config/s390/s390.c                 |  190 +++---
>  gcc/config/s390/s390.h                 |   26 +-
>  gcc/config/s390/s390.md                |   16 +-
>  gcc/config/score/score.c               |   24 +-
>  gcc/config/score/score.h               |    2 +-
>  gcc/config/score/score.md              |   18 +-
>  gcc/config/sh/linux.h                  |   12 +-
>  gcc/config/sh/netbsd-elf.h             |    2 +-
>  gcc/config/sh/sh-mem.cc                |   16 +-
>  gcc/config/sh/sh.c                     |  350 +++++------
>  gcc/config/sh/sh.h                     |   28 +-
>  gcc/config/sh/sh.md                    |  126 ++--
>  gcc/config/sh/sh_optimize_sett_clrt.cc |    2 +-
>  gcc/config/sh/sh_treg_combine.cc       |    2 +-
>  gcc/config/sh/sync.md                  |   14 +-
>  gcc/config/sh/vxworks.h                |    2 +-
>  gcc/config/sol2.c                      |    2 +-
>  gcc/config/sol2.h                      |    2 +-
>  gcc/config/sparc/sol2.h                |    4 +-
>  gcc/config/sparc/sparc.c               |  268 ++++----
>  gcc/config/sparc/sparc.h               |   24 +-
>  gcc/config/sparc/sparc.md              |   56 +-
>  gcc/config/sparc/sync.md               |    8 +-
>  gcc/config/spu/spu-builtins.md         |    8 +-
>  gcc/config/spu/spu-c.c                 |    6 +-
>  gcc/config/spu/spu.c                   |   96 +--
>  gcc/config/spu/spu.h                   |    4 +-
>  gcc/config/spu/spu.md                  |   24 +-
>  gcc/config/stormy16/stormy16.c         |    2 +-
>  gcc/config/tilegx/tilegx.c             |   74 +--
>  gcc/config/tilegx/tilegx.h             |    4 +-
>  gcc/config/tilegx/tilegx.md            |   40 +-
>  gcc/config/tilepro/tilepro.c           |   58 +-
>  gcc/config/tilepro/tilepro.h           |    4 +-
>  gcc/config/tilepro/tilepro.md          |   12 +-
>  gcc/config/v850/predicates.md          |    8 +-
>  gcc/config/v850/v850.c                 |   34 +-
>  gcc/config/v850/v850.h                 |    2 +-
>  gcc/config/v850/v850.md                |   38 +-
>  gcc/config/vax/constraints.md          |    2 +-
>  gcc/config/vax/elf.h                   |    4 +-
>  gcc/config/vax/predicates.md           |   10 +-
>  gcc/config/vax/vax.c                   |   44 +-
>  gcc/config/vax/vax.md                  |   16 +-
>  gcc/config/vms/vms-c.c                 |    8 +-
>  gcc/config/vms/vms.c                   |   20 +-
>  gcc/config/vms/vms.h                   |   10 +-
>  gcc/config/vxworks.c                   |    6 +-
>  gcc/config/xtensa/predicates.md        |    4 +-
>  gcc/config/xtensa/xtensa.c             |   28 +-
>  gcc/config/xtensa/xtensa.h             |    8 +-
>  gcc/config/xtensa/xtensa.md            |   10 +-
>  gcc/convert.c                          |   28 +-
>  gcc/coverage.c                         |   26 +-
>  gcc/cp/call.c                          |   62 +-
>  gcc/cp/class.c                         |   44 +-
>  gcc/cp/cp-cilkplus.c                   |    2 +-
>  gcc/cp/cp-gimplify.c                   |    6 +-
>  gcc/cp/cvt.c                           |    6 +-
>  gcc/cp/decl.c                          |  110 ++--
>  gcc/cp/decl2.c                         |   70 +--
>  gcc/cp/error.c                         |   20 +-
>  gcc/cp/except.c                        |   20 +-
>  gcc/cp/friend.c                        |    2 +-
>  gcc/cp/init.c                          |   24 +-
>  gcc/cp/lex.c                           |   18 +-
>  gcc/cp/mangle.c                        |    8 +-
>  gcc/cp/method.c                        |   10 +-
>  gcc/cp/name-lookup.c                   |   10 +-
>  gcc/cp/optimize.c                      |    2 +-
>  gcc/cp/parser.c                        |   78 +--
>  gcc/cp/pt.c                            |   18 +-
>  gcc/cp/repo.c                          |   10 +-
>  gcc/cp/rtti.c                          |    6 +-
>  gcc/cp/search.c                        |    4 +-
>  gcc/cp/semantics.c                     |   44 +-
>  gcc/cp/typeck.c                        |   78 +--
>  gcc/cp/typeck2.c                       |    4 +-
>  gcc/cp/vtable-class-hierarchy.c        |   30 +-
>  gcc/cppbuiltin.c                       |   24 +-
>  gcc/cprop.c                            |    2 +-
>  gcc/cse.c                              |   26 +-
>  gcc/cselib.c                           |    4 +-
>  gcc/dbxout.c                           |   72 +--
>  gcc/dce.c                              |   10 +-
>  gcc/ddg.c                              |    6 +-
>  gcc/defaults.h                         |    2 +-
>  gcc/df-core.c                          |    8 +-
>  gcc/df-problems.c                      |    2 +-
>  gcc/dojump.c                           |    4 +-
>  gcc/dse.c                              |    6 +-
>  gcc/dumpfile.c                         |    2 +-
>  gcc/dwarf2asm.c                        |   30 +-
>  gcc/dwarf2cfi.c                        |   18 +-
>  gcc/dwarf2out.c                        |  416 ++++++-------
>  gcc/emit-rtl.c                         |    4 +-
>  gcc/except.c                           |   16 +-
>  gcc/explow.c                           |   20 +-
>  gcc/expmed.c                           |   20 +-
>  gcc/expr.c                             |   24 +-
>  gcc/final.c                            |  100 +--
>  gcc/flags.h                            |    4 +-
>  gcc/fold-const.c                       |  128 ++--
>  gcc/fortran/arith.c                    |    2 +-
>  gcc/fortran/cpp.c                      |    6 +-
>  gcc/fortran/decl.c                     |    2 +-
>  gcc/fortran/error.c                    |   24 +-
>  gcc/fortran/f95-lang.c                 |    6 +-
>  gcc/fortran/frontend-passes.c          |    2 +-
>  gcc/fortran/io.c                       |    4 +-
>  gcc/fortran/options.c                  |   34 +-
>  gcc/fortran/primary.c                  |    2 +-
>  gcc/fortran/resolve.c                  |    8 +-
>  gcc/fortran/scanner.c                  |   10 +-
>  gcc/fortran/trans-decl.c               |   16 +-
>  gcc/fortran/trans-expr.c               |    6 +-
>  gcc/fortran/trans-intrinsic.c          |    4 +-
>  gcc/fortran/trans-stmt.c               |    2 +-
>  gcc/fortran/trans.c                    |    4 +-
>  gcc/function.c                         |   48 +-
>  gcc/fwprop.c                           |    2 +-
>  gcc/gcc.c                              |  102 +--
>  gcc/gcse.c                             |   38 +-
>  gcc/ggc-page.c                         |    4 +-
>  gcc/gimple-fold.c                      |   12 +-
>  gcc/gimple-low.c                       |    4 +-
>  gcc/gimple-ssa-isolate-paths.c         |   12 +-
>  gcc/gimple-ssa-strength-reduction.c    |    6 +-
>  gcc/gimple.c                           |    2 +-
>  gcc/gimplify.c                         |   24 +-
>  gcc/go/go-backend.c                    |    2 +-
>  gcc/go/go-lang.c                       |    8 +-
>  gcc/go/gofrontend/expressions.cc       |    8 +-
>  gcc/graphite-clast-to-gimple.c         |    6 +-
>  gcc/graphite-poly.c                    |   12 +-
>  gcc/graphite-sese-to-poly.c            |   10 +-
>  gcc/graphite.c                         |   18 +-
>  gcc/haifa-sched.c                      |   34 +-
>  gcc/ifcvt.c                            |   14 +-
>  gcc/incpath.c                          |    8 +-
>  gcc/init-regs.c                        |    6 +-
>  gcc/internal-fn.c                      |    2 +-
>  gcc/ipa-cp.c                           |   12 +-
>  gcc/ipa-devirt.c                       |   24 +-
>  gcc/ipa-inline-analysis.c              |   24 +-
>  gcc/ipa-inline-transform.c             |    4 +-
>  gcc/ipa-inline.c                       |   46 +-
>  gcc/ipa-profile.c                      |    8 +-
>  gcc/ipa-prop.c                         |   24 +-
>  gcc/ipa-prop.h                         |    2 +-
>  gcc/ipa-pure-const.c                   |   10 +-
>  gcc/ipa-reference.c                    |    2 +-
>  gcc/ipa-split.c                        |   12 +-
>  gcc/ipa.c                              |   46 +-
>  gcc/ira-build.c                        |    6 +-
>  gcc/ira-color.c                        |   18 +-
>  gcc/ira-conflicts.c                    |   10 +-
>  gcc/ira-costs.c                        |   32 +-
>  gcc/ira-int.h                          |    2 +-
>  gcc/ira.c                              |   74 +--
>  gcc/java/boehm.c                       |    8 +-
>  gcc/java/builtins.c                    |   16 +-
>  gcc/java/class.c                       |   76 +--
>  gcc/java/constants.c                   |    2 +-
>  gcc/java/decl.c                        |   10 +-
>  gcc/java/except.c                      |    4 +-
>  gcc/java/expr.c                        |   54 +-
>  gcc/java/java-tree.h                   |    2 +-
>  gcc/java/jcf-parse.c                   |   28 +-
>  gcc/java/jcf.h                         |    2 +-
>  gcc/java/lang.c                        |   20 +-
>  gcc/java/parse.h                       |    2 +-
>  gcc/java/typeck.c                      |    2 +-
>  gcc/java/verify-glue.c                 |    2 +-
>  gcc/langhooks.c                        |    2 +-
>  gcc/loop-init.c                        |   26 +-
>  gcc/loop-invariant.c                   |   32 +-
>  gcc/loop-iv.c                          |    8 +-
>  gcc/loop-unroll.c                      |   24 +-
>  gcc/lower-subreg.c                     |    2 +-
>  gcc/lra-constraints.c                  |    2 +-
>  gcc/lra-spills.c                       |    2 +-
>  gcc/lra.c                              |    2 +-
>  gcc/lto-cgraph.c                       |   12 +-
>  gcc/lto-compress.c                     |    2 +-
>  gcc/lto-section-in.c                   |    4 +-
>  gcc/lto-section-out.c                  |    2 +-
>  gcc/lto-streamer-in.c                  |    4 +-
>  gcc/lto-streamer-out.c                 |   18 +-
>  gcc/lto-streamer.c                     |    6 +-
>  gcc/lto/lto-lang.c                     |   32 +-
>  gcc/lto/lto-partition.c                |   14 +-
>  gcc/lto/lto-symtab.c                   |    4 +-
>  gcc/lto/lto.c                          |   88 +--
>  gcc/mode-switching.c                   |    2 +-
>  gcc/modulo-sched.c                     |   14 +-
>  gcc/objc/objc-act.c                    |   82 +--
>  gcc/objc/objc-encoding.c               |   16 +-
>  gcc/objc/objc-gnu-runtime-abi-01.c     |   20 +-
>  gcc/objc/objc-next-runtime-abi-01.c    |   40 +-
>  gcc/objc/objc-next-runtime-abi-02.c    |   14 +-
>  gcc/objc/objc-runtime-shared-support.c |    4 +-
>  gcc/omp-low.c                          |   42 +-
>  gcc/optabs.c                           |   12 +-
>  gcc/opth-gen.awk                       |   15 +-
>  gcc/opts-global.c                      |    8 +-
>  gcc/opts.c                             |    6 +-
>  gcc/passes.c                           |   46 +-
>  gcc/plugin.c                           |    4 +-
>  gcc/postreload-gcse.c                  |    6 +-
>  gcc/postreload.c                       |    4 +-
>  gcc/predict.c                          |   24 +-
>  gcc/print-rtl.c                        |   10 +-
>  gcc/print-tree.c                       |    2 +-
>  gcc/profile.c                          |   14 +-
>  gcc/real.h                             |   10 +-
>  gcc/recog.c                            |   16 +-
>  gcc/ree.c                              |    2 +-
>  gcc/reg-stack.c                        |    6 +-
>  gcc/regcprop.c                         |    2 +-
>  gcc/regrename.c                        |    2 +-
>  gcc/regs.h                             |    4 +-
>  gcc/reload.c                           |   10 +-
>  gcc/reload1.c                          |   24 +-
>  gcc/reorg.c                            |    4 +-
>  gcc/rtl.h                              |    2 +-
>  gcc/rtlanal.c                          |   10 +-
>  gcc/sched-ebb.c                        |    4 +-
>  gcc/sched-rgn.c                        |   36 +-
>  gcc/sdbout.c                           |    2 +-
>  gcc/sel-sched-ir.c                     |   16 +-
>  gcc/sel-sched-ir.h                     |    4 +-
>  gcc/sel-sched.c                        |    4 +-
>  gcc/simplify-rtx.c                     |   28 +-
>  gcc/stmt.c                             |    8 +-
>  gcc/stor-layout.c                      |   20 +-
>  gcc/store-motion.c                     |    2 +-
>  gcc/symtab.c                           |    4 +-
>  gcc/targhooks.c                        |   30 +-
>  gcc/toplev.c                           |  378 +++++------
>  gcc/tracer.c                           |    6 +-
>  gcc/trans-mem.c                        |   10 +-
>  gcc/tree-call-cdce.c                   |    2 +-
>  gcc/tree-cfg.c                         |   10 +-
>  gcc/tree-cfgcleanup.c                  |   28 +-
>  gcc/tree-complex.c                     |    6 +-
>  gcc/tree-data-ref.c                    |    2 +-
>  gcc/tree-eh.c                          |   38 +-
>  gcc/tree-if-conv.c                     |   34 +-
>  gcc/tree-inline.c                      |   22 +-
>  gcc/tree-loop-distribution.c           |   10 +-
>  gcc/tree-nested.c                      |   10 +-
>  gcc/tree-nrv.c                         |    2 +-
>  gcc/tree-outof-ssa.c                   |    4 +-
>  gcc/tree-parloops.c                    |   10 +-
>  gcc/tree-predcom.c                     |    4 +-
>  gcc/tree-profile.c                     |   24 +-
>  gcc/tree-sra.c                         |    4 +-
>  gcc/tree-ssa-alias.c                   |   14 +-
>  gcc/tree-ssa-ccp.c                     |    8 +-
>  gcc/tree-ssa-coalesce.c                |    4 +-
>  gcc/tree-ssa-copy.c                    |    2 +-
>  gcc/tree-ssa-copyrename.c              |    8 +-
>  gcc/tree-ssa-dce.c                     |    4 +-
>  gcc/tree-ssa-dom.c                     |    2 +-
>  gcc/tree-ssa-dse.c                     |    2 +-
>  gcc/tree-ssa-forwprop.c                |    2 +-
>  gcc/tree-ssa-live.c                    |    8 +-
>  gcc/tree-ssa-loop-ch.c                 |    4 +-
>  gcc/tree-ssa-loop-im.c                 |   14 +-
>  gcc/tree-ssa-loop-ivcanon.c            |   14 +-
>  gcc/tree-ssa-loop-niter.c              |   20 +-
>  gcc/tree-ssa-loop-prefetch.c           |    2 +-
>  gcc/tree-ssa-loop-unswitch.c           |    2 +-
>  gcc/tree-ssa-loop.c                    |   10 +-
>  gcc/tree-ssa-math-opts.c               |   30 +-
>  gcc/tree-ssa-operands.c                |    4 +-
>  gcc/tree-ssa-phiopt.c                  |   14 +-
>  gcc/tree-ssa-phiprop.c                 |    2 +-
>  gcc/tree-ssa-pre.c                     |    8 +-
>  gcc/tree-ssa-reassoc.c                 |    8 +-
>  gcc/tree-ssa-sccvn.c                   |    4 +-
>  gcc/tree-ssa-sink.c                    |    2 +-
>  gcc/tree-ssa-strlen.c                  |    2 +-
>  gcc/tree-ssa-structalias.c             |   10 +-
>  gcc/tree-ssa-tail-merge.c              |    2 +-
>  gcc/tree-ssa-ter.c                     |    4 +-
>  gcc/tree-ssa-uncprop.c                 |    2 +-
>  gcc/tree-ssa-uninit.c                  |    4 +-
>  gcc/tree-streamer-out.c                |    2 +-
>  gcc/tree-switch-conversion.c           |    6 +-
>  gcc/tree-tailcall.c                    |    4 +-
>  gcc/tree-vect-data-refs.c              |    2 +-
>  gcc/tree-vect-generic.c                |    4 +-
>  gcc/tree-vect-loop.c                   |    6 +-
>  gcc/tree-vectorizer.c                  |    6 +-
>  gcc/tree-vectorizer.h                  |    6 +-
>  gcc/tree-vrp.c                         |   22 +-
>  gcc/tree.c                             |   30 +-
>  gcc/tree.h                             |   10 +-
>  gcc/tsan.c                             |    6 +-
>  gcc/ubsan.c                            |   12 +-
>  gcc/value-prof.c                       |    4 +-
>  gcc/var-tracking.c                     |   30 +-
>  gcc/varasm.c                           |   94 +--
>  gcc/varpool.c                          |    4 +-
>  gcc/vmsdbgout.c                        |   84 +--
>  gcc/vtable-verify.c                    |    4 +-
>  gcc/web.c                              |    2 +-
>  gcc/xcoffout.c                         |    6 +-
>  553 files changed, 7478 insertions(+), 7479 deletions(-)
> 
> -- 
> 1.8.5.3
> 

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] Autogenerated part of introduction of GCC_OPTION macro
  2014-05-09 21:12 ` [PATCH 2/2] Autogenerated " David Malcolm
@ 2014-05-10  5:42   ` Václav Zeman
  2014-05-10 11:12     ` David Malcolm
  0 siblings, 1 reply; 7+ messages in thread
From: Václav Zeman @ 2014-05-10  5:42 UTC (permalink / raw)
  To: gcc-patches

[-- Attachment #1: Type: text/plain, Size: 2004 bytes --]

On 9.5.2014 23:14, David Malcolm wrote:
> This patch is 2.2MB in size, so I've uploaded it to:
> http://dmalcolm.fedorapeople.org/gcc/large-patches/6fb783b39f914574a1889aa51d06c08cf55678b4-0002-Autogenerated-part-of-introduction-of-GCC_OPTION-mac.patch
> 
> (even just the ChangeLog would be 160KB)
> 

I have only skimmed through the patch but I have found one replacement
that does not seem correct:

> diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> index a6afb6c..d03cdfb 100644
> --- a/gcc/config/rs6000/rs6000.h
> +++ b/gcc/config/rs6000/rs6000.h
> @@ -394,13 +394,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
>  				 | MASK_DEBUG_TARGET \
>  				 | MASK_DEBUG_BUILTIN)
>  
> -#define	TARGET_DEBUG_STACK	(rs6000_debug & MASK_DEBUG_STACK)
> -#define	TARGET_DEBUG_ARG	(rs6000_debug & MASK_DEBUG_ARG)

The above two lines are replaced...

> -#define TARGET_DEBUG_REG	(rs6000_debug & MASK_DEBUG_REG)
> -#define TARGET_DEBUG_ADDR	(rs6000_debug & MASK_DEBUG_ADDR)
> -#define TARGET_DEBUG_COST	(rs6000_debug & MASK_DEBUG_COST)
> -#define TARGET_DEBUG_TARGET	(rs6000_debug & MASK_DEBUG_TARGET)
> -#define TARGET_DEBUG_BUILTIN	(rs6000_debug & MASK_DEBUG_BUILTIN)
> +#define	GCC_OPTION (TARGET_DEBUG_STACK)	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_STACK)
> +#define	GCC_OPTION (TARGET_DEBUG_ARG)	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_ARG)

...by the lines above. That does not seem right.

> +#define TARGET_DEBUG_REG	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_REG)
> +#define TARGET_DEBUG_ADDR	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_ADDR)
> +#define TARGET_DEBUG_COST	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_COST)
> +#define TARGET_DEBUG_TARGET	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_TARGET)
> +#define TARGET_DEBUG_BUILTIN	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_BUILTIN)
>  
>  /* Describe the vector unit used for arithmetic operations.  */
>  extern enum rs6000_vector rs6000_vector_unit[];

-- 
VZ



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 295 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] Autogenerated part of introduction of GCC_OPTION macro
  2014-05-10  5:42   ` Václav Zeman
@ 2014-05-10 11:12     ` David Malcolm
  0 siblings, 0 replies; 7+ messages in thread
From: David Malcolm @ 2014-05-10 11:12 UTC (permalink / raw)
  To: Václav Zeman; +Cc: gcc-patches

On Sat, 2014-05-10 at 07:42 +0200, Václav Zeman wrote:
> On 9.5.2014 23:14, David Malcolm wrote:
> > This patch is 2.2MB in size, so I've uploaded it to:
> > http://dmalcolm.fedorapeople.org/gcc/large-patches/6fb783b39f914574a1889aa51d06c08cf55678b4-0002-Autogenerated-part-of-introduction-of-GCC_OPTION-mac.patch
> > 
> > (even just the ChangeLog would be 160KB)
> > 
> 
> I have only skimmed through the patch but I have found one replacement
> that does not seem correct:
> 
> > diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
> > index a6afb6c..d03cdfb 100644
> > --- a/gcc/config/rs6000/rs6000.h
> > +++ b/gcc/config/rs6000/rs6000.h
> > @@ -394,13 +394,13 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
> >  				 | MASK_DEBUG_TARGET \
> >  				 | MASK_DEBUG_BUILTIN)
> >  
> > -#define	TARGET_DEBUG_STACK	(rs6000_debug & MASK_DEBUG_STACK)
> > -#define	TARGET_DEBUG_ARG	(rs6000_debug & MASK_DEBUG_ARG)
> 
> The above two lines are replaced...
> 
> > -#define TARGET_DEBUG_REG	(rs6000_debug & MASK_DEBUG_REG)
> > -#define TARGET_DEBUG_ADDR	(rs6000_debug & MASK_DEBUG_ADDR)
> > -#define TARGET_DEBUG_COST	(rs6000_debug & MASK_DEBUG_COST)
> > -#define TARGET_DEBUG_TARGET	(rs6000_debug & MASK_DEBUG_TARGET)
> > -#define TARGET_DEBUG_BUILTIN	(rs6000_debug & MASK_DEBUG_BUILTIN)
> > +#define	GCC_OPTION (TARGET_DEBUG_STACK)	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_STACK)
> > +#define	GCC_OPTION (TARGET_DEBUG_ARG)	(GCC_OPTION (rs6000_debug) & MASK_DEBUG_ARG)
> 
> ...by the lines above. That does not seem right.

Thanks.  My script parses all .opt files across all targets, and so it
can't handle this being an option in config/frv/frv.opt:

mdebug-stack
Target Undocumented Var(TARGET_DEBUG_STACK)

in conjunction with that being a macro in config/rs6000; same for
TARGET_DEBUG_ARG.  I already specialcased around a similar case with
TARGET_ACCUMULATE_OUTGOING_ARGS, with a
  Var(TARGET_ACCUMULATE_OUTGOING_ARGS)
in sh.opt vs a
  Mask(ACCUMULATE_OUTGOING_ARGS)
in i386.opt, leading to similar breakage, so it's likely there are more
such issues with the patch.  Bother.

Thanks again for spotting this.
Dave

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] Make option-lookup macros explicit
  2014-05-09 21:12 [PATCH 0/2] Make option-lookup macros explicit David Malcolm
                   ` (2 preceding siblings ...)
  2014-05-10  0:28 ` [PATCH 0/2] Make option-lookup macros explicit Trevor Saunders
@ 2014-05-14 18:31 ` Jeff Law
  3 siblings, 0 replies; 7+ messages in thread
From: Jeff Law @ 2014-05-14 18:31 UTC (permalink / raw)
  To: David Malcolm, gcc-patches

On 05/09/14 15:14, David Malcolm wrote:
> GCC's code is full of references to options like:
>
>    static bool
>    gate_vrp (void)
>    {
>      return flag_tree_vrp != 0;
>    }
>
> where "flag_tree_vrp" is actually an autogenerated macro to:
>
>    global_options.x_flag_tree_vrp
>
> This is deeply confusing to a newbie (and indeed still to me after ~two
> years of working with GCC's internals) e.g. when stepping through code and
> trying to query the value in gdb - what is an actual variable, and what is
> an option?  Why isn't tab-completion working?  etc
>
> The idea of the following patch series is to replace the above with:
>
>    static bool
>    gate_vrp (void)
>    {
>      return GCC_OPTION (flag_tree_vrp) != 0;
>    }
>
> thus making it obvious when macro magic is occurring.
Conceptually this patch seems fine to me.  I think the macro magic 
around flag_xxx is annoying, so this is definitely an improvement.

>
>  From a global-state-removal perspective, it might be nice to associate
> options with a gcc::context, rather than have a single instance of options,
> though that isn't addressed in these patches.
> (e.g. perhaps explicitly adding a gcc::context arg to the macro???)
Should be done as a follow-up IMHO.

>
> The patches were successfully bootstrapped&regrtested on top
> of r208714 (rather old, 2014-03-20) albeit just on x86_64-unknown-linux-gnu
> (Fedora 20), with
>    --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto
> (i.e. every frontend, I think).
>
> OK for trunk, after 4.9.1 is released?  (clearly I need to test on
> more targets first, given how much config/* code this touches, but I
> wanted to sound the idea out on this list).
Yea, definitely test out some other targets and wait for the 4.9.1 
release.  But I'm inclined to approve the patch as it stands plus any 
trivial changes that have to be made due to 4.9.0->4.9.1 changes in 
nearby code.

jeff

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-05-14 18:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-05-09 21:12 [PATCH 0/2] Make option-lookup macros explicit David Malcolm
2014-05-09 21:12 ` [PATCH 1/2] Handwritten part of introduction of GCC_OPTION macro David Malcolm
2014-05-09 21:12 ` [PATCH 2/2] Autogenerated " David Malcolm
2014-05-10  5:42   ` Václav Zeman
2014-05-10 11:12     ` David Malcolm
2014-05-10  0:28 ` [PATCH 0/2] Make option-lookup macros explicit Trevor Saunders
2014-05-14 18:31 ` Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).