diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1e8796c4f805d4b411ac3e652ddb7912f1ad8e9c..82c968ca6f7e1841263c3a533e5f4da7319d6f53 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,20 @@
+2012-06-29  Steven Bosscher  <steven@gcc.gnu.org>
+
+	* system.h (IFCVT_EXTRA_FIELDS): Poison.
+	(IFCVT_INIT_EXTRA_FIELDS): Poison.
+	* basic-block.h (struct ce_if_block): Remove IFCVT_EXTRA_FIELDS.
+	* ifcvt.c (find_if_header): Use IFCVT_MACHDEP_INIT instead of
+	IFCVT_INIT_EXTRA_FIELDS.
+	* gengtype-parse.c (struct_field_seq): Remove obsolete comment.
+	* config/frv/frv.h (IFCVT_INIT_EXTRA_FIELDS): Rename to
+	IFCVT_MACHDEP_INIT.
+	* config/frv/frv.c (frv_ifcvt_init_extra_fields): Rename to
+	frv_ifcvt_machdep_init.
+	* doc/tm.texi.in (IFCVT_INIT_EXTRA_FIELDS, IFCVT_EXTRA_FIELDS):
+	Remove documentation.
+	(IFCVT_MACHDEP_INIT): Document.
+	* doc/tm.texi: Regenerate.
+
 2012-06-29  Nick Clifton  <nickc@redhat.com>
 
 	* config/lm32/lm32.c (lm32_compute_frame_size): Fix typo.
diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 418914a3718a2672c80c308d28d7c3e5d5aa75ef..348f150ab6dc8969e57c7a9369b2f638ea4041f3 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -498,11 +498,6 @@ typedef struct ce_if_block
   int num_then_insns;			/* # of insns in THEN block.  */
   int num_else_insns;			/* # of insns in ELSE block.  */
   int pass;				/* Pass number.  */
-
-#ifdef IFCVT_EXTRA_FIELDS
-  IFCVT_EXTRA_FIELDS			/* Any machine dependent fields.  */
-#endif
-
 } ce_if_block_t;
 
 /* This structure maintains an edge list vector.  */
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index 5e7b5d407fd9f3fc417bd577398ffb04727dfed3..a31cf8bd6a1cba10940df488ec2b38d2e95b3f47 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -5221,12 +5221,11 @@ frv_clear_registers_used (rtx *ptr, void *data)
 }
 
 
-/* Initialize the extra fields provided by IFCVT_EXTRA_FIELDS.  */
-
-/* On the FR-V, we don't have any extra fields per se, but it is useful hook to
+/* Initialize machine-specific if-conversion data.
+   On the FR-V, we don't have any extra fields per se, but it is useful hook to
    initialize the static storage.  */
 void
-frv_ifcvt_init_extra_fields (ce_if_block_t *ce_info ATTRIBUTE_UNUSED)
+frv_ifcvt_machdep_init (ce_if_block_t *ce_info ATTRIBUTE_UNUSED)
 {
   frv_ifcvt.added_insns_list = NULL_RTX;
   frv_ifcvt.cur_scratch_regs = 0;
diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h
index 2f8fa92e75d606d6979e9aa75ac20de73485988a..b9fd3a90cf03ffb275b94d8bcd852e698a71765e 100644
--- a/gcc/config/frv/frv.h
+++ b/gcc/config/frv/frv.h
@@ -1975,8 +1975,8 @@ frv_ifcvt_modify_multiple_tests (CE_INFO, BB, &TRUE_EXPR, &FALSE_EXPR)
    information CE_INFO.  */
 #define IFCVT_MODIFY_CANCEL(CE_INFO) frv_ifcvt_modify_cancel (CE_INFO)
 
-/* Initialize the extra fields provided by IFCVT_EXTRA_FIELDS.  */
-#define IFCVT_INIT_EXTRA_FIELDS(CE_INFO) frv_ifcvt_init_extra_fields (CE_INFO)
+/* Initialize the machine-specific static data for if-conversion.  */
+#define IFCVT_MACHDEP_INIT(CE_INFO) frv_ifcvt_machdep_init (CE_INFO)
 
 /* The definition of the following macro results in that the 2nd jump
    optimization (after the 2nd insn scheduling) is minimal.  It is
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 314d50b1a2758b8ea1d976df82689642faba4be6..282bc14833de00f3316305a3e1a6044a91da5c58 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -10871,15 +10871,10 @@ can be found in the @code{struct ce_if_block} structure that is pointed
 to by @var{ce_info}.
 @end defmac
 
-@defmac IFCVT_INIT_EXTRA_FIELDS (@var{ce_info})
-A C expression to initialize any extra fields in a @code{struct ce_if_block}
-structure, which are defined by the @code{IFCVT_EXTRA_FIELDS} macro.
-@end defmac
-
-@defmac IFCVT_EXTRA_FIELDS
-If defined, it should expand to a set of field declarations that will be
-added to the @code{struct ce_if_block} structure.  These should be initialized
-by the @code{IFCVT_INIT_EXTRA_FIELDS} macro.
+@defmac IFCVT_MACHDEP_INIT (@var{ce_info})
+A C expression to initialize any machine specific data for if-conversion
+of the if-block in the @code{struct ce_if_block} structure that is pointed
+to by @var{ce_info}.
 @end defmac
 
 @deftypefn {Target Hook} void TARGET_MACHINE_DEPENDENT_REORG (void)
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index ac8df24ea8fb70e2a13bd2022ed46580c7383580..6f97b28147884f6b6b09983f169836ebf8849ff3 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -10745,15 +10745,10 @@ can be found in the @code{struct ce_if_block} structure that is pointed
 to by @var{ce_info}.
 @end defmac
 
-@defmac IFCVT_INIT_EXTRA_FIELDS (@var{ce_info})
-A C expression to initialize any extra fields in a @code{struct ce_if_block}
-structure, which are defined by the @code{IFCVT_EXTRA_FIELDS} macro.
-@end defmac
-
-@defmac IFCVT_EXTRA_FIELDS
-If defined, it should expand to a set of field declarations that will be
-added to the @code{struct ce_if_block} structure.  These should be initialized
-by the @code{IFCVT_INIT_EXTRA_FIELDS} macro.
+@defmac IFCVT_MACHDEP_INIT (@var{ce_info})
+A C expression to initialize any machine specific data for if-conversion
+of the if-block in the @code{struct ce_if_block} structure that is pointed
+to by @var{ce_info}.
 @end defmac
 
 @hook TARGET_MACHINE_DEPENDENT_REORG
diff --git a/gcc/gengtype-parse.c b/gcc/gengtype-parse.c
index 89f14e84d960b643932248d700e743d1d68c170c..c0ad403d163afaf495035d04619c912c626bb33a 100644
--- a/gcc/gengtype-parse.c
+++ b/gcc/gengtype-parse.c
@@ -662,9 +662,6 @@ struct_field_seq (void)
   do
     {
       ty = type (&opts, true);
-      /* Another piece of the IFCVT_EXTRA_FIELDS special case, see type().  */
-      if (!ty && token () == '}')
-	break;
 
       if (!ty || token () == ':')
 	{
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index adeb214a5e40863625300c9c46ffb401a3509e09..c1d4c9eb1e17d753bc6faa66b54a007d4bbccb97 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -3255,8 +3255,8 @@ find_if_header (basic_block test_bb, int pass)
   ce_info.else_bb = else_edge->dest;
   ce_info.pass = pass;
 
-#ifdef IFCVT_INIT_EXTRA_FIELDS
-  IFCVT_INIT_EXTRA_FIELDS (&ce_info);
+#ifdef IFCVT_MACHDEP_INIT
+  IFCVT_MACHDEP_INIT (&ce_info);
 #endif
 
   if (!reload_completed
diff --git a/gcc/system.h b/gcc/system.h
index f12ac9cf7da314c4ce957cc88483a7c82403d766..d2e9e51bc0e396b542e4f5a1b092194956d1e8d5 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -895,7 +895,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN;
 	TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS	   \
 	IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP	   \
 	UNALIGNED_LONG_ASM_OP UNALIGNED_DOUBLE_INT_ASM_OP		   \
-	USE_COMMON_FOR_ONE_ONLY
+	USE_COMMON_FOR_ONE_ONLY IFCVT_EXTRA_FIELDS IFCVT_INIT_EXTRA_FIELDS
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\