when running in -E mode on multiple files, there is no reason to accumulate

fileid's and macroid's across files.  Clearing between files keeps the tables
smaller and slightly speeds up compilation.

llvm-svn: 40383
This commit is contained in:
Chris Lattner 2007-07-22 06:05:44 +00:00
parent e34b2c298a
commit 6b4db176ea
2 changed files with 20 additions and 0 deletions

View File

@ -770,6 +770,7 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
TextDiagnostics &OurDiagnosticClient,
HeaderSearch &HeaderInfo,
const LangOptions &LangInfo) {
bool ClearSourceMgr = false;
switch (ProgAction) {
default:
fprintf(stderr, "Unexpected program action!\n");
@ -783,6 +784,7 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
PP.DumpToken(Tok, true);
fprintf(stderr, "\n");
} while (Tok.getKind() != tok::eof);
ClearSourceMgr = true;
break;
}
case RunPreprocessorOnly: { // Just lex as fast as we can, no output.
@ -792,19 +794,23 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
do {
PP.Lex(Tok);
} while (Tok.getKind() != tok::eof);
ClearSourceMgr = true;
break;
}
case PrintPreprocessedInput: // -E mode.
DoPrintPreprocessedInput(MainFileID, PP, LangInfo);
ClearSourceMgr = true;
break;
case ParseNoop: // -parse-noop
ParseFile(PP, new MinimalAction(), MainFileID);
ClearSourceMgr = true;
break;
case ParsePrintCallbacks:
ParseFile(PP, CreatePrintParserActionsAction(), MainFileID);
ClearSourceMgr = true;
break;
case ParseSyntaxOnly: // -fsyntax-only
case ParseAST:
@ -826,8 +832,17 @@ static void ProcessInputFile(Preprocessor &PP, unsigned MainFileID,
PP.PrintStats();
PP.getIdentifierTable().PrintStats();
HeaderInfo.PrintStats();
if (ClearSourceMgr)
SourceMgr.PrintStats();
fprintf(stderr, "\n");
}
// For a multi-file compilation, some things are ok with nuking the source
// manager tables, other require stable fileid/macroid's across multiple
// files.
if (ClearSourceMgr) {
SourceMgr.clearIDTables();
}
}
static llvm::cl::list<std::string>

View File

@ -158,6 +158,11 @@ public:
SourceManager() {}
~SourceManager();
void clearIDTables() {
FileIDs.clear();
MacroIDs.clear();
}
/// createFileID - Create a new FileID that represents the specified file
/// being #included from the specified IncludePosition. This returns 0 on
/// error and translates NULL into standard input.