@@ -115,15 +115,16 @@ BackendConsumer::BackendConsumer(CompilerInstance &CI, BackendAction Action,
115115 llvm::Module *CurLinkModule)
116116 : CI(CI), Diags(CI.getDiagnostics()), CodeGenOpts(CI.getCodeGenOpts()),
117117 TargetOpts (CI.getTargetOpts()), LangOpts(CI.getLangOpts()),
118- AsmOutStream(std::move(OS)), FS(VFS),
119- LLVMIRGeneration(" irgen" , " LLVM IR Generation Time" ), Action(Action),
118+ AsmOutStream(std::move(OS)), FS(VFS), Action(Action),
120119 Gen(CreateLLVMCodeGen(Diags, InFile, std::move(VFS),
121120 CI.getHeaderSearchOpts(), CI.getPreprocessorOpts(),
122121 CI.getCodeGenOpts(), C, CoverageInfo)),
123122 LinkModules(std::move(LinkModules)), CurLinkModule(CurLinkModule) {
124123 TimerIsEnabled = CodeGenOpts.TimePasses ;
125124 llvm::TimePassesIsEnabled = CodeGenOpts.TimePasses ;
126125 llvm::TimePassesPerRun = CodeGenOpts.TimePassesPerRun ;
126+ if (CodeGenOpts.TimePasses )
127+ LLVMIRGeneration.init (" irgen" , " LLVM IR generation" , CI.getTimerGroup ());
127128}
128129
129130llvm::Module* BackendConsumer::getModule () const {
@@ -162,19 +163,13 @@ bool BackendConsumer::HandleTopLevelDecl(DeclGroupRef D) {
162163 " LLVM IR generation of declaration" );
163164
164165 // Recurse.
165- if (TimerIsEnabled) {
166- LLVMIRGenerationRefCount += 1 ;
167- if (LLVMIRGenerationRefCount == 1 )
168- LLVMIRGeneration.startTimer ();
169- }
166+ if (TimerIsEnabled && !LLVMIRGenerationRefCount++)
167+ CI.getFrontendTimer ().yieldTo (LLVMIRGeneration);
170168
171169 Gen->HandleTopLevelDecl (D);
172170
173- if (TimerIsEnabled) {
174- LLVMIRGenerationRefCount -= 1 ;
175- if (LLVMIRGenerationRefCount == 0 )
176- LLVMIRGeneration.stopTimer ();
177- }
171+ if (TimerIsEnabled && !--LLVMIRGenerationRefCount)
172+ LLVMIRGeneration.yieldTo (CI.getFrontendTimer ());
178173
179174 return true ;
180175}
@@ -184,12 +179,12 @@ void BackendConsumer::HandleInlineFunctionDefinition(FunctionDecl *D) {
184179 Context->getSourceManager (),
185180 " LLVM IR generation of inline function" );
186181 if (TimerIsEnabled)
187- LLVMIRGeneration. startTimer ( );
182+ CI. getFrontendTimer (). yieldTo (LLVMIRGeneration );
188183
189184 Gen->HandleInlineFunctionDefinition (D);
190185
191186 if (TimerIsEnabled)
192- LLVMIRGeneration.stopTimer ( );
187+ LLVMIRGeneration.yieldTo (CI. getFrontendTimer () );
193188}
194189
195190void BackendConsumer::HandleInterestingDecl (DeclGroupRef D) {
@@ -239,19 +234,13 @@ void BackendConsumer::HandleTranslationUnit(ASTContext &C) {
239234 {
240235 llvm::TimeTraceScope TimeScope (" Frontend" );
241236 PrettyStackTraceString CrashInfo (" Per-file LLVM IR generation" );
242- if (TimerIsEnabled) {
243- LLVMIRGenerationRefCount += 1 ;
244- if (LLVMIRGenerationRefCount == 1 )
245- LLVMIRGeneration.startTimer ();
246- }
237+ if (TimerIsEnabled && !LLVMIRGenerationRefCount++)
238+ CI.getFrontendTimer ().yieldTo (LLVMIRGeneration);
247239
248240 Gen->HandleTranslationUnit (C);
249241
250- if (TimerIsEnabled) {
251- LLVMIRGenerationRefCount -= 1 ;
252- if (LLVMIRGenerationRefCount == 0 )
253- LLVMIRGeneration.stopTimer ();
254- }
242+ if (TimerIsEnabled && !--LLVMIRGenerationRefCount)
243+ LLVMIRGeneration.yieldTo (CI.getFrontendTimer ());
255244
256245 IRGenFinished = true ;
257246 }
0 commit comments