Add support for writing LLVM IR to a specified BitstreamWriter.

Patch by Lukasz Janyst!

llvm-svn: 61251
This commit is contained in:
Chris Lattner 2008-12-19 18:37:59 +00:00
parent b289d4163b
commit af4c0bf44f
3 changed files with 25 additions and 12 deletions
llvm
include/llvm/Bitcode
lib/Bitcode/Writer

View File

@ -76,6 +76,9 @@ public:
BlockInfoRecords.pop_back();
}
}
std::vector<unsigned char> &getBuffer() { return Out; }
//===--------------------------------------------------------------------===//
// Basic Primitives for emitting bits to the stream.
//===--------------------------------------------------------------------===//

View File

@ -22,6 +22,7 @@ namespace llvm {
class ModuleProvider;
class MemoryBuffer;
class ModulePass;
class BitstreamWriter;
class raw_ostream;
/// getBitcodeModuleProvider - Read the header of the specified bitcode buffer
@ -45,6 +46,10 @@ namespace llvm {
/// raw output stream.
void WriteBitcodeToFile(const Module *M, raw_ostream &Out);
/// WriteBitcodeToStream - Write the specified module to the specified
/// raw output stream.
void WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream);
/// CreateBitcodeWriterPass - Create and return a pass that writes the module
/// to the specified ostream.
ModulePass *CreateBitcodeWriterPass(std::ostream &Str);

View File

@ -1355,7 +1355,23 @@ void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
BitstreamWriter Stream(Buffer);
Buffer.reserve(256*1024);
WriteBitcodeToStream( M, Stream );
// If writing to stdout, set binary mode.
if (&llvm::outs() == &Out)
sys::Program::ChangeStdoutToBinary();
// Write the generated bitstream to "Out".
Out.write((char*)&Buffer.front(), Buffer.size());
// Make sure it hits disk now.
Out.flush();
}
/// WriteBitcodeToStream - Write the specified module to the specified output
/// stream.
void llvm::WriteBitcodeToStream(const Module *M, BitstreamWriter &Stream) {
// If this is darwin, emit a file header and trailer if needed.
bool isDarwin = M->getTargetTriple().find("-darwin") != std::string::npos;
if (isDarwin)
@ -1373,16 +1389,5 @@ void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
WriteModule(M, Stream);
if (isDarwin)
EmitDarwinBCTrailer(Stream, Buffer.size());
// If writing to stdout, set binary mode.
if (&llvm::outs() == &Out)
sys::Program::ChangeStdoutToBinary();
// Write the generated bitstream to "Out".
Out.write((char*)&Buffer.front(), Buffer.size());
// Make sure it hits disk now.
Out.flush();
EmitDarwinBCTrailer(Stream, Stream.getBuffer().size());
}