summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-11-29 09:57:35 +0000
committerKovarththanan Rajaratnam <kovarththanan.rajaratnam@gmail.com>2009-11-29 09:57:35 +0000
commit5505dff8afb21fd57e7c4ba5ef453934287e4170 (patch)
tree15d76399d5cb9c829419c31234f1c16ebcac4555
parente97582406b066b9fd4be1a573da0498a4bb6783f (diff)
downloadbcm5719-llvm-5505dff8afb21fd57e7c4ba5ef453934287e4170.tar.gz
bcm5719-llvm-5505dff8afb21fd57e7c4ba5ef453934287e4170.zip
This patch moves the frontend timer from clang-cc into CompilerInstance.
CompilerInstance already contains various objects that are used throughout the entire run. Also addresses Daniels review comments in: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20091123/024508.html llvm-svn: 90073
-rw-r--r--clang/include/clang/Frontend/CompilerInstance.h18
-rw-r--r--clang/include/clang/Frontend/FrontendAction.h17
-rw-r--r--clang/lib/Frontend/CompilerInstance.cpp5
-rw-r--r--clang/lib/Frontend/FrontendAction.cpp9
-rw-r--r--clang/tools/clang-cc/clang-cc.cpp10
5 files changed, 30 insertions, 29 deletions
diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h
index ed280508778..d7e7d991f37 100644
--- a/clang/include/clang/Frontend/CompilerInstance.h
+++ b/clang/include/clang/Frontend/CompilerInstance.h
@@ -21,6 +21,7 @@ namespace llvm {
class LLVMContext;
class raw_ostream;
class raw_fd_ostream;
+class Timer;
}
namespace clang {
@@ -89,6 +90,9 @@ class CompilerInstance {
/// The code completion consumer.
llvm::OwningPtr<CodeCompleteConsumer> CompletionConsumer;
+ /// The frontend timer
+ llvm::OwningPtr<llvm::Timer> FrontendTimer;
+
/// The list of active output files.
std::list< std::pair<std::string, llvm::raw_ostream*> > OutputFiles;
@@ -367,6 +371,17 @@ public:
void setCodeCompletionConsumer(CodeCompleteConsumer *Value);
/// }
+ /// @name Frontend timer
+ /// {
+
+ bool hasFrontendTimer() const { return FrontendTimer != 0; }
+
+ llvm::Timer &getFrontendTimer() const {
+ assert(FrontendTimer && "Compiler instance has no frontend timer!");
+ return *FrontendTimer;
+ }
+
+ /// }
/// @name Output Files
/// {
@@ -462,6 +477,9 @@ public:
bool UseDebugPrinter, bool ShowMacros,
llvm::raw_ostream &OS);
+ /// Create the frontend timer and replace any existing one with it.
+ void createFrontendTimer();
+
/// Create the default output file (from the invocation's options) and add it
/// to the list of tracked output files.
llvm::raw_fd_ostream *
diff --git a/clang/include/clang/Frontend/FrontendAction.h b/clang/include/clang/Frontend/FrontendAction.h
index 469ea535f6a..3042767af87 100644
--- a/clang/include/clang/Frontend/FrontendAction.h
+++ b/clang/include/clang/Frontend/FrontendAction.h
@@ -14,10 +14,6 @@
#include "llvm/ADT/OwningPtr.h"
#include <string>
-namespace llvm {
-class Timer;
-}
-
namespace clang {
class ASTUnit;
class ASTConsumer;
@@ -29,7 +25,6 @@ class FrontendAction {
std::string CurrentFile;
llvm::OwningPtr<ASTUnit> CurrentASTUnit;
CompilerInstance *Instance;
- llvm::Timer *CurrentTimer;
protected:
/// @name Implementation Action Interface
@@ -112,18 +107,6 @@ public:
void setCurrentFile(llvm::StringRef Value, ASTUnit *AST = 0);
/// @}
- /// @name Timing Utilities
- /// @{
-
- llvm::Timer *getCurrentTimer() const {
- return CurrentTimer;
- }
-
- void setCurrentTimer(llvm::Timer *Value) {
- CurrentTimer = Value;
- }
-
- /// @}
/// @name Supported Modes
/// @{
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index 872b7713f32..1cb5993faef 100644
--- a/clang/lib/Frontend/CompilerInstance.cpp
+++ b/clang/lib/Frontend/CompilerInstance.cpp
@@ -27,6 +27,7 @@
#include "llvm/LLVMContext.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/Timer.h"
#include "llvm/System/Path.h"
using namespace clang;
@@ -257,6 +258,10 @@ void CompilerInstance::createCodeCompletionConsumer() {
llvm::outs()));
}
+void CompilerInstance::createFrontendTimer() {
+ FrontendTimer.reset(new llvm::Timer("Clang front-end timer"));
+}
+
CodeCompleteConsumer *
CompilerInstance::createCodeCompletionConsumer(Preprocessor &PP,
const std::string &Filename,
diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp
index ff63a0dab5f..91c946c9cf2 100644
--- a/clang/lib/Frontend/FrontendAction.cpp
+++ b/clang/lib/Frontend/FrontendAction.cpp
@@ -21,7 +21,7 @@
#include "llvm/Support/raw_ostream.h"
using namespace clang;
-FrontendAction::FrontendAction() : Instance(0), CurrentTimer(0) {}
+FrontendAction::FrontendAction() : Instance(0) {}
FrontendAction::~FrontendAction() {}
@@ -144,8 +144,11 @@ void FrontendAction::Execute() {
return;
}
- llvm::TimeRegion Timer(CurrentTimer);
- ExecuteAction();
+ if (CI.hasFrontendTimer()) {
+ llvm::TimeRegion Timer(CI.getFrontendTimer());
+ ExecuteAction();
+ }
+ else ExecuteAction();
}
void FrontendAction::EndSourceFile() {
diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp
index 3dfe51190db..a5996c6fc50 100644
--- a/clang/tools/clang-cc/clang-cc.cpp
+++ b/clang/tools/clang-cc/clang-cc.cpp
@@ -74,11 +74,6 @@ static void LLVMErrorHandler(void *UserData, const std::string &Message) {
exit(1);
}
-/// ClangFrontendTimer - The front-end activities should charge time to it with
-/// TimeRegion. The -ftime-report option controls whether this will do
-/// anything.
-llvm::Timer *ClangFrontendTimer = 0;
-
static FrontendAction *CreateFrontendAction(CompilerInstance &CI) {
using namespace clang::frontend;
@@ -244,7 +239,7 @@ int main(int argc, char **argv) {
<< " hosted on " << llvm::sys::getHostTriple() << "\n";
if (Clang.getFrontendOpts().ShowTimers)
- ClangFrontendTimer = new llvm::Timer("Clang front-end time");
+ Clang.createFrontendTimer();
for (unsigned i = 0, e = Clang.getFrontendOpts().Inputs.size(); i != e; ++i) {
const std::string &InFile = Clang.getFrontendOpts().Inputs[i].second;
@@ -272,7 +267,6 @@ int main(int argc, char **argv) {
if (!Act)
break;
- Act->setCurrentTimer(ClangFrontendTimer);
if (Act->BeginSourceFile(Clang, InFile, IsAST)) {
Act->Execute();
Act->EndSourceFile();
@@ -289,8 +283,6 @@ int main(int argc, char **argv) {
fprintf(stderr, "\n");
}
- delete ClangFrontendTimer;
-
// Return the appropriate status when verifying diagnostics.
//
// FIXME: If we could make getNumErrors() do the right thing, we wouldn't need
OpenPOWER on IntegriCloud