[PATCH] D111466: [llc] Support -time-trace in llc

Arthur Eubanks via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 11 10:18:43 PDT 2021


This revision was automatically updated to reflect the committed changes.
Closed by commit rG337cf0a5abcf: [llc] Support -time-trace in llc (authored by aeubanks).

Changed prior to commit:
  https://reviews.llvm.org/D111466?vs=378366&id=378717#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D111466/new/

https://reviews.llvm.org/D111466

Files:
  llvm/test/tools/llc/time-trace.ll
  llvm/tools/llc/llc.cpp


Index: llvm/tools/llc/llc.cpp
===================================================================
--- llvm/tools/llc/llc.cpp
+++ llvm/tools/llc/llc.cpp
@@ -13,6 +13,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/ScopeExit.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/CodeGen/CommandFlags.h"
@@ -49,6 +50,7 @@
 #include "llvm/Support/PluginLoader.h"
 #include "llvm/Support/SourceMgr.h"
 #include "llvm/Support/TargetSelect.h"
+#include "llvm/Support/TimeProfiler.h"
 #include "llvm/Support/ToolOutputFile.h"
 #include "llvm/Support/WithColor.h"
 #include "llvm/Target/TargetLoweringObjectFile.h"
@@ -82,6 +84,19 @@
                  cl::value_desc("N"),
                  cl::desc("Repeat compilation N times for timing"));
 
+static cl::opt<bool> TimeTrace("time-trace", cl::desc("Record time trace"));
+
+static cl::opt<unsigned> TimeTraceGranularity(
+    "time-trace-granularity",
+    cl::desc(
+        "Minimum time granularity (in microseconds) traced by time profiler"),
+    cl::init(500), cl::Hidden);
+
+static cl::opt<std::string>
+    TimeTraceFile("time-trace-file",
+                  cl::desc("Specify time trace file destination"),
+                  cl::value_desc("filename"));
+
 static cl::opt<std::string>
     BinutilsVersion("binutils-version", cl::Hidden,
                     cl::desc("Produced object files can use all ELF features "
@@ -363,6 +378,20 @@
 
   cl::ParseCommandLineOptions(argc, argv, "llvm system compiler\n");
 
+  if (TimeTrace)
+    timeTraceProfilerInitialize(TimeTraceGranularity, argv[0]);
+  auto TimeTraceScopeExit = make_scope_exit([]() {
+    if (TimeTrace) {
+      if (auto E = timeTraceProfilerWrite(TimeTraceFile, OutputFilename)) {
+        handleAllErrors(std::move(E), [&](const StringError &SE) {
+          errs() << SE.getMessage() << "\n";
+        });
+        return;
+      }
+      timeTraceProfilerCleanup();
+    }
+  });
+
   LLVMContext Context;
   Context.setDiscardValueNames(DiscardValueNames);
 
Index: llvm/test/tools/llc/time-trace.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/llc/time-trace.ll
@@ -0,0 +1,8 @@
+; RUN: llc -o /dev/null -O2 -time-trace -time-trace-granularity=100 -time-trace-file=%t.json
+; RUN: FileCheck --input-file=%t.json %s
+
+; CHECK: "traceEvents"
+
+define void @f() {
+  ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111466.378717.patch
Type: text/x-patch
Size: 2494 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211011/e031115c/attachment.bin>


More information about the llvm-commits mailing list