Explorar o código

[Timers] Use the pass argument name for JSON keys in time-passes

When using clang --save-stats -mllvm -time-passes, both timers and stats
end up in the same json file.

We could end up with things like:

{
  "asm-printer.EmittedInsts": 1,
  "time.pass.Virtual Register Map.wall": 2.9015541076660156e-04,
  "time.pass.Virtual Register Map.user": 2.0500000000000379e-04,
  "time.pass.Virtual Register Map.sys": 8.5000000000001741e-05,
}

This patch makes use of the pass argument name (if available) in the
JSON key to end up with things like:

{
  "asm-printer.EmittedInsts": 1,
  "time.pass.virtregmap.wall": 2.9015541076660156e-04,
  "time.pass.virtregmap.user": 2.0500000000000379e-04,
  "time.pass.virtregmap.sys": 8.5000000000001741e-05,
}

This also helps avoiding to write another JSON printer to handle all the
cases that we could have in our pass names.

Differential Revision: https://reviews.llvm.org/D48109

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@334649 91177308-0d34-0410-b5e6-96231b3b80d8
Francis Visoiu Mistrih %!s(int64=7) %!d(string=hai) anos
pai
achega
a9ac180f03
Modificáronse 2 ficheiros con 19 adicións e 1 borrados
  1. 5 1
      lib/IR/LegacyPassManager.cpp
  2. 14 0
      test/CodeGen/X86/time-passes-json-stats.ll

+ 5 - 1
lib/IR/LegacyPassManager.cpp

@@ -545,7 +545,11 @@ public:
     Timer *&T = TimingData[P];
     if (!T) {
       StringRef PassName = P->getPassName();
-      T = new Timer(PassName, PassName, TG);
+      StringRef PassArgument;
+      if (const PassInfo *PI = Pass::lookupPassInfo(P->getPassID()))
+        PassArgument = PI->getPassArgument();
+      T = new Timer(PassArgument.empty() ? PassName : PassArgument, PassName,
+                    TG);
     }
     return T;
   }

+ 14 - 0
test/CodeGen/X86/time-passes-json-stats.ll

@@ -0,0 +1,14 @@
+; RUN: llc -mtriple=x86_64-- -stats-json=true -stats -time-passes %s -o /dev/null 2>&1 | FileCheck %s
+
+; Verify that we use the argument pass name instead of the full name as a json
+; key for timers.
+;
+; CHECK: {
+; CHECK-NEXT: "asm-printer.EmittedInsts":
+; CHECK-NOT: Virtual Register Map
+; CHECK: "time.pass.virtregmap.wall":
+; CHECK: "time.pass.virtregmap.user":
+; CHECK: "time.pass.virtregmap.sys":
+; CHECK: Virtual Register Map
+
+define void @test_stats() { ret void }