diff options
Diffstat (limited to 'tools/llvmc/CompilerDriver.cpp')
-rw-r--r-- | tools/llvmc/CompilerDriver.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp index 46015df8cb..251da34290 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 @@ static bool GetBytecodeDependentLibraries(const std::string &fname, 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; } |