@@ -609,6 +609,15 @@ Expected<int> runEntryPoint(Session &S, JITEvaluatedSymbol EntryPoint) {
609
609
return EntryPointPtr (EntryPointArgs.size () - 1 , EntryPointArgs.data ());
610
610
}
611
611
612
+ struct JITLinkTimers {
613
+ TimerGroup JITLinkTimers{" llvm-jitlink timers" ,
614
+ " timers for llvm-jitlink phases" };
615
+ Timer LoadObjectsTimer{
616
+ " load" , " time to load/add object files to llvm-jitlink" , JITLinkTimers};
617
+ Timer LinkTimer{" link" , " time to link object files" , JITLinkTimers};
618
+ Timer RunTimer{" run" , " time to execute jitlink'd code" , JITLinkTimers};
619
+ };
620
+
612
621
int main (int argc, char *argv[]) {
613
622
InitLLVM X (argc, argv);
614
623
@@ -619,6 +628,10 @@ int main(int argc, char *argv[]) {
619
628
cl::ParseCommandLineOptions (argc, argv, " llvm jitlink tool" );
620
629
ExitOnErr.setBanner (std::string (argv[0 ]) + " : " );
621
630
631
+ // / If timers are enabled, create a JITLinkTimers instance.
632
+ std::unique_ptr<JITLinkTimers> Timers =
633
+ ShowTimes ? std::make_unique<JITLinkTimers>() : nullptr ;
634
+
622
635
Session S (getFirstFileTriple ());
623
636
624
637
ExitOnErr (sanitizeArguments (S));
@@ -627,23 +640,16 @@ int main(int argc, char *argv[]) {
627
640
ExitOnErr (loadProcessSymbols (S));
628
641
ExitOnErr (loadDylibs ());
629
642
630
- TimerGroup JITLinkTimers (" llvm-jitlink timers" ,
631
- " timers for llvm-jitlink phases" );
632
643
633
644
{
634
- Timer LoadObjectsTimer (
635
- " load" , " time to load/add object files to llvm-jitlink" , JITLinkTimers);
636
- LoadObjectsTimer.startTimer ();
645
+ TimeRegion TR (Timers ? &Timers->LoadObjectsTimer : nullptr );
637
646
ExitOnErr (loadObjects (S));
638
- LoadObjectsTimer.stopTimer ();
639
647
}
640
648
641
649
JITEvaluatedSymbol EntryPoint = 0 ;
642
650
{
643
- Timer LinkTimer (" link" , " time to link object files" , JITLinkTimers);
644
- LinkTimer.startTimer ();
651
+ TimeRegion TR (Timers ? &Timers->LinkTimer : nullptr );
645
652
EntryPoint = ExitOnErr (getMainEntryPoint (S));
646
- LinkTimer.stopTimer ();
647
653
}
648
654
649
655
if (ShowAddrs)
@@ -658,14 +664,9 @@ int main(int argc, char *argv[]) {
658
664
659
665
int Result = 0 ;
660
666
{
661
- Timer RunTimer (" run" , " time to execute jitlink'd code" , JITLinkTimers);
662
- RunTimer.startTimer ();
667
+ TimeRegion TR (Timers ? &Timers->RunTimer : nullptr );
663
668
Result = ExitOnErr (runEntryPoint (S, EntryPoint));
664
- RunTimer.stopTimer ();
665
669
}
666
670
667
- if (ShowTimes)
668
- JITLinkTimers.print (dbgs ());
669
-
670
671
return Result;
671
672
}
0 commit comments