aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/BackendUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/BackendUtil.cpp')
-rw-r--r--clang/lib/CodeGen/BackendUtil.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp
index 2863887..bcf6db1 100644
--- a/clang/lib/CodeGen/BackendUtil.cpp
+++ b/clang/lib/CodeGen/BackendUtil.cpp
@@ -16,6 +16,7 @@
#include "clang/Frontend/FrontendDiagnostic.h"
#include "clang/Frontend/Utils.h"
#include "clang/Lex/HeaderSearchOptions.h"
+#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Analysis/GlobalsModRef.h"
@@ -137,8 +138,6 @@ class EmitAssemblyHelper {
llvm::Module *TheModule;
IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS;
- Timer CodeGenerationTime;
-
std::unique_ptr<raw_pwrite_stream> OS;
Triple TargetTriple;
@@ -208,7 +207,6 @@ public:
: CI(CI), Diags(CI.getDiagnostics()), CodeGenOpts(CI.getCodeGenOpts()),
TargetOpts(CI.getTargetOpts()), LangOpts(CI.getLangOpts()),
TheModule(M), VFS(std::move(VFS)),
- CodeGenerationTime("codegen", "Code Generation Time"),
TargetTriple(TheModule->getTargetTriple()) {}
~EmitAssemblyHelper() {
@@ -1157,7 +1155,14 @@ void EmitAssemblyHelper::RunOptimizationPipeline(
{
PrettyStackTraceString CrashInfo("Optimizer");
llvm::TimeTraceScope TimeScope("Optimizer");
+ Timer timer;
+ if (CI.getCodeGenOpts().TimePasses) {
+ timer.init("optimizer", "Optimizer", CI.getTimerGroup());
+ CI.getFrontendTimer().yieldTo(timer);
+ }
MPM.run(*TheModule, MAM);
+ if (CI.getCodeGenOpts().TimePasses)
+ timer.yieldTo(CI.getFrontendTimer());
}
}
@@ -1200,14 +1205,20 @@ void EmitAssemblyHelper::RunCodegenPipeline(
{
PrettyStackTraceString CrashInfo("Code generation");
llvm::TimeTraceScope TimeScope("CodeGenPasses");
+ Timer timer;
+ if (CI.getCodeGenOpts().TimePasses) {
+ timer.init("codegen", "Machine code generation", CI.getTimerGroup());
+ CI.getFrontendTimer().yieldTo(timer);
+ }
CodeGenPasses.run(*TheModule);
+ if (CI.getCodeGenOpts().TimePasses)
+ timer.yieldTo(CI.getFrontendTimer());
}
}
void EmitAssemblyHelper::emitAssembly(BackendAction Action,
std::unique_ptr<raw_pwrite_stream> OS,
BackendConsumer *BC) {
- TimeRegion Region(CodeGenOpts.TimePasses ? &CodeGenerationTime : nullptr);
setCommandLineOpts(CodeGenOpts);
bool RequiresCodeGen = actionRequiresCodeGen(Action);