[PATCH] D11098: Re-use a single SmallString instance to reduce the stack frame size
Daniel Jasper
djasper at google.com
Fri Jul 10 00:38:46 PDT 2015
djasper created this revision.
djasper added a reviewer: klimek.
djasper added a subscriber: cfe-commits.
In certain builds (msan), this can otherwise exceed the stack frame limit set for certain environments.
http://reviews.llvm.org/D11098
Files:
lib/Driver/Tools.cpp
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -3547,14 +3547,15 @@
<< ProfileGenerateArg->getSpelling()
<< ProfileUseArg->getSpelling();
+ SmallString<128> Path;
if (ProfileGenerateArg &&
ProfileGenerateArg->getOption().matches(
options::OPT_fprofile_instr_generate_EQ))
ProfileGenerateArg->render(Args, CmdArgs);
else if (ProfileGenerateArg &&
ProfileGenerateArg->getOption().matches(
options::OPT_fprofile_generate_EQ)) {
- SmallString<128> Path(ProfileGenerateArg->getValue());
+ Path = ProfileGenerateArg->getValue();
llvm::sys::path::append(Path, "default.profraw");
CmdArgs.push_back(
Args.MakeArgString(Twine("-fprofile-instr-generate=") + Path));
@@ -3568,8 +3569,7 @@
(ProfileUseArg->getOption().matches(options::OPT_fprofile_use_EQ) ||
ProfileUseArg->getOption().matches(
options::OPT_fprofile_instr_use))) {
- SmallString<128> Path(
- ProfileUseArg->getNumValues() == 0 ? "" : ProfileUseArg->getValue());
+ Path = ProfileUseArg->getNumValues() == 0 ? "" : ProfileUseArg->getValue();
if (Path.empty() || llvm::sys::fs::is_directory(Path))
llvm::sys::path::append(Path, "default.profdata");
CmdArgs.push_back(Args.MakeArgString(Twine("-fprofile-instr-use=") + Path));
@@ -3602,10 +3602,9 @@
CoverageFilename = llvm::sys::path::filename(Output.getBaseInput());
}
if (llvm::sys::path::is_relative(CoverageFilename)) {
- SmallString<128> Pwd;
- if (!llvm::sys::fs::current_path(Pwd)) {
- llvm::sys::path::append(Pwd, CoverageFilename);
- CoverageFilename.swap(Pwd);
+ if (!llvm::sys::fs::current_path(Path)) {
+ llvm::sys::path::append(Path, CoverageFilename);
+ CoverageFilename.swap(Path);
}
}
CmdArgs.push_back(Args.MakeArgString(CoverageFilename));
@@ -4196,27 +4195,27 @@
// -fmodule-cache-path specifies where our implicitly-built module files
// should be written.
- SmallString<128> ModuleCachePath;
+ Path = "";
if (Arg *A = Args.getLastArg(options::OPT_fmodules_cache_path))
- ModuleCachePath = A->getValue();
+ Path = A->getValue();
if (HaveModules) {
if (C.isForDiagnostics()) {
// When generating crash reports, we want to emit the modules along with
// the reproduction sources, so we ignore any provided module path.
- ModuleCachePath = Output.getFilename();
- llvm::sys::path::replace_extension(ModuleCachePath, ".cache");
- llvm::sys::path::append(ModuleCachePath, "modules");
- } else if (ModuleCachePath.empty()) {
+ Path = Output.getFilename();
+ llvm::sys::path::replace_extension(Path, ".cache");
+ llvm::sys::path::append(Path, "modules");
+ } else if (Path.empty()) {
// No module path was provided: use the default.
llvm::sys::path::system_temp_directory(/*erasedOnReboot=*/false,
- ModuleCachePath);
- llvm::sys::path::append(ModuleCachePath, "org.llvm.clang.");
- appendUserToPath(ModuleCachePath);
- llvm::sys::path::append(ModuleCachePath, "ModuleCache");
+ Path);
+ llvm::sys::path::append(Path, "org.llvm.clang.");
+ appendUserToPath(Path);
+ llvm::sys::path::append(Path, "ModuleCache");
}
const char Arg[] = "-fmodules-cache-path=";
- ModuleCachePath.insert(ModuleCachePath.begin(), Arg, Arg + strlen(Arg));
- CmdArgs.push_back(Args.MakeArgString(ModuleCachePath));
+ Path.insert(Path.begin(), Arg, Arg + strlen(Arg));
+ CmdArgs.push_back(Args.MakeArgString(Path));
}
// When building modules and generating crashdumps, we need to dump a module
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11098.29431.patch
Type: text/x-patch
Size: 3904 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150710/5e585ded/attachment.bin>
More information about the cfe-commits
mailing list