This patch adds a debug counter to ranger.    it enables the debug counter on all 5 of the client facing range_of_* routines, and invokes the global query instead when it needs to be disabled.   it also disables some of the dom_ranger.

I was going to add a full disabled option via --param=ranger_debug=disable  but it turns out thre are a couple of places where we expect a gimple_ranger object and invokes some of the specialized routines.. so that path is not a great one and not simple.

the option is "ranger_cnt"  , so if you use

       -fdbg-cnt=ranger_cnt:0

it will effectively disable  ranger as much as possible.

Bootstrapped on x86_64-pc-linux-gnu  with no regerssions, pushed.

Andrew
From f49fb2c98434f3500d4d5e1098e3a79d7b157cad Mon Sep 17 00:00:00 2001
From: Andrew MacLeod <[email protected]>
Date: Thu, 25 Jun 2026 16:09:39 -0400
Subject: [PATCH 5/5] Add debug counter to ranger

	PR tree-optimization/125979
	* dbgcnt.def: Add ranger_cnt.
	* gimple-range.cc (gimple_ranger::range_of_expr): Add debug_cnt.
	(gimple_ranger::range_on_entry): Likewise.
	(gimple_ranger::range_on_exit): Likewise.
	(gimple_ranger::range_on_edge); Likewise.
	(gimple_ranger::range_of_stmt): Likewise
	(dom_ranger::range_of_expr): Likewise.
	(dom_ranger::range_on_edge): Likewise.
	(dom_ranger::range_of_stmt): Likewise.
---
 gcc/dbgcnt.def      |  1 +
 gcc/gimple-range.cc | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/gcc/dbgcnt.def b/gcc/dbgcnt.def
index 40305d3d685..ac6a8b77119 100644
--- a/gcc/dbgcnt.def
+++ b/gcc/dbgcnt.def
@@ -198,6 +198,7 @@ DEBUG_COUNTER (postreload_cse)
 DEBUG_COUNTER (pre)
 DEBUG_COUNTER (pre_insn)
 DEBUG_COUNTER (prefetch)
+DEBUG_COUNTER (ranger_cnt)
 DEBUG_COUNTER (registered_jump_thread)
 DEBUG_COUNTER (sched2_func)
 DEBUG_COUNTER (sched_breakdep)
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index bc3eaf9efda..cf2252ffe37 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -36,6 +36,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "gimple-range.h"
 #include "gimple-fold.h"
 #include "gimple-walk.h"
+#include "dbgcnt.h"
 
 gimple_ranger::gimple_ranger (bool use_imm_uses) :
 	non_executable_edge_flag (cfun),
@@ -81,6 +82,9 @@ gimple_ranger::const_query ()
 bool
 gimple_ranger::range_of_expr (vrange &r, tree expr, gimple *stmt)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_of_expr (r, expr, stmt);
+
   unsigned idx;
   if (!gimple_range_ssa_p (expr))
     return get_tree_range (r, expr, stmt);
@@ -155,6 +159,9 @@ gimple_ranger::range_of_expr (vrange &r, tree expr, gimple *stmt)
 bool
 gimple_ranger::range_on_entry (vrange &r, basic_block bb, tree name)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_on_entry (r, bb, name);
+
   if (!gimple_range_ssa_p (name))
     return get_tree_range (r, name, NULL, bb, NULL);
 
@@ -185,6 +192,9 @@ gimple_ranger::range_on_entry (vrange &r, basic_block bb, tree name)
 bool
 gimple_ranger::range_on_exit (vrange &r, basic_block bb, tree name)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_on_exit (r, bb, name);
+
   if (!gimple_range_ssa_p (name))
     return get_tree_range (r, name, NULL, NULL, bb);
 
@@ -224,6 +234,9 @@ gimple_ranger::range_on_exit (vrange &r, basic_block bb, tree name)
 bool
 gimple_ranger::range_on_edge (vrange &r, edge e, tree name)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_on_edge (r, e, name);
+
   value_range edge_range (TREE_TYPE (name));
 
   if (!r.supports_type_p (TREE_TYPE (name)))
@@ -291,6 +304,9 @@ gimple_ranger::fold_range_internal (vrange &r, gimple *s, tree name)
 bool
 gimple_ranger::range_of_stmt (vrange &r, gimple *s, tree name)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_of_stmt (r, s, name);
+
   bool res;
   r.set_undefined ();
 
@@ -774,6 +790,9 @@ dom_ranger::~dom_ranger ()
 bool
 dom_ranger::range_of_expr (vrange &r, tree expr, gimple *s)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_of_expr (r, expr, s);
+
   unsigned idx;
   if (!gimple_range_ssa_p (expr))
     return get_tree_range (r, expr, s);
@@ -807,6 +826,9 @@ dom_ranger::range_of_expr (vrange &r, tree expr, gimple *s)
 bool
 dom_ranger::range_on_edge (vrange &r, edge e, tree expr)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_on_edge (r, e, expr);
+
   if (!gimple_range_ssa_p (expr))
     return get_tree_range (r, expr, NULL, NULL, NULL, e);
 
@@ -855,6 +877,9 @@ dom_ranger::range_in_bb (vrange &r, basic_block bb, tree name)
 bool
 dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name)
 {
+  if (!dbg_cnt (ranger_cnt))
+    return get_global_range_query ()->range_of_stmt (r, s, name);
+
   unsigned idx;
   bool ret;
   if (!name)
-- 
2.45.0

Reply via email to