diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp index 46015df8cb9..251da342906 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 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; } diff --git a/tools/llvmc/Makefile b/tools/llvmc/Makefile index d762f984412..4c66afc59fd 100644 --- a/tools/llvmc/Makefile +++ b/tools/llvmc/Makefile @@ -8,7 +8,7 @@ ##===----------------------------------------------------------------------===## LEVEL = ../.. TOOLNAME = llvmc -LINK_COMPONENTS = support system core bcreader +LINK_COMPONENTS = support system core bcreader bitreader CONFIG_FILES = c cpp ll st EXTRA_DIST = c cpp ll ConfigLexer.cpp.cvs ConfigLexer.l.cvs REQUIRES_EH := 1