]> granicus.if.org Git - llvm/commitdiff
[JITLink] Add timers and -show-times option to llvm-jitlink.
authorLang Hames <lhames@gmail.com>
Tue, 27 Aug 2019 15:51:19 +0000 (15:51 +0000)
committerLang Hames <lhames@gmail.com>
Tue, 27 Aug 2019 15:51:19 +0000 (15:51 +0000)
The timers track time spent loading objects, linking, and (if applicable)
running JIT-link'd code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370075 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-jitlink/llvm-jitlink.cpp

index 1e449153ad84e18576181f03038578d3eb8407bd..96c4d671b839ba4e265242d9b64b1e1e394ae9a8 100644 (file)
@@ -33,6 +33,7 @@
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/TargetSelect.h"
+#include "llvm/Support/Timer.h"
 
 #include <list>
 #include <string>
@@ -94,6 +95,10 @@ static cl::opt<bool> ShowSizes(
     cl::desc("Show sizes pre- and post-dead stripping, and allocations"),
     cl::init(false));
 
+static cl::opt<bool> ShowTimes("show-times",
+                               cl::desc("Show times for llvm-jitlink phases"),
+                               cl::init(false));
+
 static cl::opt<bool> ShowRelocatedSectionContents(
     "show-relocated-section-contents",
     cl::desc("show section contents after fixups have been applied"),
@@ -622,9 +627,25 @@ int main(int argc, char *argv[]) {
     ExitOnErr(loadProcessSymbols(S));
   ExitOnErr(loadDylibs());
 
-  ExitOnErr(loadObjects(S));
+  TimerGroup JITLinkTimers;
+  // ("llvm-jitlink timers",
+  //                            "timers for llvm-jitlink phases");
 
-  auto EntryPoint = ExitOnErr(getMainEntryPoint(S));
+  {
+    Timer LoadObjectsTimer(
+        "load", "time to load/add object files to llvm-jitlink", JITLinkTimers);
+    LoadObjectsTimer.startTimer();
+    ExitOnErr(loadObjects(S));
+    LoadObjectsTimer.stopTimer();
+  }
+
+  JITEvaluatedSymbol EntryPoint = 0;
+  {
+    Timer LinkTimer("link", "time to link object files", JITLinkTimers);
+    LinkTimer.startTimer();
+    EntryPoint = ExitOnErr(getMainEntryPoint(S));
+    LinkTimer.stopTimer();
+  }
 
   if (ShowAddrs)
     S.dumpSessionInfo(outs());
@@ -636,5 +657,16 @@ int main(int argc, char *argv[]) {
   if (NoExec)
     return 0;
 
-  return ExitOnErr(runEntryPoint(S, EntryPoint));
+  int Result = 0;
+  {
+    Timer RunTimer("run", "time to execute jitlink'd code", JITLinkTimers);
+    RunTimer.startTimer();
+    Result = ExitOnErr(runEntryPoint(S, EntryPoint));
+    RunTimer.stopTimer();
+  }
+
+  if (ShowTimes)
+    JITLinkTimers.print(dbgs());
+
+  return Result;
 }