forked from OSchip/llvm-project
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:
parent
e34b2c298a
commit
6b4db176ea
|
@ -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>
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue