r241894 - Re-use a single SmallString instance to reduce the stack frame size
Daniel Jasper
djasper at google.com
Fri Jul 10 01:25:54 PDT 2015
Author: djasper
Date: Fri Jul 10 03:25:54 2015
New Revision: 241894
URL: http://llvm.org/viewvc/llvm-project?rev=241894&view=rev
Log:
Re-use a single SmallString instance to reduce the stack frame size
In certain builds (msan), this can otherwise exceed the stack frame
limit set for certain environments.
Modified:
cfe/trunk/lib/Driver/Tools.cpp
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=241894&r1=241893&r2=241894&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Fri Jul 10 03:25:54 2015
@@ -3547,6 +3547,7 @@ void Clang::ConstructJob(Compilation &C,
<< ProfileGenerateArg->getSpelling()
<< ProfileUseArg->getSpelling();
+ SmallString<128> Path;
if (ProfileGenerateArg &&
ProfileGenerateArg->getOption().matches(
options::OPT_fprofile_instr_generate_EQ))
@@ -3554,7 +3555,7 @@ void Clang::ConstructJob(Compilation &C,
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 @@ void Clang::ConstructJob(Compilation &C,
(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 @@ void Clang::ConstructJob(Compilation &C,
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 @@ void Clang::ConstructJob(Compilation &C,
// -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
More information about the cfe-commits
mailing list