diff mbox

[7/9] ENABLE_CHECKING refactoring: middle-end, LTO FE

Message ID 56130A34.8020005@gmail.com
State New
Headers show

Commit Message

Mikhail Maltsev Oct. 5, 2015, 11:39 p.m. UTC
gcc/ChangeLog:

2015-10-05  Mikhail Maltsev  <maltsevm@gmail.com>

	* attribs.c (check_attribute_tables): Define new function.
	(init_attributes): Use it.
	* cfgcleanup.c (try_optimize_cfg): Use flag_checking.
	* cfgexpand.c (expand_goto, expand_debug_expr): Likewise.
	(pass_expand::execute): Use checking_verify_flow_info.
	* cfghooks.c (verify_flow_info): Remove DEBUG_FUNCTION.
	* cfghooks.h (checking_verify_flow_info): Define.
	* cfgloop.c (verify_loop_structure): Remove DEBUG_FUNCTION.
	* cfgloop.h (checking_verify_loop_structure): Define.
	* cfgrtl.c (commit_edge_insertions): Use checking_verify_flow_info.
	(fixup_reorder_chain): Use checking_verify_insn_chain.
	(checking_verify_insn_chain): Define.
	(cfg_layout_finalize): Use checking_verify_insn_chain/flow_info.
	(rtl_flow_call_edges_add): Use flag_checking.
	* cgraph.c (symbol_table::create_edge): Remove conditional compilation.
	(cgraph_edge::redirect_call_stmt_to_callee): Likewise; use
	flag_checking.
	* cgraph.h (symtab_node::checking_verify_symtab_nodes): Define.
	(cgraph_node::checking_verify_cgraph_nodes): Define.
	* cgraphclones.c (symbol_table::materialize_all_clones): Use
	checking_verify_cgraph_nodes, remove conditional compilation.
	* cgraphunit.c (mark_functions_to_output): Use flag_checking.
	(cgraph_node::expand_thunk): Use checking_verify_flow_info.
	(symbol_table::compile): Use checking_verify_*, remove conditional
	compilation.
	* ddg.c (add_cross_iteration_register_deps): Use flag_checking.
	(create_ddg_all_sccs): Likewise.
	* df-core.c (df_finish_pass, df_analyze): Likewise.
	* diagnostic-core.h: Adjust to use CHECKING_P.
	* diagnostic.c (diagnostic_report_diagnostic): Likewise.
	* dominance.c (calculate_dominance_info): Use
	checking_verify_dominators.
	* dominance.h (checking_verify_dominators): Define.
	* dwarf2out.c (add_AT_die_ref, const_ok_for_output_1,
	mem_loc_descriptor, loc_list_from_tree, gen_lexical_block_die,
	gen_type_die_with_usage, gen_type_die, dwarf2out_decl): Use
	flag_checking.
	* emit-rtl.c (verify_rtx_sharing, reorder_insns_nobb): Likewise.
	* et-forest.c: Fix comment.
	* except.c (duplicate_eh_regions): Use flag_checking.
	* fwprop.c (register_active_defs, update_df_init): Use CHECKING_P.
	(update_uses): Use gcc_checking_assert.
	(fwprop_init, fwprop_done): Use CHECKING_P.
	* ggc-page.c (ggc_grow): Likewise.
	* gimplify.c (gimplify_body): Use flag_checking.
	(gimplify_hasher::equal): Use CHECKING_P.
	* graphite-isl-ast-to-gimple.c (graphite_verify): Use
	checking_verify_* functions.
	* graphite-scop-detection.c (canonicalize_loop_closed_ssa_form):
	Likewise.
	* graphite-sese-to-poly.c (rewrite_reductions_out_of_ssa): Likewise.
	(rewrite_cross_bb_scalar_deps_out_of_ssa): Likewise.
	* hash-table.h (hash_table::find_empty_slot_for_expand): Remove
	conditional compilation.
	* ifcvt.c (if_convert): Use checking_verify_flow_info.
	* ipa-cp.c (ipcp_propagate_stage): Use flag_checking.
	* ipa-devirt.c (type_in_anonymous_namespace_p,
	odr_type_p, odr_types_equivalent_p): Use gcc_checking_assert.
	(add_type_duplicate, get_odr_type): Use flag_checking.
	* ipa-icf.c (sem_item_optimizer::verify_classes,
	sem_item_optimizer::traverse_congruence_split,
	sem_item_optimizer::do_congruence_step_for_index): Use flag_checking.
	* ipa-inline-analysis.c (compute_inline_parameters): Likewise.
	* ipa-inline-transform.c (save_inline_function_body): Likewise.
	* ipa-inline.c (inline_small_functions): Use CHECKING_P.
	(early_inliner): Use flag_checking.
	* ipa-inline.h (estimate_edge_growth): Remove conditional compilation.
	* ipa-visibility.c (function_and_variable_visibility): Use
	flag_checking.
	* ipa.c (symbol_table::remove_unreachable_nodes): Likewise.
	(ipa_single_use): Use gcc_checking_assert.
	* ira-int.h: Use CHECKING_P.
	* ira.c (ira): Use flag_checking.
	* loop-doloop.c (doloop_optimize_loops): Use
	checking_verify_loop_structure.
	* loop-init.c (loop_optimizer_init, fix_loop_structure): Likewise.
	* loop-invariant.c (move_loop_invariants): Use
	checking_verify_flow_info.
	* lra-assigns.c (lra_assign): Use CHECKING_P.
	* lra-constraints.c (lra_constraints): Use flag_checking.
	* lra-eliminations.c (lra_eliminate): Likewise.
	* lra-int.h (struct lra_reg): Use CHECKING_P.
	* lra-lives.c (check_pseudos_live_through_calls,
	lra_create_live_ranges_1): Use CHECKING_P.
	* lra-remat.c (create_remat_bb_data): Adjust to use gcc_checking_assert.
	* lra.c (lra_update_insn_recog_data, restore_scratches): Use
	flag_checking.
	(check_rtl): Always define. Remove incorrect guard around
	extract_constrain_insn call.
	(lra):
	* lto-cgraph.c (input_cgraph_1): Use flag_checking.
	* lto-streamer-out.c (DFS::DFS): Use gcc_checking_assert.
	(lto_output): Use CHECKING_P.
	* lto-streamer.c (lto_streamer_init): Likewise.
	* omp-low.c (scan_omp_target, expand_omp_taskreg, expand_omp_target,
	execute_expand_omp): Likewise.
	(lower_omp_target): Use CHECKING_P.
	* passes.c (execute_function_todo): Use flag_checking
	execute_todo, execute_one_pass): Likewise.
	(verify_curr_properties): Always define.
	* predict.c (tree_estimate_probability, propagate_freq): Use
	flag_checking.
	* pretty-print.c (pp_format): Use CHECKING_P.
	* real.c (real_to_decimal_for_mode): Likewise.
	* recog.c (split_all_insns): Use checking_verify_flow_info.
	* regcprop.c (kill_value_one_regno): Always call validate_value_data.
	(copy_value): Likewise.
	(validate_value_data): Define unconditionally. Use flag_checking.
	* reload.c: Fix comment.
	* sched-deps.c (CHECK): Remove unused macro.
	(add_or_update_dep_1, sd_add_dep): Use flag_checking.
	* sel-sched-ir.c (free_regset_pool, tidy_control_flow): Likewise.
	* sel-sched.c (struct moveop_static_params, find_best_reg_for_expr,
	move_cond_jump, move_op_orig_expr_not_found,
	code_motion_process_successors, move_op): Use CHECKING_P.
	* sese.h (bb_in_region): Comment checking-related issue.
	* ssa-iterators.h (first_readonly_imm_use,
	next_readonly_imm_use): Use CHECKING_P.
	* store-motion.c (compute_store_table): Use flag_checking.
	* symbol-summary.h (function_summary::function_summary): Likewise.
	* symtab.c: Remove DEBUG_FUNCTION.
	* target.h (cumulative_args_t): Guard by CHECKING_P
	(get_cumulative_args, pack_cumulative_args): Use CHECKING_P.
	* timevar.c (timer::print): Adjust condition.
	* trans-mem.c (ipa_tm_execute): Use checking_verify_cgraph_nodes.
	* tree-cfg.c (move_stmt_op): Use flag_checking.
	(move_sese_region_to_fn): Use flag_checking.
	(gimple_flow_call_edges_add): Likewise.
	* tree-cfgcleanup.c (cleanup_tree_cfg_noloop, repair_loop_structures):
	Use checking_verify_* functions.
	* tree-eh.c (remove_unreachable_handlers): Use flag_checking.
	* tree-if-conv.c (pass_if_conversion::execute): Likewise.
	* tree-inline.c (expand_call_inline, optimize_inline_calls): Likewise.
	* tree-into-ssa.c (update_ssa): Likewise.
	* tree-loop-distribution.c (pass_loop_distribution::execute): Likewise.
	* tree-outof-ssa.c (eliminate_useless_phis, rewrite_trees): Likewise.
	* tree-parloops.c (pass_parallelize_loops::execute): Use
	checking_verify_loop_structure.
	* tree-predcom.c (suitable_component_p): Use gcc_checking_assert.
	* tree-profile.c (gimple_gen_const_delta_profiler): Use flag_checking.
	* tree-ssa-alias.c (refs_may_alias_p_1): Use gcc_checking_assert.
	* tree-ssa-live.c (verify_live_on_entry): Define unconditionally.
	(calculate_live_ranges): Use flag_checking.
	* tree-ssa-live.h (register_ssa_partition): Likewise.
	* tree-ssa-loop-ivcanon.c (tree_unroll_loops_completely): Use
	flag_checking.
	* tree-ssa-loop-manip.c (add_exit_phi): Likewise.
	(tree_transform_and_unroll_loop): Use checking_* functions.
	* tree-ssa-loop-manip.h (checking_verify_loop_closed_ssa): Define.
	* tree-ssa-math-opts.c (pass_cse_reciprocals::execute): Use
	flag_checking.
	* tree-ssa-operands.c (get_expr_operands): Likewise.
	* tree-ssa-propagate.c (replace_exp_1): Likewise.
	* tree-ssa-structalias.c (rewrite_constraints): Likewise.
	* tree-ssa-ter.c (free_temp_expr_table): Likewise.
	* tree-ssa-threadupdate.c (duplicate_thread_path): Likewise.
	* tree-ssa.c (verify_ssa): Remove DEBUG_FUNCTION.
	* tree-ssa.h (checking_verify_ssa): Define.
	* tree-ssanames.c (release_ssa_name_fn): Use flag_checking.
	* tree-stdarg.c (expand_ifn_va_arg): Likewise.
	* tree-vect-loop-manip.c (slpeel_tree_duplicate_loop_to_edge_cfg): Use
	checking_verify_dominators.
	(slpeel_checking_verify_cfg_after_peeling): Guard by flag_checking.
	(vect_do_peeling_for_loop_bound): Always call
	slpeel_checking_verify_cfg_after_peeling.
	(vect_do_peeling_for_alignment): Likewise.
	* tree-vrp.c (supports_overflow_infinity): Use gcc_checking_assert.
	(set_value_range): Use flag_checking.
	* tree.c (free_lang_data_in_cgraph): Likewise.
	* value-prof.c (gimple_remove_histogram_value): Use CHECKING_P.
	(free_hist): Likewise.
	* var-tracking.c (canonicalize_values_star): Use flag_checking.
	(compute_bb_dataflow, vt_find_locations, vt_emit_notes): Likewise.


gcc/lto/ChangeLog:

2015-10-05  Mikhail Maltsev  <maltsevm@gmail.com>

	* lto.c (unify_scc): Use flag_checking
	(lto_fixup_state): Use CHECKING_P.
	(do_whole_program_analysis): Use
	symtab_node::checking_verify_symtab_nodes.

Comments

Bernd Schmidt Oct. 6, 2015, 12:46 p.m. UTC | #1
On 10/06/2015 01:39 AM, Mikhail Maltsev wrote:
>   void verify_insn_chain (void);
> +static inline void checking_verify_insn_chain ();
>   static void fixup_fallthru_exit_predecessor (void);
>   static int can_delete_note_p (const rtx_note *);
>   static int can_delete_label_p (const rtx_code_label *);
[...]
> @@ -3990,6 +3987,16 @@ verify_insn_chain (void)
>
>     gcc_assert (insn_cnt1 == insn_cnt2);
>   }
> +
> +/* Perform checks, if they were requested by corresponding flag.  */
> +
> +static inline void
> +checking_verify_insn_chain ()
> +{
> +  if (flag_checking)
> +    verify_insn_chain ();
> +}
> +

There are many new such small inline functions, and I don't think they 
buy us much over just writing out the pattern where they are called. 
Also, just defined the function before its first use rather than writing 
a forward declaration.

> diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
> index 3b8d594..7771514 100644
> --- a/gcc/tree-ssa-alias.c
> +++ b/gcc/tree-ssa-alias.c
> @@ -1443,11 +1443,8 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2, bool tbaa_p)
>  				      tbaa_p);
>
>    /* We really do not want to end up here, but returning true is safe.  */
> -#ifdef ENABLE_CHECKING
> -  gcc_unreachable ();
> -#else
> +  gcc_checking_assert (false);
>    return true;
> -#endif
>  }

I think the consensus has been to avoid assert (false), so this would be

if (checking)
   gcc_unreachable ();

but maybe we really just want to do the gcc_unreachable unconditionally.


Bernd
Richard Biener Oct. 6, 2015, 12:59 p.m. UTC | #2
On Tue, Oct 6, 2015 at 2:46 PM, Bernd Schmidt <bschmidt@redhat.com> wrote:
> On 10/06/2015 01:39 AM, Mikhail Maltsev wrote:
>>
>>   void verify_insn_chain (void);
>> +static inline void checking_verify_insn_chain ();
>>   static void fixup_fallthru_exit_predecessor (void);
>>   static int can_delete_note_p (const rtx_note *);
>>   static int can_delete_label_p (const rtx_code_label *);
>
> [...]
>>
>> @@ -3990,6 +3987,16 @@ verify_insn_chain (void)
>>
>>     gcc_assert (insn_cnt1 == insn_cnt2);
>>   }
>> +
>> +/* Perform checks, if they were requested by corresponding flag.  */
>> +
>> +static inline void
>> +checking_verify_insn_chain ()
>> +{
>> +  if (flag_checking)
>> +    verify_insn_chain ();
>> +}
>> +
>
>
> There are many new such small inline functions, and I don't think they buy
> us much over just writing out the pattern where they are called. Also, just
> defined the function before its first use rather than writing a forward
> declaration.
>
>> diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
>> index 3b8d594..7771514 100644
>> --- a/gcc/tree-ssa-alias.c
>> +++ b/gcc/tree-ssa-alias.c
>> @@ -1443,11 +1443,8 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2,
>> bool tbaa_p)
>>                                       tbaa_p);
>>
>>    /* We really do not want to end up here, but returning true is safe.
>> */
>> -#ifdef ENABLE_CHECKING
>> -  gcc_unreachable ();
>> -#else
>> +  gcc_checking_assert (false);
>>    return true;
>> -#endif
>>  }
>
>
> I think the consensus has been to avoid assert (false), so this would be
>
> if (checking)
>   gcc_unreachable ();
>
> but maybe we really just want to do the gcc_unreachable unconditionally.

I'm fine with unconditional gcc_unreachable - the code is old enough now
that we shouldn't hit this anymore.

Richard.

>
> Bernd
Richard Biener Oct. 6, 2015, 12:59 p.m. UTC | #3
On Tue, Oct 6, 2015 at 2:46 PM, Bernd Schmidt <bschmidt@redhat.com> wrote:
> On 10/06/2015 01:39 AM, Mikhail Maltsev wrote:
>>
>>   void verify_insn_chain (void);
>> +static inline void checking_verify_insn_chain ();
>>   static void fixup_fallthru_exit_predecessor (void);
>>   static int can_delete_note_p (const rtx_note *);
>>   static int can_delete_label_p (const rtx_code_label *);
>
> [...]
>>
>> @@ -3990,6 +3987,16 @@ verify_insn_chain (void)
>>
>>     gcc_assert (insn_cnt1 == insn_cnt2);
>>   }
>> +
>> +/* Perform checks, if they were requested by corresponding flag.  */
>> +
>> +static inline void
>> +checking_verify_insn_chain ()
>> +{
>> +  if (flag_checking)
>> +    verify_insn_chain ();
>> +}
>> +
>
>
> There are many new such small inline functions, and I don't think they buy
> us much over just writing out the pattern where they are called. Also, just
> defined the function before its first use rather than writing a forward
> declaration.
>
>> diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
>> index 3b8d594..7771514 100644
>> --- a/gcc/tree-ssa-alias.c
>> +++ b/gcc/tree-ssa-alias.c
>> @@ -1443,11 +1443,8 @@ refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2,
>> bool tbaa_p)
>>                                       tbaa_p);
>>
>>    /* We really do not want to end up here, but returning true is safe.
>> */
>> -#ifdef ENABLE_CHECKING
>> -  gcc_unreachable ();
>> -#else
>> +  gcc_checking_assert (false);
>>    return true;
>> -#endif
>>  }
>
>
> I think the consensus has been to avoid assert (false), so this would be
>
> if (checking)
>   gcc_unreachable ();
>
> but maybe we really just want to do the gcc_unreachable unconditionally.

I'm fine with unconditional gcc_unreachable - the code is old enough now
that we shouldn't hit this anymore.

Richard.

>
> Bernd
diff mbox

Patch

From d7b5ee6da8c1a7ba0ce79d1937801d728a77560e Mon Sep 17 00:00:00 2001
From: Mikhail Maltsev <maltsevm@gmail.com>
Date: Sat, 3 Oct 2015 00:13:24 +0300
Subject: [PATCH 7/9] Backend

---
 gcc/attribs.c                    | 112 +++++++++++++++++++--------------------
 gcc/cfgcleanup.c                 |   5 +-
 gcc/cfgexpand.c                  |  27 +++++-----
 gcc/cfghooks.c                   |   4 +-
 gcc/cfghooks.h                   |  12 +++++
 gcc/cfgloop.c                    |   2 +-
 gcc/cfgloop.h                    |  10 ++++
 gcc/cfgrtl.c                     |  37 ++++++-------
 gcc/cgraph.c                     |  11 +---
 gcc/cgraph.h                     |  32 ++++++++---
 gcc/cgraphclones.c               |  11 ++--
 gcc/cgraphunit.c                 |  39 +++++---------
 gcc/ddg.c                        |  18 +++----
 gcc/df-core.c                    |  18 +++----
 gcc/diagnostic-core.h            |   2 +-
 gcc/diagnostic.c                 |   7 ++-
 gcc/dominance.c                  |  12 ++---
 gcc/dominance.h                  |  11 ++++
 gcc/dwarf2out.c                  |  76 ++++++++++++--------------
 gcc/emit-rtl.c                   |  16 +++---
 gcc/et-forest.c                  |   2 +-
 gcc/except.c                     |  12 ++---
 gcc/fwprop.c                     |  26 ++++-----
 gcc/ggc-page.c                   |  11 ++--
 gcc/gimplify.c                   |   8 +--
 gcc/graphite-isl-ast-to-gimple.c |   6 +--
 gcc/graphite-scop-detection.c    |  11 ++--
 gcc/graphite-sese-to-poly.c      |   8 +--
 gcc/hash-table.h                 |   4 --
 gcc/ifcvt.c                      |   4 +-
 gcc/ipa-cp.c                     |   7 ++-
 gcc/ipa-devirt.c                 |  36 ++++++-------
 gcc/ipa-icf.c                    |  28 +++++-----
 gcc/ipa-inline-analysis.c        |  10 ++--
 gcc/ipa-inline-transform.c       |   5 +-
 gcc/ipa-inline.c                 |   7 ++-
 gcc/ipa-inline.h                 |   2 -
 gcc/ipa-visibility.c             |  19 ++++---
 gcc/ipa.c                        |  22 ++++----
 gcc/ira-int.h                    |   2 +-
 gcc/ira.c                        |   6 +--
 gcc/loop-doloop.c                |   4 +-
 gcc/loop-init.c                  |  12 ++---
 gcc/loop-invariant.c             |   4 +-
 gcc/lra-assigns.c                |   2 +-
 gcc/lra-constraints.c            |   4 +-
 gcc/lra-eliminations.c           |  10 ++--
 gcc/lra-int.h                    |   2 +-
 gcc/lra-lives.c                  |   4 +-
 gcc/lra-remat.c                  |   6 +--
 gcc/lra.c                        |  31 +++--------
 gcc/lto-cgraph.c                 |   9 ++--
 gcc/lto-streamer-out.c           |  25 ++++-----
 gcc/lto-streamer.c               |   5 +-
 gcc/lto/lto.c                    |  34 ++++++------
 gcc/omp-low.c                    |  30 +++++------
 gcc/passes.c                     |  20 +++----
 gcc/predict.c                    |  20 ++++---
 gcc/pretty-print.c               |   9 ++--
 gcc/real.c                       |   4 +-
 gcc/recog.c                      |   4 +-
 gcc/regcprop.c                   |  13 ++---
 gcc/reload.c                     |   2 +-
 gcc/sched-deps.c                 |  20 ++-----
 gcc/sel-sched-ir.c               |  69 ++++++++++++------------
 gcc/sel-sched.c                  |  16 +++---
 gcc/sese.h                       |  24 +++++----
 gcc/ssa-iterators.h              |  14 ++---
 gcc/store-motion.c               |  14 +++--
 gcc/symbol-summary.h             |  14 +++--
 gcc/symtab.c                     |   4 +-
 gcc/target.h                     |  16 +++---
 gcc/timevar.c                    |  11 ++--
 gcc/trans-mem.c                  |   8 +--
 gcc/tree-cfg.c                   |  16 +++---
 gcc/tree-cfgcleanup.c            |  12 ++---
 gcc/tree-eh.c                    |   7 ++-
 gcc/tree-if-conv.c               |  13 +++--
 gcc/tree-inline.c                |  12 ++---
 gcc/tree-into-ssa.c              | 100 +++++++++++++++++-----------------
 gcc/tree-loop-distribution.c     |   4 +-
 gcc/tree-outof-ssa.c             |  38 ++++++-------
 gcc/tree-parloops.c              |   4 +-
 gcc/tree-predcom.c               |  10 ++--
 gcc/tree-profile.c               |   5 +-
 gcc/tree-ssa-alias.c             |   5 +-
 gcc/tree-ssa-live.c              |  11 ++--
 gcc/tree-ssa-live.h              |  10 ++--
 gcc/tree-ssa-loop-ivcanon.c      |   4 +-
 gcc/tree-ssa-loop-manip.c        |  32 ++++++-----
 gcc/tree-ssa-loop-manip.h        |   8 +++
 gcc/tree-ssa-math-opts.c         |   7 ++-
 gcc/tree-ssa-operands.c          |  13 ++---
 gcc/tree-ssa-propagate.c         |  16 +++---
 gcc/tree-ssa-structalias.c       |   9 ++--
 gcc/tree-ssa-ter.c               |  20 +++----
 gcc/tree-ssa-threadupdate.c      |   7 ++-
 gcc/tree-ssa.c                   |   2 +-
 gcc/tree-ssa.h                   |   8 +++
 gcc/tree-ssanames.c              |   5 +-
 gcc/tree-stdarg.c                |   5 +-
 gcc/tree-vect-loop-manip.c       |  21 +++-----
 gcc/tree-vrp.c                   |  20 ++++---
 gcc/tree.c                       |   9 ++--
 gcc/value-prof.c                 |  10 ++--
 gcc/var-tracking.c               |  56 ++++++++++----------
 106 files changed, 754 insertions(+), 907 deletions(-)

diff --git a/gcc/attribs.c b/gcc/attribs.c
index 6cbe011..87e9a52 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -174,8 +174,58 @@  find_attribute_namespace (const char* ns)
   return NULL;
 }
 
-/* Initialize attribute tables, and make some sanity checks
-   if --enable-checking.  */
+/* Make some sanity checks on the attribute tables.  */
+
+static void
+check_attribute_tables ()
+{
+  for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+    for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
+      {
+	/* The name must not begin and end with __.  */
+	const char *name = attribute_tables[i][j].name;
+	int len = strlen (name);
+
+	gcc_assert (!(name[0] == '_' && name[1] == '_'
+		      && name[len - 1] == '_' && name[len - 2] == '_'));
+
+	/* The minimum and maximum lengths must be consistent.  */
+	gcc_assert (attribute_tables[i][j].min_length >= 0);
+
+	gcc_assert (attribute_tables[i][j].max_length == -1
+		    || (attribute_tables[i][j].max_length
+			>= attribute_tables[i][j].min_length));
+
+	/* An attribute cannot require both a DECL and a TYPE.  */
+	gcc_assert (!attribute_tables[i][j].decl_required
+		    || !attribute_tables[i][j].type_required);
+
+	  /* If an attribute requires a function type, in particular
+	     it requires a type.  */
+	gcc_assert (!attribute_tables[i][j].function_type_required
+		    || attribute_tables[i][j].type_required);
+      }
+
+  /* Check that each name occurs just once in each table.  */
+  for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+    for (size_t j = 0; attribute_tables[i][j].name != NULL; j++)
+      for (size_t k = j + 1; attribute_tables[i][k].name != NULL; k++)
+	gcc_assert (strcmp (attribute_tables[i][j].name,
+			    attribute_tables[i][k].name));
+
+  /* Check that no name occurs in more than one table.  Names that
+     begin with '*' are exempt, and may be overridden.  */
+  for (size_t i = 0; i < ARRAY_SIZE (attribute_tables); i++)
+    for (size_t j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
+      for (size_t k = 0; attribute_tables[i][k].name != NULL; k++)
+	for (size_t l = 0; attribute_tables[j][l].name != NULL; l++)
+	  gcc_assert (attribute_tables[i][k].name[0] == '*'
+		      || strcmp (attribute_tables[i][k].name,
+				 attribute_tables[j][l].name));
+}
+
+/* Initialize attribute tables, and make some sanity checks if checking is
+   enabled.  */
 
 void
 init_attributes (void)
@@ -195,62 +245,8 @@  init_attributes (void)
     if (attribute_tables[i] == NULL)
       attribute_tables[i] = empty_attribute_table;
 
-#ifdef ENABLE_CHECKING
-  /* Make some sanity checks on the attribute tables.  */
-  for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-    {
-      int j;
-
-      for (j = 0; attribute_tables[i][j].name != NULL; j++)
-	{
-	  /* The name must not begin and end with __.  */
-	  const char *name = attribute_tables[i][j].name;
-	  int len = strlen (name);
-
-	  gcc_assert (!(name[0] == '_' && name[1] == '_'
-			&& name[len - 1] == '_' && name[len - 2] == '_'));
-
-	  /* The minimum and maximum lengths must be consistent.  */
-	  gcc_assert (attribute_tables[i][j].min_length >= 0);
-
-	  gcc_assert (attribute_tables[i][j].max_length == -1
-		      || (attribute_tables[i][j].max_length
-			  >= attribute_tables[i][j].min_length));
-
-	  /* An attribute cannot require both a DECL and a TYPE.  */
-	  gcc_assert (!attribute_tables[i][j].decl_required
-		      || !attribute_tables[i][j].type_required);
-
-	  /* If an attribute requires a function type, in particular
-	     it requires a type.  */
-	  gcc_assert (!attribute_tables[i][j].function_type_required
-		      || attribute_tables[i][j].type_required);
-	}
-    }
-
-  /* Check that each name occurs just once in each table.  */
-  for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-    {
-      int j, k;
-      for (j = 0; attribute_tables[i][j].name != NULL; j++)
-	for (k = j + 1; attribute_tables[i][k].name != NULL; k++)
-	  gcc_assert (strcmp (attribute_tables[i][j].name,
-			      attribute_tables[i][k].name));
-    }
-  /* Check that no name occurs in more than one table.  Names that
-     begin with '*' are exempt, and may be overridden.  */
-  for (i = 0; i < ARRAY_SIZE (attribute_tables); i++)
-    {
-      size_t j, k, l;
-
-      for (j = i + 1; j < ARRAY_SIZE (attribute_tables); j++)
-	for (k = 0; attribute_tables[i][k].name != NULL; k++)
-	  for (l = 0; attribute_tables[j][l].name != NULL; l++)
-	    gcc_assert (attribute_tables[i][k].name[0] == '*'
-			|| strcmp (attribute_tables[i][k].name,
-				   attribute_tables[j][l].name));
-    }
-#endif
+  if (flag_checking)
+    check_attribute_tables ();
 
   for (i = 0; i < ARRAY_SIZE (attribute_tables); ++i)
     /* Put all the GNU attributes into the "gnu" namespace.  */
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 7e576bc..0ad4872 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -2874,10 +2874,7 @@  try_optimize_cfg (int mode)
                  is only visible after newly unreachable blocks are deleted,
                  which will be done in fixup_partitions.  */
               fixup_partitions ();
-
-#ifdef ENABLE_CHECKING
-              verify_flow_info ();
-#endif
+	      checking_verify_flow_info ();
             }
 
 	  changed_overall |= changed;
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 58e55d2..c1c584b 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -3272,12 +3272,13 @@  expand_computed_goto (tree exp)
 static void
 expand_goto (tree label)
 {
-#ifdef ENABLE_CHECKING
-  /* Check for a nonlocal goto to a containing function.  Should have
-     gotten translated to __builtin_nonlocal_goto.  */
-  tree context = decl_function_context (label);
-  gcc_assert (!context || context == current_function_decl);
-#endif
+  if (flag_checking)
+    {
+      /* Check for a nonlocal goto to a containing function.  Should have
+	 gotten translated to __builtin_nonlocal_goto.  */
+      tree context = decl_function_context (label);
+      gcc_assert (!context || context == current_function_decl);
+    }
 
   emit_jump (jump_target_rtx (label));
 }
@@ -5059,12 +5060,12 @@  expand_debug_expr (tree exp)
 
     default:
     flag_unsupported:
-#ifdef ENABLE_CHECKING
-      debug_tree (exp);
-      gcc_unreachable ();
-#else
+      if (flag_checking)
+	{
+	  debug_tree (exp);
+	  gcc_unreachable ();
+	}
       return NULL;
-#endif
     }
 }
 
@@ -6425,9 +6426,7 @@  pass_expand::execute (function *fun)
      gcc.c-torture/execute/ipa-sra-2.c execution, -Os -m32 fails otherwise.  */
   cleanup_cfg (CLEANUP_NO_INSN_DEL);
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 
   /* Initialize pseudos allocated for hard registers.  */
   emit_initial_value_sets ();
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index 0cd8e62..47ac35b 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -91,8 +91,8 @@  current_ir_type (void)
    Currently it does following: checks edge and basic block list correctness
    and calls into IL dependent checking then.  */
 
-DEBUG_FUNCTION void
-verify_flow_info (void)
+void
+verify_flow_info ()
 {
   size_t *edge_checksum;
   int err = 0;
diff --git a/gcc/cfghooks.h b/gcc/cfghooks.h
index 0d25cf6..2c5b68e 100644
--- a/gcc/cfghooks.h
+++ b/gcc/cfghooks.h
@@ -186,6 +186,18 @@  struct cfg_hooks
 };
 
 extern void verify_flow_info (void);
+
+/* Check control flow invariants, if internal consistency checks are
+   enabled.  */
+
+static inline void
+checking_verify_flow_info ()
+{
+  /* TODO: Add a separate option for -fchecking=cfg.  */
+  if (flag_checking)
+    verify_flow_info ();
+}
+
 extern void dump_bb (FILE *, basic_block, int, int);
 extern void dump_bb_for_graph (pretty_printer *, basic_block);
 extern void dump_flow_info (FILE *, int);
diff --git a/gcc/cfgloop.c b/gcc/cfgloop.c
index b8a1244..8d58004 100644
--- a/gcc/cfgloop.c
+++ b/gcc/cfgloop.c
@@ -1306,7 +1306,7 @@  cancel_loop_tree (struct loop *loop)
      -- irreducible loops are correctly marked
      -- the cached loop depth and loop father of each bb is correct
   */
-DEBUG_FUNCTION void
+void
 verify_loop_structure (void)
 {
   unsigned *sizes, i, j;
diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h
index 07b070b..08134de 100644
--- a/gcc/cfgloop.h
+++ b/gcc/cfgloop.h
@@ -311,6 +311,16 @@  extern void delete_loop (struct loop *);
 
 extern void verify_loop_structure (void);
 
+/* Check loop structure invariants, if internal consistency checks are
+   enabled.  */
+
+static inline void
+checking_verify_loop_structure ()
+{
+  if (flag_checking)
+    verify_loop_structure ();
+}
+
 /* Loop analysis.  */
 extern bool just_once_each_iteration_p (const struct loop *, const_basic_block);
 gcov_type expected_loop_iterations_unbounded (const struct loop *);
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 15ce8a7..f763d1c 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -81,6 +81,7 @@  static void record_effective_endpoints (void);
 static void fixup_reorder_chain (void);
 
 void verify_insn_chain (void);
+static inline void checking_verify_insn_chain ();
 static void fixup_fallthru_exit_predecessor (void);
 static int can_delete_note_p (const rtx_note *);
 static int can_delete_label_p (const rtx_code_label *);
@@ -2097,9 +2098,7 @@  commit_edge_insertions (void)
      which will be done by fixup_partitions.  */
   fixup_partitions ();
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 
   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR_FOR_FN (cfun),
 		  EXIT_BLOCK_PTR_FOR_FN (cfun), next_bb)
@@ -3723,9 +3722,7 @@  fixup_reorder_chain (void)
     insn = NEXT_INSN (insn);
 
   set_last_insn (insn);
-#ifdef ENABLE_CHECKING
-  verify_insn_chain ();
-#endif
+  checking_verify_insn_chain ();
 
   /* Now add jumps and labels as needed to match the blocks new
      outgoing edges.  */
@@ -3970,8 +3967,8 @@  fixup_reorder_chain (void)
    2. Count insns in chain, going both directions, and check if equal.
    3. Check that get_last_insn () returns the actual end of chain.  */
 
-DEBUG_FUNCTION void
-verify_insn_chain (void)
+void
+verify_insn_chain ()
 {
   rtx_insn *x, *prevx, *nextx;
   int insn_cnt1, insn_cnt2;
@@ -3990,6 +3987,16 @@  verify_insn_chain (void)
 
   gcc_assert (insn_cnt1 == insn_cnt2);
 }
+
+/* Perform checks, if they were requested by corresponding flag.  */
+
+static inline void
+checking_verify_insn_chain ()
+{
+  if (flag_checking)
+    verify_insn_chain ();
+}
+
 
 /* If we have assembler epilogues, the block falling through to exit must
    be the last one in the reordered chain when we reach final.  Ensure
@@ -4313,9 +4320,7 @@  break_superblocks (void)
 void
 cfg_layout_finalize (void)
 {
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
   force_one_exit_fallthru ();
   rtl_register_cfg_hooks ();
   if (reload_completed && !targetm.have_epilogue ())
@@ -4325,10 +4330,8 @@  cfg_layout_finalize (void)
   rebuild_jump_labels (get_insns ());
   delete_dead_jumptables ();
 
-#ifdef ENABLE_CHECKING
-  verify_insn_chain ();
-  verify_flow_info ();
-#endif
+  checking_verify_insn_chain ();
+  checking_verify_flow_info ();
 }
 
 
@@ -4893,13 +4896,11 @@  rtl_flow_call_edges_add (sbitmap blocks)
 		 block in CFG already.  Calling make_edge in such case would
 		 cause us to mark that edge as fake and remove it later.  */
 
-#ifdef ENABLE_CHECKING
-	      if (split_at_insn == BB_END (bb))
+	      if (flag_checking && split_at_insn == BB_END (bb))
 		{
 		  e = find_edge (bb, EXIT_BLOCK_PTR_FOR_FN (cfun));
 		  gcc_assert (e == NULL);
 		}
-#endif
 
 	      /* Note that the following may create a new basic block
 		 and renumber the existing basic blocks.  */
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 1a64d789..1b6c5eb 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -832,11 +832,9 @@  symbol_table::create_edge (cgraph_node *caller, cgraph_node *callee,
     {
       /* This is a rather expensive check possibly triggering
 	 construction of call stmt hashtable.  */
-#ifdef ENABLE_CHECKING
       cgraph_edge *e;
       gcc_checking_assert (
 	!(e = caller->get_edge (call_stmt)) || e->speculative);
-#endif
 
       gcc_assert (is_gimple_call (call_stmt));
     }
@@ -1282,9 +1280,6 @@  cgraph_edge::redirect_call_stmt_to_callee (void)
   gcall *new_stmt;
   gimple_stmt_iterator gsi;
   bool skip_bounds = false;
-#ifdef ENABLE_CHECKING
-  cgraph_node *node;
-#endif
 
   if (e->speculative)
     {
@@ -1402,13 +1397,11 @@  cgraph_edge::redirect_call_stmt_to_callee (void)
 	  && !skip_bounds))
     return e->call_stmt;
 
-#ifdef ENABLE_CHECKING
-  if (decl)
+  if (flag_checking && decl)
     {
-      node = cgraph_node::get (decl);
+      cgraph_node *node = cgraph_node::get (decl);
       gcc_assert (!node || !node->clone.combined_args_to_skip);
     }
-#endif
 
   if (symtab->dump_file)
     {
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 607aef7..1c84270 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -116,7 +116,7 @@  public:
   void DEBUG_FUNCTION debug (void);
 
   /* Verify consistency of node.  */
-  void DEBUG_FUNCTION verify (void);
+  void verify ();
 
   /* Return ipa reference from this symtab_node to
      REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
@@ -362,7 +362,6 @@  public:
      and NULL otherwise.  */
   static inline symtab_node *get (const_tree decl)
   {
-#ifdef ENABLE_CHECKING
     /* Check that we are called for sane type of object - functions
        and static or external variables.  */
     gcc_checking_assert (TREE_CODE (decl) == FUNCTION_DECL
@@ -374,7 +373,6 @@  public:
        memcpy/memset on the tree nodes.  */
     gcc_checking_assert (!decl->decl_with_vis.symtab_node
 			 || decl->decl_with_vis.symtab_node->decl == decl);
-#endif
     return decl->decl_with_vis.symtab_node;
   }
 
@@ -396,7 +394,10 @@  public:
   }
 
   /* Verify symbol table for internal consistency.  */
-  static DEBUG_FUNCTION void verify_symtab_nodes (void);
+  static void verify_symtab_nodes ();
+
+  /* Perform internal consistency checks, if they are enabled.  */
+  static inline void checking_verify_symtab_nodes ();
 
   /* Type of the symbol.  */
   ENUM_BITFIELD (symtab_type) type : 8;
@@ -529,7 +530,7 @@  protected:
   void dump_base (FILE *);
 
   /* Verify common part of symtab node.  */
-  bool DEBUG_FUNCTION verify_base (void);
+  bool verify_base ();
 
   /* Remove node from symbol table.  This function is not used directly, but via
      cgraph/varpool node removal routines.  */
@@ -558,6 +559,13 @@  private:
   symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL);
 };
 
+inline void
+symtab_node::checking_verify_symtab_nodes ()
+{
+  if (flag_checking)
+    symtab_node::verify_symtab_nodes ();
+}
+
 /* Walk all aliases for NODE.  */
 #define FOR_EACH_ALIAS(node, alias) \
   for (unsigned x_i = 0; node->iterate_direct_aliases (x_i, alias); x_i++)
@@ -1197,7 +1205,10 @@  public:
   static cgraph_node * create_same_body_alias (tree alias, tree decl);
 
   /* Verify whole cgraph structure.  */
-  static void DEBUG_FUNCTION verify_cgraph_nodes (void);
+  static void verify_cgraph_nodes ();
+
+  /* Verify cgraph, if consistency checking is enabled.  */
+  static inline void checking_verify_cgraph_nodes ();
 
   /* Worker to bring NODE local.  */
   static bool make_local (cgraph_node *node, void *);
@@ -2747,6 +2758,15 @@  cgraph_node::can_remove_if_no_direct_calls_and_refs_p (void)
   return true;
 }
 
+/* Verify cgraph, if consistency checking is enabled.  */
+
+inline void
+cgraph_node::checking_verify_cgraph_nodes ()
+{
+  if (flag_checking)
+    cgraph_node::verify_cgraph_nodes ();
+}
+
 /* Return true when variable can be removed from variable pool
    if all direct calls are eliminated.  */
 
diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c
index e51431c..6bea9f7 100644
--- a/gcc/cgraphclones.c
+++ b/gcc/cgraphclones.c
@@ -1076,9 +1076,8 @@  symbol_table::materialize_all_clones (void)
 
   if (symtab->dump_file)
     fprintf (symtab->dump_file, "Materializing clones\n");
-#ifdef ENABLE_CHECKING
-  cgraph_node::verify_cgraph_nodes ();
-#endif
+
+  cgraph_node::checking_verify_cgraph_nodes ();
 
   /* We can also do topological order, but number of iterations should be
      bounded by number of IPA passes since single IPA pass is probably not
@@ -1147,9 +1146,9 @@  symbol_table::materialize_all_clones (void)
       node->clear_stmts_in_references ();
   if (symtab->dump_file)
     fprintf (symtab->dump_file, "Materialization Call site updates done.\n");
-#ifdef ENABLE_CHECKING
-  cgraph_node::verify_cgraph_nodes ();
-#endif
+
+  cgraph_node::checking_verify_cgraph_nodes ();
+
   symtab->remove_unreachable_nodes (symtab->dump_file);
 }
 
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 04a4d3f..42081c5 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1325,13 +1325,12 @@  handle_alias_pairs (void)
 static void
 mark_functions_to_output (void)
 {
-  cgraph_node *node;
-#ifdef ENABLE_CHECKING
   bool check_same_comdat_groups = false;
+  cgraph_node *node;
 
-  FOR_EACH_FUNCTION (node)
-    gcc_assert (!node->process);
-#endif
+  if (flag_checking)
+    FOR_EACH_FUNCTION (node)
+      gcc_assert (!node->process);
 
   FOR_EACH_FUNCTION (node)
     {
@@ -1365,15 +1364,14 @@  mark_functions_to_output (void)
 	}
       else if (node->same_comdat_group)
 	{
-#ifdef ENABLE_CHECKING
-	  check_same_comdat_groups = true;
-#endif
+	  if (flag_checking)
+	    check_same_comdat_groups = true;
 	}
       else
 	{
 	  /* We should've reclaimed all functions that are not needed.  */
-#ifdef ENABLE_CHECKING
-	  if (!node->global.inlined_to
+	  if (flag_checking
+	      && !node->global.inlined_to
 	      && gimple_has_body_p (decl)
 	      /* FIXME: in ltrans unit when offline copy is outside partition but inline copies
 		 are inside partition, we can end up not removing the body since we no longer
@@ -1386,7 +1384,6 @@  mark_functions_to_output (void)
 	      node->debug ();
 	      internal_error ("failed to reclaim unneeded function");
 	    }
-#endif
 	  gcc_assert (node->global.inlined_to
 		      || !gimple_has_body_p (decl)
 		      || node->in_other_partition
@@ -1397,8 +1394,7 @@  mark_functions_to_output (void)
 	}
 
     }
-#ifdef ENABLE_CHECKING
-  if (check_same_comdat_groups)
+  if (CHECKING_P && check_same_comdat_groups)
     FOR_EACH_FUNCTION (node)
       if (node->same_comdat_group && !node->process)
 	{
@@ -1418,7 +1414,6 @@  mark_functions_to_output (void)
 			      "comdat group");
 	    }
 	}
-#endif
 }
 
 /* DECL is FUNCTION_DECL.  Initialize datastructures so DECL is a function
@@ -1887,9 +1882,7 @@  cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
       TREE_ASM_WRITTEN (thunk_fndecl) = false;
       delete_unreachable_blocks ();
       update_ssa (TODO_update_ssa);
-#ifdef ENABLE_CHECKING
-      verify_flow_info ();
-#endif
+      checking_verify_flow_info ();
       free_dominance_info (CDI_DOMINATORS);
 
       /* Since we want to emit the thunk, we explicitly mark its name as
@@ -2373,9 +2366,7 @@  symbol_table::compile (void)
   if (seen_error ())
     return;
 
-#ifdef ENABLE_CHECKING
-  symtab_node::verify_symtab_nodes ();
-#endif
+  symtab_node::checking_verify_symtab_nodes ();
 
   timevar_push (TV_CGRAPHOPT);
   if (pre_ipa_mem_report)
@@ -2424,9 +2415,7 @@  symbol_table::compile (void)
   (*debug_hooks->assembly_start) ();
   if (!quiet_flag)
     fprintf (stderr, "Assembling functions:\n");
-#ifdef ENABLE_CHECKING
-  symtab_node::verify_symtab_nodes ();
-#endif
+  symtab_node::checking_verify_symtab_nodes ();
 
   materialize_all_clones ();
   bitmap_obstack_initialize (NULL);
@@ -2482,7 +2471,8 @@  symbol_table::compile (void)
       fprintf (dump_file, "\nFinal ");
       symtab_node::dump_table (dump_file);
     }
-#ifdef ENABLE_CHECKING
+  if (!flag_checking)
+    return;
   symtab_node::verify_symtab_nodes ();
   /* Double check that all inline clones are gone and that all
      function bodies have been released from memory.  */
@@ -2501,7 +2491,6 @@  symbol_table::compile (void)
       if (error_found)
 	internal_error ("nodes with unreleased memory found");
     }
-#endif
 }
 
 
diff --git a/gcc/ddg.c b/gcc/ddg.c
index ada4657..e6c9bbe 100644
--- a/gcc/ddg.c
+++ b/gcc/ddg.c
@@ -300,19 +300,16 @@  add_cross_iteration_register_deps (ddg_ptr g, df_ref last_def)
   rtx_insn *def_insn = DF_REF_INSN (last_def);
   ddg_node_ptr last_def_node = get_node_of_insn (g, def_insn);
   ddg_node_ptr use_node;
-#ifdef ENABLE_CHECKING
-  struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb);
-#endif
+  struct df_rd_bb_info *bb_info = flag_checking ? DF_RD_BB_INFO (g->bb)
+						: NULL;
   df_ref first_def = df_bb_regno_first_def_find (g->bb, regno);
 
   gcc_assert (last_def_node);
   gcc_assert (first_def);
 
-#ifdef ENABLE_CHECKING
-  if (DF_REF_ID (last_def) != DF_REF_ID (first_def))
+  if (flag_checking && DF_REF_ID (last_def) != DF_REF_ID (first_def))
     gcc_assert (!bitmap_bit_p (&bb_info->gen,
 			       DF_REF_ID (first_def)));
-#endif
 
   /* Create inter-loop true dependences and anti dependences.  */
   for (r_use = DF_REF_CHAIN (last_def); r_use != NULL; r_use = r_use->next)
@@ -1013,7 +1010,6 @@  order_sccs (ddg_all_sccs_ptr g)
 	 (int (*) (const void *, const void *)) compare_sccs);
 }
 
-#ifdef ENABLE_CHECKING
 /* Check that every node in SCCS belongs to exactly one strongly connected
    component and that no element of SCCS is empty.  */
 static void
@@ -1033,7 +1029,6 @@  check_sccs (ddg_all_sccs_ptr sccs, int num_nodes)
     }
   sbitmap_free (tmp);
 }
-#endif
 
 /* Perform the Strongly Connected Components decomposing algorithm on the
    DDG and return DDG_ALL_SCCS structure that contains them.  */
@@ -1079,9 +1074,10 @@  create_ddg_all_sccs (ddg_ptr g)
   sbitmap_free (from);
   sbitmap_free (to);
   sbitmap_free (scc_nodes);
-#ifdef ENABLE_CHECKING
-  check_sccs (sccs, num_nodes);
-#endif
+
+  if (flag_checking)
+    check_sccs (sccs, num_nodes);
+
   return sccs;
 }
 
diff --git a/gcc/df-core.c b/gcc/df-core.c
index 8d2d7a1..72a5eb5 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -682,10 +682,8 @@  df_finish_pass (bool verify ATTRIBUTE_UNUSED)
 #endif
 #endif
 
-#ifdef ENABLE_CHECKING
-  if (verify)
+  if (flag_checking && verify)
     df->changeable_flags |= DF_VERIFY_SCHEDULED;
-#endif
 }
 
 
@@ -1273,12 +1271,14 @@  df_analyze (void)
   for (i = 0; i < df->n_blocks; i++)
     bitmap_set_bit (current_all_blocks, df->postorder[i]);
 
-#ifdef ENABLE_CHECKING
-  /* Verify that POSTORDER_INVERTED only contains blocks reachable from
-     the ENTRY block.  */
-  for (i = 0; i < df->n_blocks_inverted; i++)
-    gcc_assert (bitmap_bit_p (current_all_blocks, df->postorder_inverted[i]));
-#endif
+  if (flag_checking)
+    {
+      /* Verify that POSTORDER_INVERTED only contains blocks reachable from
+	 the ENTRY block.  */
+      for (i = 0; i < df->n_blocks_inverted; i++)
+	gcc_assert (bitmap_bit_p (current_all_blocks,
+				  df->postorder_inverted[i]));
+    }
 
   /* Make sure that we have pruned any unreachable blocks from these
      sets.  */
diff --git a/gcc/diagnostic-core.h b/gcc/diagnostic-core.h
index 66d2e42..6cc1e6b 100644
--- a/gcc/diagnostic-core.h
+++ b/gcc/diagnostic-core.h
@@ -48,7 +48,7 @@  extern const char *trim_filename (const char *);
 /* None of these functions are suitable for ATTRIBUTE_PRINTF, because
    each language front end can extend them with its own set of format
    specifiers.  We must use custom format checks.  */
-#if (ENABLE_CHECKING && GCC_VERSION >= 4001) || GCC_VERSION == BUILDING_GCC_VERSION
+#if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == BUILDING_GCC_VERSION
 #define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m)
 #else
 #define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m)
diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c
index 831859a..11c369d 100644
--- a/gcc/diagnostic.c
+++ b/gcc/diagnostic.c
@@ -736,12 +736,12 @@  diagnostic_report_diagnostic (diagnostic_context *context,
 
   if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT)
     {
-#ifndef ENABLE_CHECKING
       /* When not checking, ICEs are converted to fatal errors when an
 	 error has already occurred.  This is counteracted by
 	 abort_on_error.  */
-      if ((diagnostic_kind_count (context, DK_ERROR) > 0
-	   || diagnostic_kind_count (context, DK_SORRY) > 0)
+      if (!CHECKING_P
+	  && (diagnostic_kind_count (context, DK_ERROR) > 0
+	      || diagnostic_kind_count (context, DK_SORRY) > 0)
 	  && !context->abort_on_error)
 	{
 	  expanded_location s 
@@ -750,7 +750,6 @@  diagnostic_report_diagnostic (diagnostic_context *context,
 		   s.file, s.line);
 	  exit (ICE_EXIT_CODE);
 	}
-#endif
       if (context->internal_error)
 	(*context->internal_error) (context,
 				    diagnostic->message.format_spec,
diff --git a/gcc/dominance.c b/gcc/dominance.c
index 09645be..0dc4030 100644
--- a/gcc/dominance.c
+++ b/gcc/dominance.c
@@ -634,9 +634,7 @@  calculate_dominance_info (cdi_direction dir)
 
   if (dom_computed[dir_index] == DOM_OK)
     {
-#if ENABLE_CHECKING
-      verify_dominators (dir);
-#endif
+      checking_verify_dominators (dir);
       return;
     }
 
@@ -665,11 +663,7 @@  calculate_dominance_info (cdi_direction dir)
       dom_computed[dir_index] = DOM_NO_FAST_QUERY;
     }
   else
-    {
-#if ENABLE_CHECKING
-      verify_dominators (dir);
-#endif
-    }
+    checking_verify_dominators (dir);
 
   compute_dom_fast_query (dir);
 
@@ -1014,7 +1008,7 @@  bb_dom_dfs_out (enum cdi_direction dir, basic_block bb)
 }
 
 /* Verify invariants of dominator structure.  */
-DEBUG_FUNCTION void
+void
 verify_dominators (cdi_direction dir)
 {
   gcc_assert (dom_info_available_p (dir));
diff --git a/gcc/dominance.h b/gcc/dominance.h
index 37e138b..7254f2f 100644
--- a/gcc/dominance.h
+++ b/gcc/dominance.h
@@ -60,6 +60,17 @@  extern bool dominated_by_p (enum cdi_direction, const_basic_block,
 unsigned bb_dom_dfs_in (enum cdi_direction, basic_block);
 unsigned bb_dom_dfs_out (enum cdi_direction, basic_block);
 extern void verify_dominators (enum cdi_direction);
+
+/* Verify invariants of computed dominance information, if internal consistency
+   checks are enabled.  */
+
+static inline void
+checking_verify_dominators (cdi_direction dir)
+{
+  if (flag_checking)
+    verify_dominators (dir);
+}
+
 basic_block recompute_dominator (enum cdi_direction, basic_block);
 extern void iterate_fix_dominators (enum cdi_direction,
 				    vec<basic_block> , bool);
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 4edc2ae..9485719 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -4149,15 +4149,12 @@  static inline void
 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
 {
   dw_attr_node attr;
+  gcc_checking_assert (targ_die != NULL);
 
-#ifdef ENABLE_CHECKING
-  gcc_assert (targ_die != NULL);
-#else
   /* With LTO we can end up trying to reference something we didn't create
      a DIE for.  Avoid crashing later on a NULL referenced DIE.  */
   if (targ_die == NULL)
     return;
-#endif
 
   attr.dw_attr = attr_kind;
   attr.dw_attr_val.val_class = dw_val_class_die_ref;
@@ -5723,7 +5720,6 @@  debug_dwarf (void)
   print_die (comp_unit_die (), stderr);
 }
 
-#ifdef ENABLE_CHECKING
 /* Sanity checks on DIEs.  */
 
 static void
@@ -5786,7 +5782,7 @@  check_die (dw_die_ref die)
 		    && a->dw_attr != DW_AT_GNU_all_call_sites);
     }
 }
-#endif
+
 
 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
@@ -11763,14 +11759,14 @@  const_ok_for_output_1 (rtx rtl)
     {
       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
 	 we can't express it in the debug info.  */
-#ifdef ENABLE_CHECKING
       /* Don't complain about TLS UNSPECs, those are just too hard to
 	 delegitimize.  Note this could be a non-decl SYMBOL_REF such as
 	 one in a constant pool entry, so testing SYMBOL_REF_TLS_MODEL
 	 rather than DECL_THREAD_LOCAL_P is not just an optimization.  */
-      if (XVECLEN (rtl, 0) == 0
-	  || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
-	  || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE)
+      if (flag_checking
+	  && (XVECLEN (rtl, 0) == 0
+	      || GET_CODE (XVECEXP (rtl, 0, 0)) != SYMBOL_REF
+	      || SYMBOL_REF_TLS_MODEL (XVECEXP (rtl, 0, 0)) == TLS_MODEL_NONE))
 	inform (current_function_decl
 		? DECL_SOURCE_LOCATION (current_function_decl)
 		: UNKNOWN_LOCATION,
@@ -11783,7 +11779,6 @@  const_ok_for_output_1 (rtx rtl)
 		"non-delegitimized UNSPEC %d found in variable location",
 		XINT (rtl, 1));
 #endif
-#endif
       expansion_failed (NULL_TREE, rtl,
 			"UNSPEC hasn't been delegitimized.\n");
       return false;
@@ -13570,12 +13565,12 @@  mem_loc_descriptor (rtx rtl, machine_mode mode,
       goto symref;
 
     default:
-#ifdef ENABLE_CHECKING
-      print_rtl (stderr, rtl);
-      gcc_unreachable ();
-#else
+      if (flag_checking)
+	{
+	  print_rtl (stderr, rtl);
+	  gcc_unreachable ();
+	}
       break;
-#endif
     }
 
   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
@@ -15098,15 +15093,13 @@  loc_list_from_tree (tree loc, int want_address,
 	  return 0;
 	}
 
-#ifdef ENABLE_CHECKING
       /* Otherwise this is a generic code; we should just lists all of
 	 these explicitly.  We forgot one.  */
-      gcc_unreachable ();
-#else
+      gcc_checking_assert (false);
+
       /* In a release build, we want to degrade gracefully: better to
 	 generate incomplete debugging information than to crash.  */
       return NULL;
-#endif
     }
 
   if (!ret && !list_ret)
@@ -19910,18 +19903,17 @@  gen_lexical_block_die (tree stmt, dw_die_ref context_die)
     {
       if (old_die)
 	{
-#ifdef ENABLE_CHECKING
 	  /* This must have been generated early and it won't even
 	     need location information since it's a DW_AT_inline
 	     function.  */
-	  for (dw_die_ref c = context_die; c; c = c->die_parent)
-	    if (c->die_tag == DW_TAG_inlined_subroutine
-		|| c->die_tag == DW_TAG_subprogram)
-	      {
-		gcc_assert (get_AT (c, DW_AT_inline));
-		break;
-	      }
-#endif
+	  if (flag_checking)
+	    for (dw_die_ref c = context_die; c; c = c->die_parent)
+	      if (c->die_tag == DW_TAG_inlined_subroutine
+		  || c->die_tag == DW_TAG_subprogram)
+		{
+		  gcc_assert (get_AT (c, DW_AT_inline));
+		  break;
+		}
 	  return;
 	}
     }
@@ -20738,10 +20730,8 @@  gen_type_die_with_usage (tree type, dw_die_ref context_die,
   if (type == NULL_TREE || type == error_mark_node)
     return;
 
-#ifdef ENABLE_CHECKING
-  if (type)
+  if (flag_checking && type)
      verify_type (type);
-#endif
 
   if (TYPE_NAME (type) != NULL_TREE
       && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
@@ -20935,11 +20925,12 @@  gen_type_die (tree type, dw_die_ref context_die)
   if (type != error_mark_node)
     {
       gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
-#ifdef ENABLE_CHECKING
-      dw_die_ref die = lookup_type_die (type);
-      if (die)
-	check_die (die);
-#endif
+      if (flag_checking)
+	{
+	  dw_die_ref die = lookup_type_die (type);
+	  if (die)
+	    check_die (die);
+	}
     }
 }
 
@@ -21977,11 +21968,12 @@  dwarf2out_decl (tree decl)
 
   gen_decl_die (decl, NULL, context_die);
 
-#ifdef ENABLE_CHECKING
-  dw_die_ref die = lookup_decl_die (decl);
-  if (die)
-    check_die (die);
-#endif
+  if (flag_checking)
+    {
+      dw_die_ref die = lookup_decl_die (decl);
+      if (die)
+	check_die (die);
+    }
 }
 
 /* Write the debugging output for DECL.  */
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index a6ef154..5355cac 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -2733,8 +2733,7 @@  verify_rtx_sharing (rtx orig, rtx insn)
 
   /* This rtx may not be shared.  If it has already been seen,
      replace it with a copy of itself.  */
-#ifdef ENABLE_CHECKING
-  if (RTX_FLAG (x, used))
+  if (flag_checking && RTX_FLAG (x, used))
     {
       error ("invalid rtl sharing found in the insn");
       debug_rtx (insn);
@@ -2742,7 +2741,6 @@  verify_rtx_sharing (rtx orig, rtx insn)
       debug_rtx (x);
       internal_error ("internal consistency failure");
     }
-#endif
   gcc_assert (!RTX_FLAG (x, used));
 
   RTX_FLAG (x, used) = 1;
@@ -4259,12 +4257,12 @@  delete_insns_since (rtx_insn *from)
 void
 reorder_insns_nobb (rtx_insn *from, rtx_insn *to, rtx_insn *after)
 {
-#ifdef ENABLE_CHECKING
-  rtx_insn *x;
-  for (x = from; x != to; x = NEXT_INSN (x))
-    gcc_assert (after != x);
-  gcc_assert (after != to);
-#endif
+  if (flag_checking)
+    {
+      for (rtx_insn *x = from; x != to; x = NEXT_INSN (x))
+	gcc_assert (after != x);
+      gcc_assert (after != to);
+    }
 
   /* Splice this bunch out of where it is now.  */
   if (PREV_INSN (from))
diff --git a/gcc/et-forest.c b/gcc/et-forest.c
index 4f919d4..bf2f765 100644
--- a/gcc/et-forest.c
+++ b/gcc/et-forest.c
@@ -28,7 +28,7 @@  License along with libiberty; see the file COPYING3.  If not see
 #include "alloc-pool.h"
 #include "et-forest.h"
 
-/* We do not enable this with ENABLE_CHECKING, since it is awfully slow.  */
+/* We do not enable this with CHECKING_P, since it is awfully slow.  */
 #undef DEBUG_ET
 
 #ifdef DEBUG_ET
diff --git a/gcc/except.c b/gcc/except.c
index fed18ee..97a8dc1 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -612,9 +612,8 @@  duplicate_eh_regions (struct function *ifun,
   struct duplicate_eh_regions_data data;
   eh_region outer_region;
 
-#ifdef ENABLE_CHECKING
-  verify_eh_tree (ifun);
-#endif
+  if (flag_checking)
+    verify_eh_tree (ifun);
 
   data.label_map = map;
   data.label_map_data = map_data;
@@ -632,9 +631,8 @@  duplicate_eh_regions (struct function *ifun,
 	duplicate_eh_regions_1 (&data, r, outer_region);
     }
 
-#ifdef ENABLE_CHECKING
-  verify_eh_tree (cfun);
-#endif
+  if (flag_checking)
+    verify_eh_tree (cfun);
 
   return data.eh_map;
 }
@@ -3309,7 +3307,7 @@  debug_eh_tree (struct function *fn)
 
 /* Verify invariants on EH datastructures.  */
 
-DEBUG_FUNCTION void
+void
 verify_eh_tree (struct function *fun)
 {
   eh_region r, outer;
diff --git a/gcc/fwprop.c b/gcc/fwprop.c
index 16c7981..67808bc 100644
--- a/gcc/fwprop.c
+++ b/gcc/fwprop.c
@@ -843,9 +843,7 @@  all_uses_available_at (rtx_insn *def_insn, rtx_insn *target_insn)
 
 
 static df_ref *active_defs;
-#ifdef ENABLE_CHECKING
 static sparseset active_defs_check;
-#endif
 
 /* Fill the ACTIVE_DEFS array with the use->def link for the registers
    mentioned in USE_REC.  Register the valid entries in ACTIVE_DEFS_CHECK
@@ -859,9 +857,8 @@  register_active_defs (df_ref use)
       df_ref def = get_def_for_use (use);
       int regno = DF_REF_REGNO (use);
 
-#ifdef ENABLE_CHECKING
-      sparseset_set_bit (active_defs_check, regno);
-#endif
+      if (CHECKING_P)
+	sparseset_set_bit (active_defs_check, regno);
       active_defs[regno] = def;
     }
 }
@@ -876,9 +873,8 @@  register_active_defs (df_ref use)
 static void
 update_df_init (rtx_insn *def_insn, rtx_insn *insn)
 {
-#ifdef ENABLE_CHECKING
-  sparseset_clear (active_defs_check);
-#endif
+  if (CHECKING_P)
+    sparseset_clear (active_defs_check);
   register_active_defs (DF_INSN_USES (def_insn));
   register_active_defs (DF_INSN_USES (insn));
   register_active_defs (DF_INSN_EQ_USES (insn));
@@ -899,9 +895,7 @@  update_uses (df_ref use)
       if (DF_REF_ID (use) >= (int) use_def_ref.length ())
         use_def_ref.safe_grow_cleared (DF_REF_ID (use) + 1);
 
-#ifdef ENABLE_CHECKING
-      gcc_assert (sparseset_bit_p (active_defs_check, regno));
-#endif
+      gcc_checking_assert (sparseset_bit_p (active_defs_check, regno));
       use_def_ref[DF_REF_ID (use)] = active_defs[regno];
     }
 }
@@ -1407,9 +1401,8 @@  fwprop_init (void)
   df_set_flags (DF_DEFER_INSN_RESCAN);
 
   active_defs = XNEWVEC (df_ref, max_reg_num ());
-#ifdef ENABLE_CHECKING
-  active_defs_check = sparseset_alloc (max_reg_num ());
-#endif
+  if (CHECKING_P)
+    active_defs_check = sparseset_alloc (max_reg_num ());
 }
 
 static void
@@ -1419,9 +1412,8 @@  fwprop_done (void)
 
   use_def_ref.release ();
   free (active_defs);
-#ifdef ENABLE_CHECKING
-  sparseset_free (active_defs_check);
-#endif
+  if (CHECKING_P)
+    sparseset_free (active_defs_check);
 
   free_dominance_info (CDI_DOMINATORS);
   cleanup_cfg (0);
diff --git a/gcc/ggc-page.c b/gcc/ggc-page.c
index 34e9e24..1fa8cd1 100644
--- a/gcc/ggc-page.c
+++ b/gcc/ggc-page.c
@@ -2201,12 +2201,11 @@  ggc_collect (void)
 void
 ggc_grow (void)
 {
-#ifndef ENABLE_CHECKING
-  G.allocated_last_gc = MAX (G.allocated_last_gc,
-			     G.allocated);
-#else
-  ggc_collect ();
-#endif
+  if (!CHECKING_P)
+    G.allocated_last_gc = MAX (G.allocated_last_gc,
+			       G.allocated);
+  else
+    ggc_collect ();
   if (!quiet_flag)
     fprintf (stderr, " {GC start %luk} ", (unsigned long) G.allocated / 1024);
 }
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 25a81f6..ff00f5a 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -9314,10 +9314,8 @@  gimplify_body (tree fndecl, bool do_parms)
   pop_gimplify_context (outer_bind);
   gcc_assert (gimplify_ctxp == NULL);
 
-#ifdef ENABLE_CHECKING
-  if (!seen_error ())
+  if (flag_checking && !seen_error ())
     verify_gimple_in_seq (gimple_bind_body (outer_bind));
-#endif
 
   timevar_pop (TV_TREE_GIMPLIFY);
   input_location = saved_location;
@@ -9609,11 +9607,9 @@  gimplify_hasher::equal (const elt_t *p1, const elt_t *p2)
   if (!operand_equal_p (t1, t2, 0))
     return false;
 
-#ifdef ENABLE_CHECKING
   /* Only allow them to compare equal if they also hash equal; otherwise
      results are nondeterminate, and we fail bootstrap comparison.  */
-  gcc_assert (hash (p1) == hash (p2));
-#endif
+  gcc_checking_assert (hash (p1) == hash (p2));
 
   return true;
 }
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index 18342d0..a08ba0f 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -106,10 +106,8 @@  gmp_cst_to_tree (tree type, mpz_t val)
 static inline void
 graphite_verify (void)
 {
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-  verify_loop_closed_ssa (true);
-#endif
+  checking_verify_loop_structure ();
+  checking_verify_loop_closed_ssa (true);
 }
 
 /* IVS_PARAMS maps ISL's scattering and parameter identifiers
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c
index d6a6705..d25d75b 100644
--- a/gcc/graphite-scop-detection.c
+++ b/gcc/graphite-scop-detection.c
@@ -598,21 +598,16 @@  canonicalize_loop_closed_ssa (loop_p loop)
 static void
 canonicalize_loop_closed_ssa_form (void)
 {
-  loop_p loop;
-
-#ifdef ENABLE_CHECKING
-  verify_loop_closed_ssa (true);
-#endif
+  checking_verify_loop_closed_ssa (true);
 
+  loop_p loop;
   FOR_EACH_LOOP (loop, 0)
     canonicalize_loop_closed_ssa (loop);
 
   rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
   update_ssa (TODO_update_ssa);
 
-#ifdef ENABLE_CHECKING
-  verify_loop_closed_ssa (true);
-#endif
+  checking_verify_loop_closed_ssa (true);
 }
 
 /* Pretty print to FILE all the SCoPs in DOT format and mark them with
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 158de1f..774bb0a 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2267,9 +2267,7 @@  rewrite_reductions_out_of_ssa (scop_p scop)
 	}
 
   update_ssa (TODO_update_ssa);
-#ifdef ENABLE_CHECKING
-  verify_loop_closed_ssa (true);
-#endif
+  checking_verify_loop_closed_ssa (true);
 }
 
 /* Rewrite the scalar dependence of DEF used in USE_STMT with a memory
@@ -2448,9 +2446,7 @@  rewrite_cross_bb_scalar_deps_out_of_ssa (scop_p scop)
     {
       scev_reset_htab ();
       update_ssa (TODO_update_ssa);
-#ifdef ENABLE_CHECKING
-      verify_loop_closed_ssa (true);
-#endif
+      checking_verify_loop_closed_ssa (true);
     }
 }
 
diff --git a/gcc/hash-table.h b/gcc/hash-table.h
index 8e3c2ca..192be30 100644
--- a/gcc/hash-table.h
+++ b/gcc/hash-table.h
@@ -638,9 +638,7 @@  hash_table<Descriptor, Allocator>::find_empty_slot_for_expand (hashval_t hash)
 
   if (is_empty (*slot))
     return slot;
-#ifdef ENABLE_CHECKING
   gcc_checking_assert (!is_deleted (*slot));
-#endif
 
   hash2 = hash_table_mod2 (hash, m_size_prime_index);
   for (;;)
@@ -652,9 +650,7 @@  hash_table<Descriptor, Allocator>::find_empty_slot_for_expand (hashval_t hash)
       slot = m_entries + index;
       if (is_empty (*slot))
         return slot;
-#ifdef ENABLE_CHECKING
       gcc_checking_assert (!is_deleted (*slot));
-#endif
     }
 }
 
diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c
index d0ae494..ca53755 100644
--- a/gcc/ifcvt.c
+++ b/gcc/ifcvt.c
@@ -5093,9 +5093,7 @@  if_convert (bool after_combine)
   if (optimize == 1)
     df_remove_problem (df_live);
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 }
 
 /* If-conversion and CFG cleanup.  */
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 69a181d..93e279c 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -1063,7 +1063,7 @@  ipa_context_from_jfunc (ipa_node_params *info, cgraph_edge *cs, int csidx,
    bottom, not containing a variable component and without any known value at
    the same time.  */
 
-DEBUG_FUNCTION void
+void
 ipcp_verify_propagated_values (void)
 {
   struct cgraph_node *node;
@@ -2816,9 +2816,8 @@  ipcp_propagate_stage (struct ipa_topo_info *topo)
 	     overall_size, max_new_size);
 
   propagate_constants_topo (topo);
-#ifdef ENABLE_CHECKING
-  ipcp_verify_propagated_values ();
-#endif
+  if (flag_checking)
+    ipcp_verify_propagated_values ();
   topo->constants.propagate_effects ();
   topo->contexts.propagate_effects ();
 
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index a7a8e8e..69dec05 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -272,11 +272,10 @@  type_in_anonymous_namespace_p (const_tree t)
     {
       /* C++ FE uses magic <anon> as assembler names of anonymous types.
  	 verify that this match with type_in_anonymous_namespace_p.  */
-#ifdef ENABLE_CHECKING
       if (in_lto_p)
-	gcc_assert (!strcmp ("<anon>",
-		    IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
-#endif
+	gcc_checking_assert (!strcmp ("<anon>",
+				      IDENTIFIER_POINTER
+					(DECL_ASSEMBLER_NAME (TYPE_NAME (t)))));
       return true;
     }
   return false;
@@ -300,15 +299,13 @@  odr_type_p (const_tree t)
   if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
       && (DECL_ASSEMBLER_NAME_SET_P (TYPE_NAME (t))))
     {
-#ifdef ENABLE_CHECKING
       /* C++ FE uses magic <anon> as assembler names of anonymous types.
  	 verify that this match with type_in_anonymous_namespace_p.  */
-      gcc_assert (!type_with_linkage_p (t)
-		  || strcmp ("<anon>",
-			     IDENTIFIER_POINTER
-			        (DECL_ASSEMBLER_NAME (TYPE_NAME (t))))
-		  || type_in_anonymous_namespace_p (t));
-#endif
+      gcc_checking_assert (!type_with_linkage_p (t)
+			   || strcmp ("<anon>",
+				      IDENTIFIER_POINTER
+					(DECL_ASSEMBLER_NAME (TYPE_NAME (t))))
+			   || type_in_anonymous_namespace_p (t));
       return true;
     }
   return false;
@@ -1777,11 +1774,10 @@  odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
 bool
 odr_types_equivalent_p (tree type1, tree type2)
 {
-  hash_set<type_pair> visited;
+  gcc_checking_assert (odr_or_derived_type_p (type1)
+		       && odr_or_derived_type_p (type2));
 
-#ifdef ENABLE_CHECKING
-  gcc_assert (odr_or_derived_type_p (type1) && odr_or_derived_type_p (type2));
-#endif
+  hash_set<type_pair> visited;
   return odr_types_equivalent_p (type1, type2, false, NULL,
 			         &visited, UNKNOWN_LOCATION, UNKNOWN_LOCATION);
 }
@@ -2000,8 +1996,8 @@  add_type_duplicate (odr_type val, tree type)
     }
   gcc_assert (val->odr_violated || !odr_must_violate);
   /* Sanity check that all bases will be build same way again.  */
-#ifdef ENABLE_CHECKING
-  if (COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (val->type)
+  if (flag_checking
+      && COMPLETE_TYPE_P (type) && COMPLETE_TYPE_P (val->type)
       && TREE_CODE (val->type) == RECORD_TYPE
       && TREE_CODE (type) == RECORD_TYPE
       && TYPE_BINFO (val->type) && TYPE_BINFO (type)
@@ -2030,7 +2026,6 @@  add_type_duplicate (odr_type val, tree type)
 	    j++;
 	  }
     }
-#endif
 
 
   /* Regularize things a little.  During LTO same types may come with
@@ -2136,8 +2131,8 @@  get_odr_type (tree type, bool insert)
       if (slot && *slot)
 	{
 	  val = *slot;
-#ifdef ENABLE_CHECKING
-	  if (in_lto_p && can_be_vtable_hashed_p (type))
+	  if (flag_checking
+	      && in_lto_p && can_be_vtable_hashed_p (type))
 	    {
 	      hash = hash_odr_vtable (type);
 	      vtable_slot = odr_vtable_hash->find_slot_with_hash (type, hash,
@@ -2145,7 +2140,6 @@  get_odr_type (tree type, bool insert)
 	      gcc_assert (!vtable_slot || *vtable_slot == *slot);
 	      vtable_slot = NULL;
 	    }
-#endif
 	}
       else if (*vtable_slot)
 	val = *vtable_slot;
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index d39a3c1..9412e71 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -2982,7 +2982,9 @@  sem_item_optimizer::subdivide_classes_by_sensitive_refs ()
 void
 sem_item_optimizer::verify_classes (void)
 {
-#if ENABLE_CHECKING
+  if (!flag_checking)
+    return;
+
   for (hash_table <congruence_class_group_hash>::iterator it = m_classes.begin ();
        it != m_classes.end (); ++it)
     {
@@ -2990,26 +2992,25 @@  sem_item_optimizer::verify_classes (void)
 	{
 	  congruence_class *cls = (*it)->classes[i];
 
-	  gcc_checking_assert (cls);
-	  gcc_checking_assert (cls->members.length () > 0);
+	  gcc_assert (cls);
+	  gcc_assert (cls->members.length () > 0);
 
 	  for (unsigned int j = 0; j < cls->members.length (); j++)
 	    {
 	      sem_item *item = cls->members[j];
 
-	      gcc_checking_assert (item);
-	      gcc_checking_assert (item->cls == cls);
+	      gcc_assert (item);
+	      gcc_assert (item->cls == cls);
 
 	      for (unsigned k = 0; k < item->usages.length (); k++)
 		{
 		  sem_usage_pair *usage = item->usages[k];
-		  gcc_checking_assert (usage->item->index_in_class <
-				       usage->item->cls->members.length ());
+		  gcc_assert (usage->item->index_in_class <
+			      usage->item->cls->members.length ());
 		}
 	    }
 	}
     }
-#endif
 }
 
 /* Disposes split map traverse function. CLS_PTR is pointer to congruence
@@ -3054,10 +3055,11 @@  sem_item_optimizer::traverse_congruence_split (congruence_class * const &cls,
 	  add_item_to_class (tc, cls->members[i]);
 	}
 
-#ifdef ENABLE_CHECKING
-      for (unsigned int i = 0; i < 2; i++)
-	gcc_checking_assert (newclasses[i]->members.length ());
-#endif
+      if (flag_checking)
+	{
+	  for (unsigned int i = 0; i < 2; i++)
+	    gcc_assert (newclasses[i]->members.length ());
+	}
 
       if (splitter_cls == cls)
 	optimizer->splitter_class_removed = true;
@@ -3152,11 +3154,9 @@  sem_item_optimizer::do_congruence_step_for_index (congruence_class *cls,
 	  else
 	    b = *slot;
 
-#if ENABLE_CHECKING
 	  gcc_checking_assert (usage->item->cls);
 	  gcc_checking_assert (usage->item->index_in_class <
 			       usage->item->cls->members.length ());
-#endif
 
 	  bitmap_set_bit (b, usage->item->index_in_class);
 	}
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c
index 108ff3e..7718d2d 100644
--- a/gcc/ipa-inline-analysis.c
+++ b/gcc/ipa-inline-analysis.c
@@ -2956,10 +2956,12 @@  compute_inline_parameters (struct cgraph_node *node, bool early)
   info->size = info->self_size;
   info->stack_frame_offset = 0;
   info->estimated_stack_size = info->estimated_self_stack_size;
-#ifdef ENABLE_CHECKING
-  inline_update_overall_summary (node);
-  gcc_assert (info->time == info->self_time && info->size == info->self_size);
-#endif
+  if (flag_checking)
+    {
+      inline_update_overall_summary (node);
+      gcc_assert (info->time == info->self_time
+		  && info->size == info->self_size);
+    }
 
   pop_cfun ();
 }
diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c
index 12f701a..1d7bcaa 100644
--- a/gcc/ipa-inline-transform.c
+++ b/gcc/ipa-inline-transform.c
@@ -491,10 +491,9 @@  save_inline_function_body (struct cgraph_node *node)
       first_clone->remove_symbol_and_inline_clones ();
       first_clone = NULL;
     }
-#ifdef ENABLE_CHECKING
-  else
+  else if (flag_checking)
     first_clone->verify ();
-#endif
+
   return first_clone;
 }
 
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 8f3919c..db98755 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -1878,7 +1878,7 @@  inline_small_functions (void)
       if (!edge->inline_failed || !edge->callee->analyzed)
 	continue;
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
       /* Be sure that caches are maintained consistent.  */
       sreal cached_badness = edge_badness (edge, false);
  
@@ -2632,9 +2632,8 @@  early_inliner (function *fun)
   if (ipa_node_params_sum)
     return 0;
 
-#ifdef ENABLE_CHECKING
-  node->verify ();
-#endif
+  if (flag_checking)
+    node->verify ();
   node->remove_all_references ();
 
   /* Rebuild this reference because it dosn't depend on
diff --git a/gcc/ipa-inline.h b/gcc/ipa-inline.h
index 85041f6..323d117 100644
--- a/gcc/ipa-inline.h
+++ b/gcc/ipa-inline.h
@@ -299,10 +299,8 @@  estimate_edge_size (struct cgraph_edge *edge)
 static inline int
 estimate_edge_growth (struct cgraph_edge *edge)
 {
-#ifdef ENABLE_CHECKING
   gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size
 		       || !edge->callee->analyzed);
-#endif
   return (estimate_edge_size (edge)
 	  - inline_edge_summary (edge)->call_stmt_size);
 }
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c
index 93073d8..0ae4388 100644
--- a/gcc/ipa-visibility.c
+++ b/gcc/ipa-visibility.c
@@ -464,16 +464,15 @@  function_and_variable_visibility (bool whole_program)
 	 what comdat group they are in when they won't be emitted in this TU.  */
       if (node->same_comdat_group && DECL_EXTERNAL (node->decl))
 	{
-#ifdef ENABLE_CHECKING
-	  symtab_node *n;
-
-	  for (n = node->same_comdat_group;
-	       n != node;
-	       n = n->same_comdat_group)
-	      /* If at least one of same comdat group functions is external,
-		 all of them have to be, otherwise it is a front-end bug.  */
-	      gcc_assert (DECL_EXTERNAL (n->decl));
-#endif
+	  if (flag_checking)
+	    {
+	      for (symtab_node *n = node->same_comdat_group;
+		   n != node;
+		   n = n->same_comdat_group)
+		/* If at least one of same comdat group functions is external,
+		   all of them have to be, otherwise it is a front-end bug.  */
+		gcc_assert (DECL_EXTERNAL (n->decl));
+	    }
 	  node->dissolve_same_comdat_group_list ();
 	}
       gcc_assert ((!DECL_WEAK (node->decl)
diff --git a/gcc/ipa.c b/gcc/ipa.c
index 6847305..6dc23ae 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -319,12 +319,13 @@  symbol_table::remove_unreachable_nodes (FILE *file)
   build_type_inheritance_graph ();
   if (file)
     fprintf (file, "\nReclaiming functions:");
-#ifdef ENABLE_CHECKING
-  FOR_EACH_FUNCTION (node)
-    gcc_assert (!node->aux);
-  FOR_EACH_VARIABLE (vnode)
-    gcc_assert (!vnode->aux);
-#endif
+  if (flag_checking)
+    {
+      FOR_EACH_FUNCTION (node)
+	gcc_assert (!node->aux);
+      FOR_EACH_VARIABLE (vnode)
+	gcc_assert (!vnode->aux);
+    }
   /* Mark functions whose bodies are obviously needed.
      This is mostly when they can be referenced externally.  Inline clones
      are special since their declarations are shared with master clone and thus
@@ -678,9 +679,7 @@  symbol_table::remove_unreachable_nodes (FILE *file)
   if (file)
     fprintf (file, "\n");
 
-#ifdef ENABLE_CHECKING
-  symtab_node::verify_symtab_nodes ();
-#endif
+  symtab_node::checking_verify_symtab_nodes ();
 
   /* If we removed something, perhaps profile could be improved.  */
   if (changed && optimize && inline_edge_summary_vec.exists ())
@@ -1370,13 +1369,12 @@  ipa_single_use (void)
     {
       if (var->aux != BOTTOM)
 	{
-#ifdef ENABLE_CHECKING
 	  /* Not having the single user known means that the VAR is
 	     unreachable.  Either someone forgot to remove unreachable
 	     variables or the reachability here is wrong.  */
 
-          gcc_assert (single_user_map.get (var));
-#endif
+	  gcc_checking_assert (single_user_map.get (var));
+
 	  if (dump_file)
 	    {
 	      fprintf (dump_file, "Variable %s/%i is used by single function\n",
diff --git a/gcc/ira-int.h b/gcc/ira-int.h
index af6c92f..d4160d3 100644
--- a/gcc/ira-int.h
+++ b/gcc/ira-int.h
@@ -26,7 +26,7 @@  along with GCC; see the file COPYING3.  If not see
 /* To provide consistency in naming, all IRA external variables,
    functions, common typedefs start with prefix ira_.  */
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 #define ENABLE_IRA_CHECKING
 #endif
 
diff --git a/gcc/ira.c b/gcc/ira.c
index 28517c1..88c297e 100644
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -5152,9 +5152,9 @@  ira (FILE *f)
     df_remove_problem (df_live);
   gcc_checking_assert (df_live == NULL);
 
-#ifdef ENABLE_CHECKING
-  df->changeable_flags |= DF_VERIFY_SCHEDULED;
-#endif
+  if (flag_checking)
+    df->changeable_flags |= DF_VERIFY_SCHEDULED;
+
   df_analyze ();
 
   init_reg_equiv ();
diff --git a/gcc/loop-doloop.c b/gcc/loop-doloop.c
index 6554597..592ae1f 100644
--- a/gcc/loop-doloop.c
+++ b/gcc/loop-doloop.c
@@ -734,7 +734,5 @@  doloop_optimize_loops (void)
 
   iv_analysis_done ();
 
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-#endif
+  checking_verify_loop_structure ();
 }
diff --git a/gcc/loop-init.c b/gcc/loop-init.c
index a9a3d6fa..9c545df 100644
--- a/gcc/loop-init.c
+++ b/gcc/loop-init.c
@@ -104,10 +104,8 @@  loop_optimizer_init (unsigned flags)
       /* Ensure that the dominators are computed, like flow_loops_find does.  */
       calculate_dominance_info (CDI_DOMINATORS);
 
-#ifdef ENABLE_CHECKING
       if (!needs_fixup)
-	verify_loop_structure ();
-#endif
+	checking_verify_loop_structure ();
 
       /* Clear all flags.  */
       if (recorded_exits)
@@ -129,9 +127,7 @@  loop_optimizer_init (unsigned flags)
   /* Dump loops.  */
   flow_loops_dump (dump_file, NULL, 1);
 
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-#endif
+  checking_verify_loop_structure ();
 
   timevar_pop (TV_LOOP_INIT);
 }
@@ -325,9 +321,7 @@  fix_loop_structure (bitmap changed_bbs)
   /* Apply flags to loops.  */
   apply_loop_flags (current_loops->state | record_exits);
 
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-#endif
+  checking_verify_loop_structure ();
 
   timevar_pop (TV_LOOP_INIT);
 
diff --git a/gcc/loop-invariant.c b/gcc/loop-invariant.c
index 52c8ae8..e7c6cb4 100644
--- a/gcc/loop-invariant.c
+++ b/gcc/loop-invariant.c
@@ -2096,7 +2096,5 @@  move_loop_invariants (void)
   invariant_table = NULL;
   invariant_table_size = 0;
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 }
diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c
index 2986f57..941a829 100644
--- a/gcc/lra-assigns.c
+++ b/gcc/lra-assigns.c
@@ -1591,7 +1591,7 @@  lra_assign (void)
   bitmap_initialize (&all_spilled_pseudos, &reg_obstack);
   create_live_range_start_chains ();
   setup_live_pseudos_and_spill_after_risky_transforms (&all_spilled_pseudos);
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   if (!flag_ipa_ra)
     for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++)
       if (lra_reg_info[i].nrefs != 0 && reg_renumber[i] >= 0
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 2c27f1a..c70b018 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -4454,8 +4454,7 @@  lra_constraints (bool first_p)
   bitmap_clear (&equiv_insn_bitmap);
   /* If we used a new hard regno, changed_p should be true because the
      hard reg is assigned to a new pseudo.  */
-#ifdef ENABLE_CHECKING
-  if (! changed_p)
+  if (flag_checking && !changed_p)
     {
       for (i = FIRST_PSEUDO_REGISTER; i < new_regno_start; i++)
 	if (lra_reg_info[i].nrefs != 0
@@ -4467,7 +4466,6 @@  lra_constraints (bool first_p)
 	      lra_assert (df_regs_ever_live_p (hard_regno + j));
 	  }
     }
-#endif
   return changed_p;
 }
 
diff --git a/gcc/lra-eliminations.c b/gcc/lra-eliminations.c
index fdf4179..448e645 100644
--- a/gcc/lra-eliminations.c
+++ b/gcc/lra-eliminations.c
@@ -1436,11 +1436,11 @@  lra_eliminate (bool final_p, bool first_p)
   bitmap_initialize (&insns_with_changed_offsets, &reg_obstack);
   if (final_p)
     {
-#ifdef ENABLE_CHECKING
-      update_reg_eliminate (&insns_with_changed_offsets);
-      if (! bitmap_empty_p (&insns_with_changed_offsets))
-	gcc_unreachable ();
-#endif
+      if (flag_checking)
+	{
+	  update_reg_eliminate (&insns_with_changed_offsets);
+	  gcc_assert (bitmap_empty_p (&insns_with_changed_offsets));
+	}
       /* We change eliminable hard registers in insns so we should do
 	 this for all insns containing any eliminable hard
 	 register.  */
diff --git a/gcc/lra-int.h b/gcc/lra-int.h
index 5e78604..570f210 100644
--- a/gcc/lra-int.h
+++ b/gcc/lra-int.h
@@ -91,7 +91,7 @@  struct lra_reg
   /* True if the pseudo should not be assigned to a stack register.  */
   bool no_stack_p;
 #endif
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   /* True if the pseudo crosses a call.	 It is setup in lra-lives.c
      and used to check that the pseudo crossing a call did not get a
      call used hard register.  */
diff --git a/gcc/lra-lives.c b/gcc/lra-lives.c
index 253bc18..cf7bc2c 100644
--- a/gcc/lra-lives.c
+++ b/gcc/lra-lives.c
@@ -590,7 +590,7 @@  check_pseudos_live_through_calls (int regno)
   for (hr = 0; hr < FIRST_PSEUDO_REGISTER; hr++)
     if (HARD_REGNO_CALL_PART_CLOBBERED (hr, PSEUDO_REGNO_MODE (regno)))
       SET_HARD_REG_BIT (lra_reg_info[regno].conflict_hard_regs, hr);
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   lra_reg_info[regno].call_p = true;
 #endif
   if (! sparseset_bit_p (pseudos_live_through_setjumps, regno))
@@ -1229,7 +1229,7 @@  lra_create_live_ranges_1 (bool all_p, bool dead_insn_p)
 	lra_reg_info[i].biggest_mode = GET_MODE (regno_reg_rtx[i]);
       else
 	lra_reg_info[i].biggest_mode = VOIDmode;
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
       lra_reg_info[i].call_p = false;
 #endif
       if (i >= FIRST_PSEUDO_REGISTER
diff --git a/gcc/lra-remat.c b/gcc/lra-remat.c
index 66532b8..68ce502 100644
--- a/gcc/lra-remat.c
+++ b/gcc/lra-remat.c
@@ -578,10 +578,8 @@  create_remat_bb_data (void)
 			   last_basic_block_for_fn (cfun));
   FOR_ALL_BB_FN (bb, cfun)
     {
-#ifdef ENABLE_CHECKING
-      if (bb->index < 0 || bb->index >= last_basic_block_for_fn (cfun))
-	abort ();
-#endif
+      gcc_checking_assert (bb->index >= 0
+			   && bb->index < last_basic_block_for_fn (cfun));
       bb_info = get_remat_bb_data (bb);
       bb_info->bb = bb;
       bitmap_initialize (&bb_info->changed_regs, &reg_obstack);
diff --git a/gcc/lra.c b/gcc/lra.c
index bdbfe51..cf08c27 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1198,30 +1198,22 @@  lra_update_insn_recog_data (rtx_insn *insn)
 	  decode_asm_operands (PATTERN (insn), NULL,
 			       data->operand_loc,
 			       constraints, operand_mode, NULL);
-#ifdef ENABLE_CHECKING
-	  {
-	    int i;
 
-	    for (i = 0; i < nop; i++)
+	  if (flag_checking)
+	    for (int i = 0; i < nop; i++)
 	      lra_assert
 		(insn_static_data->operand[i].mode == operand_mode[i]
 		 && insn_static_data->operand[i].constraint == constraints[i]
 		 && ! insn_static_data->operand[i].is_operator);
-	  }
-#endif
 	}
-#ifdef ENABLE_CHECKING
-      {
-	int i;
 
-	for (i = 0; i < insn_static_data->n_operands; i++)
+      if (flag_checking)
+	for (int i = 0; i < insn_static_data->n_operands; i++)
 	  lra_assert
 	    (insn_static_data->operand[i].type
 	     == (insn_static_data->operand[i].constraint[0] == '=' ? OP_OUT
 		 : insn_static_data->operand[i].constraint[0] == '+' ? OP_INOUT
 		 : OP_IN));
-      }
-#endif
     }
   else
     {
@@ -2003,8 +1995,6 @@  restore_scratches (void)
 
 
 
-#ifdef ENABLE_CHECKING
-
 /* Function checks RTL for correctness.	 If FINAL_P is true, it is
    done at the end of LRA and the check is more rigorous.  */
 static void
@@ -2023,9 +2013,7 @@  check_rtl (bool final_p)
       {
 	if (final_p)
 	  {
-#ifdef ENABLED_CHECKING
 	    extract_constrain_insn (insn);
-#endif
 	    continue;
 	  }
 	/* LRA code is based on assumption that all addresses can be
@@ -2038,7 +2026,6 @@  check_rtl (bool final_p)
 	  fatal_insn_not_found (insn);
       }
 }
-#endif /* #ifdef ENABLE_CHECKING */
 
 /* Determine if the current function has an exception receiver block
    that reaches the exit block via non-exceptional edges  */
@@ -2232,10 +2219,9 @@  lra (FILE *f)
 
   init_insn_recog_data ();
 
-#ifdef ENABLE_CHECKING
   /* Some quick check on RTL generated by previous passes.  */
-  check_rtl (false);
-#endif
+  if (flag_checking)
+    check_rtl (/*final_p=*/false);
 
   lra_in_progress = 1;
 
@@ -2436,9 +2422,8 @@  lra (FILE *f)
      by this, so unshare everything here.  */
   unshare_all_rtl_again (get_insns ());
 
-#ifdef ENABLE_CHECKING
-  check_rtl (true);
-#endif
+  if (flag_checking)
+    check_rtl (/*final_p=*/true);
 
   timevar_pop (TV_LRA);
 }
diff --git a/gcc/lto-cgraph.c b/gcc/lto-cgraph.c
index 51f31c8..eb6f7b6 100644
--- a/gcc/lto-cgraph.c
+++ b/gcc/lto-cgraph.c
@@ -1560,10 +1560,11 @@  input_cgraph_1 (struct lto_file_decl_data *file_data,
   lto_input_toplevel_asms (file_data, order_base);
 
   /* AUX pointers should be all non-zero for function nodes read from the stream.  */
-#ifdef ENABLE_CHECKING
-  FOR_EACH_VEC_ELT (nodes, i, node)
-    gcc_assert (node->aux || !is_a <cgraph_node *> (node));
-#endif
+  if (flag_checking)
+    {
+      FOR_EACH_VEC_ELT (nodes, i, node)
+	gcc_assert (node->aux || !is_a <cgraph_node *> (node));
+    }
   FOR_EACH_VEC_ELT (nodes, i, node)
     {
       int ref;
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 11daf7a..8fc7e95 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -607,17 +607,12 @@  DFS::DFS (struct output_block *ob, tree expr, bool ref_p, bool this_ref_p,
 		std::swap (sccstack[first + i],
 			   sccstack[first + entry_start + i]);
 
-	      if (scc_entry_len == 1)
-		; /* We already sorted SCC deterministically in hash_scc.  */
-	      else
-		/* Check that we have only one SCC.
-		   Naturally we may have conflicts if hash function is not
- 		   strong enough.  Lets see how far this gets.  */
-		{
-#ifdef ENABLE_CHECKING
-		  gcc_unreachable ();
-#endif
-		}
+	      /* We already sorted SCC deterministically in hash_scc.  */
+
+	      /* Check that we have only one SCC.
+		 Naturally we may have conflicts if hash function is not
+		 strong enough.  Lets see how far this gets.  */
+	      gcc_checking_assert (scc_entry_len == 1);
 	    }
 
 	  /* Write LTO_tree_scc.  */
@@ -2277,7 +2272,7 @@  void
 lto_output (void)
 {
   struct lto_out_decl_state *decl_state;
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   bitmap output = lto_bitmap_alloc ();
 #endif
   int i, n_nodes;
@@ -2296,7 +2291,7 @@  lto_output (void)
 	  if (lto_symtab_encoder_encode_body_p (encoder, node)
 	      && !node->alias)
 	    {
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 	      gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
 	      bitmap_set_bit (output, DECL_UID (node->decl));
 #endif
@@ -2326,7 +2321,7 @@  lto_output (void)
 	      && !node->alias)
 	    {
 	      timevar_push (TV_IPA_LTO_CTORS_OUT);
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 	      gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
 	      bitmap_set_bit (output, DECL_UID (node->decl));
 #endif
@@ -2353,7 +2348,7 @@  lto_output (void)
 
   output_offload_tables ();
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   lto_bitmap_free (output);
 #endif
 }
diff --git a/gcc/lto-streamer.c b/gcc/lto-streamer.c
index b34ab8b..92b313a 100644
--- a/gcc/lto-streamer.c
+++ b/gcc/lto-streamer.c
@@ -297,13 +297,12 @@  static hash_table<tree_hash_entry> *tree_htab;
 void
 lto_streamer_init (void)
 {
-#ifdef ENABLE_CHECKING
   /* Check that all the TS_* handled by the reader and writer routines
      match exactly the structures defined in treestruct.def.  When a
      new TS_* astructure is added, the streamer should be updated to
      handle it.  */
-  streamer_check_handled_ts_structures ();
-#endif
+  if (flag_checking)
+    streamer_check_handled_ts_structures ();
 
 #ifdef LTO_STREAMER_DEBUG
   tree_htab = new hash_table<tree_hash_entry> (31);
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 4bb0aaf..fbc8f96 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1583,19 +1583,18 @@  unify_scc (struct data_in *data_in, unsigned from,
 	  num_sccs_merged++;
 	  total_scc_size_merged += len;
 
-#ifdef ENABLE_CHECKING
-	  for (unsigned i = 0; i < len; ++i)
-	    {
-	      tree t = map[2*i+1];
-	      enum tree_code code = TREE_CODE (t);
-	      /* IDENTIFIER_NODEs should be singletons and are merged by the
-		 streamer.  The others should be singletons, too, and we
-		 should not merge them in any way.  */
-	      gcc_assert (code != TRANSLATION_UNIT_DECL
-			  && code != IDENTIFIER_NODE
-			  && !streamer_handle_as_builtin_p (t));
-	    }
-#endif
+	  if (flag_checking)
+	    for (unsigned i = 0; i < len; ++i)
+	      {
+		tree t = map[2*i+1];
+		enum tree_code code = TREE_CODE (t);
+		/* IDENTIFIER_NODEs should be singletons and are merged by the
+		   streamer.  The others should be singletons, too, and we
+		   should not merge them in any way.  */
+		gcc_assert (code != TRANSLATION_UNIT_DECL
+			    && code != IDENTIFIER_NODE
+			    && !streamer_handle_as_builtin_p (t));
+	      }
 
 	  /* Fixup the streamer cache with the prevailing nodes according
 	     to the tree node mapping computed by compare_tree_sccs.  */
@@ -2633,10 +2632,8 @@  lto_fixup_state (struct lto_in_decl_state *state)
       for (i = 0; i < vec_safe_length (trees); i++)
 	{
 	  tree t = (*trees)[i];
-#ifdef ENABLE_CHECKING
-	  if (TYPE_P (t))
+	  if (CHECKING_P && TYPE_P (t))
 	    verify_type (t);
-#endif
 	  if (VAR_OR_FUNCTION_DECL_P (t)
 	      && (TREE_PUBLIC (t) || DECL_EXTERNAL (t)))
 	    (*trees)[i] = lto_symtab_prevailing_decl (t);
@@ -3098,9 +3095,8 @@  do_whole_program_analysis (void)
       fprintf (symtab->dump_file, "Optimized ");
       symtab_node::dump_table (symtab->dump_file);
     }
-#ifdef ENABLE_CHECKING
-  symtab_node::verify_symtab_nodes ();
-#endif
+
+  symtab_node::checking_verify_symtab_nodes ();
   bitmap_obstack_release (NULL);
 
   /* We are about to launch the final LTRANS phase, stop the WPA timer.  */
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index cdcf9d6..8b30dc1 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -2681,14 +2681,14 @@  scan_omp_target (gomp_target *stmt, omp_context *outer_ctx)
     {
       TYPE_FIELDS (ctx->record_type)
 	= nreverse (TYPE_FIELDS (ctx->record_type));
-#ifdef ENABLE_CHECKING
-      tree field;
-      unsigned int align = DECL_ALIGN (TYPE_FIELDS (ctx->record_type));
-      for (field = TYPE_FIELDS (ctx->record_type);
-	   field;
-	   field = DECL_CHAIN (field))
-	gcc_assert (DECL_ALIGN (field) == align);
-#endif
+      if (flag_checking)
+	{
+	  unsigned int align = DECL_ALIGN (TYPE_FIELDS (ctx->record_type));
+	  for (tree field = TYPE_FIELDS (ctx->record_type);
+	       field;
+	       field = DECL_CHAIN (field))
+	    gcc_assert (DECL_ALIGN (field) == align);
+	}
       layout_type (ctx->record_type);
       if (offloaded)
 	fixup_child_record_type (ctx);
@@ -5623,10 +5623,8 @@  expand_omp_taskreg (struct omp_region *region)
 	}
       if (gimple_in_ssa_p (cfun))
 	update_ssa (TODO_update_ssa);
-#ifdef ENABLE_CHECKING
-      if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP))
+      if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP))
 	verify_loop_structure ();
-#endif
       pop_cfun ();
     }
 
@@ -9186,10 +9184,8 @@  expand_omp_target (struct omp_region *region)
 	  if (changed)
 	    cleanup_tree_cfg ();
 	}
-#ifdef ENABLE_CHECKING
-      if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP))
+      if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP))
 	verify_loop_structure ();
-#endif
       pop_cfun ();
     }
 
@@ -9698,10 +9694,8 @@  execute_expand_omp (void)
 
   expand_omp (root_omp_region);
 
-#ifdef ENABLE_CHECKING
-  if (!loops_state_satisfies_p (LOOPS_NEED_FIXUP))
+  if (flag_checking && !loops_state_satisfies_p (LOOPS_NEED_FIXUP))
     verify_loop_structure ();
-#endif
   cleanup_tree_cfg ();
 
   free_omp_regions ();
@@ -11461,7 +11455,7 @@  lower_omp_target (gimple_stmt_iterator *gsi_p, omp_context *ctx)
       default:
 	break;
       case OMP_CLAUSE_MAP:
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 	/* First check what we're prepared to handle in the following.  */
 	switch (OMP_CLAUSE_MAP_KIND (c))
 	  {
diff --git a/gcc/passes.c b/gcc/passes.c
index 5b41102..010af1d 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -1955,9 +1955,8 @@  execute_function_todo (function *fn, void *data)
 
   gcc_assert (dom_info_state (fn, CDI_POST_DOMINATORS) == DOM_NONE);
   /* If we've seen errors do not bother running any verifiers.  */
-  if (!seen_error ())
+  if (flag_checking && !seen_error ())
     {
-#if defined ENABLE_CHECKING
       dom_state pre_verify_state = dom_info_state (fn, CDI_DOMINATORS);
       dom_state pre_verify_pstate = dom_info_state (fn, CDI_POST_DOMINATORS);
 
@@ -1991,7 +1990,6 @@  execute_function_todo (function *fn, void *data)
       /* Make sure verifiers don't change dominator state.  */
       gcc_assert (dom_info_state (fn, CDI_DOMINATORS) == pre_verify_state);
       gcc_assert (dom_info_state (fn, CDI_POST_DOMINATORS) == pre_verify_pstate);
-#endif
     }
 
   fn->last_verified = flags & TODO_verify_all;
@@ -2011,11 +2009,10 @@  execute_function_todo (function *fn, void *data)
 static void
 execute_todo (unsigned int flags)
 {
-#if defined ENABLE_CHECKING
-  if (cfun
+  if (flag_checking
+      && cfun
       && need_ssa_update_p (cfun))
     gcc_assert (flags & TODO_update_ssa_any);
-#endif
 
   timevar_push (TV_TODO);
 
@@ -2074,14 +2071,12 @@  clear_last_verified (function *fn, void *data ATTRIBUTE_UNUSED)
 /* Helper function. Verify that the properties has been turn into the
    properties expected by the pass.  */
 
-#ifdef ENABLE_CHECKING
-static void
+static void DEBUG_FUNCTION
 verify_curr_properties (function *fn, void *data)
 {
   unsigned int props = (size_t)data;
   gcc_assert ((fn->curr_properties & props) == props);
 }
-#endif
 
 /* Initialize pass dump file.  */
 /* This is non-static so that the plugins can use it.  */
@@ -2329,10 +2324,9 @@  execute_one_pass (opt_pass *pass)
   /* Run pre-pass verification.  */
   execute_todo (pass->todo_flags_start);
 
-#ifdef ENABLE_CHECKING
-  do_per_function (verify_curr_properties,
-		   (void *)(size_t)pass->properties_required);
-#endif
+  if (flag_checking)
+    do_per_function (verify_curr_properties,
+		     (void *)(size_t)pass->properties_required);
 
   /* If a timevar is present, start it.  */
   if (pass->tv_id != TV_NONE)
diff --git a/gcc/predict.c b/gcc/predict.c
index 0b3016c..0fe2eb5 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -2205,8 +2205,6 @@  tree_bb_level_predictions (void)
     }
 }
 
-#ifdef ENABLE_CHECKING
-
 /* Callback for hash_map::traverse, asserts that the pointer map is
    empty.  */
 
@@ -2217,7 +2215,6 @@  assert_is_empty (const_basic_block const &, edge_prediction *const &value,
   gcc_assert (!value);
   return false;
 }
-#endif
 
 /* Predict branch probabilities and estimate profile for basic block BB.  */
 
@@ -2352,9 +2349,9 @@  tree_estimate_probability (void)
   FOR_EACH_BB_FN (bb, cfun)
     combine_predictions_for_bb (bb);
 
-#ifdef ENABLE_CHECKING
-  bb_predictions->traverse<void *, assert_is_empty> (NULL);
-#endif
+  if (flag_checking)
+    bb_predictions->traverse<void *, assert_is_empty> (NULL);
+
   delete bb_predictions;
   bb_predictions = NULL;
 
@@ -2545,11 +2542,12 @@  propagate_freq (basic_block head, bitmap tovisit)
       /* Compute frequency of basic block.  */
       if (bb != head)
 	{
-#ifdef ENABLE_CHECKING
-	  FOR_EACH_EDGE (e, ei, bb->preds)
-	    gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
-			|| (e->flags & EDGE_DFS_BACK));
-#endif
+	  if (flag_checking)
+	    {
+	      FOR_EACH_EDGE (e, ei, bb->preds)
+		gcc_assert (!bitmap_bit_p (tovisit, e->src->index)
+			    || (e->flags & EDGE_DFS_BACK));
+	    }
 
 	  FOR_EACH_EDGE (e, ei, bb->preds)
 	    if (EDGE_INFO (e)->back_edge)
diff --git a/gcc/pretty-print.c b/gcc/pretty-print.c
index 5889015..8cfcee3 100644
--- a/gcc/pretty-print.c
+++ b/gcc/pretty-print.c
@@ -625,10 +625,11 @@  pp_format (pretty_printer *pp, text_info *text)
       *formatters[argno] = XOBFINISH (&buffer->chunk_obstack, const char *);
     }
 
-#ifdef ENABLE_CHECKING
-  for (; argno < PP_NL_ARGMAX; argno++)
-    gcc_assert (!formatters[argno]);
-#endif
+  if (CHECKING_P)
+    {
+      for (; argno < PP_NL_ARGMAX; argno++)
+	gcc_assert (!formatters[argno]);
+    }
 
   /* Revert to normal obstack and wrapping mode.  */
   buffer->obstack = &buffer->formatted_obstack;
diff --git a/gcc/real.c b/gcc/real.c
index c1ff78d..80a0c83 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -1792,15 +1792,13 @@  real_to_decimal_for_mode (char *str, const REAL_VALUE_TYPE *r_orig,
   /* Append the exponent.  */
   sprintf (last, "e%+d", dec_exp);
 
-#ifdef ENABLE_CHECKING
   /* Verify that we can read the original value back in.  */
-  if (mode != VOIDmode)
+  if (CHECKING_P && mode != VOIDmode)
     {
       real_from_string (&r, str);
       real_convert (&r, mode, &r);
       gcc_assert (real_identical (&r, r_orig));
     }
-#endif
 }
 
 /* Likewise, except always uses round-to-nearest.  */
diff --git a/gcc/recog.c b/gcc/recog.c
index c032424..2cd06f5 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -2975,9 +2975,7 @@  split_all_insns (void)
   if (changed)
     find_many_sub_basic_blocks (blocks);
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 
   sbitmap_free (blocks);
 }
diff --git a/gcc/regcprop.c b/gcc/regcprop.c
index 6f7d01e..b0dc61b 100644
--- a/gcc/regcprop.c
+++ b/gcc/regcprop.c
@@ -100,9 +100,8 @@  static bool replace_oldest_value_addr (rtx *, enum reg_class,
 static bool replace_oldest_value_mem (rtx, rtx_insn *, struct value_data *);
 static bool copyprop_hardreg_forward_1 (basic_block, struct value_data *);
 extern void debug_value_data (struct value_data *);
-#ifdef ENABLE_CHECKING
+
 static void validate_value_data (struct value_data *);
-#endif
 
 /* Free all queued updates for DEBUG_INSNs that change some reg to
    register REGNO.  */
@@ -150,9 +149,7 @@  kill_value_one_regno (unsigned int regno, struct value_data *vd)
   if (vd->e[regno].debug_insn_changes)
     free_debug_insn_changes (vd, regno);
 
-#ifdef ENABLE_CHECKING
   validate_value_data (vd);
-#endif
 }
 
 /* Kill the value in register REGNO for NREGS, and any other registers
@@ -365,9 +362,7 @@  copy_value (rtx dest, rtx src, struct value_data *vd)
     continue;
   vd->e[i].next_regno = dr;
 
-#ifdef ENABLE_CHECKING
   validate_value_data (vd);
-#endif
 }
 
 /* Return true if a mode change from ORIG to NEW is allowed for REGNO.  */
@@ -1141,10 +1136,12 @@  copyprop_hardreg_forward_bb_without_debug_insn (basic_block bb)
   skip_debug_insn_p = false;
 }
 
-#ifdef ENABLE_CHECKING
 static void
 validate_value_data (struct value_data *vd)
 {
+  if (!flag_checking)
+    return;
+
   HARD_REG_SET set;
   unsigned int i, j;
 
@@ -1187,7 +1184,7 @@  validate_value_data (struct value_data *vd)
 		      i, GET_MODE_NAME (vd->e[i].mode), vd->e[i].oldest_regno,
 		      vd->e[i].next_regno);
 }
-#endif
+
 
 namespace {
 
diff --git a/gcc/reload.c b/gcc/reload.c
index cc61d77..32eec02 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -85,7 +85,7 @@  a register with any other reload.  */
 
 #define REG_OK_STRICT
 
-/* We do not enable this with ENABLE_CHECKING, since it is awfully slow.  */
+/* We do not enable this with CHECKING_P, since it is awfully slow.  */
 #undef DEBUG_RELOAD
 
 #include "config.h"
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 9683055..27dd357 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -47,12 +47,6 @@  along with GCC; see the file COPYING3.  If not see
 
 #ifdef INSN_SCHEDULING
 
-#ifdef ENABLE_CHECKING
-#define CHECK (true)
-#else
-#define CHECK (false)
-#endif
-
 /* Holds current parameters for the dependency analyzer.  */
 struct sched_deps_info_def *sched_deps_info;
 
@@ -505,9 +499,7 @@  static enum DEPS_ADJUST_RESULT maybe_add_or_update_dep_1 (dep_t, bool,
 							  rtx, rtx);
 static enum DEPS_ADJUST_RESULT add_or_update_dep_1 (dep_t, bool, rtx, rtx);
 
-#ifdef ENABLE_CHECKING
 static void check_dep (dep_t, bool);
-#endif
 
 /* Return nonzero if a load of the memory reference MEM can cause a trap.  */
 
@@ -1228,9 +1220,8 @@  add_or_update_dep_1 (dep_t new_dep, bool resolved_p,
   gcc_assert (INSN_P (DEP_PRO (new_dep)) && INSN_P (DEP_CON (new_dep))
 	      && DEP_PRO (new_dep) != DEP_CON (new_dep));
 
-#ifdef ENABLE_CHECKING
-  check_dep (new_dep, mem1 != NULL);
-#endif
+  if (flag_checking)
+    check_dep (new_dep, mem1 != NULL);
 
   if (true_dependency_cache != NULL)
     {
@@ -1348,9 +1339,8 @@  sd_add_dep (dep_t dep, bool resolved_p)
 
   add_to_deps_list (DEP_NODE_BACK (n), con_back_deps);
 
-#ifdef ENABLE_CHECKING
-  check_dep (dep, false);
-#endif
+  if (flag_checking)
+    check_dep (dep, false);
 
   add_to_deps_list (DEP_NODE_FORW (n), pro_forw_deps);
 
@@ -4515,7 +4505,6 @@  debug_ds (ds_t s)
   fprintf (stderr, "\n");
 }
 
-#ifdef ENABLE_CHECKING
 /* Verify that dependence type and status are consistent.
    If RELAXED_P is true, then skip dep_weakness checks.  */
 static void
@@ -4600,7 +4589,6 @@  check_dep (dep_t dep, bool relaxed_p)
 	gcc_assert (ds & BEGIN_CONTROL);
     }
 }
-#endif /* ENABLE_CHECKING */
 
 /* The following code discovers opportunities to switch a memory reference
    and an increment by modifying the address.  We ensure that this is done
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index 8ea4dce..8000178 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -954,7 +954,6 @@  return_regset_to_pool (regset rs)
   regset_pool.v[regset_pool.n++] = rs;
 }
 
-#ifdef ENABLE_CHECKING
 /* This is used as a qsort callback for sorting regset pool stacks.
    X and XX are addresses of two regsets.  They are never equal.  */
 static int
@@ -968,44 +967,42 @@  cmp_v_in_regset_pool (const void *x, const void *xx)
     return -1;
   gcc_unreachable ();
 }
-#endif
 
-/*  Free the regset pool possibly checking for memory leaks.  */
+/* Free the regset pool possibly checking for memory leaks.  */
 void
-free_regset_pool (void)
+free_regset_pool ()
 {
-#ifdef ENABLE_CHECKING
-  {
-    regset *v = regset_pool.v;
-    int i = 0;
-    int n = regset_pool.n;
+  if (flag_checking)
+    {
+      regset *v = regset_pool.v;
+      int i = 0;
+      int n = regset_pool.n;
 
-    regset *vv = regset_pool.vv;
-    int ii = 0;
-    int nn = regset_pool.nn;
+      regset *vv = regset_pool.vv;
+      int ii = 0;
+      int nn = regset_pool.nn;
 
-    int diff = 0;
+      int diff = 0;
 
-    gcc_assert (n <= nn);
+      gcc_assert (n <= nn);
 
-    /* Sort both vectors so it will be possible to compare them.  */
-    qsort (v, n, sizeof (*v), cmp_v_in_regset_pool);
-    qsort (vv, nn, sizeof (*vv), cmp_v_in_regset_pool);
+      /* Sort both vectors so it will be possible to compare them.  */
+      qsort (v, n, sizeof (*v), cmp_v_in_regset_pool);
+      qsort (vv, nn, sizeof (*vv), cmp_v_in_regset_pool);
 
-    while (ii < nn)
-      {
-        if (v[i] == vv[ii])
-          i++;
-        else
-          /* VV[II] was lost.  */
-          diff++;
+      while (ii < nn)
+	{
+	  if (v[i] == vv[ii])
+	    i++;
+	  else
+	    /* VV[II] was lost.  */
+	    diff++;
 
-        ii++;
-      }
+	  ii++;
+	}
 
-    gcc_assert (diff == regset_pool.diff);
-  }
-#endif
+      gcc_assert (diff == regset_pool.diff);
+    }
 
   /* If not true - we have a memory leak.  */
   gcc_assert (regset_pool.diff == 0);
@@ -3623,7 +3620,6 @@  insn_is_the_only_one_in_bb_p (insn_t insn)
   return sel_bb_head_p (insn) && sel_bb_end_p (insn);
 }
 
-#ifdef ENABLE_CHECKING
 /* Check that the region we're scheduling still has at most one
    backedge.  */
 static void
@@ -3644,9 +3640,8 @@  verify_backedges (void)
       gcc_assert (n <= 1);
     }
 }
-#endif
-
 
+
 /* Functions to work with control flow.  */
 
 /* Recompute BLOCK_TO_BB and BB_FOR_BLOCK for current region so that blocks
@@ -3889,10 +3884,12 @@  tidy_control_flow (basic_block xbb, bool full_tidying)
 	sel_recompute_toporder ();
     }
 
-#ifdef ENABLE_CHECKING
-  verify_backedges ();
-  verify_dominators (CDI_DOMINATORS);
-#endif
+  /* TODO: use separate flag for CFG checking.  */
+  if (flag_checking)
+    {
+      verify_backedges ();
+      verify_dominators (CDI_DOMINATORS);
+    }
 
   return changed;
 }
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 721013f..fcf9ba8 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -378,7 +378,7 @@  struct moveop_static_params
      they are to be removed.  */
   int uid;
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   /* This is initialized to the insn on which the driver stopped its traversal.  */
   insn_t failed_insn;
 #endif
@@ -1655,7 +1655,7 @@  find_best_reg_for_expr (expr_t expr, blist_t bnds, bool *is_orig_reg_p)
   collect_unavailable_regs_from_bnds (expr, bnds, used_regs, &reg_rename_data,
 				      &original_insns);
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   /* If after reload, make sure we're working with hard regs here.  */
   if (reload_completed)
     {
@@ -3593,7 +3593,7 @@  vinsn_vec_has_expr_p (vinsn_vec_t vinsn_vec, expr_t expr)
   return false;
 }
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 /* Return true if either of expressions from ORIG_OPS can be blocked
    by previously created bookkeeping code.  STATIC_PARAMS points to static
    parameters of move_op.  */
@@ -4889,11 +4889,10 @@  move_cond_jump (rtx_insn *insn, bnd_t bnd)
   block_bnd = BLOCK_FOR_INSN (BND_TO (bnd));
   prev = BND_TO (bnd);
 
-#ifdef ENABLE_CHECKING
   /* Moving of jump should not cross any other jumps or beginnings of new
      basic blocks.  The only exception is when we move a jump through
      mutually exclusive insns along fallthru edges.  */
-  if (block_from != block_bnd)
+  if (CHECKING_P && block_from != block_bnd)
     {
       bb = block_from;
       for (link = PREV_INSN (insn); link != PREV_INSN (prev);
@@ -4908,7 +4907,6 @@  move_cond_jump (rtx_insn *insn, bnd_t bnd)
             }
         }
     }
-#endif
 
   /* Jump is moved to the boundary.  */
   next = PREV_INSN (insn);
@@ -6205,7 +6203,7 @@  move_op_orig_expr_not_found (insn_t insn, av_set_t orig_ops ATTRIBUTE_UNUSED,
 {
   moveop_static_params_p sparams = (moveop_static_params_p) static_params;
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   sparams->failed_insn = insn;
 #endif
 
@@ -6380,7 +6378,6 @@  code_motion_process_successors (insn_t insn, av_set_t orig_ops,
         }
     }
 
-#ifdef ENABLE_CHECKING
   /* Here, RES==1 if original expr was found at least for one of the
      successors.  After the loop, RES may happen to have zero value
      only if at some point the expr searched is present in av_set, but is
@@ -6388,6 +6385,7 @@  code_motion_process_successors (insn_t insn, av_set_t orig_ops,
      The exception is when the original operation is blocked by
      bookkeeping generated for another fence or for another path in current
      move_op.  */
+#if CHECKING_P
   gcc_assert (res == 1
 	      || (res == 0
 		  && av_set_could_be_blocked_by_bookkeeping_p (orig_ops,
@@ -6695,7 +6693,7 @@  move_op (insn_t insn, av_set_t orig_ops, expr_t expr_vliw,
   sparams.dest = dest;
   sparams.c_expr = c_expr;
   sparams.uid = INSN_UID (EXPR_INSN_RTX (expr_vliw));
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   sparams.failed_insn = NULL;
 #endif
   sparams.was_renamed = false;
diff --git a/gcc/sese.h b/gcc/sese.h
index 0b2db8d..6b852ae 100644
--- a/gcc/sese.h
+++ b/gcc/sese.h
@@ -88,16 +88,20 @@  sese_nb_params (sese region)
 static inline bool
 bb_in_region (basic_block bb, basic_block entry, basic_block exit)
 {
-#ifdef ENABLE_CHECKING
-  {
-    edge e;
-    edge_iterator ei;
-
-    /* Check that there are no edges coming in the region: all the
-       predecessors of EXIT are dominated by ENTRY.  */
-    FOR_EACH_EDGE (e, ei, exit->preds)
-      dominated_by_p (CDI_DOMINATORS, e->src, entry);
-  }
+/* FIXME: (PR 67842) this check is incorrect.  dominated_by_p has no effect,
+   but changing it to gcc_assert (dominated_by_p (...)) causes regressions,
+   e.g., gcc.dg/graphite/block-1.c.  */
+#if 0
+  if (flag_checking)
+    {
+      edge e;
+      edge_iterator ei;
+
+      /* Check that there are no edges coming in the region: all the
+	 predecessors of EXIT are dominated by ENTRY.  */
+      FOR_EACH_EDGE (e, ei, exit->preds)
+	dominated_by_p (CDI_DOMINATORS, e->src, entry);
+    }
 #endif
 
   return dominated_by_p (CDI_DOMINATORS, bb, entry)
diff --git a/gcc/ssa-iterators.h b/gcc/ssa-iterators.h
index e04b630..1bf93bd 100644
--- a/gcc/ssa-iterators.h
+++ b/gcc/ssa-iterators.h
@@ -344,9 +344,8 @@  first_readonly_imm_use (imm_use_iterator *imm, tree var)
 {
   imm->end_p = &(SSA_NAME_IMM_USE_NODE (var));
   imm->imm_use = imm->end_p->next;
-#ifdef ENABLE_CHECKING
-  imm->iter_node.next = imm->imm_use->next;
-#endif
+  if (CHECKING_P)
+    imm->iter_node.next = imm->imm_use->next;
   if (end_readonly_imm_use_p (imm))
     return NULL_USE_OPERAND_P;
   return imm->imm_use;
@@ -358,14 +357,15 @@  next_readonly_imm_use (imm_use_iterator *imm)
 {
   use_operand_p old = imm->imm_use;
 
-#ifdef ENABLE_CHECKING
   /* If this assertion fails, it indicates the 'next' pointer has changed
      since the last bump.  This indicates that the list is being modified
      via stmt changes, or SET_USE, or somesuch thing, and you need to be
      using the SAFE version of the iterator.  */
-  gcc_assert (imm->iter_node.next == old->next);
-  imm->iter_node.next = old->next->next;
-#endif
+  if (CHECKING_P)
+    {
+      gcc_assert (imm->iter_node.next == old->next);
+      imm->iter_node.next = old->next->next;
+    }
 
   imm->imm_use = old->next;
   if (end_readonly_imm_use_p (imm))
diff --git a/gcc/store-motion.c b/gcc/store-motion.c
index ec3faa2..ed1a399 100644
--- a/gcc/store-motion.c
+++ b/gcc/store-motion.c
@@ -644,9 +644,6 @@  compute_store_table (void)
 {
   int ret;
   basic_block bb;
-#ifdef ENABLE_CHECKING
-  unsigned regno;
-#endif
   rtx_insn *insn;
   rtx_insn *tmp;
   df_ref def;
@@ -692,11 +689,12 @@  compute_store_table (void)
 	      last_set_in[DF_REF_REGNO (def)] = 0;
 	}
 
-#ifdef ENABLE_CHECKING
-      /* last_set_in should now be all-zero.  */
-      for (regno = 0; regno < max_gcse_regno; regno++)
-	gcc_assert (!last_set_in[regno]);
-#endif
+      if (flag_checking)
+	{
+	  /* last_set_in should now be all-zero.  */
+	  for (unsigned regno = 0; regno < max_gcse_regno; regno++)
+	    gcc_assert (!last_set_in[regno]);
+	}
 
       /* Clear temporary marks.  */
       for (ptr = first_st_expr (); ptr != NULL; ptr = next_st_expr (ptr))
diff --git a/gcc/symbol-summary.h b/gcc/symbol-summary.h
index eefbfd9..4a1a510 100644
--- a/gcc/symbol-summary.h
+++ b/gcc/symbol-summary.h
@@ -39,14 +39,12 @@  public:
   function_summary (symbol_table *symtab, bool ggc = false): m_ggc (ggc),
     m_map (13, ggc), m_insertion_enabled (true), m_symtab (symtab)
   {
-#ifdef ENABLE_CHECKING
-    cgraph_node *node;
-
-    FOR_EACH_FUNCTION (node)
-    {
-      gcc_checking_assert (node->summary_uid > 0);
-    }
-#endif
+    if (flag_checking)
+      {
+	cgraph_node *node;
+	FOR_EACH_FUNCTION (node)
+	  gcc_assert (node->summary_uid > 0);
+      }
 
     m_symtab_insertion_hook =
       symtab->add_cgraph_insertion_hook
diff --git a/gcc/symtab.c b/gcc/symtab.c
index c33aa01..5a9ff54 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -1093,8 +1093,8 @@  symtab_node::verify (void)
 
 /* Verify symbol table for internal consistency.  */
 
-DEBUG_FUNCTION void
-symtab_node::verify_symtab_nodes (void)
+void
+symtab_node::verify_symtab_nodes ()
 {
   symtab_node *node;
   hash_map<tree, symtab_node *> comdat_head_map (251);
diff --git a/gcc/target.h b/gcc/target.h
index a79f424..ffc4d6a 100644
--- a/gcc/target.h
+++ b/gcc/target.h
@@ -52,21 +52,21 @@ 
 #include "tm.h"
 #include "hard-reg-set.h"
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 
 struct cumulative_args_t { void *magic; void *p; };
 
-#else /* !ENABLE_CHECKING */
+#else /* !CHECKING_P */
 
 /* When using a GCC build compiler, we could use
    __attribute__((transparent_union)) to get cumulative_args_t function
    arguments passed like scalars where the ABI would mandate a less
    efficient way of argument passing otherwise.  However, that would come
-   at the cost of less type-safe !ENABLE_CHECKING compilation.  */
+   at the cost of less type-safe !CHECKING_P compilation.  */
 
 union cumulative_args_t { void *p; };
 
-#endif /* !ENABLE_CHECKING */
+#endif /* !CHECKING_P */
 
 /* Types used by the record_gcc_switches() target function.  */
 enum print_switch_type
@@ -200,9 +200,9 @@  extern struct gcc_target targetm;
 static inline CUMULATIVE_ARGS *
 get_cumulative_args (cumulative_args_t arg)
 {
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
-#endif /* ENABLE_CHECKING */
+#endif /* CHECKING_P */
   return (CUMULATIVE_ARGS *) arg.p;
 }
 
@@ -211,9 +211,9 @@  pack_cumulative_args (CUMULATIVE_ARGS *arg)
 {
   cumulative_args_t ret;
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
   ret.magic = CUMULATIVE_ARGS_MAGIC;
-#endif /* ENABLE_CHECKING */
+#endif /* CHECKING_P */
   ret.p = (void *) arg;
   return ret;
 }
diff --git a/gcc/timevar.c b/gcc/timevar.c
index 8249727..02b8113 100644
--- a/gcc/timevar.c
+++ b/gcc/timevar.c
@@ -727,10 +727,13 @@  timer::print (FILE *fp)
 #endif
   fprintf (fp, "%8u kB\n", (unsigned) (total->ggc_mem >> 10));
 
-#ifdef ENABLE_CHECKING
-  fprintf (fp, "Extra diagnostic checks enabled; compiler may run slowly.\n");
-  fprintf (fp, "Configure with --enable-checking=release to disable checks.\n");
-#endif
+  if (CHECKING_P)
+    {
+      fprintf (fp, "Extra diagnostic checks enabled; "
+		   "compiler may run slowly.\n");
+      fprintf (fp, "Configure with --enable-checking=release "
+		   "to disable checks.\n");
+    }
 #ifndef ENABLE_ASSERT_CHECKING
   fprintf (fp, "Internal checks disabled; compiler is not suited for release.\n");
   fprintf (fp, "Configure with --enable-checking=release to enable checks.\n");
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 488c20e..d0b54ef 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -5341,9 +5341,7 @@  ipa_tm_execute (void)
   enum availability a;
   unsigned int i;
 
-#ifdef ENABLE_CHECKING
-  cgraph_node::verify_cgraph_nodes ();
-#endif
+  cgraph_node::checking_verify_cgraph_nodes ();
 
   bitmap_obstack_initialize (&tm_obstack);
   initialize_original_copy_tables ();
@@ -5589,9 +5587,7 @@  ipa_tm_execute (void)
   FOR_EACH_FUNCTION (node)
     node->aux = NULL;
 
-#ifdef ENABLE_CHECKING
-  cgraph_node::verify_cgraph_nodes ();
-#endif
+  cgraph_node::checking_verify_cgraph_nodes ();
 
   return 0;
 }
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 735ac46..ac4ccf3 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -6472,14 +6472,12 @@  move_stmt_op (tree *tp, int *walk_subtrees, void *data)
 	  || (p->orig_block == NULL_TREE
 	      && block != NULL_TREE))
 	TREE_SET_BLOCK (t, p->new_block);
-#ifdef ENABLE_CHECKING
-      else if (block != NULL_TREE)
+      else if (flag_checking && block != NULL_TREE)
 	{
 	  while (block && TREE_CODE (block) == BLOCK && block != p->orig_block)
 	    block = BLOCK_SUPERCONTEXT (block);
 	  gcc_assert (block == p->orig_block);
 	}
-#endif
     }
   else if (DECL_P (t) || TREE_CODE (t) == SSA_NAME)
     {
@@ -6947,7 +6945,7 @@  fixup_loop_arrays_after_move (struct function *fn1, struct function *fn2,
 /* Verify that the blocks in BBS_P are a single-entry, single-exit region
    delimited by ENTRY_BB and EXIT_BB, possibly containing noreturn blocks.  */
 
-DEBUG_FUNCTION void
+void
 verify_sese (basic_block entry, basic_block exit, vec<basic_block> *bbs_p)
 {
   basic_block bb;
@@ -7064,9 +7062,9 @@  move_sese_region_to_fn (struct function *dest_cfun, basic_block entry_bb,
   bbs.create (0);
   bbs.safe_push (entry_bb);
   gather_blocks_in_sese_region (entry_bb, exit_bb, &bbs);
-#ifdef ENABLE_CHECKING
-  verify_sese (entry_bb, exit_bb, &bbs);
-#endif
+
+  if (flag_checking)
+    verify_sese (entry_bb, exit_bb, &bbs);
 
   /* The blocks that used to be dominated by something in BBS will now be
      dominated by the new block.  */
@@ -7908,13 +7906,11 @@  gimple_flow_call_edges_add (sbitmap blocks)
 		     no edge to the exit block in CFG already.
 		     Calling make_edge in such case would cause us to
 		     mark that edge as fake and remove it later.  */
-#ifdef ENABLE_CHECKING
-		  if (stmt == last_stmt)
+		  if (flag_checking && stmt == last_stmt)
 		    {
 		      e = find_edge (bb, EXIT_BLOCK_PTR_FOR_FN (cfun));
 		      gcc_assert (e == NULL);
 		    }
-#endif
 
 		  /* Note that the following may create a new basic block
 		     and renumber the existing basic blocks.  */
diff --git a/gcc/tree-cfgcleanup.c b/gcc/tree-cfgcleanup.c
index 40e1456..33e5317 100644
--- a/gcc/tree-cfgcleanup.c
+++ b/gcc/tree-cfgcleanup.c
@@ -724,9 +724,7 @@  cleanup_tree_cfg_noloop (void)
     }
   else
     {
-#ifdef ENABLE_CHECKING
-      verify_dominators (CDI_DOMINATORS);
-#endif
+      checking_verify_dominators (CDI_DOMINATORS);
       changed = false;
     }
 
@@ -735,9 +733,7 @@  cleanup_tree_cfg_noloop (void)
   gcc_assert (dom_info_available_p (CDI_DOMINATORS));
   compact_blocks ();
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-#endif
+  checking_verify_flow_info ();
 
   timevar_pop (TV_TREE_CLEANUP_CFG);
 
@@ -772,9 +768,7 @@  repair_loop_structures (void)
 
   BITMAP_FREE (changed_bbs);
 
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-#endif
+  checking_verify_loop_structure ();
   scev_reset ();
 
   timevar_pop (TV_REPAIR_LOOPS);
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index cb1f08a..f6c2d06 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -703,7 +703,7 @@  maybe_record_in_goto_queue (struct leh_state *state, gimple *stmt)
 }
 
 
-#ifdef ENABLE_CHECKING
+#if CHECKING_P
 /* We do not process GIMPLE_SWITCHes for now.  As long as the original source
    was in fact structured, and we've not yet done jump threading, then none
    of the labels will leave outer GIMPLE_TRY_FINALLY nodes. Verify this.  */
@@ -3921,9 +3921,8 @@  remove_unreachable_handlers (void)
   sbitmap_free (r_reachable);
   sbitmap_free (lp_reachable);
 
-#ifdef ENABLE_CHECKING
-  verify_eh_tree (cfun);
-#endif
+  if (flag_checking)
+    verify_eh_tree (cfun);
 }
 
 /* Remove unreachable handlers if any landing pads have been removed after
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index f201ab5..ae79f0e 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -2787,13 +2787,12 @@  pass_if_conversion::execute (function *fun)
 	    && !loop->dont_vectorize))
       todo |= tree_if_conversion (loop);
 
-#ifdef ENABLE_CHECKING
-  {
-    basic_block bb;
-    FOR_EACH_BB_FN (bb, fun)
-      gcc_assert (!bb->aux);
-  }
-#endif
+  if (flag_checking)
+    {
+      basic_block bb;
+      FOR_EACH_BB_FN (bb, fun)
+	gcc_assert (!bb->aux);
+    }
 
   return todo;
 }
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c
index ac9586e..a1e30cc 100644
--- a/gcc/tree-inline.c
+++ b/gcc/tree-inline.c
@@ -4471,10 +4471,8 @@  expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id)
   fn = cg_edge->callee->decl;
   cg_edge->callee->get_untransformed_body ();
 
-#ifdef ENABLE_CHECKING
-  if (cg_edge->callee->decl != id->dst_node->decl)
+  if (flag_checking && cg_edge->callee->decl != id->dst_node->decl)
     cg_edge->callee->verify ();
-#endif
 
   /* We will be inlining this callee.  */
   id->eh_lp_nr = lookup_stmt_eh_lp (stmt);
@@ -4963,7 +4961,7 @@  optimize_inline_calls (tree fn)
 
   pop_gimplify_context (NULL);
 
-#ifdef ENABLE_CHECKING
+  if (flag_checking)
     {
       struct cgraph_edge *e;
 
@@ -4973,7 +4971,6 @@  optimize_inline_calls (tree fn)
       for (e = id.dst_node->callees; e; e = e->next_callee)
 	gcc_assert (e->inline_failed);
     }
-#endif
 
   /* Fold queued statements.  */
   fold_marked_statements (last, id.statements_to_fold);
@@ -4989,9 +4986,8 @@  optimize_inline_calls (tree fn)
   number_blocks (fn);
 
   delete_unreachable_blocks_update_callgraph (&id);
-#ifdef ENABLE_CHECKING
-  id.dst_node->verify ();
-#endif
+  if (flag_checking)
+    id.dst_node->verify ();
 
   /* It would be nice to check SSA/CFG/statement consistency here, but it is
      not possible yet - the IPA passes might make various functions to not
diff --git a/gcc/tree-into-ssa.c b/gcc/tree-into-ssa.c
index 9fd698d..732a571 100644
--- a/gcc/tree-into-ssa.c
+++ b/gcc/tree-into-ssa.c
@@ -3169,44 +3169,45 @@  update_ssa (unsigned update_flags)
   if (!need_ssa_update_p (cfun))
     return;
 
-#ifdef ENABLE_CHECKING
-  timevar_push (TV_TREE_STMT_VERIFY);
+  if (flag_checking)
+    {
+      timevar_push (TV_TREE_STMT_VERIFY);
 
-  bool err = false;
+      bool err = false;
 
-  FOR_EACH_BB_FN (bb, cfun)
-    {
-      gimple_stmt_iterator gsi;
-      for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
+      FOR_EACH_BB_FN (bb, cfun)
 	{
-	  gimple *stmt = gsi_stmt (gsi);
-
-	  ssa_op_iter i;
-	  use_operand_p use_p;
-	  FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES)
+	  gimple_stmt_iterator gsi;
+	  for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
 	    {
-	      tree use = USE_FROM_PTR (use_p);
-	      if (TREE_CODE (use) != SSA_NAME)
-		continue;
+	      gimple *stmt = gsi_stmt (gsi);
 
-	      if (SSA_NAME_IN_FREE_LIST (use))
+	      ssa_op_iter i;
+	      use_operand_p use_p;
+	      FOR_EACH_SSA_USE_OPERAND (use_p, stmt, i, SSA_OP_ALL_USES)
 		{
-		  error ("statement uses released SSA name:");
-		  debug_gimple_stmt (stmt);
-		  fprintf (stderr, "The use of ");
-		  print_generic_expr (stderr, use, 0);
-		  fprintf (stderr," should have been replaced\n");
-		  err = true;
+		  tree use = USE_FROM_PTR (use_p);
+		  if (TREE_CODE (use) != SSA_NAME)
+		    continue;
+
+		  if (SSA_NAME_IN_FREE_LIST (use))
+		    {
+		      error ("statement uses released SSA name:");
+		      debug_gimple_stmt (stmt);
+		      fprintf (stderr, "The use of ");
+		      print_generic_expr (stderr, use, 0);
+		      fprintf (stderr," should have been replaced\n");
+		      err = true;
+		    }
 		}
 	    }
 	}
-    }
 
-  if (err)
-    internal_error ("cannot update SSA form");
+      if (err)
+	internal_error ("cannot update SSA form");
 
-  timevar_pop (TV_TREE_STMT_VERIFY);
-#endif
+      timevar_pop (TV_TREE_STMT_VERIFY);
+    }
 
   timevar_push (TV_TREE_SSA_INCREMENTAL);
 
@@ -3271,29 +3272,28 @@  update_ssa (unsigned update_flags)
 	 placement heuristics.  */
       prepare_block_for_update (start_bb, insert_phi_p);
 
-#ifdef ENABLE_CHECKING
-      for (i = 1; i < num_ssa_names; ++i)
-	{
-	  tree name = ssa_name (i);
-	  if (!name
-	      || virtual_operand_p (name))
-	    continue;
-
-	  /* For all but virtual operands, which do not have SSA names
-	     with overlapping life ranges, ensure that symbols marked
-	     for renaming do not have existing SSA names associated with
-	     them as we do not re-write them out-of-SSA before going
-	     into SSA for the remaining symbol uses.  */
-	  if (marked_for_renaming (SSA_NAME_VAR (name)))
-	    {
-	      fprintf (stderr, "Existing SSA name for symbol marked for "
-		       "renaming: ");
-	      print_generic_expr (stderr, name, TDF_SLIM);
-	      fprintf (stderr, "\n");
-	      internal_error ("SSA corruption");
-	    }
-	}
-#endif
+      if (flag_checking)
+	for (i = 1; i < num_ssa_names; ++i)
+	  {
+	    tree name = ssa_name (i);
+	    if (!name
+		|| virtual_operand_p (name))
+	      continue;
+
+	    /* For all but virtual operands, which do not have SSA names
+	       with overlapping life ranges, ensure that symbols marked
+	       for renaming do not have existing SSA names associated with
+	       them as we do not re-write them out-of-SSA before going
+	       into SSA for the remaining symbol uses.  */
+	    if (marked_for_renaming (SSA_NAME_VAR (name)))
+	      {
+		fprintf (stderr, "Existing SSA name for symbol marked for "
+			 "renaming: ");
+		print_generic_expr (stderr, name, TDF_SLIM);
+		fprintf (stderr, "\n");
+		internal_error ("SSA corruption");
+	      }
+	  }
     }
   else
     {
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index 6f86d53..18025c8 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -1821,9 +1821,7 @@  out:
       rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
     }
 
-#ifdef ENABLE_CHECKING
-  verify_loop_structure ();
-#endif
+  checking_verify_loop_structure ();
 
   return 0;
 }
diff --git a/gcc/tree-outof-ssa.c b/gcc/tree-outof-ssa.c
index 8dc4908..1c4c63c 100644
--- a/gcc/tree-outof-ssa.c
+++ b/gcc/tree-outof-ssa.c
@@ -841,24 +841,23 @@  eliminate_useless_phis (void)
 	  result = gimple_phi_result (phi);
 	  if (virtual_operand_p (result))
 	    {
-#ifdef ENABLE_CHECKING
-	      size_t i;
 	      /* There should be no arguments which are not virtual, or the
 	         results will be incorrect.  */
-	      for (i = 0; i < gimple_phi_num_args (phi); i++)
-	        {
-		  tree arg = PHI_ARG_DEF (phi, i);
-		  if (TREE_CODE (arg) == SSA_NAME
-		      && !virtual_operand_p (arg))
-		    {
-		      fprintf (stderr, "Argument of PHI is not virtual (");
-		      print_generic_expr (stderr, arg, TDF_SLIM);
-		      fprintf (stderr, "), but the result is :");
-		      print_gimple_stmt (stderr, phi, 0, TDF_SLIM);
-		      internal_error ("SSA corruption");
-		    }
-		}
-#endif
+	      if (flag_checking)
+		for (size_t i = 0; i < gimple_phi_num_args (phi); i++)
+		  {
+		    tree arg = PHI_ARG_DEF (phi, i);
+		    if (TREE_CODE (arg) == SSA_NAME
+			&& !virtual_operand_p (arg))
+		      {
+			fprintf (stderr, "Argument of PHI is not virtual (");
+			print_generic_expr (stderr, arg, TDF_SLIM);
+			fprintf (stderr, "), but the result is :");
+			print_gimple_stmt (stderr, phi, 0, TDF_SLIM);
+			internal_error ("SSA corruption");
+		      }
+		  }
+
 	      remove_phi_node (&gsi, true);
 	    }
           else
@@ -884,9 +883,11 @@  eliminate_useless_phis (void)
    variable.  */
 
 static void
-rewrite_trees (var_map map ATTRIBUTE_UNUSED)
+rewrite_trees (var_map map)
 {
-#ifdef ENABLE_CHECKING
+  if (!flag_checking)
+    return;
+
   basic_block bb;
   /* Search for PHIs where the destination has no partition, but one
      or more arguments has a partition.  This should not happen and can
@@ -918,7 +919,6 @@  rewrite_trees (var_map map ATTRIBUTE_UNUSED)
 	    }
 	}
     }
-#endif
 }
 
 /* Given the out-of-ssa info object SA (with prepared partitions)
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 741392b..7f7a1a5 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2747,9 +2747,7 @@  pass_parallelize_loops::execute (function *fun)
     {
       fun->curr_properties &= ~(PROP_gimple_eomp);
 
-#ifdef ENABLE_CHECKING
-      verify_loop_structure ();
-#endif
+      checking_verify_loop_structure ();
 
       return TODO_update_ssa;
     }
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index 4abac13..5f6e1b0 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -896,13 +896,9 @@  suitable_component_p (struct loop *loop, struct component *comp)
       if (!determine_offset (first->ref, a->ref, &a->offset))
 	return false;
 
-#ifdef ENABLE_CHECKING
-      {
-	enum ref_step_type a_step;
-	ok = suitable_reference_p (a->ref, &a_step);
-	gcc_assert (ok && a_step == comp->comp_step);
-      }
-#endif
+      enum ref_step_type a_step;
+      gcc_checking_assert (suitable_reference_p (a->ref, &a_step)
+			   && a_step == comp->comp_step);
     }
 
   /* If there is a write inside the component, we must know whether the
diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
index b4b3ae1..8d82934 100644
--- a/gcc/tree-profile.c
+++ b/gcc/tree-profile.c
@@ -462,9 +462,8 @@  gimple_gen_const_delta_profiler (histogram_value value ATTRIBUTE_UNUSED,
 			       unsigned base ATTRIBUTE_UNUSED)
 {
   /* FIXME implement this.  */
-#ifdef ENABLE_CHECKING
-  internal_error ("unimplemented functionality");
-#endif
+  if (flag_checking)
+    internal_error ("unimplemented functionality");
   gcc_unreachable ();
 }
 
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 3b8d594..7771514 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -1443,11 +1443,8 @@  refs_may_alias_p_1 (ao_ref *ref1, ao_ref *ref2, bool tbaa_p)
 				      tbaa_p);
 
   /* We really do not want to end up here, but returning true is safe.  */
-#ifdef ENABLE_CHECKING
-  gcc_unreachable ();
-#else
+  gcc_checking_assert (false);
   return true;
-#endif
 }
 
 static bool
diff --git a/gcc/tree-ssa-live.c b/gcc/tree-ssa-live.c
index 25b548b..a61026d 100644
--- a/gcc/tree-ssa-live.c
+++ b/gcc/tree-ssa-live.c
@@ -52,9 +52,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "ipa-utils.h"
 #include "cfgloop.h"
 
-#ifdef ENABLE_CHECKING
-static void  verify_live_on_entry (tree_live_info_p);
-#endif
+static void verify_live_on_entry (tree_live_info_p);
 
 
 /* VARMAP maintains a mapping from SSA version number to real variables.
@@ -1153,9 +1151,8 @@  calculate_live_ranges (var_map map, bool want_livein)
 
   live_worklist (live);
 
-#ifdef ENABLE_CHECKING
-  verify_live_on_entry (live);
-#endif
+  if (flag_checking)
+    verify_live_on_entry (live);
 
   calculate_live_on_exit (live);
 
@@ -1292,7 +1289,6 @@  debug (tree_live_info_d *ptr)
 }
 
 
-#ifdef ENABLE_CHECKING
 /* Verify that SSA_VAR is a non-virtual SSA_NAME.  */
 
 void
@@ -1422,4 +1418,3 @@  verify_live_on_entry (tree_live_info_p live)
     }
   gcc_assert (num <= 0);
 }
-#endif
diff --git a/gcc/tree-ssa-live.h b/gcc/tree-ssa-live.h
index 1f88358..0cb3a1a 100644
--- a/gcc/tree-ssa-live.h
+++ b/gcc/tree-ssa-live.h
@@ -80,9 +80,7 @@  extern void remove_unused_locals (void);
 extern void dump_var_map (FILE *, var_map);
 extern void debug (_var_map &ref);
 extern void debug (_var_map *ptr);
-#ifdef ENABLE_CHECKING
 extern void register_ssa_partition_check (tree ssa_var);
-#endif
 
 
 /* Return number of partitions in MAP.  */
@@ -181,12 +179,10 @@  num_basevars (var_map map)
    partitions may be filtered out by a view later.  */
 
 static inline void
-register_ssa_partition (var_map map ATTRIBUTE_UNUSED,
-			tree ssa_var ATTRIBUTE_UNUSED)
+register_ssa_partition (var_map map ATTRIBUTE_UNUSED, tree ssa_var)
 {
-#if defined ENABLE_CHECKING
-  register_ssa_partition_check (ssa_var);
-#endif
+  if (flag_checking)
+    register_ssa_partition_check (ssa_var);
 }
 
 
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c
index 6599ffc..0d5f56e 100644
--- a/gcc/tree-ssa-loop-ivcanon.c
+++ b/gcc/tree-ssa-loop-ivcanon.c
@@ -1376,10 +1376,8 @@  tree_unroll_loops_completely (bool may_increase_size, bool unroll_outer)
 	  /* Clean up the information about numbers of iterations, since
 	     complete unrolling might have invalidated it.  */
 	  scev_reset ();
-#ifdef ENABLE_CHECKING
-	  if (loops_state_satisfies_p (LOOP_CLOSED_SSA))
+	  if (flag_checking && loops_state_satisfies_p (LOOP_CLOSED_SSA))
 	    verify_loop_closed_ssa (true);
-#endif
 	}
       if (loop_closed_ssa_invalidated)
         BITMAP_FREE (loop_closed_ssa_invalidated);
diff --git a/gcc/tree-ssa-loop-manip.c b/gcc/tree-ssa-loop-manip.c
index 27ba275..e6befc6 100644
--- a/gcc/tree-ssa-loop-manip.c
+++ b/gcc/tree-ssa-loop-manip.c
@@ -278,22 +278,22 @@  add_exit_phi (basic_block exit, tree var)
   edge e;
   edge_iterator ei;
 
-#ifdef ENABLE_CHECKING
   /* Check that at least one of the edges entering the EXIT block exits
      the loop, or a superloop of that loop, that VAR is defined in.  */
-  gimple *def_stmt = SSA_NAME_DEF_STMT (var);
-  basic_block def_bb = gimple_bb (def_stmt);
-  FOR_EACH_EDGE (e, ei, exit->preds)
+  if (flag_checking)
     {
-      struct loop *aloop = find_common_loop (def_bb->loop_father,
-					     e->src->loop_father);
-      if (!flow_bb_inside_loop_p (aloop, e->dest))
-	break;
+      gimple *def_stmt = SSA_NAME_DEF_STMT (var);
+      basic_block def_bb = gimple_bb (def_stmt);
+      FOR_EACH_EDGE (e, ei, exit->preds)
+	{
+	  struct loop *aloop = find_common_loop (def_bb->loop_father,
+						 e->src->loop_father);
+	  if (!flow_bb_inside_loop_p (aloop, e->dest))
+	    break;
+	}
+      gcc_assert (e);
     }
 
-  gcc_checking_assert (e);
-#endif
-
   phi = create_phi_node (NULL_TREE, exit);
   create_new_def_for (var, phi, gimple_phi_result_ptr (phi));
   FOR_EACH_EDGE (e, ei, exit->preds)
@@ -729,7 +729,7 @@  check_loop_closed_ssa_stmt (basic_block bb, gimple *stmt)
 /* Checks that invariants of the loop closed ssa form are preserved.
    Call verify_ssa when VERIFY_SSA_P is true.  */
 
-DEBUG_FUNCTION void
+void
 verify_loop_closed_ssa (bool verify_ssa_p)
 {
   basic_block bb;
@@ -1368,11 +1368,9 @@  tree_transform_and_unroll_loop (struct loop *loop, unsigned factor,
   gimple_cond_set_rhs (exit_if, exit_bound);
   update_stmt (exit_if);
 
-#ifdef ENABLE_CHECKING
-  verify_flow_info ();
-  verify_loop_structure ();
-  verify_loop_closed_ssa (true);
-#endif
+  checking_verify_flow_info ();
+  checking_verify_loop_structure ();
+  checking_verify_loop_closed_ssa (true);
 }
 
 /* Wrapper over tree_transform_and_unroll_loop for case we do not
diff --git a/gcc/tree-ssa-loop-manip.h b/gcc/tree-ssa-loop-manip.h
index 9285718..96b02a6 100644
--- a/gcc/tree-ssa-loop-manip.h
+++ b/gcc/tree-ssa-loop-manip.h
@@ -27,6 +27,14 @@  extern void create_iv (tree, tree, tree, struct loop *, gimple_stmt_iterator *,
 extern void rewrite_into_loop_closed_ssa (bitmap, unsigned);
 extern void rewrite_virtuals_into_loop_closed_ssa (struct loop *);
 extern void verify_loop_closed_ssa (bool);
+
+static inline void
+checking_verify_loop_closed_ssa (bool verify_ssa_p)
+{
+  if (flag_checking)
+    verify_loop_closed_ssa (verify_ssa_p);
+}
+
 extern basic_block split_loop_exit_edge (edge);
 extern basic_block ip_end_pos (struct loop *);
 extern basic_block ip_normal_pos (struct loop *);
diff --git a/gcc/tree-ssa-math-opts.c b/gcc/tree-ssa-math-opts.c
index 9747739..231928b 100644
--- a/gcc/tree-ssa-math-opts.c
+++ b/gcc/tree-ssa-math-opts.c
@@ -541,10 +541,9 @@  pass_cse_reciprocals::execute (function *fun)
   calculate_dominance_info (CDI_DOMINATORS);
   calculate_dominance_info (CDI_POST_DOMINATORS);
 
-#ifdef ENABLE_CHECKING
-  FOR_EACH_BB_FN (bb, fun)
-    gcc_assert (!bb->aux);
-#endif
+  if (flag_checking)
+    FOR_EACH_BB_FN (bb, fun)
+      gcc_assert (!bb->aux);
 
   for (arg = DECL_ARGUMENTS (fun->decl); arg; arg = DECL_CHAIN (arg))
     if (FLOAT_TYPE_P (TREE_TYPE (arg))
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 85f9cca..2889e9f 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -882,12 +882,13 @@  get_expr_operands (struct function *fn, gimple *stmt, tree *expr_p, int flags)
     }
 
   /* If we get here, something has gone wrong.  */
-#ifdef ENABLE_CHECKING
-  fprintf (stderr, "unhandled expression in get_expr_operands():\n");
-  debug_tree (expr);
-  fputs ("\n", stderr);
-#endif
-  gcc_unreachable ();
+  if (flag_checking)
+    {
+      fprintf (stderr, "unhandled expression in get_expr_operands():\n");
+      debug_tree (expr);
+      fputs ("\n", stderr);
+      gcc_unreachable ();
+    }
 }
 
 
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index fbe41f9..363f439 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -1501,14 +1501,14 @@  static void
 replace_exp_1 (use_operand_p op_p, tree val,
     	       bool for_propagation ATTRIBUTE_UNUSED)
 {
-#if defined ENABLE_CHECKING
-  tree op = USE_FROM_PTR (op_p);
-
-  gcc_assert (!(for_propagation
-		&& TREE_CODE (op) == SSA_NAME
-		&& TREE_CODE (val) == SSA_NAME
-		&& !may_propagate_copy (op, val)));
-#endif
+  if (flag_checking)
+    {
+      tree op = USE_FROM_PTR (op_p);
+      gcc_assert (!(for_propagation
+		  && TREE_CODE (op) == SSA_NAME
+		  && TREE_CODE (val) == SSA_NAME
+		  && !may_propagate_copy (op, val)));
+    }
 
   if (TREE_CODE (val) == SSA_NAME)
     SET_USE (op_p, val);
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 8d86dcb..ab2becc 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -2544,10 +2544,11 @@  rewrite_constraints (constraint_graph_t graph,
   int i;
   constraint_t c;
 
-#ifdef ENABLE_CHECKING
-  for (unsigned int j = 0; j < graph->size; j++)
-    gcc_assert (find (j) == j);
-#endif
+  if (flag_checking)
+    {
+      for (unsigned int j = 0; j < graph->size; j++)
+	gcc_assert (find (j) == j);
+    }
 
   FOR_EACH_VEC_ELT (constraints, i, c)
     {
diff --git a/gcc/tree-ssa-ter.c b/gcc/tree-ssa-ter.c
index 7a7bcc9..b2d19ed 100644
--- a/gcc/tree-ssa-ter.c
+++ b/gcc/tree-ssa-ter.c
@@ -182,9 +182,7 @@  struct temp_expr_table
 /* A place for the many, many bitmaps we create.  */
 static bitmap_obstack ter_bitmap_obstack;
 
-#ifdef ENABLE_CHECKING
 extern void debug_ter (FILE *, temp_expr_table *);
-#endif
 
 
 /* Create a new TER table for MAP.  */
@@ -232,16 +230,16 @@  free_temp_expr_table (temp_expr_table *t)
 {
   bitmap ret = NULL;
 
-#ifdef ENABLE_CHECKING
-  unsigned x;
-  for (x = 0; x <= num_var_partitions (t->map); x++)
-    gcc_assert (!t->kill_list[x]);
-  for (x = 0; x < num_ssa_names; x++)
+  if (flag_checking)
     {
-      gcc_assert (t->expr_decl_uids[x] == NULL);
-      gcc_assert (t->partition_dependencies[x] == NULL);
+      for (unsigned x = 0; x <= num_var_partitions (t->map); x++)
+	gcc_assert (!t->kill_list[x]);
+      for (unsigned x = 0; x < num_ssa_names; x++)
+	{
+	  gcc_assert (t->expr_decl_uids[x] == NULL);
+	  gcc_assert (t->partition_dependencies[x] == NULL);
+	}
     }
-#endif
 
   BITMAP_FREE (t->partition_in_use);
   BITMAP_FREE (t->new_replaceable_dependencies);
@@ -748,7 +746,6 @@  dump_replaceable_exprs (FILE *f, bitmap expr)
 }
 
 
-#ifdef ENABLE_CHECKING
 /* Dump the status of the various tables in the expression table.  This is used
    exclusively to debug TER.  F is the place to send debug info and T is the
    table being debugged.  */
@@ -796,4 +793,3 @@  debug_ter (FILE *f, temp_expr_table *t)
 
   fprintf (f, "\n----------\n");
 }
-#endif
diff --git a/gcc/tree-ssa-threadupdate.c b/gcc/tree-ssa-threadupdate.c
index 4a147bb..49ec462 100644
--- a/gcc/tree-ssa-threadupdate.c
+++ b/gcc/tree-ssa-threadupdate.c
@@ -2334,7 +2334,7 @@  bb_ends_with_multiway_branch (basic_block bb ATTRIBUTE_UNUSED)
    REGION have exactly one incoming edge.  The only exception is the first block
    that may not have been connected to the rest of the cfg yet.  */
 
-DEBUG_FUNCTION void
+void
 verify_jump_thread (basic_block *region, unsigned n_region)
 {
   for (unsigned i = 0; i < n_region; i++)
@@ -2487,9 +2487,8 @@  duplicate_thread_path (edge entry, edge exit,
       scale_bbs_frequencies_int (region_copy, n_region, entry_freq, total_freq);
     }
 
-#ifdef ENABLE_CHECKING
-  verify_jump_thread (region_copy, n_region);
-#endif
+  if (flag_checking)
+    verify_jump_thread (region_copy, n_region);
 
   /* Remove the last branch in the jump thread path.  */
   remove_ctrl_stmt_and_useless_edges (region_copy[n_region - 1], exit->dest);
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 4b869be..b425b2c 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -910,7 +910,7 @@  error:
 /* Verify common invariants in the SSA web.
    TODO: verify the variable annotations.  */
 
-DEBUG_FUNCTION void
+void
 verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
 {
   size_t i;
diff --git a/gcc/tree-ssa.h b/gcc/tree-ssa.h
index a3b9bed..570ac9c 100644
--- a/gcc/tree-ssa.h
+++ b/gcc/tree-ssa.h
@@ -77,5 +77,13 @@  redirect_edge_var_map_location (edge_var_map *v)
   return v->locus;
 }
 
+/* Verify SSA invariants, if internal consistency checks are enabled.  */
+
+static inline void
+checking_verify_ssa (bool check_modified_stmt, bool check_ssa_operands)
+{
+  if (flag_checking)
+    verify_ssa (check_modified_stmt, check_ssa_operands);
+}
 
 #endif /* GCC_TREE_SSA_H */
diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c
index 64e2379..45ab6dc 100644
--- a/gcc/tree-ssanames.c
+++ b/gcc/tree-ssanames.c
@@ -341,9 +341,8 @@  release_ssa_name_fn (struct function *fn, tree var)
       if (MAY_HAVE_DEBUG_STMTS)
 	insert_debug_temp_for_var_def (NULL, var);
 
-#ifdef ENABLE_CHECKING
-      verify_imm_links (stderr, var);
-#endif
+      if (flag_checking)
+	verify_imm_links (stderr, var);
       while (imm->next != imm)
 	delink_imm_use (imm->next);
 
diff --git a/gcc/tree-stdarg.c b/gcc/tree-stdarg.c
index d69fa06..b602e2a 100644
--- a/gcc/tree-stdarg.c
+++ b/gcc/tree-stdarg.c
@@ -1105,13 +1105,14 @@  expand_ifn_va_arg (function *fun)
   if ((fun->curr_properties & PROP_gimple_lva) == 0)
     expand_ifn_va_arg_1 (fun);
 
-#if ENABLE_CHECKING
+  if (!flag_checking)
+    return;
+
   basic_block bb;
   gimple_stmt_iterator i;
   FOR_EACH_BB_FN (bb, fun)
     for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
       gcc_assert (!gimple_call_ifn_va_arg_p (gsi_stmt (i)));
-#endif
 }
 
 namespace {
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 11c3ae2..e90bb33 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -919,9 +919,7 @@  slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *loop,
   free (new_bbs);
   free (bbs);
 
-#ifdef ENABLE_CHECKING
-  verify_dominators (CDI_DOMINATORS);
-#endif
+  checking_verify_dominators (CDI_DOMINATORS);
 
   return new_loop;
 }
@@ -1003,11 +1001,13 @@  slpeel_can_duplicate_loop_p (const struct loop *loop, const_edge e)
   return true;
 }
 
-#ifdef ENABLE_CHECKING
 static void
-slpeel_verify_cfg_after_peeling (struct loop *first_loop,
-                                 struct loop *second_loop)
+slpeel_checking_verify_cfg_after_peeling (struct loop *first_loop,
+	                                  struct loop *second_loop)
 {
+  if (!flag_checking)
+    return;
+
   basic_block loop1_exit_bb = single_exit (first_loop)->dest;
   basic_block loop2_entry_bb = loop_preheader_edge (second_loop)->src;
   basic_block loop1_entry_bb = loop_preheader_edge (first_loop)->src;
@@ -1035,7 +1035,6 @@  slpeel_verify_cfg_after_peeling (struct loop *first_loop,
      second_loop.  */
   /* TODO */
 }
-#endif
 
 /* If the run time cost model check determines that vectorization is
    not profitable and hence scalar loop should be generated then set
@@ -1773,9 +1772,7 @@  vect_do_peeling_for_loop_bound (loop_vec_info loop_vinfo,
 				     0, LOOP_VINFO_VECT_FACTOR (loop_vinfo));
   gcc_assert (new_loop);
   gcc_assert (loop_num == loop->num);
-#ifdef ENABLE_CHECKING
-  slpeel_verify_cfg_after_peeling (loop, new_loop);
-#endif
+  slpeel_checking_verify_cfg_after_peeling (loop, new_loop);
 
   /* A guard that controls whether the new_loop is to be executed or skipped
      is placed in LOOP->exit.  LOOP->exit therefore has two successors - one
@@ -2032,9 +2029,7 @@  vect_do_peeling_for_alignment (loop_vec_info loop_vinfo, tree ni_name,
 				   bound, 0);
 
   gcc_assert (new_loop);
-#ifdef ENABLE_CHECKING
-  slpeel_verify_cfg_after_peeling (new_loop, loop);
-#endif
+  slpeel_checking_verify_cfg_after_peeling (new_loop, loop);
   /* For vectorization factor N, we need to copy at most N-1 values 
      for alignment and this means N-2 loopback edge executions.  */
   max_iter = LOOP_VINFO_VECT_FACTOR (loop_vinfo) - 2;
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 3bc3b03..62c7622 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -242,9 +242,7 @@  static inline bool
 supports_overflow_infinity (const_tree type)
 {
   tree min = vrp_val_min (type), max = vrp_val_max (type);
-#ifdef ENABLE_CHECKING
-  gcc_assert (needs_overflow_infinity (type));
-#endif
+  gcc_checking_assert (needs_overflow_infinity (type));
   return (min != NULL_TREE
 	  && CONSTANT_CLASS_P (min)
 	  && max != NULL_TREE
@@ -373,9 +371,9 @@  static void
 set_value_range (value_range *vr, enum value_range_type t, tree min,
 		 tree max, bitmap equiv)
 {
-#if defined ENABLE_CHECKING
   /* Check the validity of the range.  */
-  if (t == VR_RANGE || t == VR_ANTI_RANGE)
+  if (flag_checking
+      && (t == VR_RANGE || t == VR_ANTI_RANGE))
     {
       int cmp;
 
@@ -395,12 +393,12 @@  set_value_range (value_range *vr, enum value_range_type t, tree min,
 		    || !is_overflow_infinity (max));
     }
 
-  if (t == VR_UNDEFINED || t == VR_VARYING)
-    gcc_assert (min == NULL_TREE && max == NULL_TREE);
-
-  if (t == VR_UNDEFINED || t == VR_VARYING)
-    gcc_assert (equiv == NULL || bitmap_empty_p (equiv));
-#endif
+  if (flag_checking
+      && (t == VR_UNDEFINED || t == VR_VARYING))
+    {
+      gcc_assert (min == NULL_TREE && max == NULL_TREE);
+      gcc_assert (equiv == NULL || bitmap_empty_p (equiv));
+    }
 
   vr->type = t;
   vr->min = min;
diff --git a/gcc/tree.c b/gcc/tree.c
index af31849..9893c98 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5903,10 +5903,11 @@  free_lang_data_in_cgraph (void)
   /* Traverse every type found freeing its language data.  */
   FOR_EACH_VEC_ELT (fld.types, i, t)
     free_lang_data_in_type (t);
-#ifdef ENABLE_CHECKING
-  FOR_EACH_VEC_ELT (fld.types, i, t)
-    verify_type (t);
-#endif
+  if (flag_checking)
+    {
+      FOR_EACH_VEC_ELT (fld.types, i, t)
+	verify_type (t);
+    }
 
   delete fld.pset;
   fld.worklist.release ();
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 90211ef..0c25470 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -230,9 +230,8 @@  gimple_remove_histogram_value (struct function *fun, gimple *stmt,
       hist2->hvalue.next = hist->hvalue.next;
     }
   free (hist->hvalue.counters);
-#ifdef ENABLE_CHECKING
-  memset (hist, 0xab, sizeof (*hist));
-#endif
+  if (CHECKING_P)
+    memset (hist, 0xab, sizeof (*hist));
   free (hist);
 }
 
@@ -595,9 +594,8 @@  free_hist (void **slot, void *data ATTRIBUTE_UNUSED)
 {
   histogram_value hist = *(histogram_value *) slot;
   free (hist->hvalue.counters);
-#ifdef ENABLE_CHECKING
-  memset (hist, 0xab, sizeof (*hist));
-#endif
+  if (CHECKING_P)
+    memset (hist, 0xab, sizeof (*hist));
   free (hist);
   return 1;
 }
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 8010ce1..60c0320 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -399,7 +399,7 @@  struct variable
 /* Macro to access MEM_OFFSET as an HOST_WIDE_INT.  Evaluates MEM twice.  */
 #define INT_MEM_OFFSET(mem) (MEM_OFFSET_KNOWN_P (mem) ? MEM_OFFSET (mem) : 0)
 
-#if ENABLE_CHECKING && (GCC_VERSION >= 2007)
+#if CHECKING_P && (GCC_VERSION >= 2007)
 
 /* Access VAR's Ith part's offset, checking that it's not a one-part
    variable.  */
@@ -3571,7 +3571,6 @@  loc_cmp (rtx x, rtx y)
   return 0;
 }
 
-#if ENABLE_CHECKING
 /* Check the order of entries in one-part variables.   */
 
 int
@@ -3603,7 +3602,6 @@  canonicalize_loc_order_check (variable **slot,
 
   return 1;
 }
-#endif
 
 /* Mark with VALUE_RECURSED_INTO values that have neighbors that are
    more likely to be chosen as canonical for an equivalence set.
@@ -3832,17 +3830,16 @@  canonicalize_values_star (variable **slot, dataflow_set *set)
 	    else
 	      gcc_unreachable ();
 
-#if ENABLE_CHECKING
-	    while (list)
-	      {
-		if (list->offset == 0
-		    && (dv_as_opaque (list->dv) == dv_as_opaque (dv)
-			|| dv_as_opaque (list->dv) == dv_as_opaque (cdv)))
-		  gcc_unreachable ();
+	    if (flag_checking)
+	      while (list)
+		{
+		  if (list->offset == 0
+		      && (dv_as_opaque (list->dv) == dv_as_opaque (dv)
+			  || dv_as_opaque (list->dv) == dv_as_opaque (cdv)))
+		    gcc_unreachable ();
 
-		list = list->next;
-	      }
-#endif
+		  list = list->next;
+		}
 	  }
       }
 
@@ -6930,10 +6927,9 @@  compute_bb_dataflow (basic_block bb)
 	->traverse <dataflow_set *, canonicalize_values_mark> (out);
       shared_hash_htab (out->vars)
 	->traverse <dataflow_set *, canonicalize_values_star> (out);
-#if ENABLE_CHECKING
-      shared_hash_htab (out->vars)
-	->traverse <dataflow_set *, canonicalize_loc_order_check> (out);
-#endif
+      if (flag_checking)
+	shared_hash_htab (out->vars)
+	  ->traverse <dataflow_set *, canonicalize_loc_order_check> (out);
     }
   changed = dataflow_set_different (&old_out, out);
   dataflow_set_destroy (&old_out);
@@ -7038,13 +7034,14 @@  vt_find_locations (void)
 		  if (adjust)
 		    {
 		      dataflow_post_merge_adjust (in, &VTI (bb)->permp);
-#if ENABLE_CHECKING
-		      /* Merge and merge_adjust should keep entries in
-			 canonical order.  */
-		      shared_hash_htab (in->vars)
-			->traverse <dataflow_set *,
-				    canonicalize_loc_order_check> (in);
-#endif
+
+		      if (flag_checking)
+			/* Merge and merge_adjust should keep entries in
+			   canonical order.  */
+			shared_hash_htab (in->vars)
+			  ->traverse <dataflow_set *,
+				      canonicalize_loc_order_check> (in);
+
 		      if (dst_can_be_shared)
 			{
 			  shared_hash_destroy (in->vars);
@@ -9465,11 +9462,12 @@  vt_emit_notes (void)
 	 again.  */
       dataflow_set_clear (&VTI (bb)->in);
     }
-#ifdef ENABLE_CHECKING
-  shared_hash_htab (cur.vars)
-    ->traverse <variable_table_type *, emit_notes_for_differences_1>
-      (shared_hash_htab (empty_shared_hash));
-#endif
+
+  if (flag_checking)
+    shared_hash_htab (cur.vars)
+      ->traverse <variable_table_type *, emit_notes_for_differences_1>
+	(shared_hash_htab (empty_shared_hash));
+
   dataflow_set_destroy (&cur);
 
   if (MAY_HAVE_DEBUG_INSNS)
-- 
2.1.4