https://gcc.gnu.org/g:b5df409996260a9900c47fd21ae3b57009ca096d

commit r16-6823-gb5df409996260a9900c47fd21ae3b57009ca096d
Author: David Malcolm <[email protected]>
Date:   Fri Jan 16 10:54:31 2026 -0500

    analyzer: add timevar values for supergraph manipulation [PR123145]
    
    Whilst tracking down the slowdown of PR analyzer/123145, I noticed that
    the various supergraph manipulations introduced in
    r16-6063-g0b786d961d4426 can take non-trivial amounts of time on
    complicated TUs.  Add timevars to track each of them.
    
    gcc/analyzer/ChangeLog:
            PR analyzer/123145
            * supergraph-fixup-locations.cc: Include "timevar.h".
            (supergraph::fixup_locations): Track time spent as
            TV_ANALYZER_SUPERGRAPH_FIXUP_LOCATIONS.
            * supergraph-simplify.cc: Include "timevar.h".
            (supergraph::simplify): Track time spent as
            TV_ANALYZER_SUPERGRAPH_SIMPLIFY.
            * supergraph-sorting.cc: Include "timevar.h".
            (supergraph::sort_nodes): Track time spent as
            TV_ANALYZER_SUPERGRAPH_SORTING.
            * supergraph.cc (supergraph::supergraph): Track time spent as
            TV_ANALYZER_SUPERGRAPH_CREATION rather than
            TV_ANALYZER_SUPERGRAPH.
    
    gcc/ChangeLog:
            PR analyzer/123145
            * timevar.def (TV_ANALYZER_SUPERGRAPH): Rename to...
            (TV_ANALYZER_SUPERGRAPH_CREATION): ...this.
            (TV_ANALYZER_SUPERGRAPH_FIXUP_LOCATIONS): New.
            (TV_ANALYZER_SUPERGRAPH_SIMPLIFY): New.
            (TV_ANALYZER_SUPERGRAPH_SORTING): New.
    
    Signed-off-by: David Malcolm <[email protected]>

Diff:
---
 gcc/analyzer/supergraph-fixup-locations.cc | 3 +++
 gcc/analyzer/supergraph-simplify.cc        | 2 ++
 gcc/analyzer/supergraph-sorting.cc         | 2 ++
 gcc/analyzer/supergraph.cc                 | 3 +--
 gcc/timevar.def                            | 5 ++++-
 5 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/gcc/analyzer/supergraph-fixup-locations.cc 
b/gcc/analyzer/supergraph-fixup-locations.cc
index cf4aa793e23f..54555164692a 100644
--- a/gcc/analyzer/supergraph-fixup-locations.cc
+++ b/gcc/analyzer/supergraph-fixup-locations.cc
@@ -21,6 +21,8 @@ along with GCC; see the file COPYING3.  If not see
 #define INCLUDE_DEQUE
 #include "analyzer/common.h"
 
+#include "timevar.h"
+
 #include "analyzer/supergraph.h"
 #include "analyzer/analyzer-logging.h"
 #include "analyzer/supergraph-manipulation.h"
@@ -108,6 +110,7 @@ private:
 void
 supergraph::fixup_locations (logger *logger)
 {
+  auto_timevar tv (TV_ANALYZER_SUPERGRAPH_FIXUP_LOCATIONS);
   LOG_SCOPE (logger);
 
   location_fixer opt (*this, logger);
diff --git a/gcc/analyzer/supergraph-simplify.cc 
b/gcc/analyzer/supergraph-simplify.cc
index 9a5fcd341462..3037d9c105ab 100644
--- a/gcc/analyzer/supergraph-simplify.cc
+++ b/gcc/analyzer/supergraph-simplify.cc
@@ -23,6 +23,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "analyzer/common.h"
 
 #include "cgraph.h"
+#include "timevar.h"
 
 #include "analyzer/supergraph.h"
 #include "analyzer/analyzer-logging.h"
@@ -293,6 +294,7 @@ supergraph::log_stats (logger *logger) const
 void
 supergraph::simplify (logger *logger)
 {
+  auto_timevar tv (TV_ANALYZER_SUPERGRAPH_SIMPLIFY);
   LOG_SCOPE (logger);
 
   {
diff --git a/gcc/analyzer/supergraph-sorting.cc 
b/gcc/analyzer/supergraph-sorting.cc
index 829daa69d33f..2d87e26685a1 100644
--- a/gcc/analyzer/supergraph-sorting.cc
+++ b/gcc/analyzer/supergraph-sorting.cc
@@ -24,6 +24,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "cgraph.h"
 #include "alloc-pool.h"
 #include "fibonacci_heap.h"
+#include "timevar.h"
 
 #include "analyzer/supergraph.h"
 #include "analyzer/analyzer-logging.h"
@@ -254,6 +255,7 @@ get_node_ordering (const supergraph &sg,
 void
 supergraph::sort_nodes (logger *logger)
 {
+  auto_timevar tv (TV_ANALYZER_SUPERGRAPH_SORTING);
   LOG_SCOPE (logger);
 
   const std::vector<supernode *> ordering = get_node_ordering (*this, logger);
diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index 33de07fa2d7d..81b337fd7ff1 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -142,8 +142,7 @@ supergraph::supergraph (region_model_manager &mgr,
                        logger *logger)
 : m_next_snode_id (0)
 {
-  auto_timevar tv (TV_ANALYZER_SUPERGRAPH);
-
+  auto_timevar tv (TV_ANALYZER_SUPERGRAPH_CREATION);
   LOG_FUNC (logger);
 
   /* For each BB, if present, the stmt that terminates it.  */
diff --git a/gcc/timevar.def b/gcc/timevar.def
index cd7b08db6460..3824caa01bc2 100644
--- a/gcc/timevar.def
+++ b/gcc/timevar.def
@@ -347,7 +347,10 @@ DEFTIMEVAR (TV_JIT_CLIENT_CODE   , "JIT client code")
 
 /* Analyzer timevars.  */
 DEFTIMEVAR (TV_ANALYZER              , "analyzer")
-DEFTIMEVAR (TV_ANALYZER_SUPERGRAPH   , "analyzer: supergraph")
+DEFTIMEVAR (TV_ANALYZER_SUPERGRAPH_CREATION, "analyzer: supergraph: creation")
+DEFTIMEVAR (TV_ANALYZER_SUPERGRAPH_FIXUP_LOCATIONS, "analyzer: supergraph: 
fixup locations")
+DEFTIMEVAR (TV_ANALYZER_SUPERGRAPH_SIMPLIFY, "analyzer: supergraph: simplify")
+DEFTIMEVAR (TV_ANALYZER_SUPERGRAPH_SORTING, "analyzer: supergraph: sorting")
 DEFTIMEVAR (TV_ANALYZER_STATE_PURGE  , "analyzer: state purge")
 DEFTIMEVAR (TV_ANALYZER_PLAN         , "analyzer: planning")
 DEFTIMEVAR (TV_ANALYZER_SCC          , "analyzer: scc")

Reply via email to