From: Lang Hames Date: Wed, 4 Sep 2019 18:38:29 +0000 (+0000) Subject: [JITLink] Fix the show-timers option on llvm-jitlink. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d196ef224ca0a7bae4ae23d5dff70756b6ee58b0;p=llvm [JITLink] Fix the show-timers option on llvm-jitlink. No longer constantly shows times (even when -show-times=false). When shown, times are now correctly grouped. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370951 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/llvm-jitlink/llvm-jitlink.cpp b/tools/llvm-jitlink/llvm-jitlink.cpp index ff3ba93d57c..651e312da30 100644 --- a/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/tools/llvm-jitlink/llvm-jitlink.cpp @@ -609,6 +609,15 @@ Expected runEntryPoint(Session &S, JITEvaluatedSymbol EntryPoint) { return EntryPointPtr(EntryPointArgs.size() - 1, EntryPointArgs.data()); } +struct JITLinkTimers { + TimerGroup JITLinkTimers{"llvm-jitlink timers", + "timers for llvm-jitlink phases"}; + Timer LoadObjectsTimer{ + "load", "time to load/add object files to llvm-jitlink", JITLinkTimers}; + Timer LinkTimer{"link", "time to link object files", JITLinkTimers}; + Timer RunTimer{"run", "time to execute jitlink'd code", JITLinkTimers}; +}; + int main(int argc, char *argv[]) { InitLLVM X(argc, argv); @@ -619,6 +628,10 @@ int main(int argc, char *argv[]) { cl::ParseCommandLineOptions(argc, argv, "llvm jitlink tool"); ExitOnErr.setBanner(std::string(argv[0]) + ": "); + /// If timers are enabled, create a JITLinkTimers instance. + std::unique_ptr Timers = + ShowTimes ? std::make_unique() : nullptr; + Session S(getFirstFileTriple()); ExitOnErr(sanitizeArguments(S)); @@ -627,23 +640,16 @@ int main(int argc, char *argv[]) { ExitOnErr(loadProcessSymbols(S)); ExitOnErr(loadDylibs()); - TimerGroup JITLinkTimers("llvm-jitlink timers", - "timers for llvm-jitlink phases"); { - Timer LoadObjectsTimer( - "load", "time to load/add object files to llvm-jitlink", JITLinkTimers); - LoadObjectsTimer.startTimer(); + TimeRegion TR(Timers ? &Timers->LoadObjectsTimer : nullptr); ExitOnErr(loadObjects(S)); - LoadObjectsTimer.stopTimer(); } JITEvaluatedSymbol EntryPoint = 0; { - Timer LinkTimer("link", "time to link object files", JITLinkTimers); - LinkTimer.startTimer(); + TimeRegion TR(Timers ? &Timers->LinkTimer : nullptr); EntryPoint = ExitOnErr(getMainEntryPoint(S)); - LinkTimer.stopTimer(); } if (ShowAddrs) @@ -658,14 +664,9 @@ int main(int argc, char *argv[]) { int Result = 0; { - Timer RunTimer("run", "time to execute jitlink'd code", JITLinkTimers); - RunTimer.startTimer(); + TimeRegion TR(Timers ? &Timers->RunTimer : nullptr); Result = ExitOnErr(runEntryPoint(S, EntryPoint)); - RunTimer.stopTimer(); } - if (ShowTimes) - JITLinkTimers.print(dbgs()); - return Result; }