bitcodify
authorChris Lattner <sabre@nondot.org>
Sun, 6 May 2007 04:49:55 +0000 (04:49 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 6 May 2007 04:49:55 +0000 (04:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36838 91177308-0d34-0410-b5e6-96231b3b80d8

tools/lto/Makefile
tools/lto/lto.cpp

index f728cbefec090358b0443a95b93f8b3787ff07d8..6cb1a7b5aaa160e8a2af4999f240111536cf26ae 100644 (file)
@@ -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
 
index 885edbcbfa374dd18789801f69fa2319a4f9404f..f7ea310578dd6e2e3c1680c05d3cbced601c39d2 100644 (file)
 #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();