]> granicus.if.org Git - clang/commitdiff
Move the Preprocessor::Diag methods inline. This has the interesting
authorChris Lattner <sabre@nondot.org>
Sat, 22 Nov 2008 07:03:46 +0000 (07:03 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 22 Nov 2008 07:03:46 +0000 (07:03 +0000)
(and carefully calculated) effect of allowing the compiler to reason
about the aliasing properties of DiagnosticBuilder object better,
allowing the whole thing to be promoted to registers instead of
resulting in a ton of stack traffic.

While I'm not very concerned about the performance of the Diag() method
invocations, I *am* more concerned about their code size and impact on the
non-diagnostic code.  This patch shrinks the clang executable (in
release-asserts mode with gcc-4.2) from 14523980 to 14519816 bytes.  This
isn't much, but it shrinks the lexer from 38192 to 37776, PPDirectives.o
from 31116 to 28868 bytes, etc.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59862 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Lex/Preprocessor.h
lib/Lex/Preprocessor.cpp

index ba6fd8bd7a764eb16dd651dba86fd2db5f80704a..bb7e8c7cfb8186d29b1980e7117fbe33a338674c 100644 (file)
@@ -18,6 +18,7 @@
 #include "clang/Lex/PTHLexer.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/TokenLexer.h"
+#include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/DenseMap.h"
@@ -404,8 +405,14 @@ public:
   /// Diag - Forwarding function for diagnostics.  This emits a diagnostic at
   /// the specified Token's location, translating the token's start
   /// position in the current buffer into a SourcePosition object for rendering.
-  DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID);  
-  DiagnosticBuilder Diag(const Token &Tok, unsigned DiagID);
+  DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
+    return Diags.Report(FullSourceLoc(Loc, getSourceManager()), DiagID);
+  }
+  
+  DiagnosticBuilder Diag(const Token &Tok, unsigned DiagID) {
+    return Diags.Report(FullSourceLoc(Tok.getLocation(), getSourceManager()),
+                        DiagID);
+  }
   
   /// getSpelling() - Return the 'spelling' of the Tok token.  The spelling of a
   /// token is the characters used to represent the token in the source file
index 7a5174c82ffa2a29abddb226e53a6a1a28f7796b..e9894fea4d513665f9b269a52c689de60e40ad96 100644 (file)
@@ -114,18 +114,6 @@ Preprocessor::~Preprocessor() {
   delete Callbacks;
 }
 
-/// Diag - Forwarding function for diagnostics.  This emits a diagnostic at
-/// the specified Token's location, translating the token's start
-/// position in the current buffer into a SourcePosition object for rendering.
-DiagnosticBuilder Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
-  return Diags.Report(FullSourceLoc(Loc, getSourceManager()), DiagID);
-}
-
-DiagnosticBuilder Preprocessor::Diag(const Token &Tok, unsigned DiagID) {
-  return Diags.Report(FullSourceLoc(Tok.getLocation(), getSourceManager()),
-                      DiagID);
-}
-
 void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
   llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
              << getSpelling(Tok) << "'";