aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Interpreter/Interpreter.cpp
diff options
context:
space:
mode:
authorArthur Eubanks <aeubanks@google.com>2021-10-06 13:57:29 -0700
committerArthur Eubanks <aeubanks@google.com>2021-10-21 09:25:53 -0700
commit19b07ec00062daffcb2fb132f4ac0f2484ff44fa (patch)
tree30f3ed79b51c15494ecb0fdb436ecda0097be18e /clang/lib/Interpreter/Interpreter.cpp
parent92673fad66f449f63acc76dfbb5e0bf05978663b (diff)
downloadllvm-19b07ec00062daffcb2fb132f4ac0f2484ff44fa.zip
llvm-19b07ec00062daffcb2fb132f4ac0f2484ff44fa.tar.gz
llvm-19b07ec00062daffcb2fb132f4ac0f2484ff44fa.tar.bz2
Reland [clang] Pass -clear-ast-before-backend in Clang::ConstructJob()
This clears the memory used for the Clang AST before we run LLVM passes. https://llvm-compile-time-tracker.com/compare.php?from=d0a5f61c4f6fccec87fd5207e3fcd9502dd59854&to=b7437fee79e04464dd968e1a29185495f3590481&stat=max-rss shows significant memory savings with no slowdown (in fact -O0 slightly speeds up). For more background, see https://lists.llvm.org/pipermail/cfe-dev/2021-September/068930.html. Turn this off for the interpreter since it does codegen multiple times. Relanding with fix for -print-stats: D111973 Relanding with fix for plugins: D112190 If you'd like to use this even with plugins, consider using the features introduced in D112096. This can be turned off with -Xclang -no-clear-ast-before-backend. Differential Revision: https://reviews.llvm.org/D111270
Diffstat (limited to 'clang/lib/Interpreter/Interpreter.cpp')
-rw-r--r--clang/lib/Interpreter/Interpreter.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Interpreter/Interpreter.cpp b/clang/lib/Interpreter/Interpreter.cpp
index 02b3025..d14940d 100644
--- a/clang/lib/Interpreter/Interpreter.cpp
+++ b/clang/lib/Interpreter/Interpreter.cpp
@@ -113,6 +113,10 @@ CreateCI(const llvm::opt::ArgStringList &Argv) {
Clang->getTarget().adjust(Clang->getDiagnostics(), Clang->getLangOpts());
+ // Don't clear the AST before backend codegen since we do codegen multiple
+ // times, reusing the same AST.
+ Clang->getCodeGenOpts().ClearASTBeforeBackend = false;
+
return std::move(Clang);
}