[clang] [llvm] Use global TimerGroups for both new pass manager and old pass manager timers (PR #130375)

Alan Zhao via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 12 12:51:08 PDT 2025


================
@@ -39,19 +39,20 @@ Timer *getPassTimer(Pass *);
 /// This class implements -time-passes functionality for new pass manager.
 /// It provides the pass-instrumentation callbacks that measure the pass
 /// execution time. They collect timing info into individual timers as
-/// passes are being run. At the end of its life-time it prints the resulting
-/// timing report.
+/// passes are being run.
 class TimePassesHandler {
   /// Value of this type is capable of uniquely identifying pass invocations.
   /// It is a pair of string Pass-Identifier (which for now is common
   /// to all the instance of a given pass) + sequential invocation counter.
   using PassInvocationID = std::pair<StringRef, unsigned>;
 
   /// Groups of timers for passes and analyses.
-  TimerGroup PassTG;
-  TimerGroup AnalysisTG;
+  TimerGroup &PassTG =
+      NamedRegionTimer::getNamedTimerGroup(PassGroupName, PassGroupDesc);
+  TimerGroup &AnalysisTG = NamedRegionTimer::getNamedTimerGroup(
+      AnalysisGroupName, AnalysisGroupDesc);
 
-  using TimerVector = llvm::SmallVector<std::unique_ptr<Timer>, 4>;
+  using TimerVector = llvm::SmallVector<Timer *, 4>;
----------------
alanzhao1 wrote:

I mean this is sort of the end result we want - we need the timers to be accessible outside of the pass manager's lifetime.

It's also somewhat debatable whether or not the there is a memory leak since the TimerGroups store pointers to their timers anyways.

https://github.com/llvm/llvm-project/pull/130375


More information about the cfe-commits mailing list