aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2006-10-26 20:46:22 +0000
committerDevang Patel <dpatel@apple.com>2006-10-26 20:46:22 +0000
commit38187d6a56326d0d6339f09c1ef21d52174d95a8 (patch)
treec57065984d709baaa3bc52b5785be3fd4d770b9b
parent811b0cbd6e9d9fde79b9829739f004b49e89b4b9 (diff)
Save temp. bc files when saveTemps flag is true. Use final output file
name supplied by linker to construct temp bc file names. Remove tabs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31205 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/LinkTimeOptimizer.h11
-rw-r--r--tools/lto/lto.cpp35
2 files changed, 31 insertions, 15 deletions
diff --git a/include/llvm/LinkTimeOptimizer.h b/include/llvm/LinkTimeOptimizer.h
index c126bb2362..50c1613eb0 100644
--- a/include/llvm/LinkTimeOptimizer.h
+++ b/include/llvm/LinkTimeOptimizer.h
@@ -91,8 +91,9 @@ namespace llvm {
NameToSymbolMap &,
std::set<std::string> &) = 0;
virtual enum LTOStatus optimizeModules(const std::string &,
- std::vector<const char*> &,
- std::string &) = 0;
+ std::vector<const char*> &,
+ std::string &, bool,
+ const char *) = 0;
virtual void getTargetTriple(const std::string &, std::string &) = 0;
virtual void removeModule (const std::string &InputFilename) = 0;
virtual ~LinkTimeOptimizer() = 0;
@@ -113,8 +114,10 @@ namespace llvm {
std::set<std::string> &references);
enum LTOStatus optimizeModules(const std::string &OutputFilename,
std::vector<const char*> &exportList,
- std::string &targetTriple);
- void getTargetTriple(const std::string &InputFilename, std::string &targetTriple);
+ std::string &targetTriple, bool saveTemps,
+ const char *);
+ void getTargetTriple(const std::string &InputFilename,
+ std::string &targetTriple);
void removeModule (const std::string &InputFilename);
// Constructors and destructors
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index b08b1a62dc..6a7677244e 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -129,7 +129,7 @@ LTO::getModule(const std::string &InputFilename)
/// set corresponding target triplet string.
void
LTO::getTargetTriple(const std::string &InputFilename,
- std::string &targetTriple)
+ std::string &targetTriple)
{
Module *m = getModule(InputFilename);
if (m)
@@ -142,8 +142,8 @@ LTO::getTargetTriple(const std::string &InputFilename,
/// Return LTO_READ_SUCCESS if there is no error.
enum LTOStatus
LTO::readLLVMObjectFile(const std::string &InputFilename,
- NameToSymbolMap &symbols,
- std::set<std::string> &references)
+ NameToSymbolMap &symbols,
+ std::set<std::string> &references)
{
Module *m = getModule(InputFilename);
if (!m)
@@ -316,7 +316,7 @@ LTO::optimize(Module *M, std::ostream &Out,
CodeGenPasses->add(new TargetData(*Target->getTargetData()));
Target->addPassesToEmitFile(*CodeGenPasses, Out, TargetMachine::AssemblyFile,
- true);
+ true);
// Run our queue of passes all at once now, efficiently.
Passes.run(*M);
@@ -337,8 +337,10 @@ LTO::optimize(Module *M, std::ostream &Out,
/// Return appropriate LTOStatus.
enum LTOStatus
LTO::optimizeModules(const std::string &OutputFilename,
- std::vector<const char *> &exportList,
- std::string &targetTriple)
+ std::vector<const char *> &exportList,
+ std::string &targetTriple,
+ bool saveTemps,
+ const char *FinalOutputFilename)
{
if (modules.empty())
return LTO_NO_WORK;
@@ -352,11 +354,15 @@ LTO::optimizeModules(const std::string &OutputFilename,
if (theLinker.LinkModules(bigOne, modules[i], errMsg))
return LTO_MODULE_MERGE_FAILURE;
-#if 0
- // Enable this when -save-temps is used
- std::ofstream Out("big.bc", io_mode);
- WriteBytecodeToFile(bigOne, Out, true);
-#endif
+ sys::Path FinalOutputPath(FinalOutputFilename);
+ FinalOutputPath.eraseSuffix();
+
+ if (saveTemps) {
+ std::string tempFileName(FinalOutputPath.c_str());
+ tempFileName += "0.bc";
+ std::ofstream Out(tempFileName.c_str(), io_mode);
+ WriteBytecodeToFile(bigOne, Out, true);
+ }
// Strip leading underscore because it was added to match names
// seen by linker.
@@ -404,6 +410,13 @@ LTO::optimizeModules(const std::string &OutputFilename,
return status;
}
+ if (saveTemps) {
+ std::string tempFileName(FinalOutputPath.c_str());
+ tempFileName += "1.bc";
+ std::ofstream Out(tempFileName.c_str(), io_mode);
+ WriteBytecodeToFile(bigOne, Out, true);
+ }
+
targetTriple = bigOne->getTargetTriple();
// Run GCC to assemble and link the program into native code.