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