Index: llvm/trunk/lib/IR/LegacyPassManager.cpp =================================================================== --- llvm/trunk/lib/IR/LegacyPassManager.cpp +++ llvm/trunk/lib/IR/LegacyPassManager.cpp @@ -545,7 +545,11 @@ 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; } Index: llvm/trunk/test/CodeGen/X86/time-passes-json-stats.ll =================================================================== --- llvm/trunk/test/CodeGen/X86/time-passes-json-stats.ll +++ llvm/trunk/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 }