1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

Pass a reference to a module to the bitcode writer.

This simplifies most callers as they are already using references or
std::unique_ptr.

llvm-svn: 325155
This commit is contained in:
Rafael Espindola 2018-02-14 19:11:32 +00:00
parent 2f7995c340
commit 7713c013a2
21 changed files with 53 additions and 55 deletions

View File

@ -86,7 +86,7 @@ class raw_ostream;
/// Can be used to produce the same module hash for a minimized bitcode /// Can be used to produce the same module hash for a minimized bitcode
/// used just for the thin link as in the regular full bitcode that will /// used just for the thin link as in the regular full bitcode that will
/// be used in the backend. /// be used in the backend.
void writeModule(const Module *M, bool ShouldPreserveUseListOrder = false, void writeModule(const Module &M, bool ShouldPreserveUseListOrder = false,
const ModuleSummaryIndex *Index = nullptr, const ModuleSummaryIndex *Index = nullptr,
bool GenerateHash = false, ModuleHash *ModHash = nullptr); bool GenerateHash = false, ModuleHash *ModHash = nullptr);
@ -97,7 +97,7 @@ class raw_ostream;
/// ///
/// ModHash is for use in ThinLTO incremental build, generated while the /// ModHash is for use in ThinLTO incremental build, generated while the
/// IR bitcode file writing. /// IR bitcode file writing.
void writeThinLinkBitcode(const Module *M, const ModuleSummaryIndex &Index, void writeThinLinkBitcode(const Module &M, const ModuleSummaryIndex &Index,
const ModuleHash &ModHash); const ModuleHash &ModHash);
void writeIndex( void writeIndex(
@ -126,7 +126,7 @@ class raw_ostream;
/// Can be used to produce the same module hash for a minimized bitcode /// Can be used to produce the same module hash for a minimized bitcode
/// used just for the thin link as in the regular full bitcode that will /// used just for the thin link as in the regular full bitcode that will
/// be used in the backend. /// be used in the backend.
void WriteBitcodeToFile(const Module *M, raw_ostream &Out, void WriteBitcodeToFile(const Module &M, raw_ostream &Out,
bool ShouldPreserveUseListOrder = false, bool ShouldPreserveUseListOrder = false,
const ModuleSummaryIndex *Index = nullptr, const ModuleSummaryIndex *Index = nullptr,
bool GenerateHash = false, bool GenerateHash = false,
@ -139,7 +139,7 @@ class raw_ostream;
/// ///
/// ModHash is for use in ThinLTO incremental build, generated while the IR /// ModHash is for use in ThinLTO incremental build, generated while the IR
/// bitcode file writing. /// bitcode file writing.
void WriteThinLinkBitcodeToFile(const Module *M, raw_ostream &Out, void WriteThinLinkBitcodeToFile(const Module &M, raw_ostream &Out,
const ModuleSummaryIndex &Index, const ModuleSummaryIndex &Index,
const ModuleHash &ModHash); const ModuleHash &ModHash);

View File

@ -25,7 +25,7 @@ int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
if (EC) if (EC)
return -1; return -1;
WriteBitcodeToFile(unwrap(M), OS); WriteBitcodeToFile(*unwrap(M), OS);
return 0; return 0;
} }
@ -33,7 +33,7 @@ int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
int Unbuffered) { int Unbuffered) {
raw_fd_ostream OS(FD, ShouldClose, Unbuffered); raw_fd_ostream OS(FD, ShouldClose, Unbuffered);
WriteBitcodeToFile(unwrap(M), OS); WriteBitcodeToFile(*unwrap(M), OS);
return 0; return 0;
} }
@ -45,6 +45,6 @@ LLVMMemoryBufferRef LLVMWriteBitcodeToMemoryBuffer(LLVMModuleRef M) {
std::string Data; std::string Data;
raw_string_ostream OS(Data); raw_string_ostream OS(Data);
WriteBitcodeToFile(unwrap(M), OS); WriteBitcodeToFile(*unwrap(M), OS);
return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release()); return wrap(MemoryBuffer::getMemBufferCopy(OS.str()).release());
} }

View File

@ -170,12 +170,12 @@ protected:
public: public:
/// Constructs a ModuleBitcodeWriterBase object for the given Module, /// Constructs a ModuleBitcodeWriterBase object for the given Module,
/// writing to the provided \p Buffer. /// writing to the provided \p Buffer.
ModuleBitcodeWriterBase(const Module *M, StringTableBuilder &StrtabBuilder, ModuleBitcodeWriterBase(const Module &M, StringTableBuilder &StrtabBuilder,
BitstreamWriter &Stream, BitstreamWriter &Stream,
bool ShouldPreserveUseListOrder, bool ShouldPreserveUseListOrder,
const ModuleSummaryIndex *Index) const ModuleSummaryIndex *Index)
: BitcodeWriterBase(Stream, StrtabBuilder), M(*M), : BitcodeWriterBase(Stream, StrtabBuilder), M(M),
VE(*M, ShouldPreserveUseListOrder), Index(Index) { VE(M, ShouldPreserveUseListOrder), Index(Index) {
// Assign ValueIds to any callee values in the index that came from // Assign ValueIds to any callee values in the index that came from
// indirect call profiles and were recorded as a GUID not a Value* // indirect call profiles and were recorded as a GUID not a Value*
// (which would have been assigned an ID by the ValueEnumerator). // (which would have been assigned an ID by the ValueEnumerator).
@ -254,7 +254,7 @@ class ModuleBitcodeWriter : public ModuleBitcodeWriterBase {
public: public:
/// Constructs a ModuleBitcodeWriter object for the given Module, /// Constructs a ModuleBitcodeWriter object for the given Module,
/// writing to the provided \p Buffer. /// writing to the provided \p Buffer.
ModuleBitcodeWriter(const Module *M, SmallVectorImpl<char> &Buffer, ModuleBitcodeWriter(const Module &M, SmallVectorImpl<char> &Buffer,
StringTableBuilder &StrtabBuilder, StringTableBuilder &StrtabBuilder,
BitstreamWriter &Stream, bool ShouldPreserveUseListOrder, BitstreamWriter &Stream, bool ShouldPreserveUseListOrder,
const ModuleSummaryIndex *Index, bool GenerateHash, const ModuleSummaryIndex *Index, bool GenerateHash,
@ -4038,7 +4038,7 @@ void BitcodeWriter::copyStrtab(StringRef Strtab) {
WroteStrtab = true; WroteStrtab = true;
} }
void BitcodeWriter::writeModule(const Module *M, void BitcodeWriter::writeModule(const Module &M,
bool ShouldPreserveUseListOrder, bool ShouldPreserveUseListOrder,
const ModuleSummaryIndex *Index, const ModuleSummaryIndex *Index,
bool GenerateHash, ModuleHash *ModHash) { bool GenerateHash, ModuleHash *ModHash) {
@ -4048,8 +4048,8 @@ void BitcodeWriter::writeModule(const Module *M,
// Modules in case it needs to materialize metadata. But the bitcode writer // Modules in case it needs to materialize metadata. But the bitcode writer
// requires that the module is materialized, so we can cast to non-const here, // requires that the module is materialized, so we can cast to non-const here,
// after checking that it is in fact materialized. // after checking that it is in fact materialized.
assert(M->isMaterialized()); assert(M.isMaterialized());
Mods.push_back(const_cast<Module *>(M)); Mods.push_back(const_cast<Module *>(&M));
ModuleBitcodeWriter ModuleWriter(M, Buffer, StrtabBuilder, *Stream, ModuleBitcodeWriter ModuleWriter(M, Buffer, StrtabBuilder, *Stream,
ShouldPreserveUseListOrder, Index, ShouldPreserveUseListOrder, Index,
@ -4065,9 +4065,8 @@ void BitcodeWriter::writeIndex(
IndexWriter.write(); IndexWriter.write();
} }
/// WriteBitcodeToFile - Write the specified module to the specified output /// Write the specified module to the specified output stream.
/// stream. void llvm::WriteBitcodeToFile(const Module &M, raw_ostream &Out,
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out,
bool ShouldPreserveUseListOrder, bool ShouldPreserveUseListOrder,
const ModuleSummaryIndex *Index, const ModuleSummaryIndex *Index,
bool GenerateHash, ModuleHash *ModHash) { bool GenerateHash, ModuleHash *ModHash) {
@ -4076,7 +4075,7 @@ void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out,
// If this is darwin or another generic macho target, reserve space for the // If this is darwin or another generic macho target, reserve space for the
// header. // header.
Triple TT(M->getTargetTriple()); Triple TT(M.getTargetTriple());
if (TT.isOSDarwin() || TT.isOSBinFormatMachO()) if (TT.isOSDarwin() || TT.isOSBinFormatMachO())
Buffer.insert(Buffer.begin(), BWH_HeaderSize, 0); Buffer.insert(Buffer.begin(), BWH_HeaderSize, 0);
@ -4133,7 +4132,7 @@ class ThinLinkBitcodeWriter : public ModuleBitcodeWriterBase {
const ModuleHash *ModHash; const ModuleHash *ModHash;
public: public:
ThinLinkBitcodeWriter(const Module *M, StringTableBuilder &StrtabBuilder, ThinLinkBitcodeWriter(const Module &M, StringTableBuilder &StrtabBuilder,
BitstreamWriter &Stream, BitstreamWriter &Stream,
const ModuleSummaryIndex &Index, const ModuleSummaryIndex &Index,
const ModuleHash &ModHash) const ModuleHash &ModHash)
@ -4251,7 +4250,7 @@ void ThinLinkBitcodeWriter::write() {
Stream.ExitBlock(); Stream.ExitBlock();
} }
void BitcodeWriter::writeThinLinkBitcode(const Module *M, void BitcodeWriter::writeThinLinkBitcode(const Module &M,
const ModuleSummaryIndex &Index, const ModuleSummaryIndex &Index,
const ModuleHash &ModHash) { const ModuleHash &ModHash) {
assert(!WroteStrtab); assert(!WroteStrtab);
@ -4260,8 +4259,8 @@ void BitcodeWriter::writeThinLinkBitcode(const Module *M,
// Modules in case it needs to materialize metadata. But the bitcode writer // Modules in case it needs to materialize metadata. But the bitcode writer
// requires that the module is materialized, so we can cast to non-const here, // requires that the module is materialized, so we can cast to non-const here,
// after checking that it is in fact materialized. // after checking that it is in fact materialized.
assert(M->isMaterialized()); assert(M.isMaterialized());
Mods.push_back(const_cast<Module *>(M)); Mods.push_back(const_cast<Module *>(&M));
ThinLinkBitcodeWriter ThinLinkWriter(M, StrtabBuilder, *Stream, Index, ThinLinkBitcodeWriter ThinLinkWriter(M, StrtabBuilder, *Stream, Index,
ModHash); ModHash);
@ -4271,7 +4270,7 @@ void BitcodeWriter::writeThinLinkBitcode(const Module *M,
// Write the specified thin link bitcode file to the given raw output stream, // Write the specified thin link bitcode file to the given raw output stream,
// where it will be written in a new bitcode block. This is used when // where it will be written in a new bitcode block. This is used when
// writing the per-module index file for ThinLTO. // writing the per-module index file for ThinLTO.
void llvm::WriteThinLinkBitcodeToFile(const Module *M, raw_ostream &Out, void llvm::WriteThinLinkBitcodeToFile(const Module &M, raw_ostream &Out,
const ModuleSummaryIndex &Index, const ModuleSummaryIndex &Index,
const ModuleHash &ModHash) { const ModuleHash &ModHash) {
SmallVector<char, 0> Buffer; SmallVector<char, 0> Buffer;

View File

@ -23,7 +23,7 @@ PreservedAnalyses BitcodeWriterPass::run(Module &M, ModuleAnalysisManager &AM) {
const ModuleSummaryIndex *Index = const ModuleSummaryIndex *Index =
EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M)) EmitSummaryIndex ? &(AM.getResult<ModuleSummaryIndexAnalysis>(M))
: nullptr; : nullptr;
WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, Index, EmitModuleHash); WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, Index, EmitModuleHash);
return PreservedAnalyses::all(); return PreservedAnalyses::all();
} }
@ -55,7 +55,7 @@ namespace {
EmitSummaryIndex EmitSummaryIndex
? &(getAnalysis<ModuleSummaryIndexWrapperPass>().getIndex()) ? &(getAnalysis<ModuleSummaryIndexWrapperPass>().getIndex())
: nullptr; : nullptr;
WriteBitcodeToFile(&M, OS, ShouldPreserveUseListOrder, Index, WriteBitcodeToFile(M, OS, ShouldPreserveUseListOrder, Index,
EmitModuleHash); EmitModuleHash);
return false; return false;
} }

View File

@ -44,7 +44,7 @@ std::unique_ptr<Module> llvm::splitCodeGen(
if (OSs.size() == 1) { if (OSs.size() == 1) {
if (!BCOSs.empty()) if (!BCOSs.empty())
WriteBitcodeToFile(M.get(), *BCOSs[0]); WriteBitcodeToFile(*M, *BCOSs[0]);
codegen(M.get(), *OSs[0], TMFactory, FileType); codegen(M.get(), *OSs[0], TMFactory, FileType);
return M; return M;
} }
@ -66,7 +66,7 @@ std::unique_ptr<Module> llvm::splitCodeGen(
// FIXME: Provide a more direct way to do this in LLVM. // FIXME: Provide a more direct way to do this in LLVM.
SmallString<0> BC; SmallString<0> BC;
raw_svector_ostream BCOS(BC); raw_svector_ostream BCOS(BC);
WriteBitcodeToFile(MPart.get(), BCOS); WriteBitcodeToFile(*MPart, BCOS);
if (!BCOSs.empty()) { if (!BCOSs.empty()) {
BCOSs[ThreadCount]->write(BC.begin(), BC.size()); BCOSs[ThreadCount]->write(BC.begin(), BC.size());

View File

@ -169,7 +169,7 @@ size_t llvm::writeModule(const Module &M, uint8_t *Dest, size_t MaxSize) {
std::string Buf; std::string Buf;
{ {
raw_string_ostream OS(Buf); raw_string_ostream OS(Buf);
WriteBitcodeToFile(&M, OS); WriteBitcodeToFile(M, OS);
} }
if (Buf.size() > MaxSize) if (Buf.size() > MaxSize)
return 0; return 0;

View File

@ -82,7 +82,7 @@ Error Config::addSaveTemps(std::string OutputFileName,
// directly and exit. // directly and exit.
if (EC) if (EC)
reportOpenError(Path, EC.message()); reportOpenError(Path, EC.message());
WriteBitcodeToFile(&M, OS, /*ShouldPreserveUseListOrder=*/false); WriteBitcodeToFile(M, OS, /*ShouldPreserveUseListOrder=*/false);
return true; return true;
}; };
}; };
@ -309,7 +309,7 @@ void splitCodeGen(Config &C, TargetMachine *TM, AddStreamFn AddStream,
// FIXME: Provide a more direct way to do this in LLVM. // FIXME: Provide a more direct way to do this in LLVM.
SmallString<0> BC; SmallString<0> BC;
raw_svector_ostream BCOS(BC); raw_svector_ostream BCOS(BC);
WriteBitcodeToFile(MPart.get(), BCOS); WriteBitcodeToFile(*MPart, BCOS);
// Enqueue the task // Enqueue the task
CodegenThreadPool.async( CodegenThreadPool.async(

View File

@ -220,7 +220,7 @@ bool LTOCodeGenerator::writeMergedModules(StringRef Path) {
} }
// write bitcode to it // write bitcode to it
WriteBitcodeToFile(MergedModule.get(), Out.os(), ShouldEmbedUselists); WriteBitcodeToFile(*MergedModule, Out.os(), ShouldEmbedUselists);
Out.os().close(); Out.os().close();
if (Out.os().has_error()) { if (Out.os().has_error()) {

View File

@ -82,7 +82,7 @@ static void saveTempBitcode(const Module &TheModule, StringRef TempDir,
if (EC) if (EC)
report_fatal_error(Twine("Failed to open ") + SaveTempPath + report_fatal_error(Twine("Failed to open ") + SaveTempPath +
" to save optimized bitcode\n"); " to save optimized bitcode\n");
WriteBitcodeToFile(&TheModule, OS, /* ShouldPreserveUseListOrder */ true); WriteBitcodeToFile(TheModule, OS, /* ShouldPreserveUseListOrder */ true);
} }
static const GlobalValueSummary * static const GlobalValueSummary *
@ -476,7 +476,7 @@ ProcessThinLTOModule(Module &TheModule, ModuleSummaryIndex &Index,
raw_svector_ostream OS(OutputBuffer); raw_svector_ostream OS(OutputBuffer);
ProfileSummaryInfo PSI(TheModule); ProfileSummaryInfo PSI(TheModule);
auto Index = buildModuleSummaryIndex(TheModule, nullptr, &PSI); auto Index = buildModuleSummaryIndex(TheModule, nullptr, &PSI);
WriteBitcodeToFile(&TheModule, OS, true, &Index); WriteBitcodeToFile(TheModule, OS, true, &Index);
} }
return make_unique<ObjectMemoryBuffer>(std::move(OutputBuffer)); return make_unique<ObjectMemoryBuffer>(std::move(OutputBuffer));
} }

View File

@ -202,11 +202,11 @@ void splitAndWriteThinLTOBitcode(
if (ModuleId.empty()) { if (ModuleId.empty()) {
// We couldn't generate a module ID for this module, just write it out as a // We couldn't generate a module ID for this module, just write it out as a
// regular LTO module. // regular LTO module.
WriteBitcodeToFile(&M, OS); WriteBitcodeToFile(M, OS);
if (ThinLinkOS) if (ThinLinkOS)
// We don't have a ThinLTO part, but still write the module to the // We don't have a ThinLTO part, but still write the module to the
// ThinLinkOS if requested so that the expected output file is produced. // ThinLinkOS if requested so that the expected output file is produced.
WriteBitcodeToFile(&M, *ThinLinkOS); WriteBitcodeToFile(M, *ThinLinkOS);
return; return;
} }
@ -374,10 +374,9 @@ void splitAndWriteThinLTOBitcode(
// be used in the backends, and use that in the minimized bitcode // be used in the backends, and use that in the minimized bitcode
// produced for the full link. // produced for the full link.
ModuleHash ModHash = {{0}}; ModuleHash ModHash = {{0}};
W.writeModule(&M, /*ShouldPreserveUseListOrder=*/false, &Index, W.writeModule(M, /*ShouldPreserveUseListOrder=*/false, &Index,
/*GenerateHash=*/true, &ModHash); /*GenerateHash=*/true, &ModHash);
W.writeModule(MergedM.get(), /*ShouldPreserveUseListOrder=*/false, W.writeModule(*MergedM, /*ShouldPreserveUseListOrder=*/false, &MergedMIndex);
&MergedMIndex);
W.writeSymtab(); W.writeSymtab();
W.writeStrtab(); W.writeStrtab();
OS << Buffer; OS << Buffer;
@ -389,8 +388,8 @@ void splitAndWriteThinLTOBitcode(
Buffer.clear(); Buffer.clear();
BitcodeWriter W2(Buffer); BitcodeWriter W2(Buffer);
StripDebugInfo(M); StripDebugInfo(M);
W2.writeThinLinkBitcode(&M, Index, ModHash); W2.writeThinLinkBitcode(M, Index, ModHash);
W2.writeModule(MergedM.get(), /*ShouldPreserveUseListOrder=*/false, W2.writeModule(*MergedM, /*ShouldPreserveUseListOrder=*/false,
&MergedMIndex); &MergedMIndex);
W2.writeSymtab(); W2.writeSymtab();
W2.writeStrtab(); W2.writeStrtab();
@ -423,13 +422,13 @@ void writeThinLTOBitcode(raw_ostream &OS, raw_ostream *ThinLinkOS,
// be used in the backends, and use that in the minimized bitcode // be used in the backends, and use that in the minimized bitcode
// produced for the full link. // produced for the full link.
ModuleHash ModHash = {{0}}; ModuleHash ModHash = {{0}};
WriteBitcodeToFile(&M, OS, /*ShouldPreserveUseListOrder=*/false, Index, WriteBitcodeToFile(M, OS, /*ShouldPreserveUseListOrder=*/false, Index,
/*GenerateHash=*/true, &ModHash); /*GenerateHash=*/true, &ModHash);
// If a minimized bitcode module was requested for the thin link, only // If a minimized bitcode module was requested for the thin link, only
// the information that is needed by thin link will be written in the // the information that is needed by thin link will be written in the
// given OS. // given OS.
if (ThinLinkOS && Index) if (ThinLinkOS && Index)
WriteThinLinkBitcodeToFile(&M, *ThinLinkOS, *Index, ModHash); WriteThinLinkBitcodeToFile(M, *ThinLinkOS, *Index, ModHash);
} }
class WriteThinLTOBitcode : public ModulePass { class WriteThinLTOBitcode : public ModulePass {

View File

@ -52,7 +52,7 @@ static cl::opt<std::string>
/// file. If an error occurs, true is returned. /// file. If an error occurs, true is returned.
/// ///
static bool writeProgramToFileAux(ToolOutputFile &Out, const Module *M) { static bool writeProgramToFileAux(ToolOutputFile &Out, const Module *M) {
WriteBitcodeToFile(M, Out.os(), PreserveBitcodeUseListOrder); WriteBitcodeToFile(*M, Out.os(), PreserveBitcodeUseListOrder);
Out.os().close(); Out.os().close();
if (!Out.os().has_error()) { if (!Out.os().has_error()) {
Out.keep(); Out.keep();
@ -69,7 +69,7 @@ bool BugDriver::writeProgramToFile(const std::string &Filename, int FD,
bool BugDriver::writeProgramToFile(int FD, const Module *M) const { bool BugDriver::writeProgramToFile(int FD, const Module *M) const {
raw_fd_ostream OS(FD, /*shouldClose*/ false); raw_fd_ostream OS(FD, /*shouldClose*/ false);
WriteBitcodeToFile(M, OS, PreserveBitcodeUseListOrder); WriteBitcodeToFile(*M, OS, PreserveBitcodeUseListOrder);
OS.flush(); OS.flush();
if (!OS.has_error()) if (!OS.has_error())
return false; return false;
@ -158,7 +158,7 @@ bool BugDriver::runPasses(Module *Program,
DiscardTemp Discard{*Temp}; DiscardTemp Discard{*Temp};
raw_fd_ostream OS(Temp->FD, /*shouldClose*/ false); raw_fd_ostream OS(Temp->FD, /*shouldClose*/ false);
WriteBitcodeToFile(Program, OS, PreserveBitcodeUseListOrder); WriteBitcodeToFile(*Program, OS, PreserveBitcodeUseListOrder);
OS.flush(); OS.flush();
if (OS.has_error()) { if (OS.has_error()) {
errs() << "Error writing bitcode file: " << Temp->TmpName << "\n"; errs() << "Error writing bitcode file: " << Temp->TmpName << "\n";

View File

@ -784,7 +784,7 @@ static std::unique_ptr<LTO> createLTO(IndexWriteCallback OnIndexWrite) {
raw_fd_ostream OS(output_name, EC, sys::fs::OpenFlags::F_None); raw_fd_ostream OS(output_name, EC, sys::fs::OpenFlags::F_None);
if (EC) if (EC)
message(LDPL_FATAL, "Failed to write the output file."); message(LDPL_FATAL, "Failed to write the output file.");
WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ false); WriteBitcodeToFile(M, OS, /* ShouldPreserveUseListOrder */ false);
return false; return false;
}; };
break; break;

View File

@ -85,7 +85,7 @@ static void WriteOutputFile(const Module *M) {
} }
if (Force || !CheckBitcodeOutputToConsole(Out->os(), true)) if (Force || !CheckBitcodeOutputToConsole(Out->os(), true))
WriteBitcodeToFile(M, Out->os(), PreserveBitcodeUseListOrder, nullptr, WriteBitcodeToFile(*M, Out->os(), PreserveBitcodeUseListOrder, nullptr,
EmitModuleHash); EmitModuleHash);
// Declare success. // Declare success.

View File

@ -73,7 +73,7 @@ int main(int argc, char **argv) {
Err.print(argv[0], errs()); Err.print(argv[0], errs());
return 1; return 1;
} }
Writer.writeModule(M.get()); Writer.writeModule(*M);
OwnedMods.push_back(std::move(M)); OwnedMods.push_back(std::move(M));
} }
Writer.writeStrtab(); Writer.writeStrtab();

View File

@ -398,7 +398,7 @@ int main(int argc, char **argv) {
if (OutputAssembly) { if (OutputAssembly) {
Composite->print(Out.os(), nullptr, PreserveAssemblyUseListOrder); Composite->print(Out.os(), nullptr, PreserveAssemblyUseListOrder);
} else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true)) } else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
WriteBitcodeToFile(Composite.get(), Out.os(), PreserveBitcodeUseListOrder); WriteBitcodeToFile(*Composite, Out.os(), PreserveBitcodeUseListOrder);
// Declare success. // Declare success.
Out.keep(); Out.keep();

View File

@ -462,7 +462,7 @@ static void writeModuleToFile(Module &TheModule, StringRef Filename) {
raw_fd_ostream OS(Filename, EC, sys::fs::OpenFlags::F_None); raw_fd_ostream OS(Filename, EC, sys::fs::OpenFlags::F_None);
error(EC, "error opening the file '" + Filename + "'"); error(EC, "error opening the file '" + Filename + "'");
maybeVerifyModule(TheModule); maybeVerifyModule(TheModule);
WriteBitcodeToFile(&TheModule, OS, /* ShouldPreserveUseListOrder */ true); WriteBitcodeToFile(TheModule, OS, /* ShouldPreserveUseListOrder */ true);
} }
class ThinLTOProcessing { class ThinLTOProcessing {

View File

@ -70,7 +70,7 @@ int main(int argc, char **argv) {
} }
std::unique_ptr<Module> M = ExitOnErr(Ms[ModuleIndex].parseModule(Context)); std::unique_ptr<Module> M = ExitOnErr(Ms[ModuleIndex].parseModule(Context));
WriteBitcodeToFile(M.get(), Out->os()); WriteBitcodeToFile(*M, Out->os());
Out->keep(); Out->keep();
return 0; return 0;

View File

@ -77,7 +77,7 @@ extern "C" LLVM_ATTRIBUTE_USED size_t LLVMFuzzerCustomMutator(
std::string Buf; std::string Buf;
{ {
raw_string_ostream OS(Buf); raw_string_ostream OS(Buf);
WriteBitcodeToFile(M.get(), OS); WriteBitcodeToFile(*M, OS);
} }
if (Buf.size() > MaxSize) if (Buf.size() > MaxSize)
return 0; return 0;

View File

@ -63,7 +63,7 @@ int main(int argc, char **argv) {
} }
verifyModule(*MPart); verifyModule(*MPart);
WriteBitcodeToFile(MPart.get(), Out->os()); WriteBitcodeToFile(*MPart, Out->os());
// Declare success. // Declare success.
Out->keep(); Out->keep();

View File

@ -132,7 +132,7 @@ bool TempFile::writeBitcode(const Module &M) const {
return true; return true;
} }
WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true); WriteBitcodeToFile(M, OS, /* ShouldPreserveUseListOrder */ true);
return false; return false;
} }

View File

@ -44,7 +44,7 @@ std::unique_ptr<Module> parseAssembly(LLVMContext &Context,
static void writeModuleToBuffer(std::unique_ptr<Module> Mod, static void writeModuleToBuffer(std::unique_ptr<Module> Mod,
SmallVectorImpl<char> &Buffer) { SmallVectorImpl<char> &Buffer) {
raw_svector_ostream OS(Buffer); raw_svector_ostream OS(Buffer);
WriteBitcodeToFile(Mod.get(), OS); WriteBitcodeToFile(*Mod, OS);
} }
static std::unique_ptr<Module> getLazyModuleFromAssembly(LLVMContext &Context, static std::unique_ptr<Module> getLazyModuleFromAssembly(LLVMContext &Context,