[JITLink] Fix the show-timers option on llvm-jitlink.
authorLang Hames <lhames@gmail.com>
Wed, 4 Sep 2019 18:38:29 +0000 (18:38 +0000)
committerLang Hames <lhames@gmail.com>
Wed, 4 Sep 2019 18:38:29 +0000 (18:38 +0000)
No longer constantly shows times (even when -show-times=false). When shown,
times are now correctly grouped.

llvm-svn: 370951

llvm/tools/llvm-jitlink/llvm-jitlink.cpp

index ff3ba93..651e312 100644 (file)
@@ -609,6 +609,15 @@ Expected<int> runEntryPoint(Session &S, JITEvaluatedSymbol EntryPoint) {
   return EntryPointPtr(EntryPointArgs.size() - 1, EntryPointArgs.data());
 }
 
+struct JITLinkTimers {
+  TimerGroup JITLinkTimers{"llvm-jitlink timers",
+                           "timers for llvm-jitlink phases"};
+  Timer LoadObjectsTimer{
+      "load", "time to load/add object files to llvm-jitlink", JITLinkTimers};
+  Timer LinkTimer{"link", "time to link object files", JITLinkTimers};
+  Timer RunTimer{"run", "time to execute jitlink'd code", JITLinkTimers};
+};
+
 int main(int argc, char *argv[]) {
   InitLLVM X(argc, argv);
 
@@ -619,6 +628,10 @@ int main(int argc, char *argv[]) {
   cl::ParseCommandLineOptions(argc, argv, "llvm jitlink tool");
   ExitOnErr.setBanner(std::string(argv[0]) + ": ");
 
+  /// If timers are enabled, create a JITLinkTimers instance.
+  std::unique_ptr<JITLinkTimers> Timers =
+      ShowTimes ? std::make_unique<JITLinkTimers>() : nullptr;
+
   Session S(getFirstFileTriple());
 
   ExitOnErr(sanitizeArguments(S));
@@ -627,23 +640,16 @@ int main(int argc, char *argv[]) {
     ExitOnErr(loadProcessSymbols(S));
   ExitOnErr(loadDylibs());
 
-  TimerGroup JITLinkTimers("llvm-jitlink timers",
-                           "timers for llvm-jitlink phases");
 
   {
-    Timer LoadObjectsTimer(
-        "load", "time to load/add object files to llvm-jitlink", JITLinkTimers);
-    LoadObjectsTimer.startTimer();
+    TimeRegion TR(Timers ? &Timers->LoadObjectsTimer : nullptr);
     ExitOnErr(loadObjects(S));
-    LoadObjectsTimer.stopTimer();
   }
 
   JITEvaluatedSymbol EntryPoint = 0;
   {
-    Timer LinkTimer("link", "time to link object files", JITLinkTimers);
-    LinkTimer.startTimer();
+    TimeRegion TR(Timers ? &Timers->LinkTimer : nullptr);
     EntryPoint = ExitOnErr(getMainEntryPoint(S));
-    LinkTimer.stopTimer();
   }
 
   if (ShowAddrs)
@@ -658,14 +664,9 @@ int main(int argc, char *argv[]) {
 
   int Result = 0;
   {
-    Timer RunTimer("run", "time to execute jitlink'd code", JITLinkTimers);
-    RunTimer.startTimer();
+    TimeRegion TR(Timers ? &Timers->RunTimer : nullptr);
     Result = ExitOnErr(runEntryPoint(S, EntryPoint));
-    RunTimer.stopTimer();
   }
 
-  if (ShowTimes)
-    JITLinkTimers.print(dbgs());
-
   return Result;
 }