//===- Bitcode/Writer/DXILBitcodeWriter.cpp - DXIL Bitcode Writer ---------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Bitcode writer implementation. // //===----------------------------------------------------------------------===// #include "llvm/ADT/StringRef.h" #include "llvm/IR/ModuleSummaryIndex.h" #include "llvm/MC/StringTableBuilder.h" #include "llvm/Support/Allocator.h" #include "llvm/Support/MemoryBufferRef.h" #include #include #include #include namespace llvm { class BitstreamWriter; class Module; class raw_ostream; namespace dxil { class BitcodeWriter { SmallVectorImpl &Buffer; std::unique_ptr Stream; StringTableBuilder StrtabBuilder{StringTableBuilder::RAW}; // Owns any strings created by the irsymtab writer until we create the // string table. BumpPtrAllocator Alloc; void writeBlob(unsigned Block, unsigned Record, StringRef Blob); std::vector Mods; public: /// Create a BitcodeWriter that writes to Buffer. BitcodeWriter(SmallVectorImpl &Buffer, raw_fd_stream *FS = nullptr); ~BitcodeWriter(); /// Write the specified module to the buffer specified at construction time. void writeModule(const Module &M); }; /// Write the specified module to the specified raw output stream. /// /// For streams where it matters, the given stream should be in "binary" /// mode. void WriteDXILToFile(const Module &M, raw_ostream &Out); } // namespace dxil } // namespace llvm