summaryrefslogtreecommitdiff
path: root/tools/lto
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-05-06 04:49:55 +0000
committerChris Lattner <sabre@nondot.org>2007-05-06 04:49:55 +0000
commit68d4922adfde16a5477c84f25f4e84aa4129943e (patch)
tree4d3b2b155c96e82a0c0cd0368ae309505f2cd9b4 /tools/lto
parent0f4ed87c9c894fa55276d4f309923a4ac219711e (diff)
downloadllvm-68d4922adfde16a5477c84f25f4e84aa4129943e.tar.gz
llvm-68d4922adfde16a5477c84f25f4e84aa4129943e.tar.bz2
llvm-68d4922adfde16a5477c84f25f4e84aa4129943e.tar.xz
bitcodify
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36838 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/lto')
-rw-r--r--tools/lto/Makefile2
-rw-r--r--tools/lto/lto.cpp29
2 files changed, 24 insertions, 7 deletions
diff --git a/tools/lto/Makefile b/tools/lto/Makefile
index f728cbefec..6cb1a7b5aa 100644
--- a/tools/lto/Makefile
+++ b/tools/lto/Makefile
@@ -24,7 +24,7 @@ else
BUILD_ARCHIVE = 1
endif
-LINK_COMPONENTS := $(TARGETS_TO_BUILD) ipo scalaropts linker bcreader bcwriter
+LINK_COMPONENTS := $(TARGETS_TO_BUILD) ipo scalaropts linker bcreader bcwriter bitreader bitwriter
include $(LEVEL)/Makefile.common
diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp
index 885edbcbfa..f7ea310578 100644
--- a/tools/lto/lto.cpp
+++ b/tools/lto/lto.cpp
@@ -17,12 +17,14 @@
#include "llvm/Linker.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
+#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Bytecode/Reader.h"
#include "llvm/Bytecode/Writer.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileUtilities.h"
#include "llvm/Support/SystemUtils.h"
#include "llvm/Support/Mangler.h"
+#include "llvm/Support/MemoryBuffer.h"
#include "llvm/System/Program.h"
#include "llvm/System/Signals.h"
#include "llvm/Analysis/Passes.h"
@@ -51,7 +53,7 @@ llvm::LinkTimeOptimizer *createLLVMOptimizer()
return l;
}
-
+static bool Bitcode = false;
/// If symbol is not used then make it internal and let optimizer takes
/// care of it.
@@ -119,7 +121,14 @@ LTO::getModule(const std::string &InputFilename)
NameToModuleMap::iterator pos = allModules.find(InputFilename.c_str());
if (pos != allModules.end())
m = allModules[InputFilename.c_str()];
- else {
+ else if (Bitcode) {
+ if (MemoryBuffer *Buffer
+ = MemoryBuffer::getFile(&InputFilename[0], InputFilename.size())) {
+ m = ParseBitcodeFile(Buffer);
+ delete Buffer;
+ }
+ allModules[InputFilename.c_str()] = m;
+ } else {
m = ParseBytecodeFile(InputFilename);
allModules[InputFilename.c_str()] = m;
}
@@ -376,8 +385,12 @@ LTO::optimizeModules(const std::string &OutputFilename,
std::string tempFileName(FinalOutputPath.c_str());
tempFileName += "0.bc";
std::ofstream Out(tempFileName.c_str(), io_mode);
- OStream L(Out);
- WriteBytecodeToFile(bigOne, L);
+ if (Bitcode) {
+ WriteBitcodeToFile(bigOne, Out);
+ } else {
+ OStream L(Out);
+ WriteBytecodeToFile(bigOne, L);
+ }
}
// Strip leading underscore because it was added to match names
@@ -430,8 +443,12 @@ LTO::optimizeModules(const std::string &OutputFilename,
std::string tempFileName(FinalOutputPath.c_str());
tempFileName += "1.bc";
std::ofstream Out(tempFileName.c_str(), io_mode);
- OStream L(Out);
- WriteBytecodeToFile(bigOne, L);
+ if (Bitcode) {
+ WriteBitcodeToFile(bigOne, Out);
+ } else {
+ OStream L(Out);
+ WriteBytecodeToFile(bigOne, L);
+ }
}
targetTriple = bigOne->getTargetTriple();