Skip to content

Commit

Permalink
[Timers] Use the pass argument name for JSON keys in time-passes
Browse files Browse the repository at this point in the history
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

llvm-svn: 334649
  • Loading branch information
francisvm committed Jun 13, 2018
1 parent f7f663e commit fbd450b
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
6 changes: 5 additions & 1 deletion llvm/lib/IR/LegacyPassManager.cpp
Expand Up @@ -545,7 +545,11 @@ class TimingInfo {
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;
}
Expand Down
14 changes: 14 additions & 0 deletions llvm/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 }

0 comments on commit fbd450b

Please sign in to comment.