add bitcode support, optimize reading to not read all function bodies just
to get deplibs


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36851 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index 46015df..251da34 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/tools/llvmc/CompilerDriver.cpp
@@ -15,7 +15,9 @@
 #include "CompilerDriver.h"
 #include "ConfigLexer.h"
 #include "llvm/Module.h"
+#include "llvm/Bitcode/ReaderWriter.h"
 #include "llvm/Bytecode/Reader.h"
+#include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/Timer.h"
 #include "llvm/System/Signals.h"
 #include "llvm/ADT/SetVector.h"
@@ -24,6 +26,9 @@
 #include <iostream>
 using namespace llvm;
 
+
+static bool Bitcode = false;
+
 namespace {
 
 void WriteAction(CompilerDriver::Action* action ) {
@@ -66,14 +71,21 @@
                                           Module::LibraryListType& deplibs,
                                           BCDecompressor_t *BCDC,
                                           std::string* ErrMsg) {
-  ModuleProvider* MP = getBytecodeModuleProvider(fname, BCDC, ErrMsg);
+  ModuleProvider *MP = 0;
+  if (Bitcode) {
+    if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(&fname[0],
+                                                            fname.size())) {
+      MP = getBitcodeModuleProvider(Buffer);
+      if (MP == 0) delete Buffer;
+    }
+  } else {
+    MP = getBytecodeModuleProvider(fname, BCDC, ErrMsg);
+  }
   if (!MP) {
     deplibs.clear();
     return true;
   }
-  Module* M = MP->releaseModule(ErrMsg);
-  deplibs = M->getLibraries();
-  delete M;
+  deplibs = MP->getModule()->getLibraries();
   delete MP;
   return false;
 }